From 1c3c06842ac1b9c089d0a08e91c60f44e4844fac Mon Sep 17 00:00:00 2001 From: Jan-Simon Moeller Date: Tue, 8 Dec 2020 11:12:45 +0100 Subject: SPEC-3723: restructure meta-agl Goal is to reach a minimal meta-agl-core as base for IVI and IC work at the same time. Trim dependencies and move most 'demo' related recipes to meta-agl-demo. v2: changed to bbapend + .inc , added description v3: testbuild of all images v4: restore -test packagegroup and -qa images, compare manifests and adapt packagegroups. v5: rebased v6: merged meta-agl-distro into meta-agl-core, due to dependency on meta-oe, moved -test packagegroup and -qa images to own layer meta-agl-core-test v7: Fixed comments from Paul Barker v8: Update the markdown files v9: restore wayland/weston/agl-compositor recipes/appends, reworked to move app f/w specific changes to bbappends in meta-app-framework and only demo specific weston-init changes to meta-agl-demo v10: fix s/agldemo/aglcore/ missed in weston-init.bbappend Description: This patch is part 1 out of 2 large patches that implement the layer rework discussed during the previous workshop. Essentially meta-agl-core is the small but versatile new core layer of AGL serving as basis for the work done by the IC and IVI EGs. All demo related work is moved to meta-agl-demo in the 2nd patchset. This should be applied together as atomic change. The resulting meta-agl/* follows these guidelines: - only bsp adaptations in meta-agl-bsp - remove the agl-profile-* layers for simplicity -- the packagegroup-agl(-profile)-graphical and so on have been kept in meta-agl-demo - meta-agl-profile-core is now meta-agl-core - meta-agl-core does pass yocto-check-layer -- therefore use the bbappend + conditional + .inc file construct found in meta-virtualization - meta-agl/meta-security has been merged into meta-agl/meta-app-framework - meta-netboot does pass yocto-check-layer - meta-pipewire does pass yocto-check-layer Migration: All packagegroups are preserved but they're now enabled by 'agl-demo'. Bug-AGL: SPEC-3723 Signed-off-by: Jan-Simon Moeller Signed-off-by: Scott Murray Change-Id: Ia6c6e5e6ce2b4ffa69ea94959cdc57c310ba7c53 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/25769 --- agl-layers-overview.md | 1 - .../recipes-graphics/mesa/mesa_%.bbappend | 7 - .../recipes-graphics/wayland/libva_%.bbappend | 4 - .../wayland/weston-ini-conf.bbappend | 7 - .../wayland/weston-ini-conf/virtual.cfg | 18 - .../recipes-graphics/wayland/weston_%.bbappend | 3 - .../meta-core/recipes-core/ovmf/ovmf_git.bbappend | 1 - .../recipes-graphics/mesa/mesa_%.bbappend | 1 + .../meta-core/recipes-graphics/mesa/mesa_agl.inc | 7 + .../recipes-graphics/wayland/weston_%.bbappend | 1 + .../recipes-graphics/wayland/weston_agl.inc | 3 + .../recipes-kernel/linux/linux-yocto_%.bbappend | 18 +- .../recipes-kernel/linux/linux-yocto_agl.inc | 21 + .../linux/linux-raspberrypi_%.bbappend | 2 +- ...Set-up-environment-for-OSTree-integration.patch | 41 - .../u-boot-ota/0001-fixup-build-with-gcc6.patch | 86 - ...ps-with-built-in-code-to-remove-dependenc.patch | 138 - .../u-boot-ota/0002-fixup-build-with-gcc7.patch | 101 - .../recipes-bsp/u-boot/u-boot-ota_2015.07.bb | 29 - .../0004-Change-Max-Device-Count-To-16.patch | 13 - .../recipes-graphics/opencv/opencv_4.%.bbappend | 5 - .../recipes-graphics/wayland/weston-ini-conf.bb | 28 - .../wayland/weston-ini-conf.bbappend | 5 - .../wayland/weston-ini-conf/core.cfg | 4 - .../wayland/weston-ini-conf/hdmi-a-1-270.cfg | 6 - .../wayland/weston-ini-conf/hdmi-a-1-90.cfg | 6 - .../wayland/weston-ini-conf/remote-output.cfg | 5 - .../wayland/weston-ini-conf/shell.cfg | 3 - .../recipes-kernel/linux/kernel-devsrc.bbappend | 6 - ...andle-CGROUP2-in-the-same-way-that-CGROUP.patch | 40 - .../Smack-Privilege-check-on-key-operations.patch | 109 - ...eric-add-if_afp.h-header-to-get-ARPHRD_CA.patch | 25 - .../recipes-kernel/linux/linux-agl-4.14.inc | 14 - .../recipes-kernel/linux/linux-agl-4.19.inc | 5 - meta-agl-bsp/recipes-kernel/linux/linux-agl.inc | 132 - .../recipes-kernel/linux/linux-yocto_%.bbappend | 1 - meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg | 37 - .../recipes-kernel/linux/linux/can-bus.cfg | 42 - meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg | 2 - .../recipes-kernel/linux/linux/fanotify.cfg | 3 - meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg | 1 - .../recipes-kernel/linux/linux/i2c-led.cfg | 3 - .../recipes-kernel/linux/linux/iiodevice.cfg | 26 - .../recipes-kernel/linux/linux/joystick.cfg | 9 - meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg | 3 - ...eric-Use-pfifo_fast-as-fallback-scheduler.patch | 75 - .../recipes-kernel/linux/linux/netfilter.cfg | 1 - meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg | 34 - .../recipes-kernel/linux/linux/overlayfs.cfg | 7 - .../recipes-kernel/linux/linux/procevent.cfg | 2 - .../recipes-kernel/linux/linux/ramdisk.cfg | 2 - meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg | 7 - .../recipes-kernel/linux/linux/rtl_sdr.cfg | 4 - .../recipes-kernel/linux/linux/scheddebug.cfg | 1 - .../recipes-kernel/linux/linux/sound-hda.cfg | 20 - meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg | 7 - .../recipes-kernel/linux/linux/systemtap.cfg | 9 - meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg | 3 - meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg | 8 - .../recipes-kernel/linux/linux/usbaudio.cfg | 2 - .../recipes-kernel/linux/linux/usbmodem.cfg | 7 - meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg | 4 - .../linux/linux/vbox-vmware-sata.cfg | 19 - meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg | 6 - .../linux/linux/x86-extra-graphic-devices.cfg | 40 - .../recipes-kernel/linux/linux/x86-net-devices.cfg | 3 - .../linux/linux/x86-security-tpm.cfg | 3 - .../recipes-kernel/linux/linux/x86-upsquare.cfg | 11 - .../recipes-kernel/linux/linux/x86-usb-devices.cfg | 82 - .../recipes-kernel/linux/linux/xen_domu.cfg | 25 - .../0007-WIP-Initial-LAVA-support.patch | 140 - .../ptest-runner/ptest-runner_2.%.bbappend | 4 - meta-agl-core-test/conf/include/agl-test.inc | 0 meta-agl-core-test/conf/layer.conf | 14 + meta-agl-core-test/images/agl-image-minimal-qa.bb | 12 + .../recipes-test/aiostress/aiostress_0.22.bb | 24 + .../recipes-test/dung/dung_3.4.25-m2.bb | 18 + .../recipes-test/ebizzy/ebizzy_0.3.bb | 20 + .../recipes-test/ffsb/ffsb_6.0-rc2.bb | 14 + .../recipes-test/fontconfig/fontconfig_%.bbappend | 18 + .../files/0001-Makefile-dont-build-gfx-demos.patch | 32 + ...mos-Makefile-Do-not-hardcode-libtool-path.patch | 30 + .../recipes-test/freetype/freetype_2.%.bbappend | 34 + .../files/0001-fix_missing_header_sys_stat.patch | 11 + .../recipes-test/fsfuzzer/fsfuzzer_0.7.bb | 18 + .../recipes-test/glmark2/glmark2_%.bbappendNOT | 7 + .../recipes-test/himeno/himeno_2.0.bb | 27 + .../interbench/files/interbench.c.patch | 68 + .../recipes-test/interbench/interbench_0.31.bb | 31 + .../recipes-test/ipv6connect/ipv6connect.bb | 24 + meta-agl-core-test/recipes-test/linpack/linpack.bb | 23 + .../recipes-test/linus-stress/linus-stress.bb | 23 + .../packagegroups/packagegroup-agl-test.bb | 68 + .../recipes-test/trinity/trinity_git.bb | 42 + meta-agl-core/LICENSE | 20 + meta-agl-core/LICENSE.GPL-2.0-only | 288 ++ meta-agl-core/LICENSE.MIT | 25 + meta-agl-core/README | 1 + meta-agl-core/README-AGL.md | 21 + meta-agl-core/classes/cloc.bbclass | 33 + meta-agl-core/classes/sanity-meta-agl-core.bbclass | 10 + meta-agl-core/conf/bblayers.conf.sample | 12 + meta-agl-core/conf/distro/include/aarch64-tune.inc | 13 + meta-agl-core/conf/distro/include/arc-tune.inc | 3 + meta-agl-core/conf/distro/include/arm-tune.inc | 23 + meta-agl-core/conf/distro/include/riscv64-tune.inc | 7 + meta-agl-core/conf/distro/include/x86_64-tune.inc | 55 + meta-agl-core/conf/distro/poky-agl.conf | 208 + meta-agl-core/conf/include/agl-devel.inc | 20 + meta-agl-core/conf/include/agl-gplv2.inc | 8 + meta-agl-core/conf/include/base-agl.inc | 22 + meta-agl-core/conf/layer.conf | 17 + meta-agl-core/conf/local.conf.sample | 277 + meta-agl-core/files/group | 92 + meta-agl-core/files/passwd | 62 + .../busybox/busybox_%.bbappend | 1 + .../busybox/busybox_aglcore.inc | 3 + .../busybox/files/enable-wget-https.cfg | 3 + .../connman-ncurses/connman-ncurses_git.bb | 27 + .../connman/connman_%.bbappend | 1 + .../connman/connman_aglcore.inc | 20 + .../files/0001-disable-when-booting-over-nfs.patch | 10 + .../recipes-connectivity/connman/files/main.conf | 3 + meta-agl-core/recipes-core/systemd/.appends.core | 0 .../recipes-core/systemd/systemd-conf_%.bbappend | 1 + .../recipes-core/systemd/systemd-conf_aglcore.inc | 4 + .../systemd/0001-fix-udevd-seclabel-parsing.patch | 34 + ...twork-add-CAN-Termination-tristate-option.patch | 107 + .../systemd/systemd/canbus-can.network | 6 + .../recipes-core/systemd/systemd/e2fsck.conf | 3 + .../recipes-core/systemd/systemd/wired.network | 5 + .../recipes-core/systemd/systemd_%.bbappend | 1 + .../recipes-core/systemd/systemd_aglcore.inc | 34 + .../recipes-devtools/cmake/cmake_%.bbappend | 1 + .../recipes-devtools/cmake/cmake_aglcore.inc | 9 + .../cmake/files/environment.d-cmake-agl.sh | 1 + meta-agl-core/recipes-devtools/gdb/.appends.core | 0 meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend | 1 + meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc | 1 + meta-agl-core/recipes-extended/gperf/.appends.core | 0 .../recipes-extended/gperf/gperf_%.bbappend | 1 + .../recipes-extended/gperf/gperf_aglcore.inc | 1 + .../wayland/Readme.weston-ini-conf | 34 + .../recipes-graphics/wayland/agl-compositor_git.bb | 28 + .../wayland/waltham-transmitter_git.bb | 34 + .../waltham/0001-Use-python3-instead-of-2.patch | 51 + .../0001-waltham-Fix-compile-build-error.patch | 55 + ...mandxml-Add-support-wthp_app_id-interface.patch | 70 + .../recipes-graphics/wayland/waltham_%.bbappend | 7 + .../recipes-graphics/wayland/waltham_git.bb | 16 + .../recipes-graphics/wayland/weston-ini-conf.bb | 41 + .../wayland/weston-ini-conf.bbappend | 12 + .../wayland/weston-ini-conf/core.cfg | 4 + .../wayland/weston-ini-conf/hdmi-a-1-270.cfg | 6 + .../wayland/weston-ini-conf/hdmi-a-1-90.cfg | 6 + .../wayland/weston-ini-conf/remote-output.cfg | 5 + .../wayland/weston-ini-conf/shell.cfg | 3 + .../wayland/weston-ini-conf/virtual.cfg | 18 + .../recipes-graphics/wayland/weston-init.bbappend | 1 + .../wayland/weston-init_aglcore.inc | 6 + ...-Expose-weston_output_damage-in-libweston.patch | 30 + ...igrate-weston_seat_init-release-to-public.patch | 106 + .../0005-correctly-tear-down-drm-backend.patch | 37 + .../recipes-graphics/wayland/weston_8.0.%.bbappend | 1 + .../wayland/weston_8.0_aglcore.inc | 11 + .../recipes-kernel/linux/kernel-devsrc.bbappend | 1 + .../recipes-kernel/linux/kernel-devsrc_agl.inc | 6 + ...andle-CGROUP2-in-the-same-way-that-CGROUP.patch | 40 + .../Smack-Privilege-check-on-key-operations.patch | 109 + ...eric-add-if_afp.h-header-to-get-ARPHRD_CA.patch | 25 + .../recipes-kernel/linux/linux-agl-4.14.inc | 14 + .../recipes-kernel/linux/linux-agl-4.19.inc | 5 + meta-agl-core/recipes-kernel/linux/linux-agl.inc | 132 + meta-agl-core/recipes-kernel/linux/linux/btusb.cfg | 37 + .../recipes-kernel/linux/linux/can-bus.cfg | 42 + meta-agl-core/recipes-kernel/linux/linux/drm.cfg | 2 + .../recipes-kernel/linux/linux/fanotify.cfg | 3 + meta-agl-core/recipes-kernel/linux/linux/hid.cfg | 1 + .../recipes-kernel/linux/linux/i2c-led.cfg | 3 + .../recipes-kernel/linux/linux/iiodevice.cfg | 26 + .../recipes-kernel/linux/linux/joystick.cfg | 9 + meta-agl-core/recipes-kernel/linux/linux/nbd.cfg | 3 + ...eric-Use-pfifo_fast-as-fallback-scheduler.patch | 75 + .../recipes-kernel/linux/linux/netfilter.cfg | 1 + meta-agl-core/recipes-kernel/linux/linux/nfc.cfg | 34 + .../recipes-kernel/linux/linux/overlayfs.cfg | 7 + .../recipes-kernel/linux/linux/procevent.cfg | 2 + .../recipes-kernel/linux/linux/ramdisk.cfg | 2 + meta-agl-core/recipes-kernel/linux/linux/rtc.cfg | 7 + .../recipes-kernel/linux/linux/rtl_sdr.cfg | 4 + .../recipes-kernel/linux/linux/scheddebug.cfg | 1 + .../recipes-kernel/linux/linux/sound-hda.cfg | 20 + meta-agl-core/recipes-kernel/linux/linux/sound.cfg | 7 + .../recipes-kernel/linux/linux/systemtap.cfg | 9 + .../recipes-kernel/linux/linux/uinput.cfg | 3 + meta-agl-core/recipes-kernel/linux/linux/usb.cfg | 8 + .../recipes-kernel/linux/linux/usbaudio.cfg | 2 + .../recipes-kernel/linux/linux/usbmodem.cfg | 7 + meta-agl-core/recipes-kernel/linux/linux/uvc.cfg | 4 + .../linux/linux/vbox-vmware-sata.cfg | 19 + meta-agl-core/recipes-kernel/linux/linux/wifi.cfg | 6 + .../linux/linux/x86-extra-graphic-devices.cfg | 40 + .../recipes-kernel/linux/linux/x86-net-devices.cfg | 3 + .../linux/linux/x86-security-tpm.cfg | 3 + .../recipes-kernel/linux/linux/x86-upsquare.cfg | 11 + .../recipes-kernel/linux/linux/x86-usb-devices.cfg | 82 + .../recipes-kernel/linux/linux/xen_domu.cfg | 25 + .../recipes-platform/images/agl-image-boot.bb | 9 + .../recipes-platform/images/agl-image-boot.inc | 10 + .../images/agl-image-core-autobuilder.bb | 18 + .../images/agl-image-minimal-crosssdk.bb | 18 + .../images/agl-image-minimal-crosssdk.inc | 24 + .../recipes-platform/images/agl-image-minimal.bb | 9 + .../recipes-platform/images/agl-image-minimal.inc | 10 + .../recipes-platform/images/agl-image-weston.bb | 9 + .../recipes-platform/images/agl-image-weston.inc | 7 + .../packagegroups/packagegroup-agl-core-boot.bb | 50 + .../packagegroup-agl-core-connectivity.bb | 19 + .../packagegroups/packagegroup-agl-core-devel.bb | 31 + .../packagegroup-agl-core-os-commonlibs.bb | 14 + .../packagegroup-agl-core-security.bb | 14 + .../packagegroup-agl-graphical-multimedia.bb | 16 + .../packagegroup-agl-graphical-weston.bb | 17 + .../packagegroups/packagegroup-agl-image-boot.bb | 18 + .../packagegroup-agl-image-minimal.bb | 24 + .../packagegroup-agl-profile-graphical.bb | 22 + .../recipes-support/libsoup/libsoup-2.4_%.bbappend | 1 + .../0007-WIP-Initial-LAVA-support.patch | 140 + .../ptest-runner/ptest-runner_2.%.bbappend | 2 + .../ptest-runner/ptest-runner_agl.inc | 3 + meta-agl-core/scripts/oe-depends-dot | 121 + .../run-yocto-check-layer-feature-enabled.sh | 50 + meta-agl-core/scripts/run-yocto-check-layer.sh | 48 + meta-agl-distro/LICENSE | 20 - meta-agl-distro/LICENSE.GPL-2.0-only | 288 -- meta-agl-distro/LICENSE.MIT | 25 - meta-agl-distro/README | 3 - .../conf/distro/include/aarch64-tune.inc | 13 - meta-agl-distro/conf/distro/include/arc-tune.inc | 3 - meta-agl-distro/conf/distro/include/arm-tune.inc | 23 - .../conf/distro/include/riscv64-tune.inc | 7 - .../conf/distro/include/x86_64-tune.inc | 55 - meta-agl-distro/conf/distro/poky-agl.conf | 208 - meta-agl-distro/conf/layer.conf | 12 - meta-agl-distro/scripts/oe-depends-dot | 121 - meta-agl-profile-cluster-qt5/LICENSE | 20 - meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-cluster-qt5/LICENSE.MIT | 25 - meta-agl-profile-cluster-qt5/conf/layer.conf | 12 - .../images/agl-image-cluster-qt5.bb | 9 - .../images/agl-image-cluster-qt5.inc | 7 - .../packagegroup-agl-profile-cluster-qt5.bb | 21 - ...ackagegroup-agl-profile-cluster-qtcompositor.bb | 36 - .../0001-fixed-eglfs_kms-fails-to-build.patch | 45 - ...version-from-EGLNativeDisplayType-to-void.patch | 24 - .../recipes-qt/qt5/qtbase_%.bbappend | 12 - .../recipes-qt/qt5/qtcompositor-conf_1.0.bb | 40 - meta-agl-profile-cluster/LICENSE | 20 - meta-agl-profile-cluster/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-cluster/LICENSE.MIT | 25 - meta-agl-profile-cluster/conf/layer.conf | 12 - .../recipes-platform/images/agl-image-cluster.bb | 9 - .../recipes-platform/images/agl-image-cluster.inc | 7 - .../packagegroup-agl-profile-cluster.bb | 20 - meta-agl-profile-core/LICENSE | 20 - meta-agl-profile-core/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-core/LICENSE.MIT | 25 - meta-agl-profile-core/classes/cloc.bbclass | 33 - meta-agl-profile-core/conf/include/agl-devel.inc | 20 - meta-agl-profile-core/conf/include/agl-gplv2.inc | 8 - .../conf/include/agl-sign-wgts.inc | 3 - meta-agl-profile-core/conf/include/base-agl.inc | 20 - meta-agl-profile-core/conf/layer.conf | 12 - meta-agl-profile-core/files/group | 92 - meta-agl-profile-core/files/passwd | 62 - .../agl-service-bluetooth-map_git.bb | 18 - .../agl-service-bluetooth-pbap_git.bb | 18 - .../agl-service-bluetooth_git.bb | 18 - .../agl-service-can-low-level_git.bb | 23 - .../agl-service-can-low-level/files/run-ptest | 3 - .../agl-service-data-persistence_git.bb | 17 - .../agl-service-geoclue/agl-service-geoclue_git.bb | 17 - .../agl-service-geofence_git.bb | 18 - .../agl-service-gps/agl-service-gps_git.bb | 18 - .../agl-service-hvac/agl-service-hvac-conf_git.bb | 27 - .../agl-service-hvac/agl-service-hvac_git.bb | 20 - .../agl-service-identity-agent_git.bb | 17 - .../agl-service-iiodevices_git.bb | 19 - .../agl-service-mediascanner_git.bb | 18 - .../agl-service-navigation_git.bb | 18 - .../agl-service-network/agl-service-network_git.bb | 25 - .../agl-service-nfc/agl-service-nfc_git.bb | 17 - .../agl-service-platform-info_git.bb | 17 - .../agl-service-signal-composer_git.bb | 18 - .../agl-service-signal-composer/files/run-ptest | 3 - .../agl-service-telephony_git.bb | 18 - .../agl-service-unicens-controller_git.bb | 19 - .../agl-service-unicens/agl-service-unicens_git.bb | 19 - .../agl-service-weather/agl-service-weather_git.bb | 18 - .../agl-login-manager/agl-login-manager_0.1.bb | 19 - .../recipes-config/agl-users/agl-users_0.1.bb | 27 - .../dev-mapping/dev-mapping.conf.default | 6 - .../recipes-config/dev-mapping/dev-mapping_0.1.bb | 18 - .../bluez-alsa/bluez-alsa_git.bb | 43 - .../bluez-alsa/files/bluez-alsa.service | 11 - .../bluez5/bluez5/bluetooth.conf | 39 - .../bluez5/bluez5/bluetooth.service | 21 - .../bluez5/bluez5/obex.service | 10 - .../recipes-connectivity/bluez5/bluez5/tmpdir.conf | 2 - .../recipes-connectivity/bluez5/bluez5_%.bbappend | 24 - .../busybox/busybox_%.bbappend | 2 - .../busybox/files/enable-wget-https.cfg | 3 - .../connman-ncurses/connman-ncurses_git.bb | 27 - .../recipes-connectivity/connman/.appends.core | 0 .../connman/connman_%.bbappend | 20 - .../files/0001-disable-when-booting-over-nfs.patch | 10 - .../recipes-connectivity/connman/files/main.conf | 3 - ...rd-add-multi-user.target-to-neard.service.patch | 25 - ...dbus-property_get_type-method-on-empty-re.patch | 33 - .../recipes-connectivity/neard/neard_0.16.bbappend | 7 - .../recipes-connectivity/neardal/neardal.inc | 22 - ...-fix-segfault-on-help-page-being-displaye.patch | 27 - .../0002-neardal-lib-fix-memory-corruption.patch | 58 - .../recipes-connectivity/neardal/neardal/ncl.patch | 25 - .../recipes-connectivity/neardal/neardal_0.14.bb | 10 - ...llow-duplicate-entries-from-mbpi_lookup_a.patch | 27 - .../recipes-connectivity/ofono/files/ofono.conf | 30 - .../recipes-connectivity/ofono/ofono_%.bbappend | 11 - .../0001-remove-I-usr-include-in-pkg-config.patch | 40 - .../recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb | 32 - .../recipes-core/dbus/.appends.core | 0 .../recipes-core/dbus/dbus/dbus.service | 10 - .../recipes-core/dbus/dbus/dbus.socket | 9 - .../recipes-core/dbus/dbus/dbus_env.conf | 5 - .../dbus/dbus/libdbus-c++/dbus-c++-threading.patch | 45 - .../recipes-core/dbus/dbus_%.bbappend | 28 - .../dbus/libdbus-c++/dbus-c++-threading.patch | 45 - .../recipes-core/dbus/libdbus-c++_0.9.0.bbappend | 2 - .../distro-build-manifest/distro-build-manifest.bb | 164 - .../packagegroup-core-tools-profile.bbappend | 1 - .../recipes-core/psplash/.appends.core | 0 .../recipes-core/psplash/files/psplash-colors.h | 34 - .../recipes-core/psplash/files/psplash-poky-img.h | 5411 -------------------- .../recipes-core/psplash/psplash_git.bbappend | 9 - .../recipes-core/systemd/.appends.core | 0 .../recipes-core/systemd/systemd-conf_%.bbappend | 4 - ...twork-add-CAN-Termination-tristate-option.patch | 107 - .../systemd/systemd/canbus-can.network | 6 - .../recipes-core/systemd/systemd/e2fsck.conf | 3 - .../recipes-core/systemd/systemd/wired.network | 5 - .../recipes-core/systemd/systemd_%.bbappend | 34 - .../cmake-apps-module/cmake-apps-module_git.bb | 20 - .../recipes-devtools/cmake/cmake_%.bbappend | 9 - .../cmake/files/environment.d-cmake-agl.sh | 1 - .../recipes-devtools/gdb/.appends.core | 0 .../recipes-devtools/gdb/gdb_%.bbappend | 1 - .../recipes-devtools/json-c/json-c_%.bbappend | 1 - .../libafb-helpers/libafb-helpers_git.bb | 8 - .../libafb-helpers/libafb-helpers_git.inc | 14 - .../libappcontroller/libappcontroller_git.bb | 19 - .../low-level-can-generator_git.bb | 17 - .../nativesdk-packagegroup-sdk-host.bbappend | 4 - .../packagegroups/packagegroup-agl-core-devel.bb | 33 - .../python/python3-asyncssh_2.3.0.bb | 15 - .../python/python3-pytest-dependency_0.5.1.bb | 12 - .../python/python3-pytest-reverse_1.0.1.bb | 12 - .../recipes-devtools/qemu/qemu_%.bbappend | 1 - .../run-agl-postinsts/run-agl-postinsts | 48 - .../run-agl-postinsts/run-agl-postinsts.service | 17 - .../run-agl-postinsts/run-agl-postinsts_1.0.bb | 46 - .../run-postinsts/run-postinsts/ldconfig-wait.conf | 2 - .../run-postinsts/run-postinsts_%.bbappend | 14 - .../recipes-extended/gperf/.appends.core | 0 .../recipes-extended/gperf/gperf_%.bbappend | 1 - .../0002-src-most-add-auto-conf-feature.patch | 472 -- ...003-core-remove-kernel-log-for-MBO-status.patch | 26 - .../files/0004-most-video-set-device_caps.patch | 25 - ...-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch | 25 - .../files/0006-dim2-fix-startup-sequence.patch | 186 - .../most/files/0007-dim2-use-device-tree.patch | 378 -- ...im2-read-clock-speed-from-the-device-tree.patch | 92 - ...use-device-for-coherent-memory-allocation.patch | 47 - .../most/files/0010-backport-usb-setup-timer.patch | 35 - ...1-handle-snd_pcm_lib_mmap_vmalloc-removal.patch | 30 - .../files/0012-Fix-build-with-5.4-kernel.patch | 68 - meta-agl-profile-core/recipes-kernel/most/most.bb | 14 - .../recipes-kernel/most/most.bbappend | 15 - ...gure-option-to-disable-build-of-man-pages.patch | 40 - .../recipes-multimedia/libmp4v2/libmp4v2_git.bb | 18 - .../lightmediascanner/.appends.meta-efl | 0 ...ine-comparison_fn_t-for-non-glibc-systems.patch | 33 - ...m-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch | 49 - .../files/dbus-lightmediascanner.conf | 12 - .../id3-plugin-support-out-of-tree-build.patch | 11 - .../files/lightmediascanner.service | 16 - .../files/plugin-ogg-fix-chucksize-issue.patch | 53 - .../lightmediascanner/lightmediascanner_%.bbappend | 42 - .../lightmediascanner/lightmediascanner_0.5.1.bb | 63 - .../files/org.freedesktop.GeoClue2.Client.conf | 8 - .../recipes-navigation/geoclue/geoclue_%.bbappend | 11 - .../recipes-navigation/gpsd/gpsd_%.bbappend | 16 - .../recipes-platform/images/agl-image-boot.bb | 9 - .../recipes-platform/images/agl-image-boot.inc | 10 - .../images/agl-image-minimal-crosssdk.bb | 18 - .../images/agl-image-minimal-crosssdk.inc | 18 - .../images/agl-image-minimal-qa.bb | 12 - .../recipes-platform/images/agl-image-minimal.bb | 9 - .../recipes-platform/images/agl-image-minimal.inc | 10 - .../packagegroups/packagegroup-agl-core-boot.bb | 51 - .../packagegroup-agl-core-connectivity.bb | 19 - .../packagegroup-agl-core-os-commonlibs.bb | 14 - .../packagegroup-agl-core-security.bb | 14 - .../packagegroup-agl-core-services.bb | 14 - .../packagegroups/packagegroup-agl-image-boot.bb | 18 - .../packagegroup-agl-image-minimal.bb | 26 - .../recipes-support/curl/curl_%.bbappend | 5 - .../recipes-support/libsoup/libsoup-2.4_%.bbappend | 1 - .../recipes-support/opencv/opencv_4.%.bbappend | 1 - .../recipes-support/udisks/files/99-udisks2.rules | 5 - .../recipes-support/udisks/files/automount.service | 9 - .../recipes-support/udisks/files/automount.sh | 93 - .../recipes-support/udisks/udisks2_%.bbappend | 26 - .../recipes-test/afb-test/afb-test_git.bb | 25 - .../recipes-test/afb-test/files/run-ptest | 3 - .../recipes-test/aiostress/aiostress_0.22.bb | 24 - .../recipes-test/dung/dung_3.4.25-m2.bb | 18 - .../recipes-test/ebizzy/ebizzy_0.3.bb | 20 - .../recipes-test/ffsb/ffsb_6.0-rc2.bb | 14 - .../recipes-test/fontconfig/fontconfig_%.bbappend | 18 - .../files/0001-Makefile-dont-build-gfx-demos.patch | 32 - ...mos-Makefile-Do-not-hardcode-libtool-path.patch | 30 - .../recipes-test/freetype/freetype_2.%.bbappend | 34 - .../files/0001-fix_missing_header_sys_stat.patch | 11 - .../recipes-test/fsfuzzer/fsfuzzer_0.7.bb | 18 - .../gcovr-wrapper/gcovr-wrapper/gcovr-wrapper | 320 -- .../gcovr-wrapper/gcovr-wrapper_1.0.bb | 17 - ...0001-add-gcov-filter-source-errors-option.patch | 68 - .../recipes-test/gcovr/gcovr_%.bbappend | 2 - .../recipes-test/gcovr/gcovr_git.bb | 32 - .../recipes-test/glmark2/glmark2_%.bbappend | 7 - .../recipes-test/himeno/himeno_2.0.bb | 27 - .../interbench/files/interbench.c.patch | 68 - .../recipes-test/interbench/interbench_0.31.bb | 31 - .../recipes-test/ipv6connect/ipv6connect.bb | 24 - .../recipes-test/linpack/linpack.bb | 23 - .../recipes-test/linus-stress/linus-stress.bb | 23 - .../packagegroups/packagegroup-agl-test.bb | 59 - .../recipes-test/pyagl/pyagl_git.bb | 33 - .../recipes-test/trinity/trinity_git.bb | 42 - meta-agl-profile-graphical-html5/conf/layer.conf | 12 - .../wayland/weston-ini-conf.bbappend | 12 - .../wayland/weston-ini-conf/hdmi-a-1-180.cfg | 4 - .../wayland/weston-ini-conf/virtual-landscape.cfg | 3 - .../images/agl-image-graphical-html5.bb | 10 - .../images/agl-image-graphical-html5.inc | 9 - .../packagegroups/packagegroup-agl-appfw-html5.bb | 18 - .../packagegroup-agl-profile-graphical-html5.bb | 23 - .../chromium/chromium-browser-service.bb | 19 - .../chromium/chromium68/v8-qemu-wrapper.patch | 40 - .../recipes-wam/chromium/chromium68_git.bb | 404 -- .../recipes-wam/chromium/gn-utils.inc | 157 - .../recipes-wam/wam/files/WebAppMgr.env | 202 - .../recipes-wam/wam/files/WebAppMgr@.service | 37 - .../recipes-wam/wam/files/trunc-webapp-roles.patch | 56 - .../recipes-wam/wam/wam_git.bb | 51 - meta-agl-profile-graphical-qt5/LICENSE | 20 - .../LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-graphical-qt5/LICENSE.MIT | 25 - meta-agl-profile-graphical-qt5/conf/layer.conf | 12 - .../packagegroups/packagegroup-agl-appfw-native.bb | 17 - .../packagegroups/packagegroup-agl-appfw-qt5.bb | 16 - .../libafb-helpers-qt/libafb-helpers-qt_git.bb | 11 - .../recipes-devtools/libqtappfw/libqtappfw_git.bb | 20 - .../images/agl-image-graphical-qt5-crosssdk.bb | 18 - .../images/agl-image-graphical-qt5-crosssdk.inc | 14 - .../images/agl-image-graphical-qt5.bb | 5 - .../images/agl-image-graphical-qt5.inc | 1 - .../packagegroup-agl-appfw-native-qt5.bb | 29 - .../packagegroup-agl-demo-qt-examples.bb | 26 - .../packagegroup-agl-profile-graphical-qt5.bb | 23 - .../packagegroup-qt5-toolchain-target.bbappend | 18 - .../qlibhomescreen/qlibhomescreen_git.bb | 13 - .../qml-execscript-plugin_1.0.bb | 25 - .../recipes-qt/qt5/qtbase-native_git.bbappend | 3 - ...-to-make-introspect-for-every-findMetaObj.patch | 30 - .../recipes-qt/qt5/qtbase_%.bbappend | 12 - ...mapbox-update-API-url-to-match-new-schema.patch | 47 - .../recipes-qt/qt5/qtlocation_%.bbappend | 14 - ...age-support-with-the-data-URL-scheme-for-.patch | 80 - .../recipes-qt/qt5/qtmultimedia_%.bbappend | 7 - .../recipes-qt/qt5/qtsystems_%.bbappend | 3 - .../recipes-qt/qt5/qtwayland-config/qtwayland | 12 - .../recipes-qt/qt5/qtwayland-config_1.0.0.bb | 21 - ...update-3rd-party-ivi-application-protocol.patch | 56 - ...dow-add-support-for-IVI-Surface-ID-proper.patch | 34 - ...est-file-according-to-smack-3-domain-mode.patch | 33 - ...Add-xdg-shell-protocol-file-version-1.4.0.patch | 468 -- ...dd-minimize-feature-to-QWindow-using-wayl.patch | 1029 ---- ...pgrade-to-support-current-version-weston-.patch | 772 --- ...-IVI-Shell-protocol-file-version-patch-v6.patch | 128 - .../0021-Implement-initial-IVI-Shell-support.patch | 539 -- .../qt5/qtwayland/0099_qtwayland_no_evdev.patch | 14 - ...018-packaging-enable-xdg-shell-at-runtime.patch | 31 - .../recipes-qt/qt5/qtwayland_%.bbappend | 26 - .../recipes-qt/qt5/qtwebkit_%.bbappend | 1 - meta-agl-profile-graphical/LICENSE | 20 - meta-agl-profile-graphical/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-graphical/LICENSE.MIT | 25 - .../classes/agl-graphical.bbclass | 6 - meta-agl-profile-graphical/conf/layer.conf | 12 - .../agl-service-homescreen_git.bb | 14 - .../agl-service-mediaplayer_git.bb | 18 - .../agl-service-radio/agl-service-radio_git.bb | 19 - .../agl-service-taskmanager.bb | 18 - .../recipes-graphics/hmi-debug/files/hmi-debug | 8 - .../recipes-graphics/hmi-debug/hmi-debug_git.bb | 19 - .../libhomescreen/libhomescreen_git.bb | 19 - .../wayland/Readme.weston-ini-conf | 34 - .../recipes-graphics/wayland/agl-compositor_git.bb | 28 - .../wayland/waltham-transmitter_git.bb | 34 - .../waltham/0001-Use-python3-instead-of-2.patch | 51 - .../0001-waltham-Fix-compile-build-error.patch | 55 - ...mandxml-Add-support-wthp_app_id-interface.patch | 70 - .../recipes-graphics/wayland/waltham_%.bbappend | 7 - .../recipes-graphics/wayland/waltham_git.bb | 16 - .../0001-Added-ivi-id-agent-to-CMake.patch | 22 - ...0002-add-LayerManagerControl-error-status.patch | 21 - .../0002-ivi-id-agent-added-ivi-id-agent.patch | 530 -- .../0003-ivi-controller-load-id-agent-module.patch | 67 - ...4-ivi-ilmcontrol-added-focus-notification.patch | 29 - ...disable-EGLWLMockNavigation-example-build.patch | 22 - .../0006-fix-plugin-registry-include.patch | 13 - .../wandboard_fix_build.patch | 13 - .../wayland/wayland-ivi-extension_git.bb | 36 - .../0001-Change-socket-mode-add-rw-for-group.patch | 29 - .../recipes-graphics/wayland/wayland_%.bbappend | 5 - .../recipes-graphics/wayland/weston-init.bbappend | 83 - .../wayland/weston-init/tmpfiles.conf.in | 6 - .../wayland/weston-init/weston-dep.conf.in | 3 - .../wayland/weston-init/weston.conf.in | 12 - .../wayland/weston-init/zz-dri-imx.rules.in | 2 - .../wayland/weston-init/zz-dri.rules.in | 1 - .../wayland/weston-init/zz-input.rules.in | 1 - .../wayland/weston-init/zz-tty.rules.in | 1 - .../wayland/weston-ready/weston-ready | 56 - .../wayland/weston-ready/weston-ready.service | 10 - .../recipes-graphics/wayland/weston-ready_1.0.bb | 21 - ...llow-regular-users-to-launch-Weston_7.0.0.patch | 51 - ...-Expose-weston_output_damage-in-libweston.patch | 30 - ...igrate-weston_seat_init-release-to-public.patch | 106 - .../0005-correctly-tear-down-drm-backend.patch | 37 - .../recipes-graphics/wayland/weston/smack-weston | 8 - .../recipes-graphics/wayland/weston_8.0.%.bbappend | 26 - ...-Install-wayland-header-from-gstwayland-l.patch | 28 - .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 2 - .../gstreamer1.0-plugins-good_%.bbappend | 2 - .../recipes-platform/images/agl-image-weston.bb | 9 - .../recipes-platform/images/agl-image-weston.inc | 7 - .../packagegroup-agl-graphical-multimedia.bb | 16 - .../packagegroup-agl-graphical-multimedia.bbappend | 5 - .../packagegroup-agl-graphical-services.bb | 15 - .../packagegroup-agl-graphical-weston.bb | 20 - .../packagegroup-agl-profile-graphical.bb | 23 - .../security-manager/security-manager_%.bbappend | 6 - meta-agl-profile-hud/LICENSE | 20 - meta-agl-profile-hud/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-hud/LICENSE.MIT | 25 - meta-agl-profile-hud/conf/layer.conf | 12 - meta-agl-profile-telematics/LICENSE | 20 - meta-agl-profile-telematics/LICENSE.GPL-2.0-only | 288 -- meta-agl-profile-telematics/LICENSE.MIT | 25 - meta-agl-profile-telematics/conf/layer.conf | 12 - .../images/agl-image-telematics.bb | 9 - .../images/agl-image-telematics.inc | 5 - .../packagegroup-agl-profile-telematics.bb | 25 - meta-agl.md | 126 +- meta-agl/conf/layer.conf | 12 - .../conf/include/agl-appfw-smack.inc | 5 + meta-app-framework/conf/include/agl-sign-wgts.inc | 3 + meta-app-framework/conf/layer.conf | 21 + .../packagegroup-agl-core-security.bbappend | 1 + .../packagegroup-agl-core-security_appfw.inc | 8 + .../packagegroup-agl-image-boot.bbappend | 1 + .../packagegroup-agl-image-boot_appfw.inc | 3 + .../packagegroup-agl-image-minimal.bbappend | 1 + .../packagegroup-agl-image-minimal_appfw.inc | 3 + .../libafb-helpers-qt/libafb-helpers-qt_git.bb | 11 + .../recipes-devtools/libqtappfw/libqtappfw_git.bb | 20 + .../packagegroups/packagegroup-agl-appfw-qt5.bb | 16 + .../recipes-connectivity/bluez5/bluez5_%.bbappend | 1 + .../recipes-connectivity/bluez5/bluez5_appfw.inc | 55 + .../bluez5/files/bluetooth.service.conf | 2 + .../connman/connman_%.bbappend | 1 + .../recipes-connectivity/connman/connman_appfw.inc | 34 + .../connman/files/connman.service.conf | 4 + .../recipes-core/base-files/base-files_%.bbappend | 33 +- .../recipes-core/base-files/base-files_appfw.inc | 113 + .../recipes-core/coreutils/coreutils_%.bbappend | 1 + .../recipes-core/coreutils/coreutils_appfw.inc | 7 + ...on-of-Cynara-asynchronous-security-checks.patch | 2309 +++++++++ ...sage-dispatching-when-send-rule-result-is.patch | 967 ++++ ...ailability-of-policy-results-for-broadcas.patch | 1095 ++++ ...d-own-rule-result-unavailability-handling.patch | 1505 ++++++ ...m-Cynara-runtime-policy-checks-by-default.patch | 180 + .../0006-Fix-SIGSEGV-on-disconnections.patch | 109 + .../0007-Switch-from-cynara-to-cynagora.patch | 1048 ++++ .../dbus-cynagora/dbus_1.12.16.bbappend | 1 + .../recipes-core/dbus-cynagora/dbus_appfw.inc | 15 + .../nativesdk-packagegroup-sdk-host.bbappend | 2 - .../packagegroup-agl-app-framework-examples.bb | 14 - .../packagegroup-agl-app-framework.bb | 20 - .../security-manager/0001-Adapt-rules-to-AGL.patch | 50 - .../security-manager/security-manager_%.bbappend | 7 - .../recipes-core/shadow/shadow_%.bbappend | 5 +- .../recipes-core/shadow/shadow_appfw.inc | 3 + .../files/55-udev-smack-default.rules | 27 + .../files/systemd-journald.service.conf | 16 + .../files/systemd-tmpfiles-setup.service.conf | 2 + .../smack-system-setup/files/tmp.mount.conf | 12 + .../smack-system-setup/smack-system-setup_1.bb | 28 + .../systemd-sync/systemd-agl-sync_1.0.bb | 39 - .../systemd/0001-Switch-Smack-label-earlier.patch | 52 + .../recipes-core/systemd/systemd_2%.bbappend | 1 + .../recipes-core/systemd/systemd_appfw.inc | 40 + .../recipes-core/util-linux/util-linux_%.bbappend | 1 + .../recipes-core/util-linux/util-linux_appfw.inc | 8 + .../cmake-apps-module/cmake-apps-module_git.bb | 20 + .../recipes-devtools/json-c/json-c_%.bbappend | 1 + .../recipes-devtools/json-c/json-c_appfw.inc | 1 + .../libafb-helpers/libafb-helpers_git.bb | 8 + .../libafb-helpers/libafb-helpers_git.inc | 14 + .../libappcontroller/libappcontroller_git.bb | 19 + .../nativesdk-packagegroup-sdk-host.bbappend | 1 + .../nativesdk-packagegroup-sdk-host_appfw.inc | 5 + .../run-agl-postinsts_1.0.bbappend | 1 - .../run-postinsts/run-postinsts/ldconfig-wait.conf | 2 + .../run-postinsts/run-postinsts_%.bbappend | 1 + .../run-postinsts/run-postinsts_appfw.inc | 14 + .../0001-Change-socket-mode-add-rw-for-group.patch | 29 + .../recipes-graphics/wayland/wayland_%.bbappend | 1 + .../recipes-graphics/wayland/wayland_appfw.inc | 5 + ...llow-regular-users-to-launch-Weston_7.0.0.patch | 51 + .../recipes-graphics/wayland/weston/smack-weston | 8 + .../recipes-graphics/wayland/weston_8.0.%.bbappend | 1 + .../recipes-graphics/wayland/weston_8.0_appfw.inc | 19 + .../recipes-kernel/linux/linux-%.bbappend | 3 +- .../recipes-kernel/linux/linux-appfw.inc | 21 + .../linux/linux/smack-default-lsm.cfg | 2 + .../recipes-kernel/linux/linux/smack.cfg | 9 + .../packagegroup-agl-app-framework-examples.bb | 14 + .../packagegroup-agl-app-framework.bb | 19 + .../packagegroups/packagegroup-agl-appfw-native.bb | 16 + .../packagegroup-agl-core-security.bbappend | 9 - .../packagegroup-agl-image-boot.bbappend | 3 - .../packagegroup-agl-image-minimal.bbappend | 3 - .../packagegroup-security-framework.bb | 23 + .../0001-lib-i386_table.h-add-new-syscall.patch | 42 + ...ubstitue-functions-for-strndupa-rawmemchr.patch | 133 + .../Fixed-swig-host-contamination-issue.patch | 57 + .../audit/audit/audit-volatile.conf | 1 + .../recipes-security/audit/audit/auditd | 153 + .../recipes-security/audit/audit/auditd.service | 20 + .../recipes-security/audit/audit_2.8.5.bb | 106 + .../recipes-security/cynagoauth/cynagoauth_0.1.bb | 23 + .../cynagora/cynagora-cynara-compat_2.1.bb | 30 + .../recipes-security/cynagora/cynagora/run-ptest | 4 + .../recipes-security/cynagora/cynagora_2.1.bb | 38 + .../security-manager/security-manager.inc | 83 + .../security-manager/0001-Adapt-rules-to-AGL.patch | 50 + .../0001-systemd-stop-using-compat-libs.patch | 47 + ...nager-policy-reload-do-not-depend-on-GNU-.patch | 36 + ...0003-Smack-rules-create-two-new-functions.patch | 117 + ...all-implement-multiple-set-of-smack-rules.patch | 34 + .../0005-c-11-replace-deprecated-auto_ptr.patch | 32 + ...ocket-manager-removes-tizen-specific-call.patch | 47 + ...007-removes-dependency-to-libslp-db-utils.patch | 78 + .../security-manager/0008-Fix-gcc6-build.patch | 38 + .../0009-Fix-Cmake-conf-for-gcc6-build.patch | 40 + ...uires-include-functional-for-std-function.patch | 51 + ...Fix-gcc8-warning-error-Werror-catch-value.patch | 32 + .../0012-Avoid-casting-from-const-T-to-void.patch | 122 + .../0013-Removing-tizen-platform-config.patch | 259 + ...e-post-install-initialization-of-database.patch | 78 + .../0015-Restrict-socket-accesses.patch | 34 + .../security-manager/security-manager_%.bbappend | 13 + .../security-manager/security-manager_git.bb | 27 + .../recipes-security/xmlsec1/xmlsec1_1.%.bbappend | 5 +- .../recipes-security/xmlsec1/xmlsec1_appfw.inc | 4 + .../recipes-support/libcap/libcap_%.bbappend | 4 +- .../recipes-support/libcap/libcap_appfw.inc | 3 + .../recipes-support/libzip/libzip_%.bbappend | 2 +- .../recipes-support/libzip/libzip_appfw.inc | 1 + .../recipes-test/afb-test/afb-test_git.bb | 25 + .../recipes-test/afb-test/files/run-ptest | 3 + .../scripts/run-yocto-check-layer-enabled-flags.sh | 51 + .../scripts/run-yocto-check-layer.sh | 49 + meta-netboot/README.renesas-gen3 | 90 - meta-netboot/classes/netboot.bbclass | 5 + meta-netboot/conf/include/agl-netboot.inc | 3 - meta-netboot/conf/layer.conf | 4 +- .../recipes-core/busybox/busybox_%.bbappend | 7 +- .../recipes-core/busybox/busybox_netboot.inc | 6 + .../recipes-core/images/initramfs-netboot-image.bb | 23 +- .../images/initramfs-netboot-image_netboot.inc | 23 + meta-netboot/recipes-support/nbd/nbd_%.bbappend | 7 +- meta-netboot/recipes-support/nbd/nbd_netboot.inc | 5 + .../scripts/run-yocto-check-layer-flags-enabled.sh | 46 + meta-netboot/scripts/run-yocto-check-layer.sh | 44 + meta-pipewire/conf/layer.conf | 5 + .../agl-service-audiomixer_git.bb | 17 + .../packagegroups/packagegroup-pipewire.bbappend | 4 + .../pipewire/pipewire-conf-agl/client.env | 10 + .../pipewire/pipewire-conf-agl/pipewire.conf.in | 17 + .../pipewire/pipewire-conf-agl/server.env | 12 + .../pipewire/pipewire-conf-agl_git.bb | 43 + .../pipewire/pipewire/pipewire@.service | 24 + .../pipewire/pipewire/pipewire@.socket | 19 + .../pipewire/pipewire/smack-pipewire | 8 + .../pipewire/pipewire_git.bbappend | 32 + .../recipes-security/cynagora/cynagora_%.bbappend | 4 + .../security-manager/security-manager_%.bbappend | 3 + ...-gstreamer-helper-application-for-interco.patch | 517 -- .../bluez-alsa/bluealsa-gst-helper@.service | 18 - .../bluez-alsa/bluez-alsa_git.bbappend | 35 - .../packagegroups/packagegroup-pipewire.bb | 2 - .../agl-service-audiomixer_git.bb | 17 - .../pipewire/pipewire-conf-agl/client.env | 10 - .../pipewire/pipewire-conf-agl/pipewire.conf.in | 17 - .../pipewire/pipewire-conf-agl/server.env | 12 - .../pipewire/pipewire-conf-agl_git.bb | 43 - .../pipewire/pipewire/pipewire@.service | 24 - .../pipewire/pipewire/pipewire@.socket | 19 - .../pipewire/pipewire/smack-pipewire | 8 - .../pipewire/pipewire_git.bbappend | 30 - .../30-ak4613-audio-sink.endpoint | 1 - .../30-rcarsound-audio-sink.endpoint | 1 - .../recipes-security/cynagora/cynagora_%.bbappend | 5 - .../security-manager/security-manager_%.bbappend | 4 - meta-pipewire/scripts/run-yocto-check-layer.sh | 35 + meta-security/COPYING.MIT | 17 - meta-security/README.md | 31 - meta-security/conf/layer.conf | 14 - .../recipes-connectivity/bluez5/bluez5_%.bbappend | 55 - .../bluez5/files/bluetooth.service.conf | 2 - .../connman/connman_%.bbappend | 34 - .../connman/files/connman.service.conf | 4 - .../recipes-core/base-files/base-files_%.bbappend | 79 - .../recipes-core/coreutils/coreutils_%.bbappend | 7 - ...on-of-Cynara-asynchronous-security-checks.patch | 2309 --------- ...sage-dispatching-when-send-rule-result-is.patch | 967 ---- ...ailability-of-policy-results-for-broadcas.patch | 1095 ---- ...d-own-rule-result-unavailability-handling.patch | 1505 ------ ...m-Cynara-runtime-policy-checks-by-default.patch | 180 - .../0006-Fix-SIGSEGV-on-disconnections.patch | 109 - .../0007-Switch-from-cynara-to-cynagora.patch | 1048 ---- .../dbus-cynagora/dbus_1.12.16.bbappend | 15 - .../packagegroup-security-framework.bb | 23 - .../files/55-udev-smack-default.rules | 27 - .../files/systemd-journald.service.conf | 16 - .../files/systemd-tmpfiles-setup.service.conf | 2 - .../smack-system-setup/files/tmp.mount.conf | 12 - .../smack-system-setup/smack-system-setup_1.bb | 28 - .../systemd/0001-Switch-Smack-label-earlier.patch | 52 - .../recipes-core/systemd/systemd_2%.bbappend | 40 - .../recipes-core/util-linux/util-linux_%.bbappend | 8 - .../recipes-kernel/linux/linux-%.bbappend | 17 - meta-security/recipes-kernel/linux/linux/audit.cfg | 2 - .../linux/linux/smack-default-lsm.cfg | 2 - meta-security/recipes-kernel/linux/linux/smack.cfg | 9 - .../0001-lib-i386_table.h-add-new-syscall.patch | 42 - ...ubstitue-functions-for-strndupa-rawmemchr.patch | 133 - .../Fixed-swig-host-contamination-issue.patch | 57 - .../audit/audit/audit-volatile.conf | 1 - meta-security/recipes-security/audit/audit/auditd | 153 - .../recipes-security/audit/audit/auditd.service | 20 - .../recipes-security/audit/audit_2.8.5.bb | 106 - .../recipes-security/cynagoauth/cynagoauth_0.1.bb | 23 - .../cynagora/cynagora-cynara-compat_2.1.bb | 30 - .../recipes-security/cynagora/cynagora/run-ptest | 4 - .../recipes-security/cynagora/cynagora_2.1.bb | 38 - .../security-manager/security-manager.inc | 83 - .../0001-systemd-stop-using-compat-libs.patch | 47 - ...nager-policy-reload-do-not-depend-on-GNU-.patch | 36 - ...0003-Smack-rules-create-two-new-functions.patch | 117 - ...all-implement-multiple-set-of-smack-rules.patch | 34 - .../0005-c-11-replace-deprecated-auto_ptr.patch | 32 - ...ocket-manager-removes-tizen-specific-call.patch | 47 - ...007-removes-dependency-to-libslp-db-utils.patch | 78 - .../security-manager/0008-Fix-gcc6-build.patch | 38 - .../0009-Fix-Cmake-conf-for-gcc6-build.patch | 40 - ...uires-include-functional-for-std-function.patch | 51 - ...Fix-gcc8-warning-error-Werror-catch-value.patch | 32 - .../0012-Avoid-casting-from-const-T-to-void.patch | 122 - .../0013-Removing-tizen-platform-config.patch | 259 - ...e-post-install-initialization-of-database.patch | 78 - .../0015-Restrict-socket-accesses.patch | 34 - .../security-manager/security-manager_git.bb | 27 - .../recipes-security/smacknet/files/smacknet | 184 - .../smacknet/files/smacknet.service | 11 - .../recipes-security/smacknet/smacknet.bb | 29 - scripts/README-mkefi-agl.md | 18 - templates/base/00_local.conf.agl.inc | 3 - templates/base/99_local.conf.inc | 2 +- templates/base/bblayers.conf.sample | 20 +- .../feature/agl-appfw-smack/50_bblayers.conf.inc | 9 + .../feature/agl-appfw-smack/50_local.conf.inc | 1 + .../feature/agl-hmi-framework/50_local.conf.inc | 2 +- .../feature/agl-localdev/80_bblayers.conf.inc | 3 + templates/feature/agl-localdev/80_local.conf.inc | 2 + .../agl-localdev/README_feature_agl-localdev.md | 9 + templates/feature/agl-netboot/50_bblayers.conf.inc | 3 +- .../agl-profile-cluster-qt5/50_bblayers.conf.inc | 3 - .../README_feature_agl-profile-cluster-qt5.md | 15 - .../feature/agl-profile-cluster-qt5/included.dep | 1 - .../agl-profile-cluster/50_bblayers.conf.inc | 3 - .../README_feature_agl-profile-cluster.md | 15 - templates/feature/agl-profile-cluster/included.dep | 1 - .../50_bblayers.conf.inc | 6 - .../agl-profile-graphical-html5/50_local.conf.inc | 3 - .../README_feature_agl-profile-graphical-html5.md | 8 - .../agl-profile-graphical-html5/included.dep | 1 - .../agl-profile-graphical-qt5/50_bblayers.conf.inc | 9 - .../README_feature_agl-profile-graphical-qt5.md | 15 - .../feature/agl-profile-graphical-qt5/included.dep | 1 - .../agl-profile-graphical/50_bblayers.conf.inc | 3 - .../README_feature_agl-profile-graphical.md | 9 - .../feature/agl-profile-hud/50_bblayers.conf.inc | 3 - .../README_feature_agl-profile-hud.md | 9 - .../agl-profile-telematics/50_bblayers.conf.inc | 3 - .../README_feature_agl-profile-telematics.md | 9 - templates/feature/agl-weston-remoting/included.dep | 2 +- 831 files changed, 14667 insertions(+), 33143 deletions(-) delete mode 100644 meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend delete mode 100644 meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend delete mode 100644 meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend delete mode 100644 meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg delete mode 100644 meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend delete mode 100644 meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend create mode 100644 meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend create mode 100644 meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc create mode 100644 meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend create mode 100644 meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc create mode 100644 meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_agl.inc delete mode 100644 meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch delete mode 100644 meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch delete mode 100644 meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch delete mode 100644 meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch delete mode 100644 meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb delete mode 100644 meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch delete mode 100644 meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg delete mode 100644 meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-agl.inc delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg delete mode 100644 meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg delete mode 100644 meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch delete mode 100644 meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend create mode 100644 meta-agl-core-test/conf/include/agl-test.inc create mode 100644 meta-agl-core-test/conf/layer.conf create mode 100644 meta-agl-core-test/images/agl-image-minimal-qa.bb create mode 100644 meta-agl-core-test/recipes-test/aiostress/aiostress_0.22.bb create mode 100644 meta-agl-core-test/recipes-test/dung/dung_3.4.25-m2.bb create mode 100644 meta-agl-core-test/recipes-test/ebizzy/ebizzy_0.3.bb create mode 100644 meta-agl-core-test/recipes-test/ffsb/ffsb_6.0-rc2.bb create mode 100644 meta-agl-core-test/recipes-test/fontconfig/fontconfig_%.bbappend create mode 100644 meta-agl-core-test/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch create mode 100644 meta-agl-core-test/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch create mode 100644 meta-agl-core-test/recipes-test/freetype/freetype_2.%.bbappend create mode 100644 meta-agl-core-test/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch create mode 100644 meta-agl-core-test/recipes-test/fsfuzzer/fsfuzzer_0.7.bb create mode 100644 meta-agl-core-test/recipes-test/glmark2/glmark2_%.bbappendNOT create mode 100644 meta-agl-core-test/recipes-test/himeno/himeno_2.0.bb create mode 100644 meta-agl-core-test/recipes-test/interbench/files/interbench.c.patch create mode 100644 meta-agl-core-test/recipes-test/interbench/interbench_0.31.bb create mode 100644 meta-agl-core-test/recipes-test/ipv6connect/ipv6connect.bb create mode 100644 meta-agl-core-test/recipes-test/linpack/linpack.bb create mode 100644 meta-agl-core-test/recipes-test/linus-stress/linus-stress.bb create mode 100644 meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb create mode 100644 meta-agl-core-test/recipes-test/trinity/trinity_git.bb create mode 100644 meta-agl-core/LICENSE create mode 100644 meta-agl-core/LICENSE.GPL-2.0-only create mode 100644 meta-agl-core/LICENSE.MIT create mode 120000 meta-agl-core/README create mode 100644 meta-agl-core/README-AGL.md create mode 100644 meta-agl-core/classes/cloc.bbclass create mode 100644 meta-agl-core/classes/sanity-meta-agl-core.bbclass create mode 100644 meta-agl-core/conf/bblayers.conf.sample create mode 100644 meta-agl-core/conf/distro/include/aarch64-tune.inc create mode 100644 meta-agl-core/conf/distro/include/arc-tune.inc create mode 100644 meta-agl-core/conf/distro/include/arm-tune.inc create mode 100644 meta-agl-core/conf/distro/include/riscv64-tune.inc create mode 100644 meta-agl-core/conf/distro/include/x86_64-tune.inc create mode 100644 meta-agl-core/conf/distro/poky-agl.conf create mode 100644 meta-agl-core/conf/include/agl-devel.inc create mode 100644 meta-agl-core/conf/include/agl-gplv2.inc create mode 100644 meta-agl-core/conf/include/base-agl.inc create mode 100644 meta-agl-core/conf/layer.conf create mode 100644 meta-agl-core/conf/local.conf.sample create mode 100644 meta-agl-core/files/group create mode 100644 meta-agl-core/files/passwd create mode 100644 meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend create mode 100644 meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc create mode 100644 meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg create mode 100644 meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb create mode 100644 meta-agl-core/recipes-connectivity/connman/connman_%.bbappend create mode 100644 meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc create mode 100644 meta-agl-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch create mode 100644 meta-agl-core/recipes-connectivity/connman/files/main.conf create mode 100644 meta-agl-core/recipes-core/systemd/.appends.core create mode 100644 meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend create mode 100644 meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc create mode 100644 meta-agl-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch create mode 100644 meta-agl-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch create mode 100644 meta-agl-core/recipes-core/systemd/systemd/canbus-can.network create mode 100644 meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf create mode 100644 meta-agl-core/recipes-core/systemd/systemd/wired.network create mode 100644 meta-agl-core/recipes-core/systemd/systemd_%.bbappend create mode 100644 meta-agl-core/recipes-core/systemd/systemd_aglcore.inc create mode 100644 meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend create mode 100644 meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc create mode 100644 meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh create mode 100644 meta-agl-core/recipes-devtools/gdb/.appends.core create mode 100644 meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend create mode 100644 meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc create mode 100644 meta-agl-core/recipes-extended/gperf/.appends.core create mode 100644 meta-agl-core/recipes-extended/gperf/gperf_%.bbappend create mode 100644 meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc create mode 100644 meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf create mode 100644 meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham-transmitter_git.bb create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham_%.bbappend create mode 100644 meta-agl-core/recipes-graphics/wayland/waltham_git.bb create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual.cfg create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-init.bbappend create mode 100644 meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc create mode 100644 meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch create mode 100644 meta-agl-core/recipes-graphics/wayland/weston_8.0.%.bbappend create mode 100644 meta-agl-core/recipes-graphics/wayland/weston_8.0_aglcore.inc create mode 100644 meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend create mode 100644 meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc create mode 100644 meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch create mode 100644 meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch create mode 100644 meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch create mode 100644 meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc create mode 100644 meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc create mode 100644 meta-agl-core/recipes-kernel/linux/linux-agl.inc create mode 100644 meta-agl-core/recipes-kernel/linux/linux/btusb.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/drm.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/hid.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/i2c-led.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/iiodevice.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/joystick.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/nbd.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch create mode 100644 meta-agl-core/recipes-kernel/linux/linux/netfilter.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/nfc.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/procevent.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/rtc.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/rtl_sdr.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/scheddebug.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/sound.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/uinput.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/usb.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/usbaudio.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/usbmodem.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/uvc.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/wifi.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg create mode 100644 meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg create mode 100644 meta-agl-core/recipes-platform/images/agl-image-boot.bb create mode 100644 meta-agl-core/recipes-platform/images/agl-image-boot.inc create mode 100644 meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb create mode 100644 meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb create mode 100644 meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.inc create mode 100644 meta-agl-core/recipes-platform/images/agl-image-minimal.bb create mode 100644 meta-agl-core/recipes-platform/images/agl-image-minimal.inc create mode 100644 meta-agl-core/recipes-platform/images/agl-image-weston.bb create mode 100644 meta-agl-core/recipes-platform/images/agl-image-weston.inc create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb create mode 100644 meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb create mode 100644 meta-agl-core/recipes-support/libsoup/libsoup-2.4_%.bbappend create mode 100644 meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch create mode 100644 meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend create mode 100644 meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc create mode 100755 meta-agl-core/scripts/oe-depends-dot create mode 100755 meta-agl-core/scripts/run-yocto-check-layer-feature-enabled.sh create mode 100755 meta-agl-core/scripts/run-yocto-check-layer.sh delete mode 100644 meta-agl-distro/LICENSE delete mode 100644 meta-agl-distro/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-distro/LICENSE.MIT delete mode 100644 meta-agl-distro/README delete mode 100644 meta-agl-distro/conf/distro/include/aarch64-tune.inc delete mode 100644 meta-agl-distro/conf/distro/include/arc-tune.inc delete mode 100644 meta-agl-distro/conf/distro/include/arm-tune.inc delete mode 100644 meta-agl-distro/conf/distro/include/riscv64-tune.inc delete mode 100644 meta-agl-distro/conf/distro/include/x86_64-tune.inc delete mode 100644 meta-agl-distro/conf/distro/poky-agl.conf delete mode 100644 meta-agl-distro/conf/layer.conf delete mode 100755 meta-agl-distro/scripts/oe-depends-dot delete mode 100644 meta-agl-profile-cluster-qt5/LICENSE delete mode 100644 meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-cluster-qt5/LICENSE.MIT delete mode 100644 meta-agl-profile-cluster-qt5/conf/layer.conf delete mode 100644 meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb delete mode 100644 meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc delete mode 100644 meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb delete mode 100644 meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb delete mode 100644 meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch delete mode 100644 meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch delete mode 100644 meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend delete mode 100644 meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb delete mode 100644 meta-agl-profile-cluster/LICENSE delete mode 100644 meta-agl-profile-cluster/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-cluster/LICENSE.MIT delete mode 100644 meta-agl-profile-cluster/conf/layer.conf delete mode 100644 meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb delete mode 100644 meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc delete mode 100644 meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb delete mode 100644 meta-agl-profile-core/LICENSE delete mode 100644 meta-agl-profile-core/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-core/LICENSE.MIT delete mode 100644 meta-agl-profile-core/classes/cloc.bbclass delete mode 100644 meta-agl-profile-core/conf/include/agl-devel.inc delete mode 100644 meta-agl-profile-core/conf/include/agl-gplv2.inc delete mode 100644 meta-agl-profile-core/conf/include/agl-sign-wgts.inc delete mode 100644 meta-agl-profile-core/conf/include/base-agl.inc delete mode 100644 meta-agl-profile-core/conf/layer.conf delete mode 100644 meta-agl-profile-core/files/group delete mode 100644 meta-agl-profile-core/files/passwd delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb delete mode 100755 meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb delete mode 100644 meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb delete mode 100644 meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb delete mode 100644 meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb delete mode 100644 meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default delete mode 100644 meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf delete mode 100644 meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg delete mode 100644 meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb delete mode 100644 meta-agl-profile-core/recipes-connectivity/connman/.appends.core delete mode 100644 meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/connman/files/main.conf delete mode 100644 meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend delete mode 100644 meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc delete mode 100644 meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb delete mode 100644 meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf delete mode 100644 meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch delete mode 100644 meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb delete mode 100644 meta-agl-profile-core/recipes-core/dbus/.appends.core delete mode 100644 meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service delete mode 100644 meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket delete mode 100644 meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf delete mode 100644 meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch delete mode 100644 meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch delete mode 100644 meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend delete mode 100644 meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb delete mode 100644 meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend delete mode 100644 meta-agl-profile-core/recipes-core/psplash/.appends.core delete mode 100644 meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h delete mode 100644 meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h delete mode 100644 meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend delete mode 100644 meta-agl-profile-core/recipes-core/systemd/.appends.core delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd/wired.network delete mode 100644 meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh delete mode 100644 meta-agl-profile-core/recipes-devtools/gdb/.appends.core delete mode 100644 meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc delete mode 100644 meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend delete mode 100644 meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend delete mode 100755 meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts delete mode 100644 meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service delete mode 100644 meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb delete mode 100644 meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf delete mode 100644 meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-extended/gperf/.appends.core delete mode 100644 meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch delete mode 100644 meta-agl-profile-core/recipes-kernel/most/most.bb delete mode 100644 meta-agl-profile-core/recipes-kernel/most/most.bbappend delete mode 100644 meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch delete mode 100644 meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb delete mode 100644 meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf delete mode 100644 meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb delete mode 100644 meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb delete mode 100644 meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb delete mode 100644 meta-agl-profile-core/recipes-support/curl/curl_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend delete mode 100644 meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules delete mode 100644 meta-agl-profile-core/recipes-support/udisks/files/automount.service delete mode 100644 meta-agl-profile-core/recipes-support/udisks/files/automount.sh delete mode 100644 meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb delete mode 100644 meta-agl-profile-core/recipes-test/afb-test/files/run-ptest delete mode 100644 meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb delete mode 100644 meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb delete mode 100644 meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb delete mode 100644 meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb delete mode 100644 meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch delete mode 100644 meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch delete mode 100644 meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend delete mode 100644 meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch delete mode 100644 meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb delete mode 100644 meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper delete mode 100644 meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb delete mode 100644 meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch delete mode 100644 meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb delete mode 100644 meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend delete mode 100644 meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb delete mode 100644 meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch delete mode 100644 meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb delete mode 100644 meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb delete mode 100644 meta-agl-profile-core/recipes-test/linpack/linpack.bb delete mode 100644 meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb delete mode 100644 meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb delete mode 100644 meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb delete mode 100644 meta-agl-profile-core/recipes-test/trinity/trinity_git.bb delete mode 100644 meta-agl-profile-graphical-html5/conf/layer.conf delete mode 100644 meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend delete mode 100644 meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg delete mode 100644 meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg delete mode 100644 meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb delete mode 100644 meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc delete mode 100644 meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb delete mode 100644 meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch delete mode 100644 meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb delete mode 100644 meta-agl-profile-graphical-qt5/LICENSE delete mode 100644 meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-graphical-qt5/LICENSE.MIT delete mode 100644 meta-agl-profile-graphical-qt5/conf/layer.conf delete mode 100644 meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb delete mode 100755 meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend delete mode 100644 meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend delete mode 100644 meta-agl-profile-graphical/LICENSE delete mode 100644 meta-agl-profile-graphical/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-graphical/LICENSE.MIT delete mode 100644 meta-agl-profile-graphical/classes/agl-graphical.bbclass delete mode 100644 meta-agl-profile-graphical/conf/layer.conf delete mode 100644 meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug delete mode 100644 meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston-dep.conf.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston delete mode 100644 meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch delete mode 100644 meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb delete mode 100644 meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc delete mode 100644 meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb delete mode 100644 meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend delete mode 100644 meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb delete mode 100644 meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb delete mode 100644 meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb delete mode 100644 meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend delete mode 100644 meta-agl-profile-hud/LICENSE delete mode 100644 meta-agl-profile-hud/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-hud/LICENSE.MIT delete mode 100644 meta-agl-profile-hud/conf/layer.conf delete mode 100644 meta-agl-profile-telematics/LICENSE delete mode 100644 meta-agl-profile-telematics/LICENSE.GPL-2.0-only delete mode 100644 meta-agl-profile-telematics/LICENSE.MIT delete mode 100644 meta-agl-profile-telematics/conf/layer.conf delete mode 100644 meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb delete mode 100644 meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc delete mode 100644 meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb delete mode 100644 meta-agl/conf/layer.conf create mode 100644 meta-app-framework/conf/include/agl-sign-wgts.inc create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security_appfw.inc create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot_appfw.inc create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend create mode 100644 meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal_appfw.inc create mode 100644 meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb create mode 100644 meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb create mode 100644 meta-app-framework/dynamic-layers/meta-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-qt5.bb create mode 100644 meta-app-framework/recipes-connectivity/bluez5/bluez5_%.bbappend create mode 100644 meta-app-framework/recipes-connectivity/bluez5/bluez5_appfw.inc create mode 100644 meta-app-framework/recipes-connectivity/bluez5/files/bluetooth.service.conf create mode 100644 meta-app-framework/recipes-connectivity/connman/connman_%.bbappend create mode 100644 meta-app-framework/recipes-connectivity/connman/connman_appfw.inc create mode 100644 meta-app-framework/recipes-connectivity/connman/files/connman.service.conf create mode 100644 meta-app-framework/recipes-core/base-files/base-files_appfw.inc create mode 100644 meta-app-framework/recipes-core/coreutils/coreutils_%.bbappend create mode 100644 meta-app-framework/recipes-core/coreutils/coreutils_appfw.inc create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend create mode 100644 meta-app-framework/recipes-core/dbus-cynagora/dbus_appfw.inc delete mode 100644 meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend delete mode 100644 meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb delete mode 100644 meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb delete mode 100644 meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch delete mode 100644 meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend create mode 100644 meta-app-framework/recipes-core/shadow/shadow_appfw.inc create mode 100644 meta-app-framework/recipes-core/smack-system-setup/files/55-udev-smack-default.rules create mode 100644 meta-app-framework/recipes-core/smack-system-setup/files/systemd-journald.service.conf create mode 100644 meta-app-framework/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf create mode 100644 meta-app-framework/recipes-core/smack-system-setup/files/tmp.mount.conf create mode 100644 meta-app-framework/recipes-core/smack-system-setup/smack-system-setup_1.bb delete mode 100644 meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb create mode 100644 meta-app-framework/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch create mode 100644 meta-app-framework/recipes-core/systemd/systemd_2%.bbappend create mode 100644 meta-app-framework/recipes-core/systemd/systemd_appfw.inc create mode 100644 meta-app-framework/recipes-core/util-linux/util-linux_%.bbappend create mode 100644 meta-app-framework/recipes-core/util-linux/util-linux_appfw.inc create mode 100644 meta-app-framework/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb create mode 100644 meta-app-framework/recipes-devtools/json-c/json-c_%.bbappend create mode 100644 meta-app-framework/recipes-devtools/json-c/json-c_appfw.inc create mode 100644 meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.bb create mode 100644 meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.inc create mode 100644 meta-app-framework/recipes-devtools/libappcontroller/libappcontroller_git.bb create mode 100644 meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend create mode 100644 meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host_appfw.inc delete mode 100644 meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend create mode 100644 meta-app-framework/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf create mode 100644 meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_%.bbappend create mode 100644 meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_appfw.inc create mode 100644 meta-app-framework/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch create mode 100644 meta-app-framework/recipes-graphics/wayland/wayland_%.bbappend create mode 100644 meta-app-framework/recipes-graphics/wayland/wayland_appfw.inc create mode 100644 meta-app-framework/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch create mode 100644 meta-app-framework/recipes-graphics/wayland/weston/smack-weston create mode 100644 meta-app-framework/recipes-graphics/wayland/weston_8.0.%.bbappend create mode 100644 meta-app-framework/recipes-graphics/wayland/weston_8.0_appfw.inc create mode 100644 meta-app-framework/recipes-kernel/linux/linux-appfw.inc create mode 100644 meta-app-framework/recipes-kernel/linux/linux/smack-default-lsm.cfg create mode 100644 meta-app-framework/recipes-kernel/linux/linux/smack.cfg create mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework-examples.bb create mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework.bb create mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-appfw-native.bb delete mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend delete mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend delete mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend create mode 100644 meta-app-framework/recipes-platform/packagegroups/packagegroup-security-framework.bb create mode 100644 meta-app-framework/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch create mode 100644 meta-app-framework/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch create mode 100644 meta-app-framework/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch create mode 100644 meta-app-framework/recipes-security/audit/audit/audit-volatile.conf create mode 100755 meta-app-framework/recipes-security/audit/audit/auditd create mode 100644 meta-app-framework/recipes-security/audit/audit/auditd.service create mode 100644 meta-app-framework/recipes-security/audit/audit_2.8.5.bb create mode 100644 meta-app-framework/recipes-security/cynagoauth/cynagoauth_0.1.bb create mode 100644 meta-app-framework/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb create mode 100755 meta-app-framework/recipes-security/cynagora/cynagora/run-ptest create mode 100644 meta-app-framework/recipes-security/cynagora/cynagora_2.1.bb create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager.inc create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend create mode 100644 meta-app-framework/recipes-security/security-manager/security-manager_git.bb create mode 100644 meta-app-framework/recipes-security/xmlsec1/xmlsec1_appfw.inc create mode 100644 meta-app-framework/recipes-support/libcap/libcap_appfw.inc create mode 100644 meta-app-framework/recipes-support/libzip/libzip_appfw.inc create mode 100644 meta-app-framework/recipes-test/afb-test/afb-test_git.bb create mode 100644 meta-app-framework/recipes-test/afb-test/files/run-ptest create mode 100755 meta-app-framework/scripts/run-yocto-check-layer-enabled-flags.sh create mode 100755 meta-app-framework/scripts/run-yocto-check-layer.sh delete mode 100644 meta-netboot/README.renesas-gen3 create mode 100644 meta-netboot/recipes-core/busybox/busybox_netboot.inc create mode 100644 meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc create mode 100644 meta-netboot/recipes-support/nbd/nbd_netboot.inc create mode 100755 meta-netboot/scripts/run-yocto-check-layer-flags-enabled.sh create mode 100755 meta-netboot/scripts/run-yocto-check-layer.sh create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-apis/agl-service-audiomixer/agl-service-audiomixer_git.bb create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-core/packagegroups/packagegroup-pipewire.bbappend create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/client.env create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/server.env create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.service create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.socket create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/smack-pipewire create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire_git.bbappend create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/cynagora/cynagora_%.bbappend create mode 100644 meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend delete mode 100644 meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch delete mode 100644 meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service delete mode 100644 meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend delete mode 100644 meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire delete mode 100644 meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend delete mode 100644 meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend delete mode 100644 meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend create mode 100755 meta-pipewire/scripts/run-yocto-check-layer.sh delete mode 100644 meta-security/COPYING.MIT delete mode 100644 meta-security/README.md delete mode 100644 meta-security/conf/layer.conf delete mode 100644 meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend delete mode 100644 meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf delete mode 100644 meta-security/recipes-connectivity/connman/connman_%.bbappend delete mode 100644 meta-security/recipes-connectivity/connman/files/connman.service.conf delete mode 100644 meta-security/recipes-core/base-files/base-files_%.bbappend delete mode 100644 meta-security/recipes-core/coreutils/coreutils_%.bbappend delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch delete mode 100644 meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend delete mode 100644 meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb delete mode 100644 meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules delete mode 100644 meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf delete mode 100644 meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf delete mode 100644 meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf delete mode 100644 meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb delete mode 100644 meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch delete mode 100644 meta-security/recipes-core/systemd/systemd_2%.bbappend delete mode 100644 meta-security/recipes-core/util-linux/util-linux_%.bbappend delete mode 100644 meta-security/recipes-kernel/linux/linux-%.bbappend delete mode 100644 meta-security/recipes-kernel/linux/linux/audit.cfg delete mode 100644 meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg delete mode 100644 meta-security/recipes-kernel/linux/linux/smack.cfg delete mode 100644 meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch delete mode 100644 meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch delete mode 100644 meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch delete mode 100644 meta-security/recipes-security/audit/audit/audit-volatile.conf delete mode 100755 meta-security/recipes-security/audit/audit/auditd delete mode 100644 meta-security/recipes-security/audit/audit/auditd.service delete mode 100644 meta-security/recipes-security/audit/audit_2.8.5.bb delete mode 100644 meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb delete mode 100644 meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb delete mode 100755 meta-security/recipes-security/cynagora/cynagora/run-ptest delete mode 100644 meta-security/recipes-security/cynagora/cynagora_2.1.bb delete mode 100644 meta-security/recipes-security/security-manager/security-manager.inc delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch delete mode 100644 meta-security/recipes-security/security-manager/security-manager_git.bb delete mode 100644 meta-security/recipes-security/smacknet/files/smacknet delete mode 100644 meta-security/recipes-security/smacknet/files/smacknet.service delete mode 100644 meta-security/recipes-security/smacknet/smacknet.bb delete mode 100644 scripts/README-mkefi-agl.md create mode 100644 templates/feature/agl-appfw-smack/50_bblayers.conf.inc create mode 100644 templates/feature/agl-localdev/80_bblayers.conf.inc create mode 100644 templates/feature/agl-localdev/80_local.conf.inc create mode 100644 templates/feature/agl-localdev/README_feature_agl-localdev.md delete mode 100644 templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md delete mode 100644 templates/feature/agl-profile-cluster-qt5/included.dep delete mode 100644 templates/feature/agl-profile-cluster/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md delete mode 100644 templates/feature/agl-profile-cluster/included.dep delete mode 100644 templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-graphical-html5/50_local.conf.inc delete mode 100644 templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md delete mode 100644 templates/feature/agl-profile-graphical-html5/included.dep delete mode 100644 templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md delete mode 100644 templates/feature/agl-profile-graphical-qt5/included.dep delete mode 100644 templates/feature/agl-profile-graphical/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md delete mode 100644 templates/feature/agl-profile-hud/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md delete mode 100644 templates/feature/agl-profile-telematics/50_bblayers.conf.inc delete mode 100644 templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md diff --git a/agl-layers-overview.md b/agl-layers-overview.md index 409eae529..e84f875bf 100755 --- a/agl-layers-overview.md +++ b/agl-layers-overview.md @@ -14,7 +14,6 @@ This section provides information about the layers used by the AGL Project: * **`meta-agl`**: Minimal set of software needed to create an AGL distribution used to boot a system. - AGL profiles are built on top of this minimal set of software. * **`meta-agl-demo`**: Provides a reference or demo platform and applications for the AGL Distribution. diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend deleted file mode 100644 index 8ac343aa3..000000000 --- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# The gallium-llvm is recommended as software 3D graphics renderer -GALLIUM_LLVM = "gallium-llvm" -PACKAGECONFIG_append_qemux86 = " gallium ${GALLIUM_LLVM}" -PACKAGECONFIG_append_qemux86-64 = " gallium ${GALLIUM_LLVM}" -PACKAGECONFIG_append_intel-corei7-64 = " gallium ${GALLIUM_LLVM}" - -DRIDRIVERS_append_intel-corei7-64 = ",i965" diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend deleted file mode 100644 index eda8de38a..000000000 --- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend +++ /dev/null @@ -1,4 +0,0 @@ -# This patch correct a bug in libva1_1.7.0.bb 1.8 inmeta-intel (no clue when it will be fixed) -# libva.bb calls for an x11 runtime dependency even if wayland is selected -# -RDEPENDS_${PN}-egl_remove = "${@bb.utils.contains("DISTRO_FEATURES", "x11", "", "${PN}-x11", d)}" diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend deleted file mode 100644 index 4a2dc80af..000000000 --- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -# For virtual machines and intel-corei7-64 we want to support both the HDMI-A-1 -# and Virtual-1 outputs. This allows us to run virtual images on real hardware -# and vice versa. -SRC_URI_append_qemuall = " file://virtual.cfg" -SRC_URI_append_intel-corei7-64 = " file://virtual.cfg" diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg deleted file mode 100644 index 25a8fae94..000000000 --- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg +++ /dev/null @@ -1,18 +0,0 @@ -[output] -name=Virtual-1 -transform=270 -mode=1920x1080 -#mode=1600x1200 -#mode=1680x1050 -#mode=1400x1050 -#mode=1600x900 -#mode=1280x1024 -#mode=1440x900 -#mode=1280x960 -#mode=1360x768 -#mode=1280x800 -#mode=1280x768 -#mode=1280x720 -#mode=800x600 -#mode=848x480 -#mode=640x480 diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend deleted file mode 100644 index 9aaea5f69..000000000 --- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -RDEPENDS_${PN}_append_qemux86 = " mesa-megadriver" -RDEPENDS_${PN}_append_qemux86-64 = " mesa-megadriver" -RDEPENDS_${PN}_append_intel-corei7-64 = " mesa-megadriver" diff --git a/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend b/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend deleted file mode 100644 index 285847295..000000000 --- a/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend +++ /dev/null @@ -1 +0,0 @@ -PARALLEL_MAKE = "" diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend new file mode 100644 index 000000000..3d5903d85 --- /dev/null +++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)} diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc new file mode 100644 index 000000000..8ac343aa3 --- /dev/null +++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc @@ -0,0 +1,7 @@ +# The gallium-llvm is recommended as software 3D graphics renderer +GALLIUM_LLVM = "gallium-llvm" +PACKAGECONFIG_append_qemux86 = " gallium ${GALLIUM_LLVM}" +PACKAGECONFIG_append_qemux86-64 = " gallium ${GALLIUM_LLVM}" +PACKAGECONFIG_append_intel-corei7-64 = " gallium ${GALLIUM_LLVM}" + +DRIDRIVERS_append_intel-corei7-64 = ",i965" diff --git a/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend new file mode 100644 index 000000000..3d5903d85 --- /dev/null +++ b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)} diff --git a/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc new file mode 100644 index 000000000..9aaea5f69 --- /dev/null +++ b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc @@ -0,0 +1,3 @@ +RDEPENDS_${PN}_append_qemux86 = " mesa-megadriver" +RDEPENDS_${PN}_append_qemux86-64 = " mesa-megadriver" +RDEPENDS_${PN}_append_intel-corei7-64 = " mesa-megadriver" diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend index e97b8f9d1..3d5903d85 100644 --- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend @@ -1,17 +1 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux-yocto:" - -# Extra configuration options for the QEMU kernel -SRC_URI += "file://hciattach.cfg \ - file://virtio.cfg \ - " - -# Enable some things on qemuarm64 so MOST drivers will build and load. -SRC_URI_append_qemuarm64 = " file://most_deps.cfg" - -# Configuration for using the virt machine (and not versatilepb) -SRC_URI_append_qemuarm = " file://qemuarm.cfg" - -# Build a generic v7 kernel instead of the arm926j one that upstream -# qemuarm defaults to. -KBUILD_DEFCONFIG_qemuarm = "multi_v7_defconfig" -KCONFIG_MODE = "--alldefconfig" +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)} diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_agl.inc b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_agl.inc new file mode 100644 index 000000000..30e656b17 --- /dev/null +++ b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_agl.inc @@ -0,0 +1,21 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-yocto:" + + +require recipes-kernel/linux/linux-agl.inc + +# Extra configuration options for the QEMU kernel +SRC_URI += "file://hciattach.cfg \ + file://virtio.cfg \ + " + +# Enable some things on qemuarm64 so MOST drivers will build and load. +SRC_URI_append_qemuarm64 = " file://most_deps.cfg" + +# Configuration for using the virt machine (and not versatilepb) +SRC_URI_append_qemuarm = " file://qemuarm.cfg" + +# Build a generic v7 kernel instead of the arm926j one that upstream +# qemuarm defaults to. +KBUILD_DEFCONFIG_qemuarm = "multi_v7_defconfig" +KCONFIG_MODE = "--alldefconfig" + diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend index f78e0b5eb..238dd1643 100644 --- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend +++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend @@ -20,7 +20,7 @@ CMDLINE_append = ' ${@bb.utils.contains('AGL_XEN_WANTED','1','modprobe.blacklist CMDLINE_append = " usbhid.mousepoll=0" # Add options to allow CMA to operate -CMDLINE_append = ' ${@oe.utils.conditional("ENABLE_CMA", "1", "coherent_pool=6M smsc95xx.turbo_mode=N", "", d)}' +CMDLINE_append = '${@oe.utils.conditional("ENABLE_CMA", "1", " coherent_pool=6M smsc95xx.turbo_mode=N", "", d)}' KERNEL_MODULE_AUTOLOAD += "snd-bcm2835" KERNEL_MODULE_AUTOLOAD += "hid-multitouch" diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch deleted file mode 100644 index 5172fdd3a..000000000 --- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch +++ /dev/null @@ -1,41 +0,0 @@ -From ebb26338d0c2f436a86fd4d7cb8d723a90d6a369 Mon Sep 17 00:00:00 2001 -From: Anton Gerasimov -Date: Thu, 15 Sep 2016 17:52:41 +0200 -Subject: [PATCH 1/2] Set up environment for OSTree integration - ---- - include/configs/qemu-x86.h | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/include/configs/qemu-x86.h b/include/configs/qemu-x86.h -index 78c296f..79df455 100644 ---- a/include/configs/qemu-x86.h -+++ b/include/configs/qemu-x86.h -@@ -74,4 +74,24 @@ - #undef CONFIG_ENV_IS_IN_SPI_FLASH - #define CONFIG_ENV_IS_NOWHERE - -+#undef CONFIG_BOOTARGS -+#define CONFIG_BOOTARGS "root=/dev/hda2 console=ttyS0" -+ -+#undef CONFIG_BOOTDELAY -+#define CONFIG_BOOTDELAY 3 -+ -+#undef CONFIG_BOOTCOMMAND -+#define CONFIG_BOOTCOMMAND "run loadenv;" \ -+ "setenv bootargs $bootargs\" console=ttyS0 root=/dev/ram0 rw rootfstype=ext4 rootwait rootdelay=2 ostree_root=/dev/hda ramdisk_size=16384 \";" \ -+ "ext2load ide 0 $loadaddr \"/boot\"$kernel_image;" \ -+ "ext2load ide 0 $ramdiskaddr \"/boot\"$ramdisk_image;" \ -+ "zboot $loadaddr - $ramdiskaddr $filesize" -+ -+#undef CONFIG_EXTRA_ENV_SETTINGS -+#define CONFIG_EXTRA_ENV_SETTINGS "kernel_image=/bzImage\0" \ -+ "ramdisk_image=/initrd\0" \ -+ "ramdiskaddr=0x4000000\0" \ -+ "bootdelay=3\0" \ -+ "loadenv=if ext2load ide 0 $loadaddr /boot/loader/uEnv.txt; then env import -t $loadaddr $filesize; fi;" -+ - #endif /* __CONFIG_H */ --- -2.9.3 - diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch deleted file mode 100644 index df1f786c6..000000000 --- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch +++ /dev/null @@ -1,86 +0,0 @@ -From ba619c7ec7820e80d1b5b520440fdb81c31c0baf Mon Sep 17 00:00:00 2001 -From: Ronan Le Martret -Date: Fri, 14 Oct 2016 09:03:11 +0200 -Subject: [PATCH] fix gcc6 build - -Signed-off-by: ronan ---- - include/linux/compiler-gcc6.h | 66 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 66 insertions(+) - create mode 100644 include/linux/compiler-gcc6.h - -diff --git a/include/linux/compiler-gcc6.h b/include/linux/compiler-gcc6.h -new file mode 100644 -index 0000000..a3d00d8 ---- /dev/null -+++ b/include/linux/compiler-gcc6.h -@@ -0,0 +1,66 @@ -+#ifndef __LINUX_COMPILER_H -+#error "Please don't include directly, include instead." -+#endif -+ -+#define __used __attribute__((__used__)) -+#define __must_check __attribute__((warn_unused_result)) -+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) -+ -+/* Mark functions as cold. gcc will assume any path leading to a call -+ to them will be unlikely. This means a lot of manual unlikely()s -+ are unnecessary now for any paths leading to the usual suspects -+ like BUG(), printk(), panic() etc. [but let's keep them for now for -+ older compilers] -+ -+ Early snapshots of gcc 4.3 don't support this and we can't detect this -+ in the preprocessor, but we can live with this because they're unreleased. -+ Maketime probing would be overkill here. -+ -+ gcc also has a __attribute__((__hot__)) to move hot functions into -+ a special section, but I don't see any sense in this right now in -+ the kernel context */ -+#define __cold __attribute__((__cold__)) -+ -+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) -+ -+#ifndef __CHECKER__ -+# define __compiletime_warning(message) __attribute__((warning(message))) -+# define __compiletime_error(message) __attribute__((error(message))) -+#endif /* __CHECKER__ */ -+ -+/* -+ * Mark a position in code as unreachable. This can be used to -+ * suppress control flow warnings after asm blocks that transfer -+ * control elsewhere. -+ * -+ * Early snapshots of gcc 4.5 don't support this and we can't detect -+ * this in the preprocessor, but we can live with this because they're -+ * unreleased. Really, we need to have autoconf for the kernel. -+ */ -+#define unreachable() __builtin_unreachable() -+ -+/* Mark a function definition as prohibited from being cloned. */ -+#define __noclone __attribute__((__noclone__)) -+ -+/* -+ * Tell the optimizer that something else uses this function or variable. -+ */ -+#define __visible __attribute__((externally_visible)) -+ -+/* -+ * GCC 'asm goto' miscompiles certain code sequences: -+ * -+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 -+ * -+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. -+ * Fixed in GCC 4.8.2 and later versions. -+ * -+ * (asm goto is automatically volatile - the naming reflects this.) -+ */ -+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) -+ -+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP -+#define __HAVE_BUILTIN_BSWAP32__ -+#define __HAVE_BUILTIN_BSWAP64__ -+#define __HAVE_BUILTIN_BSWAP16__ -+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ --- -2.6.6 - diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch deleted file mode 100644 index 7540b7467..000000000 --- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch +++ /dev/null @@ -1,138 +0,0 @@ -From ab0d7e270d89f6eb99582197d2d58bf60c9c3d26 Mon Sep 17 00:00:00 2001 -From: Anton Gerasimov -Date: Thu, 15 Sep 2016 16:49:32 +0200 -Subject: [PATCH 2/2] Replace wraps with built-in code to remove dependency on - multilib - ---- - arch/x86/config.mk | 2 -- - arch/x86/lib/gcc.c | 104 ++++++++++++++++++++++++++++++++++++++++++++--------- - 2 files changed, 87 insertions(+), 19 deletions(-) - -diff --git a/arch/x86/config.mk b/arch/x86/config.mk -index 999143e..139576e 100644 ---- a/arch/x86/config.mk -+++ b/arch/x86/config.mk -@@ -22,5 +22,3 @@ PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden - PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions -m elf_i386 - - LDFLAGS_FINAL += --gc-sections -pie --LDFLAGS_FINAL += --wrap=__divdi3 --wrap=__udivdi3 --LDFLAGS_FINAL += --wrap=__moddi3 --wrap=__umoddi3 -diff --git a/arch/x86/lib/gcc.c b/arch/x86/lib/gcc.c -index 497ad75..c321b11 100644 ---- a/arch/x86/lib/gcc.c -+++ b/arch/x86/lib/gcc.c -@@ -19,22 +19,92 @@ - - #ifdef __GNUC__ - --/* -- * GCC's libgcc handling is quite broken. While the libgcc functions -- * are always regparm(0) the code that calls them uses whatever the -- * compiler call specifies. Therefore we need a wrapper around those -- * functions. See gcc bug PR41055 for more information. -- */ --#define WRAP_LIBGCC_CALL(type, name) \ -- type __normal_##name(type a, type b) __attribute__((regparm(0))); \ -- type __wrap_##name(type a, type b); \ -- type __attribute__((no_instrument_function)) \ -- __wrap_##name(type a, type b) \ -- { return __normal_##name(a, b); } -- --WRAP_LIBGCC_CALL(long long, __divdi3) --WRAP_LIBGCC_CALL(unsigned long long, __udivdi3) --WRAP_LIBGCC_CALL(long long, __moddi3) --WRAP_LIBGCC_CALL(unsigned long long, __umoddi3) -+#include -+#include -+ -+uint64_t __udivmoddi4 ( uint64_t num, -+ uint64_t den, -+ uint64_t *rem_p ) -+{ -+ uint64_t quot = 0, qbit = 1; -+ -+ if ( den == 0 ) { -+ return 1/((unsigned)den); /* Intentional divide by zero, without -+ triggering a compiler warning which -+ would abort the build */ -+ } -+ -+ /* Left-justify denominator and count shift */ -+ while ( (int64_t)den >= 0 ) { -+ den <<= 1; -+ qbit <<= 1; -+ } -+ -+ while ( qbit ) { -+ if ( den <= num ) { -+ num -= den; -+ quot += qbit; -+ } -+ den >>= 1; -+ qbit >>= 1; -+ } -+ -+ if ( rem_p ) -+ *rem_p = num; -+ -+ return quot; -+} -+uint64_t __udivdi3( uint64_t num, uint64_t den ) -+{ -+ return __udivmoddi4(num, den, NULL); -+} -+ -+uint64_t __umoddi3 ( uint64_t num, uint64_t den ) -+{ -+ uint64_t v; -+ -+ (void) __udivmoddi4(num, den, &v); -+ return v; -+} -+ -+int64_t __divmoddi4 ( int64_t num, -+ int64_t den, -+ int64_t* rem_p ) -+{ -+ int minus = 0; -+ int64_t v; -+ -+ if ( num < 0 ) { -+ num = -num; -+ minus = 1; -+ } -+ if ( den < 0 ) { -+ den = -den; -+ minus ^= 1; -+ } -+ -+ v = __udivmoddi4(num, den, (uint64_t *)rem_p); -+ if ( minus ) { -+ v = -v; -+ if ( rem_p ) -+ *rem_p = -(*rem_p); -+ } -+ -+ return v; -+} -+ -+ -+int64_t __moddi3 (int64_t num, int64_t den) -+{ -+ int64_t v; -+ -+ (void) __divmoddi4(num, den, &v); -+ return v; -+} -+ -+int64_t __divdi3(int64_t num, int64_t den) -+{ -+ return __divmoddi4(num, den, NULL); -+} - - #endif --- -2.9.3 - diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch deleted file mode 100644 index fc7933ea0..000000000 --- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch +++ /dev/null @@ -1,101 +0,0 @@ -From eea58226f0b604d3047c495985197113838d3a7a Mon Sep 17 00:00:00 2001 -From: Trevor Woerner -Date: Tue, 20 Jun 2017 13:25:20 -0400 -Subject: [PATCH] fix build for gcc7 - -| In file included from .../include/linux/compiler.h:54:0, -| from .../include/uapi/linux/stddef.h:1, -| from .../include/linux/stddef.h:4, -| from .../include/uapi/linux/posix_types.h:4, -| from .../include/uapi/linux/types.h:13, -| from .../include/linux/types.h:5, -| from .../include/linux/mod_devicetable.h:11, -| from .../scripts/mod/devicetable-offsets.c:2: -| .../include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h: No such file or directory -| #include gcc_header(__GNUC__) - -Upstream-Status: Pending - -Signed-off-by: Trevor Woerner -Signed-off-by: Fabio Berton -Signed-off-by: Leon Anavi ---- - include/linux/compiler-gcc7.h | 66 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 66 insertions(+) - create mode 100644 include/linux/compiler-gcc7.h - -diff --git a/include/linux/compiler-gcc7.h b/include/linux/compiler-gcc7.h -new file mode 100644 -index 0000000..cdd1cc2 ---- /dev/null -+++ b/include/linux/compiler-gcc7.h -@@ -0,0 +1,66 @@ -+#ifndef __LINUX_COMPILER_H -+#error "Please don't include directly, include instead." -+#endif -+ -+#define __used __attribute__((__used__)) -+#define __must_check __attribute__((warn_unused_result)) -+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) -+ -+/* Mark functions as cold. gcc will assume any path leading to a call -+ to them will be unlikely. This means a lot of manual unlikely()s -+ are unnecessary now for any paths leading to the usual suspects -+ like BUG(), printk(), panic() etc. [but let's keep them for now for -+ older compilers] -+ -+ Early snapshots of gcc 4.3 don't support this and we can't detect this -+ in the preprocessor, but we can live with this because they're unreleased. -+ Maketime probing would be overkill here. -+ -+ gcc also has a __attribute__((__hot__)) to move hot functions into -+ a special section, but I don't see any sense in this right now in -+ the kernel context */ -+#define __cold __attribute__((__cold__)) -+ -+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) -+ -+#ifndef __CHECKER__ -+# define __compiletime_warning(message) __attribute__((warning(message))) -+# define __compiletime_error(message) __attribute__((error(message))) -+#endif /* __CHECKER__ */ -+ -+/* -+ * Mark a position in code as unreachable. This can be used to -+ * suppress control flow warnings after asm blocks that transfer -+ * control elsewhere. -+ * -+ * Early snapshots of gcc 4.5 don't support this and we can't detect -+ * this in the preprocessor, but we can live with this because they're -+ * unreleased. Really, we need to have autoconf for the kernel. -+ */ -+#define unreachable() __builtin_unreachable() -+ -+/* Mark a function definition as prohibited from being cloned. */ -+#define __noclone __attribute__((__noclone__)) -+ -+/* -+ * Tell the optimizer that something else uses this function or variable. -+ */ -+#define __visible __attribute__((externally_visible)) -+ -+/* -+ * GCC 'asm goto' miscompiles certain code sequences: -+ * -+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 -+ * -+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. -+ * Fixed in GCC 4.8.2 and later versions. -+ * -+ * (asm goto is automatically volatile - the naming reflects this.) -+ */ -+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) -+ -+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP -+#define __HAVE_BUILTIN_BSWAP32__ -+#define __HAVE_BUILTIN_BSWAP64__ -+#define __HAVE_BUILTIN_BSWAP16__ -+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ --- -2.7.4 - diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb deleted file mode 100644 index 7ef3cacd4..000000000 --- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb +++ /dev/null @@ -1,29 +0,0 @@ -include recipes-bsp/u-boot/u-boot.inc -DEPENDS += "dtc-native" - -LICENSE = "GPLv2+" -LIC_FILES_CHKSUM = "file://Licenses/README;md5=0507cd7da8e7ad6d6701926ec9b84c95" - -# This revision corresponds to the tag "v2015.07" -# We use the revision in order to avoid having to fetch it from the -# repo during parse -SRCREV = "baba2f57e8f4ed3fa67fe213d22da0de5e00f204" - -SRC_URI = "\ - git://git.denx.de/u-boot.git;branch=master \ - file://0001-Set-up-environment-for-OSTree-integration.patch \ - file://0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch \ - file://0001-fixup-build-with-gcc6.patch \ - file://0002-fixup-build-with-gcc7.patch \ -" -S = "${WORKDIR}/git" - -PV = "v2015.07+git${SRCPV}" - -EXTRA_OEMAKE_append = " KCFLAGS=-fgnu89-inline " -EXTRA_OEMAKE_append_qemux86 = " BUILD_ROM=y" -EXTRA_OEMAKE_append_qemux86-64 = " BUILD_ROM=y" - -UBOOT_SUFFIX = "bin" -UBOOT_SUFFIX_qemux86 = "rom" -UBOOT_SUFFIX_qemux86-64 = "rom" diff --git a/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch b/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch deleted file mode 100644 index 2ad367c8d..000000000 --- a/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/modules/videoio/src/cap_v4l.cpp b/modules/videoio/src/cap_v4l.cpp -index c36a619a56..0040e4574e 100644 ---- a/modules/videoio/src/cap_v4l.cpp -+++ b/modules/videoio/src/cap_v4l.cpp -@@ -256,7 +256,7 @@ make & enjoy! - #define DEFAULT_V4L_HEIGHT 480 - #define DEFAULT_V4L_FPS 30 - --#define MAX_CAMERAS 8 -+#define MAX_CAMERAS 16 - - // default and maximum number of V4L buffers, not including last, 'special' buffer - #define MAX_V4L_BUFFERS 10 diff --git a/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend b/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend deleted file mode 100644 index 8a68b0641..000000000 --- a/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += " \ - file://0004-Change-Max-Device-Count-To-16.patch \ - " diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb deleted file mode 100644 index 14fbd0273..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb +++ /dev/null @@ -1,28 +0,0 @@ -SUMMARY = "Startup script and systemd unit file for the Weston Wayland compositor" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" - -SRC_URI = "file://core.cfg \ - file://shell.cfg \ - file://hdmi-a-1-270.cfg \ - " - -S = "${WORKDIR}" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -do_compile() { - # Put all of our cfg files together. - rm -f ${WORKDIR}/weston.ini - for F in ${WORKDIR}/*.cfg; do - cat $F >> ${WORKDIR}/weston.ini - echo >> ${WORKDIR}/weston.ini - done - sed -i -e '$ d' ${WORKDIR}/weston.ini -} - -do_install_append() { - WESTON_INI_CONFIG=${sysconfdir}/xdg/weston - install -d ${D}${WESTON_INI_CONFIG} - install -m 0644 ${WORKDIR}/weston.ini ${D}${WESTON_INI_CONFIG}/weston.ini -} diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend deleted file mode 100644 index 671fa171f..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -SRC_URI += "${@bb.utils.contains("DISTRO_FEATURES", "weston-remoting", "file://remote-output.cfg", "",d)}" diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg deleted file mode 100644 index 90774ed79..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[core] -backend=drm-backend.so -require-input=false -modules=systemd-notify.so diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg deleted file mode 100644 index dffc2b6dd..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# A display is connected to HDMI-A-1 and needs to be rotated 270 degrees -# to have a proper orientation of the homescreen. For example the various sizes -# of the GeChic display or the Dell display. -[output] -name=HDMI-A-1 -transform=270 diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg deleted file mode 100644 index 88a692a1b..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees -# to have a proper orientation of the homescreen. For example, the 'eGalax' -# display used in some instances. -[output] -name=HDMI-A-1 -transform=90 diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg deleted file mode 100644 index f69a2e096..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[remote-output] -name=remote-1 -mode=640x720@30 -host=192.168.20.99 -port=5005 diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg deleted file mode 100644 index 975e539e6..000000000 --- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[shell] -locking=true -panel-position=none diff --git a/meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend b/meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend deleted file mode 100644 index 52fe69d24..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend +++ /dev/null @@ -1,6 +0,0 @@ -# fix for kernel using hardcoded awk while our filesystem only provides gawk -do_install_append() { - # enforce all scripts to use /usr/bin/awk . This fixes the rpm dependency failure on install of kernel-devsrc - cd ${D} || true - ( for i in `grep -srI "\!/bin/awk" | cut -d":" -f1 ` ; do sed -i -e "s#\!/bin/awk#\!/usr/bin/env awk#g" $i ; done ) || true -} \ No newline at end of file diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch b/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch deleted file mode 100644 index c595dfdf5..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 63f5acdf097b7baca8d0f7056a037f8811b48aaa Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Tue, 27 Feb 2018 17:06:21 +0100 -Subject: [PATCH] Smack: Handle CGROUP2 in the same way that CGROUP -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The new file system CGROUP2 isn't actually handled -by smack. This changes makes Smack treat equally -CGROUP and CGROUP2 items. - -Signed-off-by: José Bollo ---- - security/smack/smack_lsm.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c -index 03fdecba93bb..5d77ed04422c 100644 ---- a/security/smack/smack_lsm.c -+++ b/security/smack/smack_lsm.c -@@ -3431,6 +3431,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) - if (opt_dentry->d_parent == opt_dentry) { - switch (sbp->s_magic) { - case CGROUP_SUPER_MAGIC: -+ case CGROUP2_SUPER_MAGIC: - /* - * The cgroup filesystem is never mounted, - * so there's no opportunity to set the mount -@@ -3474,6 +3475,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) - switch (sbp->s_magic) { - case SMACK_MAGIC: - case CGROUP_SUPER_MAGIC: -+ case CGROUP2_SUPER_MAGIC: - /* - * Casey says that it's a little embarrassing - * that the smack file system doesn't do --- -2.14.3 - diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch b/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch deleted file mode 100644 index 4100bb8fd..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch +++ /dev/null @@ -1,109 +0,0 @@ -Smack: Privilege check on key operations - -Operations on key objects are subjected to Smack policy -even if the process is privileged. This is inconsistent -with the general behavior of Smack and may cause issues -with authentication by privileged daemons. This patch -allows processes with CAP_MAC_OVERRIDE to access keys -even if the Smack rules indicate otherwise. - -Reported-by: Jose Bollo -Signed-off-by: Casey Schaufler ---- - security/smack/smack.h | 1 + - security/smack/smack_access.c | 40 +++++++++++++++++++++++++++++----------- - security/smack/smack_lsm.c | 4 ++++ - 3 files changed, 34 insertions(+), 11 deletions(-) - -diff --git a/security/smack/smack.h b/security/smack/smack.h -index 6a71fc7..f7db791 100644 ---- a/security/smack/smack.h -+++ b/security/smack/smack.h -@@ -321,6 +321,7 @@ struct smack_known *smk_import_entry(const char *, int); - void smk_insert_entry(struct smack_known *skp); - struct smack_known *smk_find_entry(const char *); - bool smack_privileged(int cap); -+bool smack_privileged_cred(int cap, const struct cred *cred); - void smk_destroy_label_list(struct list_head *list); - - /* -diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c -index 1a30041..141ffac 100644 ---- a/security/smack/smack_access.c -+++ b/security/smack/smack_access.c -@@ -623,26 +623,24 @@ struct smack_known *smack_from_secid(const u32 secid) - LIST_HEAD(smack_onlycap_list); - DEFINE_MUTEX(smack_onlycap_lock); - --/* -+/** -+ * smack_privileged_cred - are all privilege requirements met by cred -+ * @cap: The requested capability -+ * @cred: the credential to use -+ * - * Is the task privileged and allowed to be privileged - * by the onlycap rule. - * - * Returns true if the task is allowed to be privileged, false if it's not. - */ --bool smack_privileged(int cap) -+bool smack_privileged_cred(int cap, const struct cred *cred) - { -- struct smack_known *skp = smk_of_current(); -+ struct task_smack *tsp = cred->security; -+ struct smack_known *skp = tsp->smk_task; - struct smack_known_list_elem *sklep; - int rc; - -- /* -- * All kernel tasks are privileged -- */ -- if (unlikely(current->flags & PF_KTHREAD)) -- return true; -- -- rc = cap_capable(current_cred(), &init_user_ns, cap, -- SECURITY_CAP_AUDIT); -+ rc = cap_capable(cred, &init_user_ns, cap, SECURITY_CAP_AUDIT); - if (rc) - return false; - -@@ -662,3 +660,23 @@ bool smack_privileged(int cap) - - return false; - } -+ -+/** -+ * smack_privileged - are all privilege requirements met -+ * @cap: The requested capability -+ * -+ * Is the task privileged and allowed to be privileged -+ * by the onlycap rule. -+ * -+ * Returns true if the task is allowed to be privileged, false if it's not. -+ */ -+bool smack_privileged(int cap) -+{ -+ /* -+ * All kernel tasks are privileged -+ */ -+ if (unlikely(current->flags & PF_KTHREAD)) -+ return true; -+ -+ return smack_privileged_cred(cap, current_cred()); -+} -diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c -index 30f2c3d..03fdecb 100644 ---- a/security/smack/smack_lsm.c -+++ b/security/smack/smack_lsm.c -@@ -4369,6 +4369,10 @@ static int smack_key_permission(key_ref_t key_ref, - */ - if (tkp == NULL) - return -EACCES; -+ -+ if (smack_privileged_cred(CAP_MAC_OVERRIDE, cred)) -+ return 0; -+ - #ifdef CONFIG_AUDIT - smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_KEY); - ad.a.u.key_struct.key = keyp->serial; - diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch b/meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch deleted file mode 100644 index 7c34fb306..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 17d0075d95b5087d5df553444cca390fa479bad9 Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Tue, 10 Mar 2020 22:27:28 -0700 -Subject: [PATCH] net: sch_generic: add if_afp.h header to get ARPHRD_CAN macro - -Signed-off-by: Matt Ranostay ---- - net/sched/sch_generic.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index bf8c81e07c70..1845ef8c7dbd 100644 ---- a/net/sched/sch_generic.c -+++ b/net/sched/sch_generic.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include - #include - #include --- -2.25.0 - diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc b/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc deleted file mode 100644 index 6d5c67021..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc +++ /dev/null @@ -1,14 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.14:" - -#------------------------------------------------------------------------- -# smack patches for kernels keys - -SRC_URI_append_with-lsm-smack = "\ - file://Smack-Privilege-check-on-key-operations.patch \ - file://Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch \ - " - -SRC_URI_append = "\ - file://net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch \ - file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \ - " diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc b/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc deleted file mode 100644 index da4e0c067..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc +++ /dev/null @@ -1,5 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.19:" - -SRC_URI_append = "\ - file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \ - " diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc b/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc deleted file mode 100644 index cd960ef6d..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc +++ /dev/null @@ -1,132 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" - -DEPENDS += "kern-tools-native" - -# returns all the elements from the src uri that are .cfg files -def find_cfgs(d): - sources=src_patches(d, True) - sources_list=[] - for s in sources: - if s.endswith('.cfg'): - sources_list.append(s) - - return sources_list - -do_configure_append () { - [ ! -f .config ] && cp -a ${WORKDIR}/defconfig .config - # Need to clear CONFIG_LSM for 5.1+ kernels to ensure it'll get - # regenerated to reflect configuration changes (e.g. SMACK). - sed -i '/^CONFIG_LSM/d' .config - merge_config.sh -m .config ${@" ".join(find_cfgs(d))} - yes '' | make oldconfig -} - -# Extra configuration options for the AGL kernel -SRC_URI_append = "\ - file://can-bus.cfg \ - file://usb.cfg \ - file://uvc.cfg \ - file://joystick.cfg \ - file://fanotify.cfg \ - file://uinput.cfg \ - file://hid.cfg \ - file://drm.cfg \ - file://btusb.cfg \ - file://usbaudio.cfg \ - file://usbmodem.cfg \ - file://i2c-led.cfg \ - file://nfc.cfg \ - file://overlayfs.cfg \ - " - -SRC_URI_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','file://xen_domu.cfg','',d)}" - -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/can-bus.cfg" -# Enable support for usb video class for usb camera devices -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uvc.cfg" -# Enable support for joystick devices -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/joystick.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/fanotify.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uinput.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/hid.cfg" -# Enable DRM support for graphics -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/drm.cfg" -# Enable Bluetooth USB devices -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/btusb.cfg" -# Enable USB audio devices -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/usbaudio.cfg" -# Enable I2C and LED for demontrator -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/i2c-led.cfg" -# Enable NFC devices -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/nfc.cfg" -# Enable overlayfs filesystem support -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/overlayfs.cfg" -# Enable XEN support of the guest -KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','${WORKDIR}/xen_domu.cfg','',d)}" - -# Enable required features for the agl-netboot feature -SRC_URI_append_netboot = " file://nbd.cfg \ - file://ramdisk.cfg" -KERNEL_CONFIG_FRAGMENTS_append_netboot = " ${WORKDIR}/nbd.cfg ${WORKDIR}/ramdisk.cfg" - -# Enable support for TP-Link TL-W722N USB Wifi adapter (rev 1 and 2) -SRC_URI_append = " file://wifi.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/wifi.cfg" - -# Enable support for RTLSDR -SRC_URI_append = " file://rtl_sdr.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtl_sdr.cfg" - -# Additional drivers for virtual machines -# OVERRIDES save us some c'n'p below ... -OVERRIDES_prepend_qemux86 = "virtualmachine:" -OVERRIDES_prepend_qemux86-64 = "virtualmachine:" -SRC_URI_append_virtualmachine = " file://vbox-vmware-sata.cfg" -KERNEL_CONFIG_FRAGMENTS_append_virtualmachine = " ${WORKDIR}/vbox-vmware-sata.cfg" - -# Extra configuration for using qemux86-64 image on physical hardware -SRC_URI_append_qemux86-64 = "\ - file://x86-extra-graphic-devices.cfg \ - file://x86-net-devices.cfg \ - file://x86-security-tpm.cfg \ - file://x86-usb-devices.cfg \ - file://x86-upsquare.cfg \ -" -KERNEL_CONFIG_FRAGMENTS_append_qemux86-64 = "\ - ${WORKDIR}/x86-extra-graphic-devices.cfg \ - ${WORKDIR}/x86-net-devices.cfg \ - ${WORKDIR}/x86-security-tpm.cfg \ - ${WORKDIR}/x86-usb-devices.cfg \ - ${WORKDIR}/x86-upsquare.cfg \ -" - -# Enable support for smack -KERNEL_CONFIG_FRAGMENTS_append_with-lsm-smack = "\ - ${WORKDIR}/audit.cfg \ - ${WORKDIR}/smack.cfg \ - ${WORKDIR}/smack-default-lsm.cfg \ -" - -# ALSA support and other sound related configuration -SRC_URI_append = " file://sound.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/sound.cfg" - -# add hda audio for qemu -SRC_URI_append_qemuall = " file://sound-hda.cfg" -KERNEL_CONFIG_FRAGMENTS_append_qemuall = " ${WORKDIR}/sound-hda.cfg" - -# iio-dummy-device support for test iiodevice -SRC_URI_append = " file://iiodevice.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/iiodevice.cfg" - -# external rtc support via e.g. http://wiki.seeedstudio.com/Grove-RTC/ -SRC_URI_append = " file://rtc.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtc.cfg" - -# netfilter options -SRC_URI_append = " file://netfilter.cfg" -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/netfilter.cfg" - -# Enable support for SystemTap -SRC_URI_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'file://systemtap.cfg', '', d)}" -KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${WORKDIR}/systemtap.cfg', '', d)}" diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend deleted file mode 100644 index 386112024..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -require linux-agl.inc diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg deleted file mode 100644 index dd7c460bb..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg +++ /dev/null @@ -1,37 +0,0 @@ -CONFIG_BT=m -CONFIG_BT_BREDR=y -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m -CONFIG_BT_HS=y -CONFIG_BT_LE=y -CONFIG_BT_LEDS=y -# CONFIG_BT_SELFTEST is not set -CONFIG_BT_DEBUGFS=y - -# -# Bluetooth device drivers -# -CONFIG_BT_INTEL=m -CONFIG_BT_BCM=m -CONFIG_BT_RTL=m -CONFIG_BT_HCIBTUSB=m -CONFIG_BT_HCIBTUSB_BCM=y -CONFIG_BT_HCIBTUSB_RTL=y -# CONFIG_BT_HCIBTSDIO is not set -# CONFIG_BT_HCIUART is not set -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBFUSB=m -# CONFIG_BT_HCIVHCI is not set -# CONFIG_BT_MRVL is not set -# CONFIG_BT_ATH3K is not set -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CMAC=m - -# -# Bluetooth AVRCP support -# -CONFIG_INPUT_UINPUT=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg deleted file mode 100644 index 2f24b7607..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg +++ /dev/null @@ -1,42 +0,0 @@ -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -# CONFIG_TASK_XACCT is not set -CONFIG_USER_RETURN_NOTIFIER=y -CONFIG_PREEMPT_NOTIFIERS=y -CONFIG_CAN=m -CONFIG_CAN_RAW=m -CONFIG_CAN_BCM=m -CONFIG_CAN_GW=m -CONFIG_CAN_J1939=m - -# -# CAN Device Drivers -# -CONFIG_CAN_C_CAN=m -CONFIG_CAN_C_CAN_PLATFORM=m -CONFIG_CAN_VCAN=m -CONFIG_CAN_SLCAN=m -CONFIG_CAN_DEV=m -CONFIG_CAN_CALC_BITTIMING=y -# CONFIG_CAN_LEDS is not set -# CONFIG_CAN_SJA1000 is not set -# CONFIG_CAN_M_CAN is not set -# CONFIG_CAN_CC770 is not set - -# -# CAN SPI interfaces -# -CONFIG_CAN_MCP251X=m - -# -# CAN USB interfaces -# -# CONFIG_CAN_EMS_USB is not set -CONFIG_CAN_ESD_USB2=m -CONFIG_CAN_GS_USB=m -CONFIG_CAN_KVASER_USB=m -CONFIG_CAN_PEAK_USB=m -CONFIG_CAN_8DEV_USB=m -CONFIG_CAN_MCBA_USB=m -# CONFIG_CAN_SOFTING is not set -# CONFIG_CAN_DEBUG_DEVICES is not set diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg deleted file mode 100644 index 65fe71cd0..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_DRM_BOCHS=y -CONFIG_DRM_VIRTIO_GPU=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg deleted file mode 100644 index de5dd8d31..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Enable the fanotify API (notification/interception of FS events) -CONFIG_FANOTIFY=y -CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg deleted file mode 100644 index 327c753ae..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg +++ /dev/null @@ -1 +0,0 @@ -CONFIG_HID_MULTITOUCH=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg deleted file mode 100644 index 248b5118a..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# enabling I2C and LED for demonstrator -CONFIG_I2C_TINY_USB=y -CONFIG_LEDS_BLINKM=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg deleted file mode 100644 index c5b8ff35e..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg +++ /dev/null @@ -1,26 +0,0 @@ -# -# Extcon Device Drivers -# -CONFIG_IIO=y -CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=y -CONFIG_IIO_KFIFO_BUF=y -CONFIG_IIO_CONFIGFS=m -CONFIG_IIO_TRIGGER=y -CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 -CONFIG_IIO_SW_DEVICE=m -CONFIG_IIO_SW_TRIGGER=m - -# -# IIO dummy driver -# -CONFIG_IIO_DUMMY_EVGEN=m -CONFIG_IIO_SIMPLE_DUMMY=m -CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y -CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y - -# -# Triggers - standalone -# -CONFIG_IIO_HRTIMER_TRIGGER=m -CONFIG_IIO_TRIGGERED_BUFFER=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg deleted file mode 100644 index 2201bcb00..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg +++ /dev/null @@ -1,9 +0,0 @@ -CONFIG_INPUT_JOYDEV=y -CONFIG_INPUT_JOYSTICK=y -CONFIG_JOYSTICK_ADI=y -CONFIG_GAMEPORT=y -CONFIG_HID_LOGITECH=y -CONFIG_LOGIWHEELS_FF=y -CONFIG_HID_LOGITECH_HIDPP=y -CONFIG_LOGITECH_FF=y -CONFIG_LOGIG940_FF=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg deleted file mode 100644 index e5d897556..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_BLK_DEV_NBD=y -# for CI use enable CONFIG_VETH=y -CONFIG_VETH=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch b/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch deleted file mode 100644 index 37ace5a58..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 546b85bb0aadb5a928b49b53dc02911996169c0b Mon Sep 17 00:00:00 2001 -From: Vincent Prince -Date: Wed, 23 Oct 2019 15:44:20 +0200 -Subject: [PATCH] net: sch_generic: Use pfifo_fast as fallback scheduler for - CAN hardware - -There is networking hardware that isn't based on Ethernet for layers 1 and 2. - -For example CAN. - -CAN is a multi-master serial bus standard for connecting Electronic Control -Units [ECUs] also known as nodes. A frame on the CAN bus carries up to 8 bytes -of payload. Frame corruption is detected by a CRC. However frame loss due to -corruption is possible, but a quite unusual phenomenon. - -While fq_codel works great for TCP/IP, it doesn't for CAN. There are a lot of -legacy protocols on top of CAN, which are not build with flow control or high -CAN frame drop rates in mind. - -When using fq_codel, as soon as the queue reaches a certain delay based length, -skbs from the head of the queue are silently dropped. Silently meaning that the -user space using a send() or similar syscall doesn't get an error. However -TCP's flow control algorithm will detect dropped packages and adjust the -bandwidth accordingly. - -When using fq_codel and sending raw frames over CAN, which is the common use -case, the user space thinks the package has been sent without problems, because -send() returned without an error. pfifo_fast will drop skbs, if the queue -length exceeds the maximum. But with this scheduler the skbs at the tail are -dropped, an error (-ENOBUFS) is propagated to user space. So that the user -space can slow down the package generation. - -On distributions, where fq_codel is made default via CONFIG_DEFAULT_NET_SCH -during compile time, or set default during runtime with sysctl -net.core.default_qdisc (see [1]), we get a bad user experience. In my test case -with pfifo_fast, I can transfer thousands of million CAN frames without a frame -drop. On the other hand with fq_codel there is more then one lost CAN frame per -thousand frames. - -As pointed out fq_codel is not suited for CAN hardware, so this patch changes -attach_one_default_qdisc() to use pfifo_fast for "ARPHRD_CAN" network devices. - -During transition of a netdev from down to up state the default queuing -discipline is attached by attach_default_qdiscs() with the help of -attach_one_default_qdisc(). This patch modifies attach_one_default_qdisc() to -attach the pfifo_fast (pfifo_fast_ops) if the network device type is -"ARPHRD_CAN". - -[1] https://github.com/systemd/systemd/issues/9194 - -Suggested-by: Marc Kleine-Budde -Signed-off-by: Marc Kleine-Budde -Signed-off-by: Vincent Prince -Acked-by: Dave Taht -Signed-off-by: David S. Miller ---- - net/sched/sch_generic.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index ed5b0e9fd395..4c5dfcb01e00 100644 ---- a/net/sched/sch_generic.c -+++ b/net/sched/sch_generic.c -@@ -1038,6 +1038,8 @@ static void attach_one_default_qdisc(struct net_device *dev, - - if (dev->priv_flags & IFF_NO_QUEUE) - ops = &noqueue_qdisc_ops; -+ else if(dev->type == ARPHRD_CAN) -+ ops = &pfifo_fast_ops; - - qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL); - if (!qdisc) { --- -2.25.0 - diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg deleted file mode 100644 index 34be704c1..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NETFILTER_XT_MATCH_OWNER=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg deleted file mode 100644 index 6d863a075..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg +++ /dev/null @@ -1,34 +0,0 @@ -CONFIG_NFC=m -CONFIG_NFC_DIGITAL=m -CONFIG_NFC_NCI=m -CONFIG_NFC_NCI_SPI=m -CONFIG_NFC_HCI=m -CONFIG_NFC_SHDLC=y -CONFIG_NFC_TRF7970A=m -CONFIG_NFC_MEI_PHY=m -CONFIG_NFC_PORT100=m -CONFIG_NFC_FDP=m -CONFIG_NFC_FDP_I2C=m -CONFIG_NFC_PN544=m -CONFIG_NFC_PN544_I2C=m -CONFIG_NFC_PN544_MEI=m -CONFIG_NFC_PN533=m -CONFIG_NFC_PN533_USB=m -CONFIG_NFC_PN533_I2C=m -CONFIG_NFC_MICROREAD=m -CONFIG_NFC_MICROREAD_I2C=m -CONFIG_NFC_MICROREAD_MEI=m -CONFIG_NFC_MRVL=m -CONFIG_NFC_MRVL_USB=m -CONFIG_NFC_MRVL_I2C=m -CONFIG_NFC_MRVL_SPI=m -CONFIG_NFC_ST21NFCA=m -CONFIG_NFC_ST21NFCA_I2C=m -CONFIG_NFC_ST_NCI=m -CONFIG_NFC_ST_NCI_I2C=m -CONFIG_NFC_ST_NCI_SPI=m -CONFIG_NFC_NXP_NCI=m -CONFIG_NFC_NXP_NCI_I2C=m -CONFIG_NFC_S3FWRN5=m -CONFIG_NFC_S3FWRN5_I2C=m -CONFIG_NFC_ST95HF=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg deleted file mode 100644 index 025118ed6..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_OVERLAY_FS=y -CONFIG_OVERLAY_FS_REDIRECT_DIR=y -CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=n -CONFIG_OVERLAY_FS_INDEX=y -CONFIG_OVERLAY_FS_NFS_EXPORT=n -CONFIG_OVERLAY_FS_XINO_AUTO=y -CONFIG_OVERLAY_FS_METACOPY=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg deleted file mode 100644 index 6e08c25bc..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_CONNECTOR=y -CONFIG_PROC_EVENTS=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg deleted file mode 100644 index 3d44de805..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=65536 diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg deleted file mode 100644 index 2641958a0..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_RTC_CLASS=y -CONFIG_RTC_LIB=y -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -CONFIG_RTC_DRV_DS1307=m -CONFIG_RTC_DRV_DS3232=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg deleted file mode 100644 index d4574700a..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG_MEDIA_USB_SUPPORT=y -CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y -CONFIG_DVB_USB_V2=m -CONFIG_DVB_USB_RTL28XXU=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg deleted file mode 100644 index e8b09aa7c..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg +++ /dev/null @@ -1 +0,0 @@ -CONFIG_SCHED_DEBUG=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg deleted file mode 100644 index 115504c39..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg +++ /dev/null @@ -1,20 +0,0 @@ -# make sure HDA sound modules are on -# this is required for CI tests -CONFIG_SND_HDA_INTEL=m -CONFIG_SND_HDA_GENERIC=m -CONFIG_SND_HDA_CODEC_REALTEK=m -CONFIG_SND_HDA_CODEC_ANALOG=m -CONFIG_SND_HDA_CODEC_SIGMATEL=m -CONFIG_SND_HDA_CODEC_VIA=m -CONFIG_SND_HDA_CODEC_HDMI=m -CONFIG_SND_HDA_CODEC_CIRRUS=m -CONFIG_SND_HDA_CODEC_CONEXANT=m -CONFIG_SND_HDA_CODEC_CA0110=m -CONFIG_SND_HDA_CODEC_CA0132=m -CONFIG_SND_HDA_CODEC_CMEDIA=m -CONFIG_SND_HDA_CODEC_SI3054=m -CONFIG_SND_HDA_RECONFIG=y -CONFIG_SND_HDA_PATCH_LOADER=y - -# enable dummy sound for special cases in CI -CONFIG_SND_DUMMY=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg deleted file mode 100644 index ad34ea680..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_SOUND=y -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -CONFIG_SND_ALOOP=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg deleted file mode 100644 index 4886c27f1..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg +++ /dev/null @@ -1,9 +0,0 @@ -CONFIG_KPROBES=y -CONFIG_UPROBES=y -CONFIG_UPROBE_EVENTS=y -CONFIG_FTRACE=y -CONFIG_KPROBE_EVENTS=y -CONFIG_RELAY=y -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_INFO=y - diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg deleted file mode 100644 index 7996ef1dd..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Enable the User-level Input driver (required by "wayland-fits") -CONFIG_INPUT_MISC=y -CONFIG_INPUT_UINPUT=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg deleted file mode 100644 index 8e9e98ecb..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg +++ /dev/null @@ -1,8 +0,0 @@ -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_ACM=m -CONFIG_CRC_CCITT=y -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_PCI=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg deleted file mode 100644 index 5961f43d3..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg deleted file mode 100644 index 3ded931e5..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_USB_USBNET=m -CONFIG_USB_NET_CDC_MBIM=m -CONFIG_USB_NET_QMI_WWAN=m -CONFIG_USB_SIERRA_NET=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_QUALCOMM=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg deleted file mode 100644 index 7c6556c11..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG_VIDEOBUF2_VMALLOC=y -CONFIG_MEDIA_USB_SUPPORT=y -CONFIG_USB_VIDEO_CLASS=m -CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg deleted file mode 100644 index ce1eca1a7..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg +++ /dev/null @@ -1,19 +0,0 @@ -# enable harddrive driver for vmware/virtualbox -CONFIG_ATA_PIIX=y -CONFIG_SATA_AHCI=y -CONFIG_ATA_SFF=y -CONFIG_ATA_BMDMA=y -CONFIG_ATA_GENERIC=y -CONFIG_ATA_ACPI=y - -# needed for VMWare -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_FUSION=y -CONFIG_FUSION_SPI=y -CONFIG_DRM_VMWGFX=y -CONFIG_DRM_VMWGFX_FBCON=y -CONFIG_VMWARE_BALLOON=m -CONFIG_VMWARE_VMCI=m -CONFIG_VMWARE_VMCI_VSOCKETS=m -CONFIG_SND_ENS1371=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg deleted file mode 100644 index 00c2e06e4..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG_CFG80211=m -CONFIG_MAC80211=m -CONFIG_WLAN_VENDOR_ATH=m -CONFIG_ATH9K_HTC=m -CONFIG_STAGING=y -CONFIG_R8188EU=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg deleted file mode 100644 index d2b64de67..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg +++ /dev/null @@ -1,40 +0,0 @@ -CONFIG_MWIFIEX_PCIE=m -CONFIG_MWIFIEX_USB=m -CONFIG_RSI_91X=m -CONFIG_RSI_DEBUGFS=y -CONFIG_RSI_SDIO=m -CONFIG_RSI_USB=m -CONFIG_DRM_RADEON=m -CONFIG_DRM_RADEON_USERPTR=y -CONFIG_DRM_NOUVEAU=m -CONFIG_NOUVEAU_DEBUG=5 -CONFIG_NOUVEAU_DEBUG_DEFAULT=3 -CONFIG_DRM_NOUVEAU_BACKLIGHT=y -CONFIG_DRM_VGEM=m -CONFIG_DRM_VMWGFX=m -CONFIG_DRM_VMWGFX_FBCON=y -CONFIG_DRM_GMA500=m -CONFIG_DRM_GMA600=y -CONFIG_DRM_GMA3600=y -CONFIG_DRM_UDL=m -CONFIG_FB_DEFERRED_IO=y -CONFIG_FB_BACKLIGHT=y -CONFIG_IRQ_BYPASS_MANAGER=m -CONFIG_ACPI_WMI=m -CONFIG_MXM_WMI=m -CONFIG_SCHED_INFO=y -CONFIG_HAVE_KVM_IRQCHIP=y -CONFIG_HAVE_KVM_IRQFD=y -CONFIG_HAVE_KVM_IRQ_ROUTING=y -CONFIG_HAVE_KVM_EVENTFD=y -CONFIG_KVM_MMIO=y -CONFIG_KVM_ASYNC_PF=y -CONFIG_HAVE_KVM_MSI=y -CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y -CONFIG_KVM_VFIO=y -CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y -CONFIG_KVM_COMPAT=y -CONFIG_HAVE_KVM_IRQ_BYPASS=y -CONFIG_KVM=m -CONFIG_KVM_INTEL=m -CONFIG_CRC7=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg deleted file mode 100644 index 6c5b698a9..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IGB=y -CONFIG_IGB_DCA=y -CONFIG_R8169=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg deleted file mode 100644 index b66b1b9b1..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_TCG_TPM=y -CONFIG_TCG_TIS=y -CONFIG_TCG_CRB=y diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg deleted file mode 100644 index d2bed63fa..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg +++ /dev/null @@ -1,11 +0,0 @@ -CONFIG_X86_INTEL_LPSS=y -CONFIG_EXPERT=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_DW=y -CONFIG_MFD_CORE=y -CONFIG_MFD_INTEL_LPSS=y -CONFIG_MFD_INTEL_LPSS_ACPI=y -CONFIG_MFD_INTEL_LPSS_PCI=y -CONFIG_IWLWIFI=m -CONFIG_IWLMVM=m -CONFIG_IWLDVM=m diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg deleted file mode 100644 index 19c57796e..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg +++ /dev/null @@ -1,82 +0,0 @@ -CONFIG_BT_QCA=m -CONFIG_BT_HCIBTSDIO=m -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIUART_ATH3K=y -CONFIG_BT_HCIUART_LL=y -CONFIG_BT_HCIUART_3WIRE=y -CONFIG_BT_HCIUART_BCM=y -CONFIG_BT_HCIUART_QCA=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_WIRELESS_EXT=y -CONFIG_WEXT_SPY=y -CONFIG_WEXT_PRIV=y -CONFIG_CFG80211_WEXT_EXPORT=y -CONFIG_LIB80211=m -CONFIG_LIB80211_CRYPT_WEP=m -CONFIG_LIB80211_CRYPT_CCMP=m -CONFIG_LIB80211_CRYPT_TKIP=m -# CONFIG_LIB80211_DEBUG is not set -CONFIG_VHOST_NET=m -CONFIG_VHOST_RING=m -CONFIG_VHOST=m -CONFIG_MICROCHIP_PHY=m -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8152=m -CONFIG_USB_LAN78XX=m -CONFIG_USB_NET_SR9800=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_HSO=m -CONFIG_USB_IPHETH=m -CONFIG_USB_ZD1201=m -CONFIG_USB_NET_RNDIS_WLAN=m -CONFIG_RTL8180=m -CONFIG_RTL8187=m -CONFIG_RTL8187_LEDS=y -CONFIG_MWL8K=m -# CONFIG_B43_BUSES_BCMA_AND_SSB is not set -# CONFIG_B43_BUSES_BCMA is not set -# CONFIG_B43_BUSES_SSB is not set -CONFIG_BRCMFMAC_PROTO_MSGBUF=y -CONFIG_BRCMFMAC_PCIE=y -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -CONFIG_IPW2100_DEBUG=y -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_RADIOTAP=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -CONFIG_IPW2200_DEBUG=y -CONFIG_LIBIPW=m -CONFIG_LIBIPW_DEBUG=y -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -CONFIG_LIBERTAS_SDIO=m -CONFIG_LIBERTAS_SPI=m -# CONFIG_LIBERTAS_DEBUG is not set -# CONFIG_LIBERTAS_MESH is not set -CONFIG_RTL8XXXU=m -CONFIG_RTL8XXXU_UNTESTED=y -CONFIG_WLAN_VENDOR_TI=y -CONFIG_WL1251=m -# CONFIG_WL1251_SPI is not set -# CONFIG_WL1251_SDIO is not set -CONFIG_WL12XX=m -CONFIG_WL18XX=m -CONFIG_WLCORE=m -CONFIG_WLCORE_SPI=m -CONFIG_WLCORE_SDIO=m -CONFIG_WILINK_PLATFORM_DATA=y -CONFIG_ZD1211RW=m -CONFIG_ZD1211RW_DEBUG=y -CONFIG_MWIFIEX=m -# CONFIG_MWIFIEX_SDIO is not set diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg deleted file mode 100644 index 8bc59eb1e..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg +++ /dev/null @@ -1,25 +0,0 @@ -CONFIG_XEN=y -CONFIG_XEN_BLKDEV_FRONTEND=y -CONFIG_XEN_SCSI_FRONTEND=y -CONFIG_XEN_NETDEV_FRONTEND=y -CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y -CONFIG_HVC_XEN=y -CONFIG_HVC_XEN_FRONTEND=y -CONFIG_XEN_FBDEV_FRONTEND=y -CONFIG_MMC_SDHCI_XENON=y -CONFIG_XEN_BALLOON=y -CONFIG_XEN_SCRUB_PAGES_DEFAULT=y -CONFIG_XEN_DEV_EVTCHN=y -CONFIG_XEN_BACKEND=y -CONFIG_XENFS=y -CONFIG_XEN_COMPAT_XENFS=y -CONFIG_XEN_SYS_HYPERVISOR=y -CONFIG_XEN_XENBUS_FRONTEND=y -CONFIG_XEN_GNTDEV=y -CONFIG_XEN_GNTDEV_DMABUF=y -CONFIG_XEN_GRANT_DEV_ALLOC=y -CONFIG_XEN_GRANT_DMA_ALLOC=y -CONFIG_SWIOTLB_XEN=y -CONFIG_XEN_PVCALLS_FRONTEND=y -CONFIG_XEN_PRIVCMD=y -CONFIG_XEN_AUTO_XLATE=y \ No newline at end of file diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch deleted file mode 100644 index 6232c4fa4..000000000 --- a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 11b29ce444610a07067a89b38e9e85c2162bbf67 Mon Sep 17 00:00:00 2001 -From: Tim Orling -Date: Mon, 15 Oct 2018 18:30:42 -0700 -Subject: [PATCH 7/7] [WIP] Initial LAVA support - -Linaro Automated Validation Architecture (LAVA) launches a test suite -on the target but thereafter only observes stdout. - -LAVA knows that a test case has started or ended based on signals -emitted to stdout: -(setup) - -(teardown) - - - -It is valid to have a measurement without units, but not units without a measurement. - -Signed-off-by: Tim Orling -[updated for ptest-runner 2.3.2] -Signed-off-by: Scott Murray ---- -diff --git a/flags.h b/flags.h -new file mode 100644 -index 0000000..0dac223 ---- /dev/null -+++ b/flags.h -@@ -0,0 +1,10 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+ -+/* Flag bit definitions */ -+ -+#ifndef __FLAGS_H__ -+#define __FLAGS_H__ -+ -+#define LAVA_SIGNAL_ENABLE (0x0001) -+ -+#endif /* __FLAGS_H__ */ -diff --git a/main.c b/main.c -index 01d60f7..165370f 100644 ---- a/main.c -+++ b/main.c -@@ -38,6 +38,7 @@ - #endif - - #include "utils.h" -+#include "flags.h" - - #ifndef DEFAULT_DIRECTORY - #define DEFAULT_DIRECTORY "/usr/lib" -@@ -74,8 +75,9 @@ main(int argc, char *argv[]) - opts.timeout = DEFAULT_TIMEOUT; - opts.ptests = NULL; - opts.xml_filename = NULL; -+ opts.flags = 0; - -- while ((opt = getopt(argc, argv, "d:e:lt:x:h")) != -1) { -+ while ((opt = getopt(argc, argv, "d:e:lt:x:Lh")) != -1) { - switch (opt) { - case 'd': - free(opts.directory); -@@ -122,6 +124,11 @@ main(int argc, char *argv[]) - opts.xml_filename = strdup(optarg); - CHECK_ALLOCATION(opts.xml_filename, 1, 1); - break; -+ case 'L': -+ // set LAVA signal mode -+ opts.flags |= LAVA_SIGNAL_ENABLE; -+ fprintf(stdout, "LAVA_SIGNAL_ENABLE == %d\n", opts.flags); -+ break; - default: - print_usage(stdout, argv[0]); - exit(1); -diff --git a/utils.c b/utils.c -index a8ba190..19f9efa 100644 ---- a/utils.c -+++ b/utils.c -@@ -47,6 +47,7 @@ - - #include "ptest_list.h" - #include "utils.h" -+#include "flags.h" - - #define GET_STIME_BUF_SIZE 1024 - #define WAIT_CHILD_POLL_TIMEOUT_MS 200 -@@ -439,6 +440,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - fprintf(fp, "START: %s\n", progname); - PTEST_LIST_ITERATE_START(head, p) - char *ptest_dir = strdup(p->run_ptest); -+ char *ptest = strdup(p->ptest); - if (ptest_dir == NULL) { - rc = -1; - break; -@@ -480,11 +482,15 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - int status; - int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0]; - FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr; -+ char result[5]; // pass\0, fail\0, skip\0 - - if (setpgid(child, pgid) == -1) { - fprintf(fp, "ERROR: setpgid() failed, %s\n", strerror(errno)); - } - -+ if (opts.flags & LAVA_SIGNAL_ENABLE) { -+ fprintf(stdout, "\n", ptest); -+ } - sttime = time(NULL); - fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime)); - fprintf(fp, "BEGIN: %s\n", ptest_dir); -@@ -506,6 +512,14 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, - - fprintf(fp, "END: %s\n", ptest_dir); - fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, entime)); -+ if (opts.flags & LAVA_SIGNAL_ENABLE) { -+ if (status) -+ sprintf(result, "fail"); -+ else -+ sprintf(result, "pass"); -+ fprintf(stdout, "\n", ptest); -+ fprintf(stdout, "\n", ptest, result); -+ } - } - PTEST_LIST_ITERATE_END - fprintf(fp, "STOP: %s\n", progname); -diff --git a/utils.h b/utils.h -index aa53707..df11e24 100644 ---- a/utils.h -+++ b/utils.h -@@ -39,9 +39,9 @@ struct ptest_options { - int timeout; - char **ptests; - char *xml_filename; -+ unsigned int flags; - }; - -- - extern void check_allocation1(void *, size_t, char *, int, int); - extern struct ptest_list *get_available_ptests(const char *); - extern int print_ptests(struct ptest_list *, FILE *); diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend deleted file mode 100644 index 7a1d2a8f8..000000000 --- a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend +++ /dev/null @@ -1,4 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://0007-WIP-Initial-LAVA-support.patch" - diff --git a/meta-agl-core-test/conf/include/agl-test.inc b/meta-agl-core-test/conf/include/agl-test.inc new file mode 100644 index 000000000..e69de29bb diff --git a/meta-agl-core-test/conf/layer.conf b/meta-agl-core-test/conf/layer.conf new file mode 100644 index 000000000..2ce0c18f1 --- /dev/null +++ b/meta-agl-core-test/conf/layer.conf @@ -0,0 +1,14 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH =. "${LAYERDIR}:" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "aglcoretest" +BBFILE_PATTERN_aglcoretest = "^${LAYERDIR}/" +BBFILE_PRIORITY_aglcoretest = "60" + +LAYERSERIES_COMPAT_aglcoretest = "dunfell" +LAYERDEPENDS_aglcoretest = "core aglcore" +LAYERDEPENDS_aglcoretest += "openembedded-layer" diff --git a/meta-agl-core-test/images/agl-image-minimal-qa.bb b/meta-agl-core-test/images/agl-image-minimal-qa.bb new file mode 100644 index 000000000..b162f2904 --- /dev/null +++ b/meta-agl-core-test/images/agl-image-minimal-qa.bb @@ -0,0 +1,12 @@ +SUMMARY = "An AGL small image just capable of allowing a device to boot and run tests." + +DESCRIPTION = "A minimal set of AGL Distribution. This image also has additional \ +packages (e.g. commandline tools) for Quality Assurance(QA)." + +require agl-image-minimal.bb + +LICENSE = "MIT" + +IMAGE_INSTALL_append = " \ + packagegroup-ivi-common-test \ + " diff --git a/meta-agl-core-test/recipes-test/aiostress/aiostress_0.22.bb b/meta-agl-core-test/recipes-test/aiostress/aiostress_0.22.bb new file mode 100644 index 000000000..7803d74ed --- /dev/null +++ b/meta-agl-core-test/recipes-test/aiostress/aiostress_0.22.bb @@ -0,0 +1,24 @@ +SUMMARY = "Async IO testing utility" +DESCRIPTION = "aio-stress will open or create each file on the command line, and start a series of aio to it.\ +aio is done in a rotating loop. first file1 gets 8 requests, then file2, then file3 etc.\ +As each file finishes writing, it is switched to reads io buffers are aligned in case you want to do raw io" +HOMEPAGE = "https://oss.oracle.com/~mason/aio-stress/" +LICENSE = "GPLv2" + +S="${WORKDIR}" + +LIC_FILES_CHKSUM = "file://${S}/aio-stress.c;md5=ccb5d196a3736bbd835d582a4e2329c3" + +SRC_URI = "https://oss.oracle.com/~mason/aio-stress/aio-stress.c" +SRC_URI[md5sum] = "ccb5d196a3736bbd835d582a4e2329c3" +SRC_URI[sha256sum] = "3f4cffcc946fb717fff9d8fe932c7c2ee606efff198408d9fbe16955151445f7" + +do_compile () { + ${CC} -Wall -Wshadow -o aio-stress -lpthread -laio aio-stress.c +} + +do_install () { + install -d ${D}${bindir} + install -m 0755 aio-stress ${D}${bindir} +} + diff --git a/meta-agl-core-test/recipes-test/dung/dung_3.4.25-m2.bb b/meta-agl-core-test/recipes-test/dung/dung_3.4.25-m2.bb new file mode 100644 index 000000000..28bf858a0 --- /dev/null +++ b/meta-agl-core-test/recipes-test/dung/dung_3.4.25-m2.bb @@ -0,0 +1,18 @@ +SUMMARY = "Kernel test scripts" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "e2472c7b1d061aef8bb05a4d7940fd8159c4a329" + +inherit allarch + +S = "${WORKDIR}/git/${PN}-${PV}" + +do_install () { + for subdir in arch_timer cmt common scifab sdhi.0; do + install -d -m 0755 ${D}/${datadir}/${PN}/$subdir + install -m 0755 -t ${D}/${datadir}/${PN}/$subdir ${S}/$subdir/* + done +} + diff --git a/meta-agl-core-test/recipes-test/ebizzy/ebizzy_0.3.bb b/meta-agl-core-test/recipes-test/ebizzy/ebizzy_0.3.bb new file mode 100644 index 000000000..08b0425c0 --- /dev/null +++ b/meta-agl-core-test/recipes-test/ebizzy/ebizzy_0.3.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "Benchmark tool that generates a workload resembling common web application server workloads" +HOMEPAGE = "http://ebizzy.sourceforge.net/" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=eb723b61539feef013de476e68b5c50a" + +SRC_URI = "http://downloads.sourceforge.net/project/ebizzy/ebizzy/${PV}/ebizzy-${PV}.tar.gz" +SRC_URI[md5sum] = "af038bc506066bb3d28db08aba62bc38" +SRC_URI[sha256sum] = "77286029d6348f3d9b3f04eae1feadb5ad1ad07b9f688f4d9f002960862467f2" + +INSANE_SKIP_${PN} = "ldflags" + +do_compile () { + ${CC} -Wall -Wshadow -lpthread -o ebizzy ebizzy.c +} + +do_install () { + install -d ${D}${bindir} + install -m 0755 ebizzy ${D}${bindir} +} + diff --git a/meta-agl-core-test/recipes-test/ffsb/ffsb_6.0-rc2.bb b/meta-agl-core-test/recipes-test/ffsb/ffsb_6.0-rc2.bb new file mode 100644 index 000000000..66db133e3 --- /dev/null +++ b/meta-agl-core-test/recipes-test/ffsb/ffsb_6.0-rc2.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Flexible File System Benchmark" +HOMEPAGE = "https://sourceforge.net/projects/ffsb/" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=fd5d9bcabd8ed5a54a01ce8d183d592a" + +SRC_URI = "http://downloads.sourceforge.net/project/ffsb/ffsb/ffsb-${PV}/ffsb-${PV}.tar.bz2" +SRC_URI[md5sum] = "cabfc1021c2ec6c6b168fefc84210891" +SRC_URI[sha256sum] = "e5867692aae8c9bfbcdc774599022289c4d89c1d90f4dd7101fb9865ac773c71" + +inherit autotools + +# extra args to configure +EXTRA_OECONF = "" + diff --git a/meta-agl-core-test/recipes-test/fontconfig/fontconfig_%.bbappend b/meta-agl-core-test/recipes-test/fontconfig/fontconfig_%.bbappend new file mode 100644 index 000000000..e8ce1ab78 --- /dev/null +++ b/meta-agl-core-test/recipes-test/fontconfig/fontconfig_%.bbappend @@ -0,0 +1,18 @@ +do_install_append() { + install -m 755 -d ${D}/${datadir}/fontconfig-test + install -m 755 ${S}/test/run-test.sh ${D}/${datadir}/fontconfig-test/ + + sed -i -e "s#^FCLIST=\.\./fc-list/fc-list#FCLIST=/usr/bin/fc-list#g" -e "s#^FCCACHE=\.\./fc-cache/fc-cache#FCCACHE=/usr/bin/fc-cache#g" ${D}/${datadir}/fontconfig-test/run-test.sh + + install -m 644 ${B}/test/out.expected ${D}/${datadir}/fontconfig-test/ + for x in 4x6.pcf 8x16.pcf fonts.conf.in; do + install -m 644 ${S}/test/$x ${D}/${datadir}/fontconfig-test/ + done +} + +PACKAGES =+ "fontconfig-test" + +DEBIAN_NOAUTONAME_fontconfig-test = "1" +FILES_fontconfig-test = "${datadir}/fontconfig-test/*" + + diff --git a/meta-agl-core-test/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch b/meta-agl-core-test/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch new file mode 100644 index 000000000..4d0d09aea --- /dev/null +++ b/meta-agl-core-test/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch @@ -0,0 +1,32 @@ +diff -ur ft2demos-2.9.1.orig/Makefile ft2demos-2.9.1/Makefile +--- ft2demos-2.9.1.orig/Makefile 2018-04-22 05:41:50.000000000 -0400 ++++ ft2demos-2.9.1/Makefile 2019-02-18 23:28:59.794678736 -0500 +@@ -163,7 +163,8 @@ + + ifeq ($(PLATFORM),unix) + CC = $(CCraw) +- LINK_CMD = $(subst /,$(SEP),$(OBJ_BUILD)/libtool) \ ++ LIBTOOL = $(OBJ_BUILD)/libtool ++ LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \ + --mode=link $(CC) \ + $(subst /,$(COMPILER_SEP),$(LDFLAGS)) + LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) $(LIB_CLOCK_GETTIME) +@@ -289,12 +290,12 @@ + ttdebug + + # Comment out the next line if you don't have a graphics subsystem. +- EXES += ftdiff \ +- ftgamma \ +- ftgrid \ +- ftmulti \ +- ftstring \ +- ftview ++ # EXES += ftdiff \ ++ # ftgamma \ ++ # ftgrid \ ++ # ftmulti \ ++ # ftstring \ ++ # ftview + + # ftvalid requires ftgxval.c and ftotval.c + # diff --git a/meta-agl-core-test/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch b/meta-agl-core-test/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch new file mode 100644 index 000000000..7803ad7e0 --- /dev/null +++ b/meta-agl-core-test/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch @@ -0,0 +1,30 @@ +From 8c4f135619de929f9348b830a07a46a0c2c38e51 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= +Date: Fri, 7 Oct 2016 15:26:20 +0200 +Subject: [PATCH] Do not hardcode libtool path +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It is already known and imported through config.mk. + +Signed-off-by: Jan-Simon Möller +--- + Makefile | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile b/Makefile +index a5d34bd..254aad4 100644 +--- a/Makefile ++++ b/Makefile +@@ -153,7 +153,6 @@ else + + ifeq ($(PLATFORM),unix) + CC = $(CCraw) +- LIBTOOL = $(OBJ_BUILD)/libtool + LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \ + --mode=link $(CC) \ + $(subst /,$(COMPILER_SEP),$(LDFLAGS)) +-- +2.1.4 + diff --git a/meta-agl-core-test/recipes-test/freetype/freetype_2.%.bbappend b/meta-agl-core-test/recipes-test/freetype/freetype_2.%.bbappend new file mode 100644 index 000000000..6aa1eabc2 --- /dev/null +++ b/meta-agl-core-test/recipes-test/freetype/freetype_2.%.bbappend @@ -0,0 +1,34 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI =+ "${SOURCEFORGE_MIRROR}/freetype/freetype-demos/${PV}/ft2demos-${PV}.tar.gz;name=ft2demos \ + file://0001-Makefile-dont-build-gfx-demos.patch;patchdir=../ft2demos-${PV} \ + file://0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch;patchdir=../ft2demos-${PV} \ + " +SRC_URI[ft2demos.md5sum] = "c376adf4782bac9b9ac8e427884752d2" +SRC_URI[ft2demos.sha256sum] = "5e9e94a2db9d1a945293a1644a502f6664a2173a454d4a55b19695e2e2f4a0bc" + +PACKAGES =+ "${PN}-demos" + +B = "${S}" + +do_compile_append () { + oe_runmake -C ${WORKDIR}/ft2demos-${PV} TOP_DIR=${WORKDIR}/${BPN}-${PV}/ +} + +do_install_append () { + install -d -m 0755 ${D}/${bindir} + for x in ftbench ftdump ftlint ftvalid ttdebug; do + install -m 0755 ${WORKDIR}/ft2demos-${PV}/bin/.libs/$x ${D}/${bindir} + done +} + +FILES_${PN}-demos = "\ + ${bindir}/ftbench \ + ${bindir}/ftdump \ + ${bindir}/ftlint \ + ${bindir}/ftvalid \ + ${bindir}/ttdebug \ +" + +# enable pixmap/libpng support to allow color emojis +PACKAGECONFIG_append = " pixmap" diff --git a/meta-agl-core-test/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch b/meta-agl-core-test/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch new file mode 100644 index 000000000..e834becf3 --- /dev/null +++ b/meta-agl-core-test/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch @@ -0,0 +1,11 @@ +diff -urN fsfuzzer-0.7.orig/fstest.c fsfuzzer-0.7/fstest.c +--- fsfuzzer-0.7.orig/fstest.c 2009-01-25 14:50:06.000000000 +0000 ++++ fsfuzzer-0.7/fstest.c 2016-06-16 17:49:27.264565819 +0000 +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + #define LOGGIT 1 + #define CHECK_XATTR 1 diff --git a/meta-agl-core-test/recipes-test/fsfuzzer/fsfuzzer_0.7.bb b/meta-agl-core-test/recipes-test/fsfuzzer/fsfuzzer_0.7.bb new file mode 100644 index 000000000..d2ddb59b1 --- /dev/null +++ b/meta-agl-core-test/recipes-test/fsfuzzer/fsfuzzer_0.7.bb @@ -0,0 +1,18 @@ +SUMMARY = "The fsfuzzer is a filesystem fuzzer tool that does stress tests of various filesystems in a reproducible and logged way." +DESCRIPTION = "This tool creates initial (valid) filesystem images and then manipulates their binary format and structure for detecting flaws/bugs/design problems in the parsing/handling code for that particular filesystem. The program expects that you have a /media directory. It uses that one for mounting test images in." +HOMEPAGE = "https://www.ee.oulu.fi/research/ouspg/fsfuzzer" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" + +SRC_URI = "http://people.redhat.com/sgrubb/files/fsfuzzer-${PV}.tar.gz \ + file://0001-fix_missing_header_sys_stat.patch \ + " +SRC_URI[md5sum] = "d69ac4b67aaba52a889c9188eb456c15" +SRC_URI[sha256sum] = "094aa17c4f66c525a04e5db5ad444b4a561b6f8e310d0bd70b9ca421cdf0a434" + +inherit autotools + +# Specify any options you want to pass to the configure script using EXTRA_OECONF: +EXTRA_OECONF = "" + diff --git a/meta-agl-core-test/recipes-test/glmark2/glmark2_%.bbappendNOT b/meta-agl-core-test/recipes-test/glmark2/glmark2_%.bbappendNOT new file mode 100644 index 000000000..403aedd4c --- /dev/null +++ b/meta-agl-core-test/recipes-test/glmark2/glmark2_%.bbappendNOT @@ -0,0 +1,7 @@ +# Update glmark2 +SRCREV = "784aca755a469b144acf3cae180b6e613b7b057a" +# Already in newer version +SRC_URI_remove = "file://python3.patch" + +PACKAGECONFIG = "wayland-gles2" +PACKAGECONFIG[wayland-gles2] = ",,virtual/egl virtual/libgles2 wayland wayland-native" diff --git a/meta-agl-core-test/recipes-test/himeno/himeno_2.0.bb b/meta-agl-core-test/recipes-test/himeno/himeno_2.0.bb new file mode 100644 index 000000000..f890e23a4 --- /dev/null +++ b/meta-agl-core-test/recipes-test/himeno/himeno_2.0.bb @@ -0,0 +1,27 @@ +DESCRIPTION = "Himeno Benchmark" +LICENSE = "LGPL-2.0" +URL = "http://accc.riken.jp/en/supercom/himenobmt/" + +SRC_URI = "http://accc.riken.jp/en/wp-content/uploads/sites/2/2015/07/himenobmt.c.zip" +SRC_URI[md5sum] = "8d8e837dfc3e00a3b322eb4ae3edd551" +SRC_URI[sha256sum] = "8780bfbdacb0d4dcab2931e65cadd69411731e3f2afcc1231d0743a036298077" + +LIC_FILES_CHKSUM = "file://himenoBMT.c;md5=8e8771ddc01c6d1a795e088e2d6dee78" + +# Upstream ZIP file contains an LZH archive, thus a 2 steps "unpack" is required. +# The LZH archive is unpacked after native tools dependency resolution, +# thus. after "configure" task in our case: + +DEPENDS = "p7zip-native" + +do_configure_append() { + 7z x -y -o${S} ${WORKDIR}/himenobmt.c.lzh + cd ${S} + sed -i -e 's/CC= gcc/#CC= gcc/' Makefile + sed -i -e 's/CFLAGS = /#CFLAGS = /' Makefile +} + +do_install () { + install -d ${D}${bindir} + install -m 0755 bmt ${D}${bindir} +} diff --git a/meta-agl-core-test/recipes-test/interbench/files/interbench.c.patch b/meta-agl-core-test/recipes-test/interbench/files/interbench.c.patch new file mode 100644 index 000000000..c882739ba --- /dev/null +++ b/meta-agl-core-test/recipes-test/interbench/files/interbench.c.patch @@ -0,0 +1,68 @@ +--- interbench.c.orig 2009-10-30 23:14:59.000000000 -0500 ++++ interbench.c 2012-07-10 19:06:00.000000000 -0500 +@@ -71,6 +71,7 @@ struct user_data { + char datestamp[13]; + FILE *logfile; + } ud = { ++ .ram = 0, + .duration = 30, + .cpu_load = 4, + .log = 1, +@@ -652,6 +653,8 @@ void emulate_write(struct thread *th) + terminal_error("fopen"); + if (stat(name, &statbuf) == -1) + terminal_fileopen_error(fp, "stat"); ++ if (statbuf.st_blksize < MIN_BLK_SIZE) ++ statbuf.st_blksize = MIN_BLK_SIZE; + for (i = 0 ; i < mem; i++) { + if (fwrite(buf, statbuf.st_blksize, 1, fp) != 1) + terminal_fileopen_error(fp, "fwrite"); +@@ -1136,14 +1139,17 @@ void get_ram(void) + if(!(meminfo = fopen("/proc/meminfo", "r"))) + terminal_error("fopen"); + +- ud.ram = ud.swap = 0; +- while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) ) +- fgets(aux,sizeof(aux),meminfo); ++ if (!ud.ram) ++ { ++ while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) ) ++ fgets(aux,sizeof(aux),meminfo); ++ } ++ ud.swap = 0; + while( !feof(meminfo) && !fscanf(meminfo, "SwapTotal: %lu kB", &ud.swap) ) + fgets(aux,sizeof(aux),meminfo); + if (fclose(meminfo) == -1) + terminal_error("fclose"); +- ++ + if( !ud.ram || !ud.swap ) { + unsigned long i; + fprintf(stderr, "\nCould not get memory or swap size. "); +@@ -1399,6 +1405,7 @@ void usage(void) + fprintf(stderr, "\t[-h]\n\n"); + fprintf(stderr, " -l\tUse loops per sec (default: use saved benchmark)\n"); + fprintf(stderr, " -L\tUse cpu load of with burn load (default: 4)\n"); ++ fprintf(stderr, " -M\tForce RAM size to . Useful when disk is smaller than RAM.\n"); + fprintf(stderr, " -t\tSeconds to run each benchmark (default: 30)\n"); + fprintf(stderr, " -B\tNice the benchmarked thread to (default: 0)\n"); + fprintf(stderr, " -N\tNice the load thread to (default: 0)\n"); +@@ -1482,7 +1489,7 @@ int main(int argc, char **argv) + terminal_error("signal"); + #endif + +- while ((q = getopt(argc, argv, "hl:L:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) { ++ while ((q = getopt(argc, argv, "hl:L:M:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) { + switch (q) { + case 'h': + usage(); +@@ -1496,6 +1503,9 @@ int main(int argc, char **argv) + case 'L': + ud.cpu_load = atoi(optarg); + break; ++ case 'M': ++ ud.ram = atoi(optarg); ++ break; + case 'B': + ud.bench_nice = atoi(optarg); + break; diff --git a/meta-agl-core-test/recipes-test/interbench/interbench_0.31.bb b/meta-agl-core-test/recipes-test/interbench/interbench_0.31.bb new file mode 100644 index 000000000..3e6490374 --- /dev/null +++ b/meta-agl-core-test/recipes-test/interbench/interbench_0.31.bb @@ -0,0 +1,31 @@ +DESCRIPTION = "The Linux interactivity benchmark" +HOMEPAGE = "http://users.tpg.com.au/ckolivas/interbench/" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833" +SRC_URI = "http://ck.kolivas.org/apps/interbench/interbench-${PV}.tar.bz2" + +SRC_URI += "file://interbench.c.patch;striplevel=0" + +inherit autotools + +INSANE_SKIP_${PN} = "ldflags" + +B = "${S}" +EXTRA_OEMAKE = "CC='${CC}'" + +# upstream tarball contains x86_64 binaries, we need a clean source tree +do_compile() { + oe_runmake clean + oe_runmake +} + +do_install() { + install -d ${D}${bindir} ${D}${datadir}/doc/${PN}/ ${D}${mandir}/man8/ + install -m 0755 ${B}/interbench ${D}${bindir} + install -m 0644 ${S}/readme* ${D}${datadir}/doc/${PN}/ + install -m 0644 ${S}/interbench.8 ${D}${mandir}/man8/ +} + +SRC_URI[md5sum] = "832254d7fd1255c548ebea7b97f01015" +SRC_URI[sha256sum] = "89d438b28aef22d26e79812762a57a9f9344a8dd8826edebfe60dad48ee1c784" + diff --git a/meta-agl-core-test/recipes-test/ipv6connect/ipv6connect.bb b/meta-agl-core-test/recipes-test/ipv6connect/ipv6connect.bb new file mode 100644 index 000000000..a8b93716a --- /dev/null +++ b/meta-agl-core-test/recipes-test/ipv6connect/ipv6connect.bb @@ -0,0 +1,24 @@ +SUMMARY = "ipv6connect test" +HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/0.12.369.B/client/tests/ipv6connect" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${S}/${PN}/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "b355b7e1f43a19938895964f314484ffd8a39542" + +inherit autotools + +INSANE_SKIP_${PN} = "ldflags" + +B = "${WORKDIR}/git/ipv6connect" +S = "${WORKDIR}/git" + +# configure script is not delivered, only a makefile. +do_configure() { + : +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${B}/ipv6connect ${D}${bindir} +} diff --git a/meta-agl-core-test/recipes-test/linpack/linpack.bb b/meta-agl-core-test/recipes-test/linpack/linpack.bb new file mode 100644 index 000000000..84bed0ff6 --- /dev/null +++ b/meta-agl-core-test/recipes-test/linpack/linpack.bb @@ -0,0 +1,23 @@ +SUMMARY = "Linpack benchmark" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${S}/${PN}/linpack.c;md5=076f1fd8d313056103f98d4253862eae" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "920cae73a918d1f516113b0ae967be3ecaba86ef" + +DEPENDS += "rsync-native" + +inherit autotools + +S = "${WORKDIR}/git" + +# configure script is not delivered, only a makefile. +do_configure() { + mkdir -p ${B} + rsync -a ${S}/${PN}/* ${B} +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${B}/linpack ${D}${bindir} +} diff --git a/meta-agl-core-test/recipes-test/linus-stress/linus-stress.bb b/meta-agl-core-test/recipes-test/linus-stress/linus-stress.bb new file mode 100644 index 000000000..01b3cfce5 --- /dev/null +++ b/meta-agl-core-test/recipes-test/linus-stress/linus-stress.bb @@ -0,0 +1,23 @@ +SUMMARY = "linus_stress test" +HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/tests/linus_stress" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${S}/linus_stress/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "87cdfd4626c0cb47fc22f328867e49d6268df85c" + +inherit autotools +INSANE_SKIP_${PN} = "ldflags" + +B = "${WORKDIR}/git/linus_stress" +S = "${WORKDIR}/git" + +# configure script is not delivered, only a makefile. +do_configure() { + : +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${B}/linus_stress ${D}${bindir} +} diff --git a/meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb b/meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb new file mode 100644 index 000000000..f3b2c4ff9 --- /dev/null +++ b/meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb @@ -0,0 +1,68 @@ +SUMMARY = "Utilities for testing of AGL" +DESCRIPTION = "A set of common packages required by testing AGL for Quality Assurance" + +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-test \ + packagegroup-agl-test-ltp \ + packagegroup-ivi-common-test \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + bc \ + ebizzy \ + evtest \ + ffsb \ + glmark2 \ + interbench \ + ipv6connect \ + linpack \ + linus-stress \ + nmap \ + rt-tests \ + stress \ + " + + + + + +# to be added, but needs LICENSE_FLAGS_WHITELIST="non-commercial" +# netperf # meta-networking + +# relocate due to dependencies +# iperf3 \ # meta-oe +# lmbench \ # meta-oe +# dbench \ # meta-oe +# nbench-byte \ # meta-oe +# iozone3 \ # meta-oe +# + +# FTBS, SPEC-316 +# himeno # nowhere +# FTBS, SPEC-1384 +# trinity # meta-linaro (1.5) + +# packagegroup-agl-test-ltp \ +# ltp \ # ltp in oe-core +# + +# Packages for shell commands which are required by LTP +# readelf, logrotate, vsftpd, crontab, sar, arp, ftp, +# host, rcp, rlogin, rsh, tcpdump, expect, iptables, dnsmasq, +# pgrep +RDEPENDS_packagegroup-agl-test-ltp = "" +#RDEPENDS_packagegroup-agl-test-ltp += " \ +# initscripts-functions bind-utils binutils \ +# cronie dnsmasq expect inetutils-ftp inetutils-rsh \ +# iptables logrotate net-tools sysstat tcpdump vsftpd \ +# " + +RDEPENDS_packagegroup-ivi-common-test = " \ + packagegroup-agl-test \ + " diff --git a/meta-agl-core-test/recipes-test/trinity/trinity_git.bb b/meta-agl-core-test/recipes-test/trinity/trinity_git.bb new file mode 100644 index 000000000..f0f09a855 --- /dev/null +++ b/meta-agl-core-test/recipes-test/trinity/trinity_git.bb @@ -0,0 +1,42 @@ +SUMMARY = "a Linux System call fuzz teste." +DESCRIPTION = "Trinity, a Linux System call fuzz tester." +HOMEPAGE = "http://codemonkey.org.uk/projects/trinity/" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=96094d47cfbd2cc45eb46ce0fc423c04" + +COMPATIBLE_HOST = "(x86_64|arm|aarch64).*-linux" + +PV = "1.5" +SRCREV = "edc2e693e298e0372010a361354c4a79a3cd93f3" +SRC_URI = "git://github.com/kernelslacker/trinity.git;protocol=https;nobranch=1 \ + " + +S = "${WORKDIR}/git" + +inherit useradd + +USERADD_PACKAGES = "${PN}" +USERADD_PARAM_${PN} = "--system --create-home --shell /bin/sh ${PN} " + +do_configure () { + ./configure.sh +} + +# workaround random build failures +do_compile () { + ${MAKE} +} + +do_install () { + oe_runmake install DESTDIR=${D}/usr + install -o ${PN} -d -m 0755 ${D}/${datadir}/${PN} + install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-parallel.sh ${D}/${datadir}/${PN} + install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-sequentially.sh ${D}/${datadir}/${PN} + install -o ${PN} -m 0755 ${S}/scripts/test-multi.sh ${D}/${datadir}/${PN} + install -o ${PN} -m 0755 ${S}/scripts/test-vm.sh ${D}/${datadir}/${PN} +} + +PACKAGES =+ "${PN}-example" + +FILES_${PN} = "${bindir}/trinity" +FILES_${PN}-example = "${datadir}/${PN}" diff --git a/meta-agl-core/LICENSE b/meta-agl-core/LICENSE new file mode 100644 index 000000000..e8758f89c --- /dev/null +++ b/meta-agl-core/LICENSE @@ -0,0 +1,20 @@ +Different components of the AGL layers are under different licenses (a mix +of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further +details of the individual licenses. + +All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) +is MIT licensed unless otherwise stated. +Source code included in tree for individual recipes (e.g. patches) are under +the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. + +License information for any other files (scripts) is either explicitly stated +or defaults to GPL version 2 only. + +Individual files can contain the following style tags instead of the full +license text to identify their license: + + SPDX-License-Identifier: GPL-2.0-only + SPDX-License-Identifier: MIT + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-core/LICENSE.GPL-2.0-only b/meta-agl-core/LICENSE.GPL-2.0-only new file mode 100644 index 000000000..5db3c0a21 --- /dev/null +++ b/meta-agl-core/LICENSE.GPL-2.0-only @@ -0,0 +1,288 @@ + 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. + + GNU GENERAL PUBLIC LICENSE + 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 + +Note: +Individual files contain the following tag instead of the full license text. + + SPDX-License-Identifier: GPL-2.0-only + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-core/LICENSE.MIT b/meta-agl-core/LICENSE.MIT new file mode 100644 index 000000000..a6919eb7e --- /dev/null +++ b/meta-agl-core/LICENSE.MIT @@ -0,0 +1,25 @@ +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. + +Note: +Individual files contain the following tag instead of the full license text. + + SPDX-License-Identifier: MIT + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-core/README b/meta-agl-core/README new file mode 120000 index 000000000..4a7a1a175 --- /dev/null +++ b/meta-agl-core/README @@ -0,0 +1 @@ +README-AGL.md \ No newline at end of file diff --git a/meta-agl-core/README-AGL.md b/meta-agl-core/README-AGL.md new file mode 100644 index 000000000..c7fc029e7 --- /dev/null +++ b/meta-agl-core/README-AGL.md @@ -0,0 +1,21 @@ +Overview +======== + +The +[AGL Project](https://www.automotivelinux.org/) is an automotive-specific +development environment that provides a Linux distribution +[AGL UCB](https://www.automotivelinux.org/software/unified-code-base). + +AGL uses layers designed to be compatible with the +[Yocto Project](https://www.yoctoproject.org) and the +[OpenEmbedded Project (OE)](https://www.openembedded.org/wiki/Main_Page). + +This section provides information about the layers used by the AGL Project: + +* **`meta-agl/meta-agl-core`**: Minimal set of software needed to create an AGL distribution + used to boot a system. + AGL profiles are built on top of this minimal set of software. + + ``` + $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl + ``` diff --git a/meta-agl-core/classes/cloc.bbclass b/meta-agl-core/classes/cloc.bbclass new file mode 100644 index 000000000..9b73704e8 --- /dev/null +++ b/meta-agl-core/classes/cloc.bbclass @@ -0,0 +1,33 @@ +# (C) 2017 Jan-Simon Möller +# +# License: GPLv2 +# +# summary with +# cloc --sum-reports `find . -name "*clocreport" | grep -v "\-native" ` --out summary.report + +# cloc needs to be installed on the host +# FIXME: create a cloc-native +HOSTTOOLS += "cloc" + +CLOC_DIRECTORY ??= "${DEPLOY_DIR}/cloc/" +CLOCSTATEDIR = "${WORKDIR}/cloc-destdir/" + +python do_cloc() { + + import subprocess + + source_dir = d.getVar('S', True) + pn = d.getVar('PN', True) + + destdir = d.expand('${CLOCSTATEDIR}') + bb.utils.mkdirhier(destdir) + + cloc_cmd = 'cloc %s -q --out=%s/%s.clocreport' % (source_dir, destdir, pn ) + subprocess.call(cloc_cmd, shell=True) + +} + + +addtask cloc before do_configure after do_patch + +EXPORT_FUNCTIONS do_cloc diff --git a/meta-agl-core/classes/sanity-meta-agl-core.bbclass b/meta-agl-core/classes/sanity-meta-agl-core.bbclass new file mode 100644 index 000000000..93df587f4 --- /dev/null +++ b/meta-agl-core/classes/sanity-meta-agl-core.bbclass @@ -0,0 +1,10 @@ +addhandler aglcore_bbappend_distrocheck +aglcore_bbappend_distrocheck[eventmask] = "bb.event.SanityCheck" +python aglcore_bbappend_distrocheck() { + skip_check = e.data.getVar('SKIP_META_AGL_CORE_SANITY_CHECK') == "1" + if 'aglcore' not in e.data.getVar('AGL_FEATURES').split() and not skip_check: + bb.warn("You have included the meta-agl-core layer, but \ +'aglcore' has not been enabled in your AGL_FEATURES. Some bbappend files \ +may not take effect. See the meta-agl-core README for details on enabling \ +meta-agl-core support.") +} diff --git a/meta-agl-core/conf/bblayers.conf.sample b/meta-agl-core/conf/bblayers.conf.sample new file mode 100644 index 000000000..8b1cbdfc5 --- /dev/null +++ b/meta-agl-core/conf/bblayers.conf.sample @@ -0,0 +1,12 @@ +# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf +# changes incompatibly +POKY_BBLAYERS_CONF_VERSION = "2" + +BBPATH = "${TOPDIR}" +BBFILES ?= "" + +BBLAYERS ?= " \ + ##OEROOT##/meta \ + ##OEROOT##/meta-poky \ + ##OEROOT##/meta-yocto-bsp \ + " diff --git a/meta-agl-core/conf/distro/include/aarch64-tune.inc b/meta-agl-core/conf/distro/include/aarch64-tune.inc new file mode 100644 index 000000000..553bb5a64 --- /dev/null +++ b/meta-agl-core/conf/distro/include/aarch64-tune.inc @@ -0,0 +1,13 @@ +# DEFAULTTUNE overrides for AGL on aarch64 + +# We should not need the tuning include below as the BSP should include the right set already. +# A double inclusion would produce a warning. This include line is just for reference +# include conf/machine/include/arm/arch-armv8.inc + +DEFAULTTUNE_poky-agl := "aarch64" +# not yet ready +#QB_SYSTEM_NAME ?= "qemu-system-aarch" +#QB_DEFAULT_KERNEL ?= "zImage" +#QB_DEFAULT_FSTYPE ?= "ext4" +#QB_MACHINE ?= "-machine foo" +#QB_CPU ?= "-cpu bar" diff --git a/meta-agl-core/conf/distro/include/arc-tune.inc b/meta-agl-core/conf/distro/include/arc-tune.inc new file mode 100644 index 000000000..43dabd5a9 --- /dev/null +++ b/meta-agl-core/conf/distro/include/arc-tune.inc @@ -0,0 +1,3 @@ +# DEFAULTTUNE overrides for AGL on arc + +# DEFAULTTUNE ?= "archs" diff --git a/meta-agl-core/conf/distro/include/arm-tune.inc b/meta-agl-core/conf/distro/include/arm-tune.inc new file mode 100644 index 000000000..fa68e05a7 --- /dev/null +++ b/meta-agl-core/conf/distro/include/arm-tune.inc @@ -0,0 +1,23 @@ +# DEFAULTTUNE overrides for AGL on ARM 32bit + +# We should not need the tuning include below as the BSP should include the right set already. +# A double inclusion would produce a warning. This include line is just for reference +# include conf/machine/include/arm/arch-armv7ve.inc +# medium profile boards need to +# include conf/machine/include/arch/arm-armv7-a.inc + +# Standard target for 32bit ARM (newer than cortex-a15) +AGLDEFAULTTUNE = "armv7vethf-neon-vfpv4" + +# for cortex-a8, cortex-a9, cortex-a7 (=rpi 2/3) +AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', 'armv7athf-neon', '${AGLDEFAULTTUNE}', d)}" + +# for armv6 (=rpi0/1) +AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-low-arm-compiler', 'arm1176jzfshf', '${AGLDEFAULTTUNE}', d)}" +DEFAULTTUNE := "${AGLDEFAULTTUNE}" + +QB_SYSTEM_NAME ?= "qemu-system-arm" +QB_DEFAULT_KERNEL ?= "zImage" +QB_DEFAULT_FSTYPE ?= "ext4" +QB_MACHINE ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-machine vexpress-a9', '-machine vexpress-a15', d)}" +QB_CPU ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-cpu cortex-a9', '-cpu cortex-a15', d)}" diff --git a/meta-agl-core/conf/distro/include/riscv64-tune.inc b/meta-agl-core/conf/distro/include/riscv64-tune.inc new file mode 100644 index 000000000..f8118dec3 --- /dev/null +++ b/meta-agl-core/conf/distro/include/riscv64-tune.inc @@ -0,0 +1,7 @@ +# DEFAULTTUNE overrides for AGL on riscv64 + +# We should not need the tuning include below as the BSP should include the right set already. +# A double inclusion would produce a warning. This include line is just for reference +# include conf/machine/include/arm/arch-armv8.inc + +DEFAULTTUNE = "riscv64" diff --git a/meta-agl-core/conf/distro/include/x86_64-tune.inc b/meta-agl-core/conf/distro/include/x86_64-tune.inc new file mode 100644 index 000000000..9f2bdc867 --- /dev/null +++ b/meta-agl-core/conf/distro/include/x86_64-tune.inc @@ -0,0 +1,55 @@ +# DEFAULTTUNE overrides for AGL on x86-64 + +# We should not need the tuning include below as the BSP should include the right set already. +# A double inclusion would produce a warning. This include line is just for reference +#include conf/machine/include/tune-corei7.inc +DEFAULTTUNE = "corei7-64" + +# shortened copy of tune-corei7.inc due to bug in inclusion for tune-core2.inc +# TUNE_ARCH is using .= x86-64 , if done twice, you get x86-64x86-64 as TUNE_ARCH :/ +# we should have at least the core2 tunings by default (=qemux86-64) + +# Extra tune features +TUNEVALID[corei7] = "Enable corei7 specific processor optimizations" +TUNE_CCARGS = "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2', '', d)}" + +# Extra tune selections +AVAILTUNES += "corei7-32" +TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7" +BASE_LIB_tune-corei7-32 = "lib" +TUNE_PKGARCH_tune-corei7-32 = "corei7-32" +PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32" +QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false" + +AVAILTUNES += "corei7-64" +TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7" +BASE_LIB_tune-corei7-64 = "lib64" +TUNE_PKGARCH_tune-corei7-64 = "corei7-64" +PACKAGE_EXTRA_ARCHS_tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64" +QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false" + +AVAILTUNES += "corei7-64-x32" +TUNE_FEATURES_tune-corei7-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} corei7" +BASE_LIB_tune-corei7-64-x32 = "libx32" +TUNE_PKGARCH_tune-corei7-64-x32 = "corei7-64-x32" +PACKAGE_EXTRA_ARCHS_tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} corei7-64-x32" +QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false" + +TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '' ,d)}" + +# Bump qemux86-64 up to corei7 +AVAILTUNES += "qemux86-64" +TUNE_FEATURES_tune-qemux86-64 = "${TUNE_FEATURES_tune-x86-64} corei7" +BASE_LIB_tune-qemux86-64 = "lib64" +TUNE_PKGARCH_tune-qemux86-64 = "corei7-64" +PACKAGE_EXTRA_ARCHS_tune-qemux86-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64" +QEMU_EXTRAOPTIONS_qemux86-64 = " -cpu Nehalem,check=false" + +# QEMU / runqemu options (partly overrides qemuboot-x86.inc) +QB_MACHINE = "-machine q35" +QB_SYSTEM_NAME_x86-64 = "qemu-system-x86_64" +QB_CPU_x86-64 = "-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt" +QB_CPU_KVM_x86-64 = "-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt" + +# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy +QB_OPT_APPEND = "-vga vmware -show-cursor -usb -device usb-tablet -device virtio-rng-pci" diff --git a/meta-agl-core/conf/distro/poky-agl.conf b/meta-agl-core/conf/distro/poky-agl.conf new file mode 100644 index 000000000..63a1960af --- /dev/null +++ b/meta-agl-core/conf/distro/poky-agl.conf @@ -0,0 +1,208 @@ +require conf/distro/poky.conf + +# AGL specific derivations +DISTRO = "poky-agl" +DISTRO_NAME = "Automotive Grade Linux" + + +# Release flags +DISTRO_CODENAME = "koi" +AGL_BRANCH = "master" +AGLVERSION = "10.90.0" +# switch devel/release +AGLRELEASETYPE ?= "agldevelopment" +#AGLRELEASETYPE ?= "aglrelease" +OVERRIDES .= ":${AGLRELEASETYPE}" +# + +#for development +DISTRO_VERSION_agldevelopment := "${AGLVERSION}+snapshot-${DATE}" +AGL_APP_REVISION_agldevelopment = "${AUTOREV}" +AGL_DEFAULT_REVISION_agldevelopment = "${AUTOREV}" + +#for release +DISTRO_VERSION_aglrelease := "${AGLVERSION}" +DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace('+snapshot-${DATE}','')}" +AGL_APP_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}" +AGL_DEFAULT_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}" + +# reproducible builds: +# enable the flag +BUILD_REPRODUCIBLE_BINARIES = "1" +# Set the desired timestamps +export SOURCE_DATE_EPOCH = "1593400000" +REPRODUCIBLE_TIMESTAMP_ROOTFS = "1593400000" +# inherit the class +INHERIT += "reproducible_build" + + +# SDK +SDK_VENDOR = "-aglsdk" +SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}" + +# SDKPATH is the folder where the SDK is going to be installed +# Due to an issue with the qt5 environment (see SPEC-1667), +# we add DEFAULTTUNE to the SDKPATH to mitigate the issue. +SDKPATH = "/opt/agl-sdk/${SDK_VERSION}-${DEFAULTTUNE}" + + +MAINTAINER = "AGL https://lists.automotivelinux.org/g/agl-dev-community" + +TARGET_VENDOR = "-agl" + +# Override these in poky based distros +AGL_DEFAULT_DISTRO_FEATURES = "largefile systemd opengl wayland pam bluetooth bluez5 3g polkit" +POKY_DEFAULT_DISTRO_FEATURES := "${AGL_DEFAULT_DISTRO_FEATURES}" +OVERRIDES .= ":${DISTRO_CODENAME}" + +QEMU_TARGETS ?= "arm aarch64 i386 x86_64 riscv64" +# Other QEMU_TARGETS "mips mips64 mips64el ppc sh4" + +MIRRORS =+ "\ +bzr://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +cvs://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +git://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +gitsm://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +hg://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +osc://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +p4://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +svn://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +bzr://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +cvs://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +git://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +gitsm://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +hg://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +osc://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +p4://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +svn://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ + \ +ftp://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +http://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +https://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ +ftp://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +http://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +https://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ +" + +# The CONNECTIVITY_CHECK_URI's are used to test whether we can succesfully +# fetch from the network (and warn you if not). To disable the test set +# the variable to be empty. +# Git example url: git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=HEAD +CONNECTIVITY_CHECK_URIS ?= "" + +PREFERRED_PROVIDER_udev ?= "systemd" +PREFERRED_PROVIDER_udev-utils ?= "systemd" + +VIRTUAL-RUNTIME_init_manager = "systemd" +VIRTUAL-RUNTIME_initscripts = "" + +# network manager to use (possible values: systemd, connman) +VIRTUAL-RUNTIME_net_manager = "connman" + +DISTRO_FEATURES_APPEND = " " +DISTRO_FEATURES_remove = "x11" +DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit pulseaudio" + +# Prefer GStreamer 1.16.x by default +PREFERRED_VERSION_gstreamer1.0 ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-plugins-bad ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-plugins-base ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-plugins-good ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-plugins-ugly ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-libav ?= "1.16.%" +PREFERRED_VERSION_gstreamer1.0-omx ?= "1.16.%" + +# Prefer libjpeg-turbo +PREFERRED_PROVIDER_jpeg = "libjpeg-turbo" + +# using multiple BSP layers causes dangling bbappends in meta-agl-bsp +# turn it into a warning +#BB_DANGLINGAPPENDS_WARNONLY = "1" + +# Not yet upstreamed; should be submitted. +SECURITY_CFLAGS_pn-qtwebengine = "${SECURITY_NO_PIE_CFLAGS}" + +#Redefined USER_CLASSES +#Disable prelink. It is unmaintained and likely will go away. +#default: USER_CLASSES ?= "buildstats image-mklibs image-prelink" +USER_CLASSES = "buildstats image-mklibs" + +# AGL uses 4 optimization levels +# 2 for ARM 32bit +# - a high and a medium setting for the CCARGS +# - the high setting is default (needs >= cortex-a15) +# - the medium setting is enabled with: DISTRO_FEATURES_append = " agl-medium-arm-compiler " +# 1 for ARM 64bit / AARCH64 +# 1 for x86-64 +# 1 for RISC-V 64-bit +require conf/distro/include/${TARGET_ARCH}-tune.inc + +# Generic qemu and qemuboot (runqemu) enhancements +# check qemuboot.bbclass +# - use 2G RAM by default +QB_MEM ?= "-m 2048" +# use pulseaudio on the host side - off as qemu-native is built with alsa +#QB_AUDIO_DRV = "pa" +# expose a virtual 'hda' sound card to the guest (arm/aarch64/x86-64) +QB_AUDIO_OPT = "-soundhw hda" + +# Board templates can add extra IMAGE_FSTYPES through this. +# It is added (late) through the AGL image recipes. +AGL_EXTRA_IMAGE_FSTYPES ??= "" +AGL_EXTRA_INITRAMFS_FSTYPES ??= "" +# +# Default IMAGE FSTYPES wic.xz +AGL_DEFAULT_IMAGE_FSTYPES ?= "wic.xz wic.bmap wic.xz.sha256sum" +AGL_DEFAULT_IMAGE_FSTYPES_qemuall ?= "${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}" +AGL_DEFAULT_IMAGE_FSTYPES_append_netboot = " ${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}" +AGL_DEFAULT_INITRAMFS_FSTYPES ?= "ext4.gz" + +# DEFAULT IMAGE_FSTYPES for AGL (no - BSPs should not set this) +# +IMAGE_FSTYPES := "${AGL_DEFAULT_IMAGE_FSTYPES} ${AGL_EXTRA_IMAGE_FSTYPES}" +INITRAMFS_FSTYPES := "${AGL_DEFAULT_INITRAMFS_FSTYPES} ${AGL_EXTRA_INITRAMFS_FSTYPES}" +# +# THE FUTURE is 'wic' +# IMAGE_FSTYPES_append = " wic" + +# enable the packagemanagement +IMAGE_FEATURES =+ "package-management" +PACKAGE_FEED_URIS = "http://192.168.7.1:8000/tmp/deploy/" +PACKAGE_FEED_BASE_PATHS = "rpm" +PACKAGE_FEED_ARCHS = "" +#${PACKAGE_ARCHS}" + +# Complementary package definitions for agl-test-wgt and agl-devel-wgt +# image features +COMPLEMENTARY_GLOB[agl-test-wgt] = '*-test' +COMPLEMENTARY_GLOB[agl-devel-wgt] = '*-coverage *-debug' + +# Fix for rpm metadata clash between nativesdk-cmake and nativesdk-qtbase-tools +# (revalidate after 2017-10-15, 2018-06-12: still required) +DIRFILES_pn-nativesdk-cmake = "1" + +# For https://jira.automotivelinux.org/browse/SPEC-1629 : +# We exclude the conflicting vars from the sstate task hash. +# This needs to be verified. +do_package_write_rpm[vardepsexclude] += "ARCHIVER_TOPDIR PF" + +# Set preferred provider to new navi application +PREFERRED_RPROVIDER_virtual/navigation ?= "ondemandnavi" + +# Set preferred provider for low-can device mapping configuration +PREFERRED_RPROVIDER_virtual/low-can-dev-mapping ?= "dev-mapping" + +# Mask upstream meta-security bbappend that interferes with non-linux-yocto +# kernels due to the bug of having two wildcards, which bitbake does not +# support. Not having it is not an issue, since there is also explicit +# enabling of required security features done by meta-agl/meta-security. +BBMASK += "meta-security/recipes-kernel/linux/linux-%_5.%.bbappend" + +# Workaround for https://jira.automotivelinux.org/browse/SPEC-3621 +# TLDR: do_image_wic will modify the target's /etc/fstab while +# do_image_tar and do_image_ext4 can run in parallel +# This needs to be fixed upstream: +# See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13994 +# For convenience restricted to ext4 and tar image types. +AGL_FORBID_FSTAB_UPDATE ?= "${@bb.utils.contains_any('IMAGE_FSTYPES', 'ext4 ext4.xz tar tar.gz tar.bz2 tar.xz', '--no-fstab-update', '', d)}" +WIC_CREATE_EXTRA_ARGS_append = " ${AGL_FORBID_FSTAB_UPDATE}" diff --git a/meta-agl-core/conf/include/agl-devel.inc b/meta-agl-core/conf/include/agl-devel.inc new file mode 100644 index 000000000..6ecd6a075 --- /dev/null +++ b/meta-agl-core/conf/include/agl-devel.inc @@ -0,0 +1,20 @@ +IMAGE_FEATURES =+ "debug-tweaks tools-debug tools-profile" + +IMAGE_INSTALL_append = " \ + packagegroup-agl-core-devel \ +" + +IMAGE_INSTALL_append = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic.vmdk wic.vmdk.xz', ' open-vm-tools vboxguestdrivers', '', d)}" + +# Install libdrm-test, including modetest, to images with GUI +IMAGE_INSTALL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', ' libdrm-tests', '', d)}" + +IMAGE_FEATURES_append = " agl-devel-wgt" + +# disable install of debug files in SDK +# initial value: SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs staticdev-pkgs" +SDKIMAGE_FEATURES="dev-pkgs" + +# allows insertion of code or items specific to developement +OVERRIDES .= ":agl-devel" +DISTRO_FEATURES_append = " agl-devel" diff --git a/meta-agl-core/conf/include/agl-gplv2.inc b/meta-agl-core/conf/include/agl-gplv2.inc new file mode 100644 index 000000000..fc9a4072b --- /dev/null +++ b/meta-agl-core/conf/include/agl-gplv2.inc @@ -0,0 +1,8 @@ +# GPLv3 Compliance +PREFERRED_VERSION_bash = "3.2.%" +PREFERRED_VERSION_gawk = "3.1.%" +PREFERRED_VERSION_gdbm = "1.8.%" +PREFERRED_VERSION_gnupg = "1.4.7" +PREFERRED_VERSION_gnutls = "3.3.%" +PREFERRED_VERSION_mc = "4.7.5.%" +PREFERRED_VERSION_readline = "5.2" diff --git a/meta-agl-core/conf/include/base-agl.inc b/meta-agl-core/conf/include/base-agl.inc new file mode 100644 index 000000000..5ca723a10 --- /dev/null +++ b/meta-agl-core/conf/include/base-agl.inc @@ -0,0 +1,22 @@ +# AGL includes all kernel modules here for ease-of-use during development. +# Comment this out to be able to select the kernel modules yourself. +IMAGE_INSTALL_append = " kernel-modules" + +# Likewise as we included all kernel modules by default in the filesystem, +# we do not need a separate tarball stored. +# Comment this out to receive the separate modules tarball again. +MODULE_TARBALL_DEPLOY ?= "0" + +# Comment out below if want to use QtWebkit +PACKAGECONFIG_remove_pn-qtquick1 = "webkit" + + +ASSUME_PROVIDED_remove = "tar-native" + +# Use static IDs to enable full-filesystem updates +USERADDEXTENSION = "useradd-staticids" +USERADD_ERROR_DYNAMIC = "error" +USERADD_GID_TABLES = "files/group" +USERADD_UID_TABLES = "files/passwd" + +AGL_FEATURES += "aglcore" diff --git a/meta-agl-core/conf/layer.conf b/meta-agl-core/conf/layer.conf new file mode 100644 index 000000000..2218e3d49 --- /dev/null +++ b/meta-agl-core/conf/layer.conf @@ -0,0 +1,17 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH =. "${LAYERDIR}:" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "aglcore" +BBFILE_PATTERN_aglcore = "^${LAYERDIR}/" +BBFILE_PRIORITY_aglcore = "60" + +LAYERSERIES_COMPAT_aglcore = "dunfell" +LAYERDEPENDS_aglcore = "core" + +# Sanity check for meta-virtualization layer. +# Setting SKIP_META_VIRT_SANITY_CHECK to "1" would skip the bbappend files check. +#INHERIT += "sanity-meta-agl-core" diff --git a/meta-agl-core/conf/local.conf.sample b/meta-agl-core/conf/local.conf.sample new file mode 100644 index 000000000..82c9dddc1 --- /dev/null +++ b/meta-agl-core/conf/local.conf.sample @@ -0,0 +1,277 @@ +# +# This file is your local configuration file and is where all local user settings +# are placed. The comments in this file give some guide to the options a new user +# to the system might want to change but pretty much any configuration option can +# be set in this file. More adventurous users can look at local.conf.extended +# which contains other examples of configuration which can be placed in this file +# but new users likely won't need any of them initially. +# +# Lines starting with the '#' character are commented out and in some cases the +# default values are provided as comments to show people example syntax. Enabling +# the option is a question of removing the # character and making any change to the +# variable as required. + +# +# Machine Selection +# +# You need to select a specific machine to target the build with. There are a selection +# of emulated machines available which can boot and run in the QEMU emulator: +# +#MACHINE ?= "qemuarm" +#MACHINE ?= "qemuarm64" +#MACHINE ?= "qemumips" +#MACHINE ?= "qemumips64" +#MACHINE ?= "qemuppc" +#MACHINE ?= "qemux86" +#MACHINE ?= "qemux86-64" +# +# There are also the following hardware board target machines included for +# demonstration purposes: +# +#MACHINE ?= "beaglebone-yocto" +#MACHINE ?= "genericx86" +#MACHINE ?= "genericx86-64" +#MACHINE ?= "edgerouter" +# +# This sets the default machine to be qemux86-64 if no other machine is selected: +MACHINE ??= "qemux86-64" + +# +# Where to place downloads +# +# During a first build the system will download many different source code tarballs +# from various upstream projects. This can take a while, particularly if your network +# connection is slow. These are all stored in DL_DIR. When wiping and rebuilding you +# can preserve this directory to speed up this part of subsequent builds. This directory +# is safe to share between multiple builds on the same machine too. +# +# The default is a downloads directory under TOPDIR which is the build directory. +# +#DL_DIR ?= "${TOPDIR}/downloads" + +# +# Where to place shared-state files +# +# BitBake has the capability to accelerate builds based on previously built output. +# This is done using "shared state" files which can be thought of as cache objects +# and this option determines where those files are placed. +# +# You can wipe out TMPDIR leaving this directory intact and the build would regenerate +# from these files if no changes were made to the configuration. If changes were made +# to the configuration, only shared state files where the state was still valid would +# be used (done using checksums). +# +# The default is a sstate-cache directory under TOPDIR. +# +#SSTATE_DIR ?= "${TOPDIR}/sstate-cache" + +# +# Where to place the build output +# +# This option specifies where the bulk of the building work should be done and +# where BitBake should place its temporary files and output. Keep in mind that +# this includes the extraction and compilation of many applications and the toolchain +# which can use Gigabytes of hard disk space. +# +# The default is a tmp directory under TOPDIR. +# +#TMPDIR = "${TOPDIR}/tmp" + +# +# Default policy config +# +# The distribution setting controls which policy settings are used as defaults. +# The default value is fine for general Yocto project use, at least initially. +# Ultimately when creating custom policy, people will likely end up subclassing +# these defaults. +# +DISTRO ?= "poky" +# As an example of a subclass there is a "bleeding" edge policy configuration +# where many versions are set to the absolute latest code from the upstream +# source control systems. This is just mentioned here as an example, its not +# useful to most new users. +# DISTRO ?= "poky-bleeding" + +# +# Package Management configuration +# +# This variable lists which packaging formats to enable. Multiple package backends +# can be enabled at once and the first item listed in the variable will be used +# to generate the root filesystems. +# Options are: +# - 'package_deb' for debian style deb files +# - 'package_ipk' for ipk files are used by opkg (a debian style embedded package manager) +# - 'package_rpm' for rpm style packages +# E.g.: PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk" +# We default to rpm: +PACKAGE_CLASSES ?= "package_rpm" + +# +# SDK target architecture +# +# This variable specifies the architecture to build SDK items for and means +# you can build the SDK packages for architectures other than the machine you are +# running the build on (i.e. building i686 packages on an x86_64 host). +# Supported values are i686 and x86_64 +#SDKMACHINE ?= "i686" + +# +# Extra image configuration defaults +# +# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated +# images. Some of these options are added to certain image types automatically. The +# variable can contain the following options: +# "dbg-pkgs" - add -dbg packages for all installed packages +# (adds symbol information for debugging/profiling) +# "src-pkgs" - add -src packages for all installed packages +# (adds source code for debugging) +# "dev-pkgs" - add -dev packages for all installed packages +# (useful if you want to develop against libs in the image) +# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages +# (useful if you want to run the package test suites) +# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.) +# "tools-debug" - add debugging tools (gdb, strace) +# "eclipse-debug" - add Eclipse remote debugging support +# "tools-profile" - add profiling tools (oprofile, lttng, valgrind) +# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.) +# "debug-tweaks" - make an image suitable for development +# e.g. ssh root access has a blank password +# There are other application targets that can be used here too, see +# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details. +# We default to enabling the debugging tweaks. +EXTRA_IMAGE_FEATURES ?= "debug-tweaks" + +# +# Additional image features +# +# The following is a list of additional classes to use when building images which +# enable extra features. Some available options which can be included in this variable +# are: +# - 'buildstats' collect build statistics +# - 'image-mklibs' to reduce shared library files size for an image +# - 'image-prelink' in order to prelink the filesystem image +# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink +# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended +USER_CLASSES ?= "buildstats image-mklibs image-prelink" + +# +# Runtime testing of images +# +# The build system can test booting virtual machine images under qemu (an emulator) +# after any root filesystems are created and run tests against those images. It can also +# run tests against any SDK that are built. To enable this uncomment these lines. +# See classes/test{image,sdk}.bbclass for further details. +#IMAGE_CLASSES += "testimage testsdk" +#TESTIMAGE_AUTO_qemuall = "1" + +# +# Interactive shell configuration +# +# Under certain circumstances the system may need input from you and to do this it +# can launch an interactive shell. It needs to do this since the build is +# multithreaded and needs to be able to handle the case where more than one parallel +# process may require the user's attention. The default is iterate over the available +# terminal types to find one that works. +# +# Examples of the occasions this may happen are when resolving patches which cannot +# be applied, to use the devshell or the kernel menuconfig +# +# Supported values are auto, gnome, xfce, rxvt, screen, konsole (KDE 3.x only), none +# Note: currently, Konsole support only works for KDE 3.x due to the way +# newer Konsole versions behave +#OE_TERMINAL = "auto" +# By default disable interactive patch resolution (tasks will just fail instead): +PATCHRESOLVE = "noop" + +# +# Disk Space Monitoring during the build +# +# Monitor the disk space during the build. If there is less that 1GB of space or less +# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully +# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard abort +# of the build. The reason for this is that running completely out of space can corrupt +# files and damages the build in ways which may not be easily recoverable. +# It's necesary to monitor /tmp, if there is no space left the build will fail +# with very exotic errors. +BB_DISKMON_DIRS ??= "\ + STOPTASKS,${TMPDIR},1G,100K \ + STOPTASKS,${DL_DIR},1G,100K \ + STOPTASKS,${SSTATE_DIR},1G,100K \ + STOPTASKS,/tmp,100M,100K \ + ABORT,${TMPDIR},100M,1K \ + ABORT,${DL_DIR},100M,1K \ + ABORT,${SSTATE_DIR},100M,1K \ + ABORT,/tmp,10M,1K" + +# +# Shared-state files from other locations +# +# As mentioned above, shared state files are prebuilt cache data objects which can +# used to accelerate build time. This variable can be used to configure the system +# to search other mirror locations for these objects before it builds the data itself. +# +# This can be a filesystem directory, or a remote url such as http or ftp. These +# would contain the sstate-cache results from previous builds (possibly from other +# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the +# cache locations to check for the shared objects. +# NOTE: if the mirror uses the same structure as SSTATE_DIR, you need to add PATH +# at the end as shown in the examples below. This will be substituted with the +# correct path within the directory structure. +#SSTATE_MIRRORS ?= "\ +#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \ +#file://.* file:///some/local/dir/sstate/PATH" + +# +# Yocto Project SState Mirror +# +# The Yocto Project has prebuilt artefacts available for its releases, you can enable +# use of these by uncommenting the following line. This will mean the build uses +# the network to check for artefacts at the start of builds, which does slow it down +# equally, it will also speed up the builds by not having to build things if they are +# present in the cache. It assumes you can download something faster than you can build it +# which will depend on your network. +# +#SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/2.5/PATH;downloadfilename=PATH" + +# +# Qemu configuration +# +# By default native qemu will build with a builtin VNC server where graphical output can be +# seen. The line below enables the SDL UI frontend too. +PACKAGECONFIG_append_pn-qemu-system-native = " sdl" +# By default libsdl2-native will be built, if you want to use your host's libSDL instead of +# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below. +#ASSUME_PROVIDED += "libsdl2-native" + +# You can also enable the Gtk UI frontend, which takes somewhat longer to build, but adds +# a handy set of menus for controlling the emulator. +#PACKAGECONFIG_append_pn-qemu-system-native = " gtk+" + +# +# Hash Equivalence +# +# Enable support for automatically running a local hash equivalence server and +# instruct bitbake to use a hash equivalence aware signature generator. Hash +# equivalence improves reuse of sstate by detecting when a given sstate +# artifact can be reused as equivalent, even if the current task hash doesn't +# match the one that generated the artifact. +# +# A shared hash equivalent server can be set with ":" format +# +#BB_HASHSERVE = "auto" +#BB_SIGNATURE_HANDLER = "OEEquivHash" + +# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to +# track the version of this file when it was generated. This can safely be ignored if +# this doesn't mean anything to you. +CONF_VERSION = "1" + +# meta-agl-core uses these variables +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +DISTRO_FEATURES_append = " systemd " +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# soon: INIT_MANAGER = "systemd" diff --git a/meta-agl-core/files/group b/meta-agl-core/files/group new file mode 100644 index 000000000..c309f6a05 --- /dev/null +++ b/meta-agl-core/files/group @@ -0,0 +1,92 @@ +root::0: +daemon::1: +bin::2: +sys::3: +adm::4: +tty::5: +disk::6: +lp::7: +mail::8: +news::9: +uucp::10: +man::12: +proxy::13: +kmem::15: +input::19: +dialout::20: +fax::21: +voice::22: +cdrom::24: +floppy::25: +tape::26: +sudo::27: +audio::29: +dip::30: +www-data::33: +backup::34: +operator::37: +list::38: +irc::39: +src::40: +gnats::41: +shadow::42: +utmp::43: +video::44: +sasl::45: +plugdev::46: +staff::50: +games::60: +shutdown::70: +users::100: +nogroup::65534: +cynagora::999: +dhcp::998: +avahi::997: +tracing::1000: +sshd::996: +systemd-bus-proxy::995: +netdev::993: +messagebus::994: +afm::992: +weston-launch::986: +lock::990: +systemd-journal::989: +systemd-timesync::988: +systemd-coredump::888: +pulse::991: +bind::987: +trinity::985: +mpd::984: +mysql::983: +polkitd::982: +datetime::981: +network::980: +zabbix::979: +nm-openvpn::978: +xuser::2002: +builder::977: +rpc::976: +crontab::975: +lpadmin::974: +_apt::972: +rpcuser::970: +avahi-autoipd::969: +ntp::968: +dovecot::967: +dovenull::966: +quagga::965: +quaggavty::964: +rwhod::963: +ftp::962: +squid::960: +postfix::959: +vmail::958: +opensaf::957: +lldpd::956: +postdrop::954: +display::200: +agl-driver::1001: +agl-passenger::1002: +systemd-network::1005: +systemd-resolve::1006: +mosquitto::1007: diff --git a/meta-agl-core/files/passwd b/meta-agl-core/files/passwd new file mode 100644 index 000000000..ac70c0f9b --- /dev/null +++ b/meta-agl-core/files/passwd @@ -0,0 +1,62 @@ +root::0:0::: +daemon::1:1::: +bin::2:2::: +sys::3:3::: +sync::4:65534::: +games::5:60::: +man::6:12::: +lp::7:7::: +mail::8:8::: +news::9:9::: +uucp::10:10::: +proxy::13:13::: +www-data::33:33::: +backup::34:34::: +list::38:38::: +irc::39:39::: +gnats::41:41::: +nobody::65534:65534::: +cynagora::999:999::: +dhcp::998:998::: +avahi::997:997::: +sshd::996:996::: +systemd-bus-proxy::995:995::: +agl-driver::1001:1001::: +agl-passenger::1002:1002::: +messagebus::994:994::: +afm::992:992::: +systemd-timesync::988:988::: +systemd-coredump::888:888::: +pulse::991:991::: +bind::987:987::: +trinity::985:985::: +mpd::984:984::: +mysql::983:983::: +polkitd::982:982::: +zabbix::979:979::: +nm-openvpn::978:978::: +xuser::2002:2002::: +builder::977:977::: +rpc::976:976::: +distcc::973:65534::: +_apt::972:972::: +ppp::971:65534::: +rpcuser::970:970::: +avahi-autoipd::969:969::: +ntp::968:968::: +dovecot::967:967::: +dovenull::966:966::: +quagga::965:965::: +rwhod::963:963::: +ftp::962:962::: +radvd::961:65534::: +squid::960:960::: +postfix::959:959::: +vmail::958:958::: +opensaf::957:957::: +lldpd::956:956::: +cyrus::955:8::: +display::200:200::: +systemd-network::1005:1005::: +systemd-resolve::1006:1006::: +mosquitto::1007:1007::: diff --git a/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend b/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc b/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc new file mode 100644 index 000000000..babf0261f --- /dev/null +++ b/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +SRC_URI_append = " file://enable-wget-https.cfg" + diff --git a/meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg b/meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg new file mode 100644 index 000000000..e92006bef --- /dev/null +++ b/meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg @@ -0,0 +1,3 @@ +# Thu Jun 8 17:32:07 2017 +CONFIG_FEATURE_WGET_OPENSSL=y +CONFIG_FEATURE_WGET_SSL_HELPER=y diff --git a/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb new file mode 100644 index 000000000..61086dfe7 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb @@ -0,0 +1,27 @@ +SUMMARY = "A simple ncurses interface for connman" +DESCRIPTION = "A simple ncurses interface for connman" +HOMEPAGE = "https://gitlab.com/iotbzh/connman-json-client" + +SECTION = "console/network" + +DEPENDS = "dbus ncurses connman json-c" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=8c16666ae6c159876a0ba63099614381" + +SRC_URI = "git://gitlab.com/iotbzh/connman-json-client.git;protocol=https" +SRCREV = "2b0f93ec9518c978c04807fe52e95315d6d80e6b" + +inherit autotools pkgconfig + +EXTRA_AUTORECONF += " -i" +EXTRA_OECONF += " --disable-optimization --enable-debug" + +S = "${WORKDIR}/git" + +do_install () { + install -dm755 ${D}${bindir} + install -Dm755 connman_ncurses ${D}${bindir} +} + +FILES_${PN} = "${bindir}/connman_ncurses" diff --git a/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend b/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend new file mode 100644 index 000000000..8078f3d34 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'connman_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc b/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc new file mode 100644 index 000000000..469345880 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc @@ -0,0 +1,20 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI += "file://0001-disable-when-booting-over-nfs.patch \ + file://main.conf \ +" + +FILES_${PN} += "${sysconfdir}/connman/main.conf" + +PACKAGECONFIG[session-policy-local] = "--enable-session-policy-local,--disable-session-policy-local," +PACKAGECONFIG_append = " session-policy-local" + +do_install_append() { + install -d ${D}${sysconfdir}/connman + install -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/connman + + # Need to ignore eth1 in cluster demo setup + if ${@bb.utils.contains('DISTRO_FEATURES', 'agl-cluster-demo-support', 'true', 'false', d)}; then + sed -i 's/^\(NetworkInterfaceBlacklist=.*\)/\1,eth1/' ${D}${sysconfdir}/connman/main.conf + fi +} diff --git a/meta-agl-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch b/meta-agl-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch new file mode 100644 index 000000000..f129a6580 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch @@ -0,0 +1,10 @@ +--- connman-1.36.orig/src/connman.service.in 2019-02-18 18:02:07.034947373 -0500 ++++ connman-1.36/src/connman.service.in 2019-02-18 18:07:24.689959219 -0500 +@@ -7,6 +7,7 @@ + Before=network.target multi-user.target shutdown.target + Wants=network.target + Conflicts=systemd-resolved.service ++ConditionKernelCommandLine=!root=/dev/nfs + + [Service] + Type=dbus diff --git a/meta-agl-core/recipes-connectivity/connman/files/main.conf b/meta-agl-core/recipes-connectivity/connman/files/main.conf new file mode 100644 index 000000000..4dba25b70 --- /dev/null +++ b/meta-agl-core/recipes-connectivity/connman/files/main.conf @@ -0,0 +1,3 @@ +[General] +FallbackTimeservers=pool.ntp.org +NetworkInterfaceBlacklist=vmnet,vboxnet,virbr,ifb,meth diff --git a/meta-agl-core/recipes-core/systemd/.appends.core b/meta-agl-core/recipes-core/systemd/.appends.core new file mode 100644 index 000000000..e69de29bb diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend b/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc b/meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc new file mode 100644 index 000000000..6661eab6c --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc @@ -0,0 +1,4 @@ +do_install_append() { + # Remove ethernet script deployed by upstream unconditionally (SPEC-3221) + rm -rf ${D}${systemd_unitdir}/network/80-wired.network || true +} \ No newline at end of file diff --git a/meta-agl-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch b/meta-agl-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch new file mode 100644 index 000000000..29165b58e --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch @@ -0,0 +1,34 @@ +Fix udevd SECLABEL token parsing + +The udevd rules parsing rewrite in v243 broke SECLABEL parsing, +with the result being that udevd crashes when it parses a line +containing a SECLABEL token. Fix the handling of the attribute +of SECLABEL tokens when parsing, and add a check to prevent +crashes if the attribute is missing. + +Upstream-Status: Pending + +Signed-off-by: Scott Murray + +diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c +index efea16e5c5..3e757ccb06 100644 +--- a/src/udev/udev-rules.c ++++ b/src/udev/udev-rules.c +@@ -918,7 +918,7 @@ static int parse_token(UdevRules *rules, const char *key, char *attr, UdevRuleOp + op = OP_ASSIGN; + } + +- r = rule_line_add_token(rule_line, TK_A_SECLABEL, op, value, NULL); ++ r = rule_line_add_token(rule_line, TK_A_SECLABEL, op, value, attr); + } else if (streq(key, "RUN")) { + if (is_match || op == OP_REMOVE) + return log_token_invalid_op(rules, key); +@@ -1927,6 +1927,8 @@ static int udev_rule_apply_token_to_event( + _cleanup_free_ char *name = NULL, *label = NULL; + char label_str[UTIL_LINE_SIZE] = {}; + ++ if (!token->data) ++ break; + name = strdup((const char*) token->data); + if (!name) + return log_oom(); diff --git a/meta-agl-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch b/meta-agl-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch new file mode 100644 index 000000000..feaff2736 --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch @@ -0,0 +1,107 @@ +From 1e6ffb3129340291027d2690631f62eb7d0e0a78 Mon Sep 17 00:00:00 2001 +From: Matt Ranostay +Date: Tue, 11 Feb 2020 18:13:45 -0800 +Subject: [PATCH] network: add CAN Termination tristate option + +Upstream-Status: Submitted +Signed-off-by: Matt Ranostay +--- + src/libsystemd/sd-netlink/netlink-types.c | 1 + + src/network/networkd-can.c | 13 +++++++++++++ + src/network/networkd-network-gperf.gperf | 1 + + src/network/networkd-network.c | 1 + + src/network/networkd-network.h | 1 + + test/fuzz/fuzz-network-parser/directives.network | 1 + + 6 files changed, 18 insertions(+) + +diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c +index a55460f034..96e211dcf0 100644 +--- a/src/libsystemd/sd-netlink/netlink-types.c ++++ b/src/libsystemd/sd-netlink/netlink-types.c +@@ -316,6 +316,7 @@ static const NLType rtnl_link_info_data_can_types[] = { + [IFLA_CAN_BITTIMING] = { .size = sizeof(struct can_bittiming) }, + [IFLA_CAN_RESTART_MS] = { .type = NETLINK_TYPE_U32 }, + [IFLA_CAN_CTRLMODE] = { .size = sizeof(struct can_ctrlmode) }, ++ [IFLA_CAN_TERMINATION] = { .type = NETLINK_TYPE_U16 }, + }; + + static const NLType rtnl_link_info_data_macsec_types[] = { +diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c +index 5755df57bd..3abe8ae2ed 100644 +--- a/src/network/networkd-can.c ++++ b/src/network/networkd-can.c +@@ -9,6 +9,8 @@ + #include "networkd-manager.h" + #include "string-util.h" + ++#define CAN_TERMINATION_OHM_VALUE 120 ++ + static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { + int r; + +@@ -152,6 +154,17 @@ static int link_set_can(Link *link) { + return log_link_error_errno(link, r, "Could not append IFLA_CAN_CTRLMODE attribute: %m"); + } + ++ if (link->network->can_termination >= 0) { ++ ++ log_link_debug(link, "%sabling can-termination", link->network->can_termination ? "En" : "Dis"); ++ ++ r = sd_netlink_message_append_u16(m, IFLA_CAN_TERMINATION, ++ link->network->can_termination ? CAN_TERMINATION_OHM_VALUE : 0); ++ if (r < 0) ++ return log_link_error_errno(link, r, "Could not append IFLA_CAN_TERMINATION attribute: %m"); ++ ++ } ++ + r = sd_netlink_message_close_container(m); + if (r < 0) + return log_link_error_errno(link, r, "Failed to close netlink container: %m"); +diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf +index f7e68be181..b3df4f3960 100644 +--- a/src/network/networkd-network-gperf.gperf ++++ b/src/network/networkd-network-gperf.gperf +@@ -245,6 +245,7 @@ CAN.BitRate, config_parse_si_size, + CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point) + CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us) + CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling) ++CAN.Termination, config_parse_tristate, 0, offsetof(Network, can_termination) + TrafficControlQueueingDiscipline.Parent, config_parse_tc_qdiscs_parent, 0, 0 + TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_tc_network_emulator_delay, 0, 0 + TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_tc_network_emulator_delay, 0, 0 +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index 6e443975f1..0ea5c05db7 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -448,6 +448,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi + .keep_configuration = _KEEP_CONFIGURATION_INVALID, + + .can_triple_sampling = -1, ++ .can_termination = -1, + .ip_service_type = -1, + }; + +diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h +index aa74bb4ae7..6a1f094156 100644 +--- a/src/network/networkd-network.h ++++ b/src/network/networkd-network.h +@@ -193,6 +193,7 @@ struct Network { + unsigned can_sample_point; + usec_t can_restart_us; + int can_triple_sampling; ++ int can_termination; + + AddressFamily ip_forward; + bool ip_masquerade; +diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network +index 5bd80dece8..781269d960 100644 +--- a/test/fuzz/fuzz-network-parser/directives.network ++++ b/test/fuzz/fuzz-network-parser/directives.network +@@ -194,6 +194,7 @@ SamplePoint= + BitRate= + RestartSec= + TripleSampling= ++Termination= + [Address] + DuplicateAddressDetection= + AutoJoin= diff --git a/meta-agl-core/recipes-core/systemd/systemd/canbus-can.network b/meta-agl-core/recipes-core/systemd/systemd/canbus-can.network new file mode 100644 index 000000000..ae5514bca --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd/canbus-can.network @@ -0,0 +1,6 @@ +[Match] +Name=can* + +[CAN] +BitRate=500K +RestartSec=0.1 diff --git a/meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf b/meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf new file mode 100644 index 000000000..b774f9ebf --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf @@ -0,0 +1,3 @@ +[options] +# This will prevent e2fsck from stopping boot just because the clock is wrong +broken_system_clock = 1 diff --git a/meta-agl-core/recipes-core/systemd/systemd/wired.network b/meta-agl-core/recipes-core/systemd/systemd/wired.network new file mode 100644 index 000000000..3559b0155 --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd/wired.network @@ -0,0 +1,5 @@ +[Match] +Name=eth* en* + +[Network] +DHCP=yes diff --git a/meta-agl-core/recipes-core/systemd/systemd_%.bbappend b/meta-agl-core/recipes-core/systemd/systemd_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc new file mode 100644 index 000000000..feca107a8 --- /dev/null +++ b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc @@ -0,0 +1,34 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/systemd:" + +SRC_URI += "\ + file://0002-network-add-CAN-Termination-tristate-option.patch \ + file://e2fsck.conf \ + file://canbus-can.network \ + ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','file://wired.network','',d)} \ +" + +# enable networkd/resolved support +PACKAGECONFIG_append_pn-systemd = " \ + ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','networkd resolved','',d)} \ +" + +do_install_append() { + # Install /etc/e2fsck.conf to avoid boot stuck by wrong clock time + install -m 644 -p -D ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/e2fsck.conf + + # Install canbus network script + install -m 0644 ${WORKDIR}/canbus-can.network ${D}${nonarch_base_libdir}/systemd/network/60-canbus-can.network + + if ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','true','false',d)}; then + # Install DHCP configuration for Ethernet adapters + install -m 644 ${WORKDIR}/wired.network ${D}${sysconfdir}/systemd/network + fi +} + +FILES_${PN} += "${sysconfdir}/e2fsck.conf " + +# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd +PACKAGECONFIG_remove = "timesyncd" + +# Enable systemd-coredump when agl-devel is set on +PACKAGECONFIG_append_agl-devel = " coredump" diff --git a/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend b/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc b/meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc new file mode 100644 index 000000000..2de1e6836 --- /dev/null +++ b/meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc @@ -0,0 +1,9 @@ +FILESEXTRAPATHS_append := ":${THISDIR}/files" + +SRC_URI_append_class-nativesdk = " \ + file://environment.d-cmake-agl.sh \ +" + +do_install_append_class-nativesdk() { + install -m 644 ${WORKDIR}/environment.d-cmake-agl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake-agl.sh +} diff --git a/meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh b/meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh new file mode 100644 index 000000000..64b6cf3c6 --- /dev/null +++ b/meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh @@ -0,0 +1 @@ +export OE_CMAKE_TOOLCHAIN_FILE="$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake" diff --git a/meta-agl-core/recipes-devtools/gdb/.appends.core b/meta-agl-core/recipes-devtools/gdb/.appends.core new file mode 100644 index 000000000..e69de29bb diff --git a/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend b/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc b/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc new file mode 100644 index 000000000..7cba933af --- /dev/null +++ b/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc @@ -0,0 +1 @@ +PACKAGECONFIG_remove = "readline" diff --git a/meta-agl-core/recipes-extended/gperf/.appends.core b/meta-agl-core/recipes-extended/gperf/.appends.core new file mode 100644 index 000000000..e69de29bb diff --git a/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend b/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend new file mode 100644 index 000000000..980783236 --- /dev/null +++ b/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc b/meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc new file mode 100644 index 000000000..2a590838b --- /dev/null +++ b/meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc @@ -0,0 +1 @@ +BBCLASSEXTEND += "nativesdk" diff --git a/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf b/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf new file mode 100644 index 000000000..bbd5a80c4 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf @@ -0,0 +1,34 @@ +##Generate a weston.ini file: + +To modify any of the default sections (core, shell, ivi-shell), add a +do_configure() function to your bbappend: + +''' +do_configure() { + echo repaint-window=34 >> ${WORKDIR}/core.cfg + + echo transition-duration=300 >> ${WORKDIR}/ivishell.cfg + echo cursor-theme=default >> ${WORKDIR}/ivishell.cfg +} +''' +or: +''' +do_configure() { + sed -i -e 's/drm-backend/fbdev-backend/' ${WORKDIR}/core.cfg +} +''' + +To change the display from the default assumption of an HDMI-1-A connected +screen that needs to be rotated 270 degrees: + +''' +SRC_URI_remove = "file://hdmi-a-1-270.cfg" +SRC_URI += "file://hdmi-a-1-90.cfg" +''' + +To add new sections just list them in SRC_URI: +''' +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://dsi.cfg" +''' diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb new file mode 100644 index 000000000..553f3a6bf --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb @@ -0,0 +1,28 @@ +SUMMARY = "Reference Wayland compositor for AGL" +DESCRIPTION = "The AGL compositor is a reference Wayland server for Automotive \ +Grade Linux, using libweston as a base to provide a graphical environment for \ +the automotive environment." + +HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fagl-compositor" +SECTION = "x11" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0" + +DEPENDS = "wayland wayland-protocols wayland-native weston" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "bdd8dd718496dc8e4330209c46c196442bcf7d3e" + +PV = "0.0.10+git${SRCPV}" +S = "${WORKDIR}/git" + +PACKAGECONFIG[policy-deny-all] = "-Dpolicy-default=deny-all,," + +inherit meson pkgconfig python3native + +FILES_${PN} = " \ + ${bindir}/agl-compositor \ + ${bindir}/agl-screenshooter \ + ${datadir}/${PN}/protocols/agl-shell.xml \ + ${datadir}/${PN}/protocols/agl-shell-desktop.xml \ + " diff --git a/meta-agl-core/recipes-graphics/wayland/waltham-transmitter_git.bb b/meta-agl-core/recipes-graphics/wayland/waltham-transmitter_git.bb new file mode 100644 index 000000000..85f760709 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham-transmitter_git.bb @@ -0,0 +1,34 @@ +DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise" +HOMEPAGE = "https://github.com/waltham/waltham" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://waltham-transmitter/COPYING;md5=f21c9af4de068fb53b83f0b37d262ec3" + +DEPENDS += "libdrm virtual/kernel wayland wayland-native waltham weston gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad wayland-ivi-extension" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/weston-ivi-plugins.git;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "5287483228fa1e28f3217a54606cfe760c6582bd" + +S = "${WORKDIR}/git/" + +WALTHAM_PIPELINE_TRANSMITTER ?= "waltham-transmitter/waltham-renderer/pipeline_example_general.cfg" +WALTHAM_PIPELINE_RECEIVER ?= "waltham-receiver/receiver_pipeline_example_general.cfg" +WALTHAM_RECIEVER_IP ?= "192.168.1.2" +WALTHAM_RECEIVER_PORT ?= "3440" + +inherit pkgconfig cmake + +do_install_append () { + install -d ${D}/etc/xdg/weston/ + install ${S}/${WALTHAM_PIPELINE_TRANSMITTER} ${D}/etc/xdg/weston/transmitter_pipeline.cfg + install ${S}/${WALTHAM_PIPELINE_RECEIVER} ${D}/etc/xdg/weston/receiver_pipeline.cfg + + sed -i -e "s/YOUR_RECIEVER_IP/${WALTHAM_RECIEVER_IP}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg + sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg + sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/receiver_pipeline.cfg + +} + +FILES_${PN} += "/etc/xdg/weston/*.cfg" +FILES_${PN} += "${libdir}/*" +FILES_${PN} += "${bindir}/*" diff --git a/meta-agl-core/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch b/meta-agl-core/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch new file mode 100644 index 000000000..32c2df3c4 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch @@ -0,0 +1,51 @@ +From 6ecdf10a10929164f3cbdb754ae91d27576e5036 Mon Sep 17 00:00:00 2001 +From: Marius Vlad +Date: Fri, 16 Oct 2020 18:57:38 +0300 +Subject: [PATCH] Use python3 instead of 2 + +Signed-off-by: Marius Vlad +--- + configure.ac | 2 +- + tools/gen.py | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 5f65a6b..94b8644 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -32,7 +32,7 @@ AC_SUBST(VERSION_INFO) + # Check for programs + AC_PROG_CC + AC_PROG_CC_STDC +-AC_CHECK_PROGS([PYTHON2], [python2 python]) ++AC_CHECK_PROGS([PYTHON3], [python3 python]) + PKG_PROG_PKG_CONFIG() + + AC_ARG_ENABLE(gprof, +diff --git a/tools/gen.py b/tools/gen.py +index 19e8baa..64c5870 100755 +--- a/tools/gen.py ++++ b/tools/gen.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python2 ++#!/usr/bin/env python3 + # -*- coding: utf-8 -*- + + # Copyright © 2013-2014 Collabora, Ltd. +@@ -562,11 +562,11 @@ try: + opts, args = getopt.getopt(sys.argv[1:], "hp:i:o:t:m:", + ["preamble=", "input=", "output=", "type=", "mode="]) + except getopt.GetoptError: +- print 'gen.py -p -i -o -t -m ' ++ print('gen.py -p -i -o -t -m ') + sys.exit(2) + for opt, arg in opts: + if opt == '-h': +- print 'gen.py -p -i -o -t -m ' ++ print('gen.py -p -i -o -t -m ') + sys.exit() + elif opt in ("-p", "--preamble"): + preamble_files.append(arg) +-- +2.28.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch b/meta-agl-core/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch new file mode 100644 index 000000000..354bcbc15 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch @@ -0,0 +1,55 @@ +From cc87dddc2cdc0c20b053e3da1197efd671b4f50c Mon Sep 17 00:00:00 2001 +From: Marius Vlad +Date: Wed, 23 Sep 2020 22:33:50 +0300 +Subject: [PATCH 1/2] waltham: Fix compile build error + +Newer compilers will complain about the fact debug_message is declared +multiple times: + +multiple definition of `debug_message'; +.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: +first defined here multiple definition of `debug_message'; +.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: +first defined here /usr/bin/ld: +.libs/client-serialice.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: +multiple definition of `debug_message'; +.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: +first defined here + +Bug-AGL: SPEC-3649 + +Signed-off-by: Marius Vlad +--- + src/waltham/marshaller_log.h | 2 +- + src/waltham/waltham-util.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/waltham/marshaller_log.h b/src/waltham/marshaller_log.h +index 8254914..ffa87c1 100644 +--- a/src/waltham/marshaller_log.h ++++ b/src/waltham/marshaller_log.h +@@ -32,7 +32,7 @@ + /* Comment/uncomment to disable/enable debugging log */ + #define DEBUG + //#define PROFILE +-int debug_message; ++extern int debug_message; + + #ifdef DEBUG + static inline void DEBUG_STAMP (void) { +diff --git a/src/waltham/waltham-util.c b/src/waltham/waltham-util.c +index 410b114..8f898f8 100644 +--- a/src/waltham/waltham-util.c ++++ b/src/waltham/waltham-util.c +@@ -34,7 +34,7 @@ + #include "waltham-connection.h" + #include "waltham-private.h" + +-int debug_message; ++extern int debug_message; + + static void + wth_pfx_print(const char *pfx, const char *fmt, va_list argp) +-- +2.28.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch b/meta-agl-core/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch new file mode 100644 index 000000000..5aefb922b --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch @@ -0,0 +1,70 @@ +From d30005429fe92daa14151c2a6175d5cf19506cac Mon Sep 17 00:00:00 2001 +From: Marius Vlad +Date: Wed, 7 Oct 2020 16:36:38 +0300 +Subject: [PATCH 2/2] commandxml: Add support wthp_app_id interface + +With it, we hang off the app_id which we can use to pass it to the +receiver side. + +Bug-AGL: SPEC-3601 + +Signed-off-by: Marius Vlad +--- + data/command.xml | 29 +++++++++++++++++++++++++++++ + src/waltham/header-preamble.txt | 1 + + 2 files changed, 30 insertions(+) + +diff --git a/data/command.xml b/data/command.xml +index a03082b..cb53f75 100644 +--- a/data/command.xml ++++ b/data/command.xml +@@ -1814,6 +1814,35 @@ + + + ++ ++ ++ This interface is exposed as a global singleton. ++ This interface is implemented by servers that provide IVI-style user interfaces. ++ It allows clients to associate an ivi_surface with wthp_surface. ++ ++ ++ ++ ++ ++ ++ ++ ++ This request gives the wthp_surface the role of an IVI Surface. Creating more than ++ one ivi_surface for a wthp_surface is not allowed. Note, that this still allows the ++ following example: ++ ++ 1. create a wthp_surface ++ 2. create ivi_surface for the wthp_surface ++ 3. destroy the ivi_surface ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/waltham/header-preamble.txt b/src/waltham/header-preamble.txt +index df765cc..2409859 100644 +--- a/src/waltham/header-preamble.txt ++++ b/src/waltham/header-preamble.txt +@@ -50,5 +50,6 @@ struct wthp_touch; + + struct wthp_ivi_surface; + struct wthp_ivi_application; ++struct wthp_ivi_app_id; + + struct dummy; +-- +2.28.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/waltham_%.bbappend b/meta-agl-core/recipes-graphics/wayland/waltham_%.bbappend new file mode 100644 index 000000000..8d0436a3b --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham_%.bbappend @@ -0,0 +1,7 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append = "\ + file://0001-waltham-Fix-compile-build-error.patch \ + file://0002-commandxml-Add-support-wthp_app_id-interface.patch \ + file://0001-Use-python3-instead-of-2.patch \ + " diff --git a/meta-agl-core/recipes-graphics/wayland/waltham_git.bb b/meta-agl-core/recipes-graphics/wayland/waltham_git.bb new file mode 100644 index 000000000..01023a1f2 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/waltham_git.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise" +HOMEPAGE = "https://github.com/waltham/waltham" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=e8ad01a5182f2c1b3a2640e9ea268264 \ +" +SRCREV = "1de58c3ff746ddaba7584d760c5454243723d3ca" +SRC_URI = "git://github.com/wmizuno/waltham.git \ + " +S = "${WORKDIR}/git" + +inherit autotools pkgconfig + +DEPENDS += "libdrm virtual/kernel wayland" +RDEPENDS_${PN} += "libdrm" \ No newline at end of file diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb new file mode 100644 index 000000000..16c0f046d --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb @@ -0,0 +1,41 @@ +SUMMARY = "Startup script and systemd unit file for the Weston Wayland compositor" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +SRC_URI = "file://core.cfg \ + file://shell.cfg \ + file://hdmi-a-1-270.cfg \ + " + +# cluster and html5-landscape +# core, shell, hdmi-a-1-180.cfg, virtual-landscape.cfg +SRC_URI_remove_landscape = " \ + file://hdmi-a-1-270.cfg \ + file://hdmi-a-1-90.cfg \ + file://virtual.cfg \ +" +SRC_URI_append_landscape = " \ + file://hdmi-a-1-180.cfg \ + file://virtual-landscape.cfg \ +" + + +S = "${WORKDIR}" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +do_compile() { + # Put all of our cfg files together. + rm -f ${WORKDIR}/weston.ini + for F in ${WORKDIR}/*.cfg; do + cat $F >> ${WORKDIR}/weston.ini + echo >> ${WORKDIR}/weston.ini + done + sed -i -e '$ d' ${WORKDIR}/weston.ini +} + +do_install_append() { + WESTON_INI_CONFIG=${sysconfdir}/xdg/weston + install -d ${D}${WESTON_INI_CONFIG} + install -m 0644 ${WORKDIR}/weston.ini ${D}${WESTON_INI_CONFIG}/weston.ini +} diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend new file mode 100644 index 000000000..179004094 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend @@ -0,0 +1,12 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +SRC_URI += "${@bb.utils.contains("DISTRO_FEATURES", "weston-remoting", "file://remote-output.cfg", "",d)}" + + +# For virtual machines and intel-corei7-64 we want to support both the HDMI-A-1 +# and Virtual-1 outputs. This allows us to run virtual images on real hardware +# and vice versa. +SRC_URI_append_qemuall = " file://virtual.cfg" +SRC_URI_append_intel-corei7-64 = " file://virtual.cfg" diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg new file mode 100644 index 000000000..90774ed79 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg @@ -0,0 +1,4 @@ +[core] +backend=drm-backend.so +require-input=false +modules=systemd-notify.so diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg new file mode 100644 index 000000000..dffc2b6dd --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg @@ -0,0 +1,6 @@ +# A display is connected to HDMI-A-1 and needs to be rotated 270 degrees +# to have a proper orientation of the homescreen. For example the various sizes +# of the GeChic display or the Dell display. +[output] +name=HDMI-A-1 +transform=270 diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg new file mode 100644 index 000000000..88a692a1b --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg @@ -0,0 +1,6 @@ +# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees +# to have a proper orientation of the homescreen. For example, the 'eGalax' +# display used in some instances. +[output] +name=HDMI-A-1 +transform=90 diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg new file mode 100644 index 000000000..f69a2e096 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg @@ -0,0 +1,5 @@ +[remote-output] +name=remote-1 +mode=640x720@30 +host=192.168.20.99 +port=5005 diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg new file mode 100644 index 000000000..975e539e6 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg @@ -0,0 +1,3 @@ +[shell] +locking=true +panel-position=none diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual.cfg new file mode 100644 index 000000000..25a8fae94 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual.cfg @@ -0,0 +1,18 @@ +[output] +name=Virtual-1 +transform=270 +mode=1920x1080 +#mode=1600x1200 +#mode=1680x1050 +#mode=1400x1050 +#mode=1600x900 +#mode=1280x1024 +#mode=1440x900 +#mode=1280x960 +#mode=1360x768 +#mode=1280x800 +#mode=1280x768 +#mode=1280x720 +#mode=800x600 +#mode=848x480 +#mode=640x480 diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend b/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend new file mode 100644 index 000000000..c09d7ccd3 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'weston-init_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc new file mode 100644 index 000000000..51c59ae4d --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc @@ -0,0 +1,6 @@ +do_install_append() { + # Remove upstream weston.ini to avoid conflict with weston-ini-conf package + rm -f ${D}${sysconfdir}/xdg/weston/weston.ini +} + +SYSTEMD_AUTO_ENABLE = "enable" diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch new file mode 100644 index 000000000..32755c4b3 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch @@ -0,0 +1,30 @@ +From 7e5fb58591a29d60657158262a0772796bfd3461 Mon Sep 17 00:00:00 2001 +From: Marius Vlad +Date: Wed, 12 Feb 2020 13:18:19 +0200 +Subject: [PATCH] libweston: Expose weston_output_damage() in libweston + +We have weston_compositor_damage_all() exported and declared but users +might need weston_output_damage() to refer to an individual output. The +symbol already exported so just declare it. + +Signed-off-by: Marius Vlad +--- + include/libweston/libweston.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h +index 1439775e..9fac5be0 100644 +--- a/include/libweston/libweston.h ++++ b/include/libweston/libweston.h +@@ -1604,6 +1604,8 @@ weston_compositor_schedule_repaint(struct weston_compositor *compositor); + void + weston_compositor_damage_all(struct weston_compositor *compositor); + void ++weston_output_damage(struct weston_output *woutput); ++void + weston_compositor_wake(struct weston_compositor *compositor); + void + weston_compositor_sleep(struct weston_compositor *compositor); +-- +2.20.1 + diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch new file mode 100644 index 000000000..02af7cbaf --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch @@ -0,0 +1,106 @@ +From 4534fcab54409b08faf4445ed6780136b58afb63 Mon Sep 17 00:00:00 2001 +From: Marius Vlad +Date: Mon, 28 Sep 2020 22:51:00 +0300 +Subject: [PATCH 1/2] libweston: Migrate weston_seat_init/release to public + headers + +weston_seat_init/release needed for creating weston plug-ins that want +manage seat/input on their own. + +Signed-off-by: Marius Vlad +--- + include/libweston/libweston.h | 25 +++++++++++++++++++++++++ + libweston/libweston-internal.h | 31 +++---------------------------- + 2 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h +index 54ea008..59541f2 100644 +--- a/include/libweston/libweston.h ++++ b/include/libweston/libweston.h +@@ -2053,6 +2053,31 @@ void + weston_timeline_refresh_subscription_objects(struct weston_compositor *wc, + void *object); + ++/* input, seat */ ++void ++weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec, ++ const char *seat_name); ++void ++weston_seat_release(struct weston_seat *seat); ++ ++void ++weston_seat_init_pointer(struct weston_seat *seat); ++ ++int ++weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap); ++ ++void ++weston_seat_init_touch(struct weston_seat *seat); ++ ++void ++weston_seat_release_keyboard(struct weston_seat *seat); ++ ++void ++weston_seat_release_pointer(struct weston_seat *seat); ++ ++void ++weston_seat_release_touch(struct weston_seat *seat); ++ + #ifdef __cplusplus + } + #endif +diff --git a/libweston/libweston-internal.h b/libweston/libweston-internal.h +index 66c38e8..f5c4c2c 100644 +--- a/libweston/libweston-internal.h ++++ b/libweston/libweston-internal.h +@@ -168,44 +168,19 @@ weston_plane_init(struct weston_plane *plane, + void + weston_plane_release(struct weston_plane *plane); + +-/* weston_seat */ +- + struct clipboard * + clipboard_create(struct weston_seat *seat); + +-void +-weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec, +- const char *seat_name); +- +-void +-weston_seat_repick(struct weston_seat *seat); ++/* weston_seat */ + + void +-weston_seat_release(struct weston_seat *seat); ++weston_seat_update_keymap(struct weston_seat *seat, struct xkb_keymap *keymap); + + void + weston_seat_send_selection(struct weston_seat *seat, struct wl_client *client); + + void +-weston_seat_init_pointer(struct weston_seat *seat); +- +-int +-weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap); +- +-void +-weston_seat_init_touch(struct weston_seat *seat); +- +-void +-weston_seat_release_keyboard(struct weston_seat *seat); +- +-void +-weston_seat_release_pointer(struct weston_seat *seat); +- +-void +-weston_seat_release_touch(struct weston_seat *seat); +- +-void +-weston_seat_update_keymap(struct weston_seat *seat, struct xkb_keymap *keymap); ++weston_seat_repick(struct weston_seat *seat); + + void + wl_data_device_set_keyboard_focus(struct weston_seat *seat); +-- +2.28.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch b/meta-agl-core/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch new file mode 100644 index 000000000..cb122590b --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch @@ -0,0 +1,37 @@ +commit 5130a8c21a9deea54e8f7c96a3a5049e2d60a210 +Author: Marius Vlad +Date: Thu Jul 30 14:47:32 2020 +0300 + +backend-drm: Correctly tear down the DRM backend + +It seem that we skipped to put back in TEXT mode the tty, in case a DRM +device node wasn't present at that time, or it isn't present at all. This +orders the destroy part correctly as to handle that case as well. + +As a side effect, as the tty will still be set to GRAPHICS mode we will +require a manual change of the tty number, which might be not possible +on all systems. Properly putting back the tty to TEXT mode should avoid +that, and allows to re-use the same tty no in case the DRM device has +been created at a later point in time. + +Upstream-Status: Backport +Signed-off-by: Marius Vlad +Signed-off-by: Scott Murray + +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index 980a12da..1cf61a33 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -3031,10 +3031,10 @@ err_sprite: + destroy_sprites(b); + err_udev_dev: + udev_device_unref(drm_device); +-err_launcher: +- weston_launcher_destroy(compositor->launcher); + err_udev: + udev_unref(b->udev); ++err_launcher: ++ weston_launcher_destroy(compositor->launcher); + err_compositor: + weston_compositor_shutdown(compositor); + free(b); diff --git a/meta-agl-core/recipes-graphics/wayland/weston_8.0.%.bbappend b/meta-agl-core/recipes-graphics/wayland/weston_8.0.%.bbappend new file mode 100644 index 000000000..f627f5cb2 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston_8.0.%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'weston_8.0_aglcore.inc', '', d)} diff --git a/meta-agl-core/recipes-graphics/wayland/weston_8.0_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston_8.0_aglcore.inc new file mode 100644 index 000000000..c2495465b --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston_8.0_aglcore.inc @@ -0,0 +1,11 @@ +FILESEXTRAPATHS_append := ":${THISDIR}/weston" + +SRC_URI_append = "\ + file://0001-libweston-Expose-weston_output_damage-in-libweston.patch \ + file://0001-libweston-Migrate-weston_seat_init-release-to-public.patch \ + file://0005-correctly-tear-down-drm-backend.patch \ + " + +# Workaround for incorrect upstream definition +PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base" +PACKAGECONFIG_append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting', ' remoting', '', d)}" diff --git a/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend b/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend new file mode 100644 index 000000000..3d5903d85 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)} diff --git a/meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc b/meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc new file mode 100644 index 000000000..52fe69d24 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc @@ -0,0 +1,6 @@ +# fix for kernel using hardcoded awk while our filesystem only provides gawk +do_install_append() { + # enforce all scripts to use /usr/bin/awk . This fixes the rpm dependency failure on install of kernel-devsrc + cd ${D} || true + ( for i in `grep -srI "\!/bin/awk" | cut -d":" -f1 ` ; do sed -i -e "s#\!/bin/awk#\!/usr/bin/env awk#g" $i ; done ) || true +} \ No newline at end of file diff --git a/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch b/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch new file mode 100644 index 000000000..c595dfdf5 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch @@ -0,0 +1,40 @@ +From 63f5acdf097b7baca8d0f7056a037f8811b48aaa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Tue, 27 Feb 2018 17:06:21 +0100 +Subject: [PATCH] Smack: Handle CGROUP2 in the same way that CGROUP +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The new file system CGROUP2 isn't actually handled +by smack. This changes makes Smack treat equally +CGROUP and CGROUP2 items. + +Signed-off-by: José Bollo +--- + security/smack/smack_lsm.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c +index 03fdecba93bb..5d77ed04422c 100644 +--- a/security/smack/smack_lsm.c ++++ b/security/smack/smack_lsm.c +@@ -3431,6 +3431,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) + if (opt_dentry->d_parent == opt_dentry) { + switch (sbp->s_magic) { + case CGROUP_SUPER_MAGIC: ++ case CGROUP2_SUPER_MAGIC: + /* + * The cgroup filesystem is never mounted, + * so there's no opportunity to set the mount +@@ -3474,6 +3475,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) + switch (sbp->s_magic) { + case SMACK_MAGIC: + case CGROUP_SUPER_MAGIC: ++ case CGROUP2_SUPER_MAGIC: + /* + * Casey says that it's a little embarrassing + * that the smack file system doesn't do +-- +2.14.3 + diff --git a/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch b/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch new file mode 100644 index 000000000..4100bb8fd --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch @@ -0,0 +1,109 @@ +Smack: Privilege check on key operations + +Operations on key objects are subjected to Smack policy +even if the process is privileged. This is inconsistent +with the general behavior of Smack and may cause issues +with authentication by privileged daemons. This patch +allows processes with CAP_MAC_OVERRIDE to access keys +even if the Smack rules indicate otherwise. + +Reported-by: Jose Bollo +Signed-off-by: Casey Schaufler +--- + security/smack/smack.h | 1 + + security/smack/smack_access.c | 40 +++++++++++++++++++++++++++++----------- + security/smack/smack_lsm.c | 4 ++++ + 3 files changed, 34 insertions(+), 11 deletions(-) + +diff --git a/security/smack/smack.h b/security/smack/smack.h +index 6a71fc7..f7db791 100644 +--- a/security/smack/smack.h ++++ b/security/smack/smack.h +@@ -321,6 +321,7 @@ struct smack_known *smk_import_entry(const char *, int); + void smk_insert_entry(struct smack_known *skp); + struct smack_known *smk_find_entry(const char *); + bool smack_privileged(int cap); ++bool smack_privileged_cred(int cap, const struct cred *cred); + void smk_destroy_label_list(struct list_head *list); + + /* +diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c +index 1a30041..141ffac 100644 +--- a/security/smack/smack_access.c ++++ b/security/smack/smack_access.c +@@ -623,26 +623,24 @@ struct smack_known *smack_from_secid(const u32 secid) + LIST_HEAD(smack_onlycap_list); + DEFINE_MUTEX(smack_onlycap_lock); + +-/* ++/** ++ * smack_privileged_cred - are all privilege requirements met by cred ++ * @cap: The requested capability ++ * @cred: the credential to use ++ * + * Is the task privileged and allowed to be privileged + * by the onlycap rule. + * + * Returns true if the task is allowed to be privileged, false if it's not. + */ +-bool smack_privileged(int cap) ++bool smack_privileged_cred(int cap, const struct cred *cred) + { +- struct smack_known *skp = smk_of_current(); ++ struct task_smack *tsp = cred->security; ++ struct smack_known *skp = tsp->smk_task; + struct smack_known_list_elem *sklep; + int rc; + +- /* +- * All kernel tasks are privileged +- */ +- if (unlikely(current->flags & PF_KTHREAD)) +- return true; +- +- rc = cap_capable(current_cred(), &init_user_ns, cap, +- SECURITY_CAP_AUDIT); ++ rc = cap_capable(cred, &init_user_ns, cap, SECURITY_CAP_AUDIT); + if (rc) + return false; + +@@ -662,3 +660,23 @@ bool smack_privileged(int cap) + + return false; + } ++ ++/** ++ * smack_privileged - are all privilege requirements met ++ * @cap: The requested capability ++ * ++ * Is the task privileged and allowed to be privileged ++ * by the onlycap rule. ++ * ++ * Returns true if the task is allowed to be privileged, false if it's not. ++ */ ++bool smack_privileged(int cap) ++{ ++ /* ++ * All kernel tasks are privileged ++ */ ++ if (unlikely(current->flags & PF_KTHREAD)) ++ return true; ++ ++ return smack_privileged_cred(cap, current_cred()); ++} +diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c +index 30f2c3d..03fdecb 100644 +--- a/security/smack/smack_lsm.c ++++ b/security/smack/smack_lsm.c +@@ -4369,6 +4369,10 @@ static int smack_key_permission(key_ref_t key_ref, + */ + if (tkp == NULL) + return -EACCES; ++ ++ if (smack_privileged_cred(CAP_MAC_OVERRIDE, cred)) ++ return 0; ++ + #ifdef CONFIG_AUDIT + smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_KEY); + ad.a.u.key_struct.key = keyp->serial; + diff --git a/meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch b/meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch new file mode 100644 index 000000000..7c34fb306 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch @@ -0,0 +1,25 @@ +From 17d0075d95b5087d5df553444cca390fa479bad9 Mon Sep 17 00:00:00 2001 +From: Matt Ranostay +Date: Tue, 10 Mar 2020 22:27:28 -0700 +Subject: [PATCH] net: sch_generic: add if_afp.h header to get ARPHRD_CAN macro + +Signed-off-by: Matt Ranostay +--- + net/sched/sch_generic.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c +index bf8c81e07c70..1845ef8c7dbd 100644 +--- a/net/sched/sch_generic.c ++++ b/net/sched/sch_generic.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.25.0 + diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc new file mode 100644 index 000000000..6d5c67021 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc @@ -0,0 +1,14 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.14:" + +#------------------------------------------------------------------------- +# smack patches for kernels keys + +SRC_URI_append_with-lsm-smack = "\ + file://Smack-Privilege-check-on-key-operations.patch \ + file://Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch \ + " + +SRC_URI_append = "\ + file://net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch \ + file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \ + " diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc new file mode 100644 index 000000000..da4e0c067 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc @@ -0,0 +1,5 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.19:" + +SRC_URI_append = "\ + file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \ + " diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl.inc b/meta-agl-core/recipes-kernel/linux/linux-agl.inc new file mode 100644 index 000000000..cd960ef6d --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-agl.inc @@ -0,0 +1,132 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" + +DEPENDS += "kern-tools-native" + +# returns all the elements from the src uri that are .cfg files +def find_cfgs(d): + sources=src_patches(d, True) + sources_list=[] + for s in sources: + if s.endswith('.cfg'): + sources_list.append(s) + + return sources_list + +do_configure_append () { + [ ! -f .config ] && cp -a ${WORKDIR}/defconfig .config + # Need to clear CONFIG_LSM for 5.1+ kernels to ensure it'll get + # regenerated to reflect configuration changes (e.g. SMACK). + sed -i '/^CONFIG_LSM/d' .config + merge_config.sh -m .config ${@" ".join(find_cfgs(d))} + yes '' | make oldconfig +} + +# Extra configuration options for the AGL kernel +SRC_URI_append = "\ + file://can-bus.cfg \ + file://usb.cfg \ + file://uvc.cfg \ + file://joystick.cfg \ + file://fanotify.cfg \ + file://uinput.cfg \ + file://hid.cfg \ + file://drm.cfg \ + file://btusb.cfg \ + file://usbaudio.cfg \ + file://usbmodem.cfg \ + file://i2c-led.cfg \ + file://nfc.cfg \ + file://overlayfs.cfg \ + " + +SRC_URI_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','file://xen_domu.cfg','',d)}" + +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/can-bus.cfg" +# Enable support for usb video class for usb camera devices +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uvc.cfg" +# Enable support for joystick devices +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/joystick.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/fanotify.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uinput.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/hid.cfg" +# Enable DRM support for graphics +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/drm.cfg" +# Enable Bluetooth USB devices +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/btusb.cfg" +# Enable USB audio devices +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/usbaudio.cfg" +# Enable I2C and LED for demontrator +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/i2c-led.cfg" +# Enable NFC devices +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/nfc.cfg" +# Enable overlayfs filesystem support +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/overlayfs.cfg" +# Enable XEN support of the guest +KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','${WORKDIR}/xen_domu.cfg','',d)}" + +# Enable required features for the agl-netboot feature +SRC_URI_append_netboot = " file://nbd.cfg \ + file://ramdisk.cfg" +KERNEL_CONFIG_FRAGMENTS_append_netboot = " ${WORKDIR}/nbd.cfg ${WORKDIR}/ramdisk.cfg" + +# Enable support for TP-Link TL-W722N USB Wifi adapter (rev 1 and 2) +SRC_URI_append = " file://wifi.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/wifi.cfg" + +# Enable support for RTLSDR +SRC_URI_append = " file://rtl_sdr.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtl_sdr.cfg" + +# Additional drivers for virtual machines +# OVERRIDES save us some c'n'p below ... +OVERRIDES_prepend_qemux86 = "virtualmachine:" +OVERRIDES_prepend_qemux86-64 = "virtualmachine:" +SRC_URI_append_virtualmachine = " file://vbox-vmware-sata.cfg" +KERNEL_CONFIG_FRAGMENTS_append_virtualmachine = " ${WORKDIR}/vbox-vmware-sata.cfg" + +# Extra configuration for using qemux86-64 image on physical hardware +SRC_URI_append_qemux86-64 = "\ + file://x86-extra-graphic-devices.cfg \ + file://x86-net-devices.cfg \ + file://x86-security-tpm.cfg \ + file://x86-usb-devices.cfg \ + file://x86-upsquare.cfg \ +" +KERNEL_CONFIG_FRAGMENTS_append_qemux86-64 = "\ + ${WORKDIR}/x86-extra-graphic-devices.cfg \ + ${WORKDIR}/x86-net-devices.cfg \ + ${WORKDIR}/x86-security-tpm.cfg \ + ${WORKDIR}/x86-usb-devices.cfg \ + ${WORKDIR}/x86-upsquare.cfg \ +" + +# Enable support for smack +KERNEL_CONFIG_FRAGMENTS_append_with-lsm-smack = "\ + ${WORKDIR}/audit.cfg \ + ${WORKDIR}/smack.cfg \ + ${WORKDIR}/smack-default-lsm.cfg \ +" + +# ALSA support and other sound related configuration +SRC_URI_append = " file://sound.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/sound.cfg" + +# add hda audio for qemu +SRC_URI_append_qemuall = " file://sound-hda.cfg" +KERNEL_CONFIG_FRAGMENTS_append_qemuall = " ${WORKDIR}/sound-hda.cfg" + +# iio-dummy-device support for test iiodevice +SRC_URI_append = " file://iiodevice.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/iiodevice.cfg" + +# external rtc support via e.g. http://wiki.seeedstudio.com/Grove-RTC/ +SRC_URI_append = " file://rtc.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtc.cfg" + +# netfilter options +SRC_URI_append = " file://netfilter.cfg" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/netfilter.cfg" + +# Enable support for SystemTap +SRC_URI_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'file://systemtap.cfg', '', d)}" +KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${WORKDIR}/systemtap.cfg', '', d)}" diff --git a/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg b/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg new file mode 100644 index 000000000..dd7c460bb --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg @@ -0,0 +1,37 @@ +CONFIG_BT=m +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m +CONFIG_BT_HS=y +CONFIG_BT_LE=y +CONFIG_BT_LEDS=y +# CONFIG_BT_SELFTEST is not set +CONFIG_BT_DEBUGFS=y + +# +# Bluetooth device drivers +# +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_RTL=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y +# CONFIG_BT_HCIBTSDIO is not set +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBFUSB=m +# CONFIG_BT_HCIVHCI is not set +# CONFIG_BT_MRVL is not set +# CONFIG_BT_ATH3K is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CMAC=m + +# +# Bluetooth AVRCP support +# +CONFIG_INPUT_UINPUT=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg b/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg new file mode 100644 index 000000000..2f24b7607 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg @@ -0,0 +1,42 @@ +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +# CONFIG_TASK_XACCT is not set +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m +CONFIG_CAN_GW=m +CONFIG_CAN_J1939=m + +# +# CAN Device Drivers +# +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_CALC_BITTIMING=y +# CONFIG_CAN_LEDS is not set +# CONFIG_CAN_SJA1000 is not set +# CONFIG_CAN_M_CAN is not set +# CONFIG_CAN_CC770 is not set + +# +# CAN SPI interfaces +# +CONFIG_CAN_MCP251X=m + +# +# CAN USB interfaces +# +# CONFIG_CAN_EMS_USB is not set +CONFIG_CAN_ESD_USB2=m +CONFIG_CAN_GS_USB=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_MCBA_USB=m +# CONFIG_CAN_SOFTING is not set +# CONFIG_CAN_DEBUG_DEVICES is not set diff --git a/meta-agl-core/recipes-kernel/linux/linux/drm.cfg b/meta-agl-core/recipes-kernel/linux/linux/drm.cfg new file mode 100644 index 000000000..65fe71cd0 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/drm.cfg @@ -0,0 +1,2 @@ +CONFIG_DRM_BOCHS=y +CONFIG_DRM_VIRTIO_GPU=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg b/meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg new file mode 100644 index 000000000..de5dd8d31 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg @@ -0,0 +1,3 @@ +# Enable the fanotify API (notification/interception of FS events) +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/hid.cfg b/meta-agl-core/recipes-kernel/linux/linux/hid.cfg new file mode 100644 index 000000000..327c753ae --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/hid.cfg @@ -0,0 +1 @@ +CONFIG_HID_MULTITOUCH=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/i2c-led.cfg b/meta-agl-core/recipes-kernel/linux/linux/i2c-led.cfg new file mode 100644 index 000000000..248b5118a --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/i2c-led.cfg @@ -0,0 +1,3 @@ +# enabling I2C and LED for demonstrator +CONFIG_I2C_TINY_USB=y +CONFIG_LEDS_BLINKM=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/iiodevice.cfg b/meta-agl-core/recipes-kernel/linux/linux/iiodevice.cfg new file mode 100644 index 000000000..c5b8ff35e --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/iiodevice.cfg @@ -0,0 +1,26 @@ +# +# Extcon Device Drivers +# +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_SW_DEVICE=m +CONFIG_IIO_SW_TRIGGER=m + +# +# IIO dummy driver +# +CONFIG_IIO_DUMMY_EVGEN=m +CONFIG_IIO_SIMPLE_DUMMY=m +CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y +CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y + +# +# Triggers - standalone +# +CONFIG_IIO_HRTIMER_TRIGGER=m +CONFIG_IIO_TRIGGERED_BUFFER=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/joystick.cfg b/meta-agl-core/recipes-kernel/linux/linux/joystick.cfg new file mode 100644 index 000000000..2201bcb00 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/joystick.cfg @@ -0,0 +1,9 @@ +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ADI=y +CONFIG_GAMEPORT=y +CONFIG_HID_LOGITECH=y +CONFIG_LOGIWHEELS_FF=y +CONFIG_HID_LOGITECH_HIDPP=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIG940_FF=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/nbd.cfg b/meta-agl-core/recipes-kernel/linux/linux/nbd.cfg new file mode 100644 index 000000000..e5d897556 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/nbd.cfg @@ -0,0 +1,3 @@ +CONFIG_BLK_DEV_NBD=y +# for CI use enable CONFIG_VETH=y +CONFIG_VETH=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch b/meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch new file mode 100644 index 000000000..37ace5a58 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch @@ -0,0 +1,75 @@ +From 546b85bb0aadb5a928b49b53dc02911996169c0b Mon Sep 17 00:00:00 2001 +From: Vincent Prince +Date: Wed, 23 Oct 2019 15:44:20 +0200 +Subject: [PATCH] net: sch_generic: Use pfifo_fast as fallback scheduler for + CAN hardware + +There is networking hardware that isn't based on Ethernet for layers 1 and 2. + +For example CAN. + +CAN is a multi-master serial bus standard for connecting Electronic Control +Units [ECUs] also known as nodes. A frame on the CAN bus carries up to 8 bytes +of payload. Frame corruption is detected by a CRC. However frame loss due to +corruption is possible, but a quite unusual phenomenon. + +While fq_codel works great for TCP/IP, it doesn't for CAN. There are a lot of +legacy protocols on top of CAN, which are not build with flow control or high +CAN frame drop rates in mind. + +When using fq_codel, as soon as the queue reaches a certain delay based length, +skbs from the head of the queue are silently dropped. Silently meaning that the +user space using a send() or similar syscall doesn't get an error. However +TCP's flow control algorithm will detect dropped packages and adjust the +bandwidth accordingly. + +When using fq_codel and sending raw frames over CAN, which is the common use +case, the user space thinks the package has been sent without problems, because +send() returned without an error. pfifo_fast will drop skbs, if the queue +length exceeds the maximum. But with this scheduler the skbs at the tail are +dropped, an error (-ENOBUFS) is propagated to user space. So that the user +space can slow down the package generation. + +On distributions, where fq_codel is made default via CONFIG_DEFAULT_NET_SCH +during compile time, or set default during runtime with sysctl +net.core.default_qdisc (see [1]), we get a bad user experience. In my test case +with pfifo_fast, I can transfer thousands of million CAN frames without a frame +drop. On the other hand with fq_codel there is more then one lost CAN frame per +thousand frames. + +As pointed out fq_codel is not suited for CAN hardware, so this patch changes +attach_one_default_qdisc() to use pfifo_fast for "ARPHRD_CAN" network devices. + +During transition of a netdev from down to up state the default queuing +discipline is attached by attach_default_qdiscs() with the help of +attach_one_default_qdisc(). This patch modifies attach_one_default_qdisc() to +attach the pfifo_fast (pfifo_fast_ops) if the network device type is +"ARPHRD_CAN". + +[1] https://github.com/systemd/systemd/issues/9194 + +Suggested-by: Marc Kleine-Budde +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Vincent Prince +Acked-by: Dave Taht +Signed-off-by: David S. Miller +--- + net/sched/sch_generic.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c +index ed5b0e9fd395..4c5dfcb01e00 100644 +--- a/net/sched/sch_generic.c ++++ b/net/sched/sch_generic.c +@@ -1038,6 +1038,8 @@ static void attach_one_default_qdisc(struct net_device *dev, + + if (dev->priv_flags & IFF_NO_QUEUE) + ops = &noqueue_qdisc_ops; ++ else if(dev->type == ARPHRD_CAN) ++ ops = &pfifo_fast_ops; + + qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL); + if (!qdisc) { +-- +2.25.0 + diff --git a/meta-agl-core/recipes-kernel/linux/linux/netfilter.cfg b/meta-agl-core/recipes-kernel/linux/linux/netfilter.cfg new file mode 100644 index 000000000..34be704c1 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/netfilter.cfg @@ -0,0 +1 @@ +CONFIG_NETFILTER_XT_MATCH_OWNER=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/nfc.cfg b/meta-agl-core/recipes-kernel/linux/linux/nfc.cfg new file mode 100644 index 000000000..6d863a075 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/nfc.cfg @@ -0,0 +1,34 @@ +CONFIG_NFC=m +CONFIG_NFC_DIGITAL=m +CONFIG_NFC_NCI=m +CONFIG_NFC_NCI_SPI=m +CONFIG_NFC_HCI=m +CONFIG_NFC_SHDLC=y +CONFIG_NFC_TRF7970A=m +CONFIG_NFC_MEI_PHY=m +CONFIG_NFC_PORT100=m +CONFIG_NFC_FDP=m +CONFIG_NFC_FDP_I2C=m +CONFIG_NFC_PN544=m +CONFIG_NFC_PN544_I2C=m +CONFIG_NFC_PN544_MEI=m +CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_USB=m +CONFIG_NFC_PN533_I2C=m +CONFIG_NFC_MICROREAD=m +CONFIG_NFC_MICROREAD_I2C=m +CONFIG_NFC_MICROREAD_MEI=m +CONFIG_NFC_MRVL=m +CONFIG_NFC_MRVL_USB=m +CONFIG_NFC_MRVL_I2C=m +CONFIG_NFC_MRVL_SPI=m +CONFIG_NFC_ST21NFCA=m +CONFIG_NFC_ST21NFCA_I2C=m +CONFIG_NFC_ST_NCI=m +CONFIG_NFC_ST_NCI_I2C=m +CONFIG_NFC_ST_NCI_SPI=m +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m +CONFIG_NFC_S3FWRN5=m +CONFIG_NFC_S3FWRN5_I2C=m +CONFIG_NFC_ST95HF=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg b/meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg new file mode 100644 index 000000000..025118ed6 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg @@ -0,0 +1,7 @@ +CONFIG_OVERLAY_FS=y +CONFIG_OVERLAY_FS_REDIRECT_DIR=y +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=n +CONFIG_OVERLAY_FS_INDEX=y +CONFIG_OVERLAY_FS_NFS_EXPORT=n +CONFIG_OVERLAY_FS_XINO_AUTO=y +CONFIG_OVERLAY_FS_METACOPY=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/procevent.cfg b/meta-agl-core/recipes-kernel/linux/linux/procevent.cfg new file mode 100644 index 000000000..6e08c25bc --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/procevent.cfg @@ -0,0 +1,2 @@ +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg b/meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg new file mode 100644 index 000000000..3d44de805 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg @@ -0,0 +1,2 @@ +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 diff --git a/meta-agl-core/recipes-kernel/linux/linux/rtc.cfg b/meta-agl-core/recipes-kernel/linux/linux/rtc.cfg new file mode 100644 index 000000000..2641958a0 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/rtc.cfg @@ -0,0 +1,7 @@ +CONFIG_RTC_CLASS=y +CONFIG_RTC_LIB=y +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS3232=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/rtl_sdr.cfg b/meta-agl-core/recipes-kernel/linux/linux/rtl_sdr.cfg new file mode 100644 index 000000000..d4574700a --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/rtl_sdr.cfg @@ -0,0 +1,4 @@ +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_RTL28XXU=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/scheddebug.cfg b/meta-agl-core/recipes-kernel/linux/linux/scheddebug.cfg new file mode 100644 index 000000000..e8b09aa7c --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/scheddebug.cfg @@ -0,0 +1 @@ +CONFIG_SCHED_DEBUG=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg b/meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg new file mode 100644 index 000000000..115504c39 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg @@ -0,0 +1,20 @@ +# make sure HDA sound modules are on +# this is required for CI tests +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_GENERIC=m +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_PATCH_LOADER=y + +# enable dummy sound for special cases in CI +CONFIG_SND_DUMMY=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/sound.cfg b/meta-agl-core/recipes-kernel/linux/linux/sound.cfg new file mode 100644 index 000000000..ad34ea680 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/sound.cfg @@ -0,0 +1,7 @@ +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +CONFIG_SND_ALOOP=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg b/meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg new file mode 100644 index 000000000..4886c27f1 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg @@ -0,0 +1,9 @@ +CONFIG_KPROBES=y +CONFIG_UPROBES=y +CONFIG_UPROBE_EVENTS=y +CONFIG_FTRACE=y +CONFIG_KPROBE_EVENTS=y +CONFIG_RELAY=y +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_INFO=y + diff --git a/meta-agl-core/recipes-kernel/linux/linux/uinput.cfg b/meta-agl-core/recipes-kernel/linux/linux/uinput.cfg new file mode 100644 index 000000000..7996ef1dd --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/uinput.cfg @@ -0,0 +1,3 @@ +# Enable the User-level Input driver (required by "wayland-fits") +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/usb.cfg b/meta-agl-core/recipes-kernel/linux/linux/usb.cfg new file mode 100644 index 000000000..8e9e98ecb --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/usb.cfg @@ -0,0 +1,8 @@ +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_ACM=m +CONFIG_CRC_CCITT=y +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_PCI=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/usbaudio.cfg b/meta-agl-core/recipes-kernel/linux/linux/usbaudio.cfg new file mode 100644 index 000000000..5961f43d3 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/usbaudio.cfg @@ -0,0 +1,2 @@ +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/usbmodem.cfg b/meta-agl-core/recipes-kernel/linux/linux/usbmodem.cfg new file mode 100644 index 000000000..3ded931e5 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/usbmodem.cfg @@ -0,0 +1,7 @@ +CONFIG_USB_USBNET=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_QUALCOMM=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/uvc.cfg b/meta-agl-core/recipes-kernel/linux/linux/uvc.cfg new file mode 100644 index 000000000..7c6556c11 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/uvc.cfg @@ -0,0 +1,4 @@ +CONFIG_VIDEOBUF2_VMALLOC=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg b/meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg new file mode 100644 index 000000000..ce1eca1a7 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg @@ -0,0 +1,19 @@ +# enable harddrive driver for vmware/virtualbox +CONFIG_ATA_PIIX=y +CONFIG_SATA_AHCI=y +CONFIG_ATA_SFF=y +CONFIG_ATA_BMDMA=y +CONFIG_ATA_GENERIC=y +CONFIG_ATA_ACPI=y + +# needed for VMWare +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_FUSION=y +CONFIG_FUSION_SPI=y +CONFIG_DRM_VMWGFX=y +CONFIG_DRM_VMWGFX_FBCON=y +CONFIG_VMWARE_BALLOON=m +CONFIG_VMWARE_VMCI=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_SND_ENS1371=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/wifi.cfg b/meta-agl-core/recipes-kernel/linux/linux/wifi.cfg new file mode 100644 index 000000000..00c2e06e4 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/wifi.cfg @@ -0,0 +1,6 @@ +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_WLAN_VENDOR_ATH=m +CONFIG_ATH9K_HTC=m +CONFIG_STAGING=y +CONFIG_R8188EU=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg new file mode 100644 index 000000000..d2b64de67 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg @@ -0,0 +1,40 @@ +CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m +CONFIG_RSI_91X=m +CONFIG_RSI_DEBUGFS=y +CONFIG_RSI_SDIO=m +CONFIG_RSI_USB=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_RADEON_USERPTR=y +CONFIG_DRM_NOUVEAU=m +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +CONFIG_DRM_VGEM=m +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_VMWGFX_FBCON=y +CONFIG_DRM_GMA500=m +CONFIG_DRM_GMA600=y +CONFIG_DRM_GMA3600=y +CONFIG_DRM_UDL=m +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_BACKLIGHT=y +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_ACPI_WMI=m +CONFIG_MXM_WMI=m +CONFIG_SCHED_INFO=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQFD=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_KVM_MMIO=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_COMPAT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_KVM=m +CONFIG_KVM_INTEL=m +CONFIG_CRC7=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg new file mode 100644 index 000000000..6c5b698a9 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg @@ -0,0 +1,3 @@ +CONFIG_IGB=y +CONFIG_IGB_DCA=y +CONFIG_R8169=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg new file mode 100644 index 000000000..b66b1b9b1 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg @@ -0,0 +1,3 @@ +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS=y +CONFIG_TCG_CRB=y diff --git a/meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg new file mode 100644 index 000000000..d2bed63fa --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg @@ -0,0 +1,11 @@ +CONFIG_X86_INTEL_LPSS=y +CONFIG_EXPERT=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_DW=y +CONFIG_MFD_CORE=y +CONFIG_MFD_INTEL_LPSS=y +CONFIG_MFD_INTEL_LPSS_ACPI=y +CONFIG_MFD_INTEL_LPSS_PCI=y +CONFIG_IWLWIFI=m +CONFIG_IWLMVM=m +CONFIG_IWLDVM=m diff --git a/meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg new file mode 100644 index 000000000..19c57796e --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg @@ -0,0 +1,82 @@ +CONFIG_BT_QCA=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_QCA=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_WIRELESS_EXT=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211_WEXT_EXPORT=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_VHOST_NET=m +CONFIG_VHOST_RING=m +CONFIG_VHOST=m +CONFIG_MICROCHIP_PHY=m +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8152=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_HSO=m +CONFIG_USB_IPHETH=m +CONFIG_USB_ZD1201=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_MWL8K=m +# CONFIG_B43_BUSES_BCMA_AND_SSB is not set +# CONFIG_B43_BUSES_BCMA is not set +# CONFIG_B43_BUSES_SSB is not set +CONFIG_BRCMFMAC_PROTO_MSGBUF=y +CONFIG_BRCMFMAC_PCIE=y +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +CONFIG_IPW2100_DEBUG=y +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +CONFIG_IPW2200_DEBUG=y +CONFIG_LIBIPW=m +CONFIG_LIBIPW_DEBUG=y +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +# CONFIG_LIBERTAS_DEBUG is not set +# CONFIG_LIBERTAS_MESH is not set +CONFIG_RTL8XXXU=m +CONFIG_RTL8XXXU_UNTESTED=y +CONFIG_WLAN_VENDOR_TI=y +CONFIG_WL1251=m +# CONFIG_WL1251_SPI is not set +# CONFIG_WL1251_SDIO is not set +CONFIG_WL12XX=m +CONFIG_WL18XX=m +CONFIG_WLCORE=m +CONFIG_WLCORE_SPI=m +CONFIG_WLCORE_SDIO=m +CONFIG_WILINK_PLATFORM_DATA=y +CONFIG_ZD1211RW=m +CONFIG_ZD1211RW_DEBUG=y +CONFIG_MWIFIEX=m +# CONFIG_MWIFIEX_SDIO is not set diff --git a/meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg b/meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg new file mode 100644 index 000000000..8bc59eb1e --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg @@ -0,0 +1,25 @@ +CONFIG_XEN=y +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_SCSI_FRONTEND=y +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_XEN_FBDEV_FRONTEND=y +CONFIG_MMC_SDHCI_XENON=y +CONFIG_XEN_BALLOON=y +CONFIG_XEN_SCRUB_PAGES_DEFAULT=y +CONFIG_XEN_DEV_EVTCHN=y +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=y +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XEN_GNTDEV=y +CONFIG_XEN_GNTDEV_DMABUF=y +CONFIG_XEN_GRANT_DEV_ALLOC=y +CONFIG_XEN_GRANT_DMA_ALLOC=y +CONFIG_SWIOTLB_XEN=y +CONFIG_XEN_PVCALLS_FRONTEND=y +CONFIG_XEN_PRIVCMD=y +CONFIG_XEN_AUTO_XLATE=y \ No newline at end of file diff --git a/meta-agl-core/recipes-platform/images/agl-image-boot.bb b/meta-agl-core/recipes-platform/images/agl-image-boot.bb new file mode 100644 index 000000000..84cdbcf31 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-boot.bb @@ -0,0 +1,9 @@ +SUMMARY = "An AGL small image just capable of allowing a device to boot." + +require agl-image-boot.inc + +LICENSE = "MIT" + +IMAGE_INSTALL_append = "\ + packagegroup-agl-image-boot \ + " diff --git a/meta-agl-core/recipes-platform/images/agl-image-boot.inc b/meta-agl-core/recipes-platform/images/agl-image-boot.inc new file mode 100644 index 000000000..825393978 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-boot.inc @@ -0,0 +1,10 @@ +IMAGE_LINGUAS = " " + +inherit core-image + +IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}" + +IMAGE_ROOTFS_SIZE ?= "8192" + +# Allow extra IMAGE_FSTYPES to be added by boards configs +IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}" diff --git a/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb b/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb new file mode 100644 index 000000000..3855b3c23 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb @@ -0,0 +1,18 @@ +SUMMARY = "A very basic Wayland image with a terminal" + +require agl-image-weston.inc + +LICENSE = "MIT" + +IMAGE_INSTALL_append = "\ + packagegroup-agl-profile-graphical \ + busybox \ + psplash \ + gdb \ + gperf \ + weston \ + weston-examples \ + curl \ + ptest-runner \ + libsoup-2.4 \ + " diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb new file mode 100644 index 000000000..8c5aae1bf --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb @@ -0,0 +1,18 @@ +SUMMARY = "Cross SDK of Full AGL Distribution for core profile" + +DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \ +It includes the full meta-toolchain, plus developement headers and libraries \ +to form a standalone cross SDK." + +require agl-image-minimal.bb + +LICENSE = "MIT" + +require agl-image-minimal-crosssdk.inc + +inherit populate_sdk + +# Task do_populate_sdk and do_rootfs can't be exec simultaneously. +# Both exec "createrepo" on the same directory, and so one of them +# can failed (randomly). +addtask do_populate_sdk after do_rootfs diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.inc b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.inc new file mode 100644 index 000000000..a69e698a1 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.inc @@ -0,0 +1,24 @@ +IMAGE_FEATURES_append = " dev-pkgs" +IMAGE_INSTALL_append = " kernel-dev kernel-devsrc" + + + + + + +# FIXME: +# Always include the test widgets +#IMAGE_FEATURES_append = " agl-test-wgt" +# +# Required dependencies for app and test builds +#TOOLCHAIN_HOST_TASK += " \ +# nativesdk-lua \ +# " +# +# Required dependencies for app and test builds +#TOOLCHAIN_TARGET_TASK += " \ +# lua-dev \ +# lua-staticdev \ +# libafb-helpers-staticdev \ +# libappcontroller-staticdev \ +# " diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal.bb b/meta-agl-core/recipes-platform/images/agl-image-minimal.bb new file mode 100644 index 000000000..1fd213d0f --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-minimal.bb @@ -0,0 +1,9 @@ +SUMMARY = "An AGL small image just capable of allowing a device to boot." + +require agl-image-minimal.inc + +LICENSE = "MIT" + +IMAGE_INSTALL_append = "\ + packagegroup-agl-image-minimal \ + " diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal.inc b/meta-agl-core/recipes-platform/images/agl-image-minimal.inc new file mode 100644 index 000000000..825393978 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-minimal.inc @@ -0,0 +1,10 @@ +IMAGE_LINGUAS = " " + +inherit core-image + +IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}" + +IMAGE_ROOTFS_SIZE ?= "8192" + +# Allow extra IMAGE_FSTYPES to be added by boards configs +IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}" diff --git a/meta-agl-core/recipes-platform/images/agl-image-weston.bb b/meta-agl-core/recipes-platform/images/agl-image-weston.bb new file mode 100644 index 000000000..bbb61c922 --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-weston.bb @@ -0,0 +1,9 @@ +SUMMARY = "A very basic Wayland image with a terminal" + +require agl-image-weston.inc + +LICENSE = "MIT" + +IMAGE_INSTALL_append = "\ + packagegroup-agl-profile-graphical \ + " diff --git a/meta-agl-core/recipes-platform/images/agl-image-weston.inc b/meta-agl-core/recipes-platform/images/agl-image-weston.inc new file mode 100644 index 000000000..cef3bf64e --- /dev/null +++ b/meta-agl-core/recipes-platform/images/agl-image-weston.inc @@ -0,0 +1,7 @@ +require recipes-platform/images/agl-image-minimal.inc + +IMAGE_FEATURES += "splash package-management ssh-server-dropbear" + +inherit features_check + +REQUIRED_DISTRO_FEATURES = "wayland" diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb new file mode 100644 index 000000000..5ffa4cfff --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb @@ -0,0 +1,50 @@ +# +# Copyright (C) 2007 OpenedHand Ltd. +# +# derived from oe-core: meta/recipes-core/packagegroups/packagegroup-core-boot.bb + +SUMMARY = "Minimal boot requirements" +DESCRIPTION = "The minimal set of packages required to boot the system" +LICENSE = "MIT" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +inherit packagegroup + +# +# Set by the machine configuration with packages essential for device bootup +# +MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "" +MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= "" + +# Distro can override the following VIRTUAL-RUNTIME providers: +VIRTUAL-RUNTIME_dev_manager ?= "udev" +VIRTUAL-RUNTIME_login_manager ?= "busybox" +VIRTUAL-RUNTIME_init_manager ?= "sysvinit" +VIRTUAL-RUNTIME_initscripts ?= "initscripts" +VIRTUAL-RUNTIME_keymaps ?= "keymaps" + +SYSVINIT_SCRIPTS = "${@bb.utils.contains('MACHINE_FEATURES', 'rtc', 'busybox-hwclock', '', d)} \ + modutils-initscripts \ + init-ifupdown \ + ${VIRTUAL-RUNTIME_initscripts} \ + " + +RDEPENDS_${PN} = "\ + base-files \ + base-passwd \ + busybox \ + rng-tools \ + ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "${SYSVINIT_SCRIPTS}", "", d)} \ + ${@bb.utils.contains("MACHINE_FEATURES", "keyboard", "${VIRTUAL-RUNTIME_keymaps}", "", d)} \ + netbase \ + ${VIRTUAL-RUNTIME_login_manager} \ + ${VIRTUAL-RUNTIME_init_manager} \ + ${VIRTUAL-RUNTIME_dev_manager} \ + ${VIRTUAL-RUNTIME_update-alternatives} \ + ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}" + +RRECOMMENDS_${PN} = "\ + tzdata \ + ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}" + diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb new file mode 100644 index 000000000..0d7bbb58b --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "The minimal set of packages for Connectivity Subsystem" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-core-connectivity \ + " + +ALLOW_EMPTY_${PN} = "1" + +PKGGROUP_ZEROCONF = "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'packagegroup-base-zeroconf', '', d)}" + +RDEPENDS_${PN} += "\ + dhcp-server \ + ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client connman-tests \ + connman-tools connman-ncurses connman-plugin-session-policy-local','',d)} \ + ${@bb.utils.contains('AGL_FEATURES', 'agl-devel', '${PKGGROUP_ZEROCONF}', '', d)} \ + " diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb new file mode 100644 index 000000000..72fec3ff0 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb @@ -0,0 +1,31 @@ +SUMMARY = "Provides a set of tools for development for AGL DISTRO" +LICENSE = "MIT" + +inherit packagegroup + +RDEPENDS_${PN} = "\ + strace \ + ldd \ + less \ + vim \ + lsof \ + gdb \ + valgrind \ + perf \ + powertop \ + screen \ + usbutils \ + rsync \ + pstree \ + procps \ + libxslt-bin \ + gcc-sanitizers \ + pciutils \ + " + +# needs meta-oe present +#RRECOMMENDS_${PN} = "\ +# jq \ +# htop \ +# tree \ +#" diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb new file mode 100644 index 000000000..aef732838 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb @@ -0,0 +1,14 @@ +SUMMARY = "The packages of middlewares for AGL IVI profile" +DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-core-os-commonlibs \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + " diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb new file mode 100644 index 000000000..0ae5c77a3 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb @@ -0,0 +1,14 @@ +SUMMARY = "The packages of middlewares for AGL IVI profile" +DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-core-security \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + " diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb new file mode 100644 index 000000000..cd37cb7d5 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb @@ -0,0 +1,16 @@ +SUMMARY = "The software for application framework of AGL IVI profile" +DESCRIPTION = "A set of packages belong to AGL application framework which required by \ +Multimedia Subsystem" + +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-graphical-multimedia \ + " + +RDEPENDS_${PN} += "\ + alsa-utils \ + gstreamer1.0-meta-base \ + " diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb new file mode 100644 index 000000000..6d3435d99 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "The minimal set of packages required for Wayland support" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-graphical-weston \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += " \ + weston \ + weston-init \ + weston-examples \ + " + diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb new file mode 100644 index 000000000..afa04e7a1 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "The minimal set of packages required by AGL" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-image-boot \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + packagegroup-agl-core-boot \ + packagegroup-machine-base \ + " + +RDEPENDS_${PN} += "\ + " diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb new file mode 100644 index 000000000..45107ed9c --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb @@ -0,0 +1,24 @@ +DESCRIPTION = "The minimal set of packages required by AGL" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-image-minimal \ + profile-agl-minimal \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + packagegroup-agl-core-boot \ + packagegroup-machine-base \ + " + +RDEPENDS_${PN} += "\ + packagegroup-agl-core-connectivity \ + packagegroup-agl-core-os-commonlibs \ + packagegroup-agl-core-security \ + " + +RDEPENDS_profile-agl-minimal = "${PN}" diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb new file mode 100644 index 000000000..bfc5e19e8 --- /dev/null +++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb @@ -0,0 +1,22 @@ +SUMMARY = "The middleware for AGL IVI profile" +DESCRIPTION = "The set of packages required for AGL IVI Distribution" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-profile-graphical \ + profile-graphical \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + packagegroup-agl-image-minimal \ + packagegroup-agl-graphical-weston \ + packagegroup-agl-graphical-multimedia \ +" +# FIXME: Removed due to issues building against weston 5.0.0: +# waltham-transmitter + +RDEPENDS_profile-graphical = "${PN}" diff --git a/meta-agl-core/recipes-support/libsoup/libsoup-2.4_%.bbappend b/meta-agl-core/recipes-support/libsoup/libsoup-2.4_%.bbappend new file mode 100644 index 000000000..06651fc11 --- /dev/null +++ b/meta-agl-core/recipes-support/libsoup/libsoup-2.4_%.bbappend @@ -0,0 +1 @@ +EXTRA_OECONF_append_class-native = " --disable-tls-check" diff --git a/meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch b/meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch new file mode 100644 index 000000000..6232c4fa4 --- /dev/null +++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch @@ -0,0 +1,140 @@ +From 11b29ce444610a07067a89b38e9e85c2162bbf67 Mon Sep 17 00:00:00 2001 +From: Tim Orling +Date: Mon, 15 Oct 2018 18:30:42 -0700 +Subject: [PATCH 7/7] [WIP] Initial LAVA support + +Linaro Automated Validation Architecture (LAVA) launches a test suite +on the target but thereafter only observes stdout. + +LAVA knows that a test case has started or ended based on signals +emitted to stdout: +(setup) + +(teardown) + + + +It is valid to have a measurement without units, but not units without a measurement. + +Signed-off-by: Tim Orling +[updated for ptest-runner 2.3.2] +Signed-off-by: Scott Murray +--- +diff --git a/flags.h b/flags.h +new file mode 100644 +index 0000000..0dac223 +--- /dev/null ++++ b/flags.h +@@ -0,0 +1,10 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++ ++/* Flag bit definitions */ ++ ++#ifndef __FLAGS_H__ ++#define __FLAGS_H__ ++ ++#define LAVA_SIGNAL_ENABLE (0x0001) ++ ++#endif /* __FLAGS_H__ */ +diff --git a/main.c b/main.c +index 01d60f7..165370f 100644 +--- a/main.c ++++ b/main.c +@@ -38,6 +38,7 @@ + #endif + + #include "utils.h" ++#include "flags.h" + + #ifndef DEFAULT_DIRECTORY + #define DEFAULT_DIRECTORY "/usr/lib" +@@ -74,8 +75,9 @@ main(int argc, char *argv[]) + opts.timeout = DEFAULT_TIMEOUT; + opts.ptests = NULL; + opts.xml_filename = NULL; ++ opts.flags = 0; + +- while ((opt = getopt(argc, argv, "d:e:lt:x:h")) != -1) { ++ while ((opt = getopt(argc, argv, "d:e:lt:x:Lh")) != -1) { + switch (opt) { + case 'd': + free(opts.directory); +@@ -122,6 +124,11 @@ main(int argc, char *argv[]) + opts.xml_filename = strdup(optarg); + CHECK_ALLOCATION(opts.xml_filename, 1, 1); + break; ++ case 'L': ++ // set LAVA signal mode ++ opts.flags |= LAVA_SIGNAL_ENABLE; ++ fprintf(stdout, "LAVA_SIGNAL_ENABLE == %d\n", opts.flags); ++ break; + default: + print_usage(stdout, argv[0]); + exit(1); +diff --git a/utils.c b/utils.c +index a8ba190..19f9efa 100644 +--- a/utils.c ++++ b/utils.c +@@ -47,6 +47,7 @@ + + #include "ptest_list.h" + #include "utils.h" ++#include "flags.h" + + #define GET_STIME_BUF_SIZE 1024 + #define WAIT_CHILD_POLL_TIMEOUT_MS 200 +@@ -439,6 +440,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, + fprintf(fp, "START: %s\n", progname); + PTEST_LIST_ITERATE_START(head, p) + char *ptest_dir = strdup(p->run_ptest); ++ char *ptest = strdup(p->ptest); + if (ptest_dir == NULL) { + rc = -1; + break; +@@ -480,11 +482,15 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, + int status; + int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0]; + FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr; ++ char result[5]; // pass\0, fail\0, skip\0 + + if (setpgid(child, pgid) == -1) { + fprintf(fp, "ERROR: setpgid() failed, %s\n", strerror(errno)); + } + ++ if (opts.flags & LAVA_SIGNAL_ENABLE) { ++ fprintf(stdout, "\n", ptest); ++ } + sttime = time(NULL); + fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime)); + fprintf(fp, "BEGIN: %s\n", ptest_dir); +@@ -506,6 +512,14 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts, + + fprintf(fp, "END: %s\n", ptest_dir); + fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, entime)); ++ if (opts.flags & LAVA_SIGNAL_ENABLE) { ++ if (status) ++ sprintf(result, "fail"); ++ else ++ sprintf(result, "pass"); ++ fprintf(stdout, "\n", ptest); ++ fprintf(stdout, "\n", ptest, result); ++ } + } + PTEST_LIST_ITERATE_END + fprintf(fp, "STOP: %s\n", progname); +diff --git a/utils.h b/utils.h +index aa53707..df11e24 100644 +--- a/utils.h ++++ b/utils.h +@@ -39,9 +39,9 @@ struct ptest_options { + int timeout; + char **ptests; + char *xml_filename; ++ unsigned int flags; + }; + +- + extern void check_allocation1(void *, size_t, char *, int, int); + extern struct ptest_list *get_available_ptests(const char *); + extern int print_ptests(struct ptest_list *, FILE *); diff --git a/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend new file mode 100644 index 000000000..5033ed7f6 --- /dev/null +++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend @@ -0,0 +1,2 @@ +require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)} + diff --git a/meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc new file mode 100644 index 000000000..1dcbe0b7b --- /dev/null +++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/ptest-runner:" +SRC_URI += "file://0007-WIP-Initial-LAVA-support.patch" + diff --git a/meta-agl-core/scripts/oe-depends-dot b/meta-agl-core/scripts/oe-depends-dot new file mode 100755 index 000000000..5cec23bf0 --- /dev/null +++ b/meta-agl-core/scripts/oe-depends-dot @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2018 Wind River Systems, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import argparse +import logging +import re + +class Dot(object): + def __init__(self): + parser = argparse.ArgumentParser( + description="Analyse recipe-depends.dot generated by bitbake -g", + epilog="Use %(prog)s --help to get help") + parser.add_argument("dotfile", + help = "Specify the dotfile", nargs = 1, action='store', default='') + parser.add_argument("-k", "--key", + help = "Specify the key, e.g., recipe name", + action="store", default='') + parser.add_argument("-d", "--depends", + help = "Print the key's dependencies", + action="store_true", default=False) + parser.add_argument("-w", "--why", + help = "Print why the key is built", + action="store_true", default=False) + parser.add_argument("-r", "--remove", + help = "Remove duplicated dependencies to reduce the size of the dot files." + " For example, A->B, B->C, A->C, then A->C can be removed.", + action="store_true", default=False) + + self.args = parser.parse_args() + + if len(sys.argv) != 3 and len(sys.argv) < 5: + print('ERROR: Not enough args, see --help for usage') + + def main(self): + #print(self.args.dotfile[0]) + # The format is {key: depends} + depends = {} + with open(self.args.dotfile[0], 'r') as f: + for line in f.readlines(): + if ' -> ' not in line: + continue + line_no_quotes = line.replace('"', '') + m = re.match("(.*) -> (.*)", line_no_quotes) + if not m: + print('WARNING: Found unexpected line: %s' % line) + continue + key = m.group(1) + if key == "meta-world-pkgdata": + continue + dep = m.group(2) + if key in depends: + if not key in depends[key]: + depends[key].add(dep) + else: + print('WARNING: Fonud duplicated line: %s' % line) + else: + depends[key] = set() + depends[key].add(dep) + + if self.args.remove: + reduced_depends = {} + for k, deps in depends.items(): + child_deps = set() + added = set() + # Both direct and indirect depends are already in the dict, so + # we don't have to do this recursively. + for dep in deps: + if dep in depends: + child_deps |= depends[dep] + + reduced_depends[k] = deps - child_deps + outfile= '%s-reduced%s' % (self.args.dotfile[0][:-4], self.args.dotfile[0][-4:]) + with open(outfile, 'w') as f: + print('Saving reduced dot file to %s' % outfile) + f.write('digraph depends {\n') + for k, v in reduced_depends.items(): + for dep in v: + f.write('"%s" -> "%s"\n' % (k, dep)) + f.write('}\n') + sys.exit(0) + + if self.args.key not in depends: + print("ERROR: Can't find key %s in %s" % (self.args.key, self.args.dotfile[0])) + sys.exit(1) + + if self.args.depends: + if self.args.key in depends: + print('Depends: %s' % ' '.join(depends[self.args.key])) + + reverse_deps = [] + if self.args.why: + for k, v in depends.items(): + if self.args.key in v and not k in reverse_deps: + reverse_deps.append(k) + print('Because: %s' % ' '.join(reverse_deps)) + +if __name__ == "__main__": + try: + dot = Dot() + ret = dot.main() + except Exception as esc: + ret = 1 + import traceback + traceback.print_exc() + sys.exit(ret) diff --git a/meta-agl-core/scripts/run-yocto-check-layer-feature-enabled.sh b/meta-agl-core/scripts/run-yocto-check-layer-feature-enabled.sh new file mode 100755 index 000000000..93403b974 --- /dev/null +++ b/meta-agl-core/scripts/run-yocto-check-layer-feature-enabled.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -x + +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT=`mktemp -d` + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# workaround: +# ERROR: Nothing PROVIDES 'smack' (but /home/dl9pf/AGL/master-newlayout/external/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb DEPENDS on or otherwise requires it) +BBMASK += "meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb" + +AGL_FEATURES += "aglcore" + +EOF + + +yocto-check-layer \ + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + -- \ + $AGLROOT/meta-agl/meta-agl-core + + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl + +exit 0 + + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ diff --git a/meta-agl-core/scripts/run-yocto-check-layer.sh b/meta-agl-core/scripts/run-yocto-check-layer.sh new file mode 100755 index 000000000..9082be920 --- /dev/null +++ b/meta-agl-core/scripts/run-yocto-check-layer.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -x + +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT=`mktemp -d` + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# workaround: +# ERROR: Nothing PROVIDES 'smack' (but /home/dl9pf/AGL/master-newlayout/external/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb DEPENDS on or otherwise requires it) +BBMASK += "meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb" + +EOF + + +yocto-check-layer \ + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + -- \ + $AGLROOT/meta-agl/meta-agl-core + + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl + +exit 0 + + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ diff --git a/meta-agl-distro/LICENSE b/meta-agl-distro/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-distro/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-distro/LICENSE.GPL-2.0-only b/meta-agl-distro/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-distro/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-distro/LICENSE.MIT b/meta-agl-distro/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-distro/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-distro/README b/meta-agl-distro/README deleted file mode 100644 index 08630b438..000000000 --- a/meta-agl-distro/README +++ /dev/null @@ -1,3 +0,0 @@ -This is meta-agl-disto. - -This layer holds the distro config(s) in use by AGL. diff --git a/meta-agl-distro/conf/distro/include/aarch64-tune.inc b/meta-agl-distro/conf/distro/include/aarch64-tune.inc deleted file mode 100644 index 553bb5a64..000000000 --- a/meta-agl-distro/conf/distro/include/aarch64-tune.inc +++ /dev/null @@ -1,13 +0,0 @@ -# DEFAULTTUNE overrides for AGL on aarch64 - -# We should not need the tuning include below as the BSP should include the right set already. -# A double inclusion would produce a warning. This include line is just for reference -# include conf/machine/include/arm/arch-armv8.inc - -DEFAULTTUNE_poky-agl := "aarch64" -# not yet ready -#QB_SYSTEM_NAME ?= "qemu-system-aarch" -#QB_DEFAULT_KERNEL ?= "zImage" -#QB_DEFAULT_FSTYPE ?= "ext4" -#QB_MACHINE ?= "-machine foo" -#QB_CPU ?= "-cpu bar" diff --git a/meta-agl-distro/conf/distro/include/arc-tune.inc b/meta-agl-distro/conf/distro/include/arc-tune.inc deleted file mode 100644 index 43dabd5a9..000000000 --- a/meta-agl-distro/conf/distro/include/arc-tune.inc +++ /dev/null @@ -1,3 +0,0 @@ -# DEFAULTTUNE overrides for AGL on arc - -# DEFAULTTUNE ?= "archs" diff --git a/meta-agl-distro/conf/distro/include/arm-tune.inc b/meta-agl-distro/conf/distro/include/arm-tune.inc deleted file mode 100644 index fa68e05a7..000000000 --- a/meta-agl-distro/conf/distro/include/arm-tune.inc +++ /dev/null @@ -1,23 +0,0 @@ -# DEFAULTTUNE overrides for AGL on ARM 32bit - -# We should not need the tuning include below as the BSP should include the right set already. -# A double inclusion would produce a warning. This include line is just for reference -# include conf/machine/include/arm/arch-armv7ve.inc -# medium profile boards need to -# include conf/machine/include/arch/arm-armv7-a.inc - -# Standard target for 32bit ARM (newer than cortex-a15) -AGLDEFAULTTUNE = "armv7vethf-neon-vfpv4" - -# for cortex-a8, cortex-a9, cortex-a7 (=rpi 2/3) -AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', 'armv7athf-neon', '${AGLDEFAULTTUNE}', d)}" - -# for armv6 (=rpi0/1) -AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-low-arm-compiler', 'arm1176jzfshf', '${AGLDEFAULTTUNE}', d)}" -DEFAULTTUNE := "${AGLDEFAULTTUNE}" - -QB_SYSTEM_NAME ?= "qemu-system-arm" -QB_DEFAULT_KERNEL ?= "zImage" -QB_DEFAULT_FSTYPE ?= "ext4" -QB_MACHINE ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-machine vexpress-a9', '-machine vexpress-a15', d)}" -QB_CPU ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-cpu cortex-a9', '-cpu cortex-a15', d)}" diff --git a/meta-agl-distro/conf/distro/include/riscv64-tune.inc b/meta-agl-distro/conf/distro/include/riscv64-tune.inc deleted file mode 100644 index f8118dec3..000000000 --- a/meta-agl-distro/conf/distro/include/riscv64-tune.inc +++ /dev/null @@ -1,7 +0,0 @@ -# DEFAULTTUNE overrides for AGL on riscv64 - -# We should not need the tuning include below as the BSP should include the right set already. -# A double inclusion would produce a warning. This include line is just for reference -# include conf/machine/include/arm/arch-armv8.inc - -DEFAULTTUNE = "riscv64" diff --git a/meta-agl-distro/conf/distro/include/x86_64-tune.inc b/meta-agl-distro/conf/distro/include/x86_64-tune.inc deleted file mode 100644 index 9f2bdc867..000000000 --- a/meta-agl-distro/conf/distro/include/x86_64-tune.inc +++ /dev/null @@ -1,55 +0,0 @@ -# DEFAULTTUNE overrides for AGL on x86-64 - -# We should not need the tuning include below as the BSP should include the right set already. -# A double inclusion would produce a warning. This include line is just for reference -#include conf/machine/include/tune-corei7.inc -DEFAULTTUNE = "corei7-64" - -# shortened copy of tune-corei7.inc due to bug in inclusion for tune-core2.inc -# TUNE_ARCH is using .= x86-64 , if done twice, you get x86-64x86-64 as TUNE_ARCH :/ -# we should have at least the core2 tunings by default (=qemux86-64) - -# Extra tune features -TUNEVALID[corei7] = "Enable corei7 specific processor optimizations" -TUNE_CCARGS = "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2', '', d)}" - -# Extra tune selections -AVAILTUNES += "corei7-32" -TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7" -BASE_LIB_tune-corei7-32 = "lib" -TUNE_PKGARCH_tune-corei7-32 = "corei7-32" -PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32" -QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false" - -AVAILTUNES += "corei7-64" -TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7" -BASE_LIB_tune-corei7-64 = "lib64" -TUNE_PKGARCH_tune-corei7-64 = "corei7-64" -PACKAGE_EXTRA_ARCHS_tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64" -QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false" - -AVAILTUNES += "corei7-64-x32" -TUNE_FEATURES_tune-corei7-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} corei7" -BASE_LIB_tune-corei7-64-x32 = "libx32" -TUNE_PKGARCH_tune-corei7-64-x32 = "corei7-64-x32" -PACKAGE_EXTRA_ARCHS_tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} corei7-64-x32" -QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false" - -TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '' ,d)}" - -# Bump qemux86-64 up to corei7 -AVAILTUNES += "qemux86-64" -TUNE_FEATURES_tune-qemux86-64 = "${TUNE_FEATURES_tune-x86-64} corei7" -BASE_LIB_tune-qemux86-64 = "lib64" -TUNE_PKGARCH_tune-qemux86-64 = "corei7-64" -PACKAGE_EXTRA_ARCHS_tune-qemux86-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64" -QEMU_EXTRAOPTIONS_qemux86-64 = " -cpu Nehalem,check=false" - -# QEMU / runqemu options (partly overrides qemuboot-x86.inc) -QB_MACHINE = "-machine q35" -QB_SYSTEM_NAME_x86-64 = "qemu-system-x86_64" -QB_CPU_x86-64 = "-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt" -QB_CPU_KVM_x86-64 = "-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt" - -# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-vga vmware -show-cursor -usb -device usb-tablet -device virtio-rng-pci" diff --git a/meta-agl-distro/conf/distro/poky-agl.conf b/meta-agl-distro/conf/distro/poky-agl.conf deleted file mode 100644 index 63a1960af..000000000 --- a/meta-agl-distro/conf/distro/poky-agl.conf +++ /dev/null @@ -1,208 +0,0 @@ -require conf/distro/poky.conf - -# AGL specific derivations -DISTRO = "poky-agl" -DISTRO_NAME = "Automotive Grade Linux" - - -# Release flags -DISTRO_CODENAME = "koi" -AGL_BRANCH = "master" -AGLVERSION = "10.90.0" -# switch devel/release -AGLRELEASETYPE ?= "agldevelopment" -#AGLRELEASETYPE ?= "aglrelease" -OVERRIDES .= ":${AGLRELEASETYPE}" -# - -#for development -DISTRO_VERSION_agldevelopment := "${AGLVERSION}+snapshot-${DATE}" -AGL_APP_REVISION_agldevelopment = "${AUTOREV}" -AGL_DEFAULT_REVISION_agldevelopment = "${AUTOREV}" - -#for release -DISTRO_VERSION_aglrelease := "${AGLVERSION}" -DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace('+snapshot-${DATE}','')}" -AGL_APP_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}" -AGL_DEFAULT_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}" - -# reproducible builds: -# enable the flag -BUILD_REPRODUCIBLE_BINARIES = "1" -# Set the desired timestamps -export SOURCE_DATE_EPOCH = "1593400000" -REPRODUCIBLE_TIMESTAMP_ROOTFS = "1593400000" -# inherit the class -INHERIT += "reproducible_build" - - -# SDK -SDK_VENDOR = "-aglsdk" -SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}" - -# SDKPATH is the folder where the SDK is going to be installed -# Due to an issue with the qt5 environment (see SPEC-1667), -# we add DEFAULTTUNE to the SDKPATH to mitigate the issue. -SDKPATH = "/opt/agl-sdk/${SDK_VERSION}-${DEFAULTTUNE}" - - -MAINTAINER = "AGL https://lists.automotivelinux.org/g/agl-dev-community" - -TARGET_VENDOR = "-agl" - -# Override these in poky based distros -AGL_DEFAULT_DISTRO_FEATURES = "largefile systemd opengl wayland pam bluetooth bluez5 3g polkit" -POKY_DEFAULT_DISTRO_FEATURES := "${AGL_DEFAULT_DISTRO_FEATURES}" -OVERRIDES .= ":${DISTRO_CODENAME}" - -QEMU_TARGETS ?= "arm aarch64 i386 x86_64 riscv64" -# Other QEMU_TARGETS "mips mips64 mips64el ppc sh4" - -MIRRORS =+ "\ -bzr://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -cvs://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -git://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -gitsm://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -hg://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -osc://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -p4://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -svn://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -bzr://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -cvs://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -git://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -gitsm://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -hg://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -osc://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -p4://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -svn://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ - \ -ftp://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -http://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -https://.*/.* https://download.automotivelinux.org/AGL/mirror/ \n \ -ftp://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -http://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -https://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \ -" - -# The CONNECTIVITY_CHECK_URI's are used to test whether we can succesfully -# fetch from the network (and warn you if not). To disable the test set -# the variable to be empty. -# Git example url: git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=HEAD -CONNECTIVITY_CHECK_URIS ?= "" - -PREFERRED_PROVIDER_udev ?= "systemd" -PREFERRED_PROVIDER_udev-utils ?= "systemd" - -VIRTUAL-RUNTIME_init_manager = "systemd" -VIRTUAL-RUNTIME_initscripts = "" - -# network manager to use (possible values: systemd, connman) -VIRTUAL-RUNTIME_net_manager = "connman" - -DISTRO_FEATURES_APPEND = " " -DISTRO_FEATURES_remove = "x11" -DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit pulseaudio" - -# Prefer GStreamer 1.16.x by default -PREFERRED_VERSION_gstreamer1.0 ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-plugins-bad ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-plugins-base ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-plugins-good ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-plugins-ugly ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-libav ?= "1.16.%" -PREFERRED_VERSION_gstreamer1.0-omx ?= "1.16.%" - -# Prefer libjpeg-turbo -PREFERRED_PROVIDER_jpeg = "libjpeg-turbo" - -# using multiple BSP layers causes dangling bbappends in meta-agl-bsp -# turn it into a warning -#BB_DANGLINGAPPENDS_WARNONLY = "1" - -# Not yet upstreamed; should be submitted. -SECURITY_CFLAGS_pn-qtwebengine = "${SECURITY_NO_PIE_CFLAGS}" - -#Redefined USER_CLASSES -#Disable prelink. It is unmaintained and likely will go away. -#default: USER_CLASSES ?= "buildstats image-mklibs image-prelink" -USER_CLASSES = "buildstats image-mklibs" - -# AGL uses 4 optimization levels -# 2 for ARM 32bit -# - a high and a medium setting for the CCARGS -# - the high setting is default (needs >= cortex-a15) -# - the medium setting is enabled with: DISTRO_FEATURES_append = " agl-medium-arm-compiler " -# 1 for ARM 64bit / AARCH64 -# 1 for x86-64 -# 1 for RISC-V 64-bit -require conf/distro/include/${TARGET_ARCH}-tune.inc - -# Generic qemu and qemuboot (runqemu) enhancements -# check qemuboot.bbclass -# - use 2G RAM by default -QB_MEM ?= "-m 2048" -# use pulseaudio on the host side - off as qemu-native is built with alsa -#QB_AUDIO_DRV = "pa" -# expose a virtual 'hda' sound card to the guest (arm/aarch64/x86-64) -QB_AUDIO_OPT = "-soundhw hda" - -# Board templates can add extra IMAGE_FSTYPES through this. -# It is added (late) through the AGL image recipes. -AGL_EXTRA_IMAGE_FSTYPES ??= "" -AGL_EXTRA_INITRAMFS_FSTYPES ??= "" -# -# Default IMAGE FSTYPES wic.xz -AGL_DEFAULT_IMAGE_FSTYPES ?= "wic.xz wic.bmap wic.xz.sha256sum" -AGL_DEFAULT_IMAGE_FSTYPES_qemuall ?= "${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}" -AGL_DEFAULT_IMAGE_FSTYPES_append_netboot = " ${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}" -AGL_DEFAULT_INITRAMFS_FSTYPES ?= "ext4.gz" - -# DEFAULT IMAGE_FSTYPES for AGL (no - BSPs should not set this) -# -IMAGE_FSTYPES := "${AGL_DEFAULT_IMAGE_FSTYPES} ${AGL_EXTRA_IMAGE_FSTYPES}" -INITRAMFS_FSTYPES := "${AGL_DEFAULT_INITRAMFS_FSTYPES} ${AGL_EXTRA_INITRAMFS_FSTYPES}" -# -# THE FUTURE is 'wic' -# IMAGE_FSTYPES_append = " wic" - -# enable the packagemanagement -IMAGE_FEATURES =+ "package-management" -PACKAGE_FEED_URIS = "http://192.168.7.1:8000/tmp/deploy/" -PACKAGE_FEED_BASE_PATHS = "rpm" -PACKAGE_FEED_ARCHS = "" -#${PACKAGE_ARCHS}" - -# Complementary package definitions for agl-test-wgt and agl-devel-wgt -# image features -COMPLEMENTARY_GLOB[agl-test-wgt] = '*-test' -COMPLEMENTARY_GLOB[agl-devel-wgt] = '*-coverage *-debug' - -# Fix for rpm metadata clash between nativesdk-cmake and nativesdk-qtbase-tools -# (revalidate after 2017-10-15, 2018-06-12: still required) -DIRFILES_pn-nativesdk-cmake = "1" - -# For https://jira.automotivelinux.org/browse/SPEC-1629 : -# We exclude the conflicting vars from the sstate task hash. -# This needs to be verified. -do_package_write_rpm[vardepsexclude] += "ARCHIVER_TOPDIR PF" - -# Set preferred provider to new navi application -PREFERRED_RPROVIDER_virtual/navigation ?= "ondemandnavi" - -# Set preferred provider for low-can device mapping configuration -PREFERRED_RPROVIDER_virtual/low-can-dev-mapping ?= "dev-mapping" - -# Mask upstream meta-security bbappend that interferes with non-linux-yocto -# kernels due to the bug of having two wildcards, which bitbake does not -# support. Not having it is not an issue, since there is also explicit -# enabling of required security features done by meta-agl/meta-security. -BBMASK += "meta-security/recipes-kernel/linux/linux-%_5.%.bbappend" - -# Workaround for https://jira.automotivelinux.org/browse/SPEC-3621 -# TLDR: do_image_wic will modify the target's /etc/fstab while -# do_image_tar and do_image_ext4 can run in parallel -# This needs to be fixed upstream: -# See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13994 -# For convenience restricted to ext4 and tar image types. -AGL_FORBID_FSTAB_UPDATE ?= "${@bb.utils.contains_any('IMAGE_FSTYPES', 'ext4 ext4.xz tar tar.gz tar.bz2 tar.xz', '--no-fstab-update', '', d)}" -WIC_CREATE_EXTRA_ARGS_append = " ${AGL_FORBID_FSTAB_UPDATE}" diff --git a/meta-agl-distro/conf/layer.conf b/meta-agl-distro/conf/layer.conf deleted file mode 100644 index f8cf50c76..000000000 --- a/meta-agl-distro/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "agl-distro" -BBFILE_PATTERN_agl-distro = "^${LAYERDIR}/" -BBFILE_PRIORITY_agl-distro = "70" - -LAYERSERIES_COMPAT_agl-distro = "dunfell" diff --git a/meta-agl-distro/scripts/oe-depends-dot b/meta-agl-distro/scripts/oe-depends-dot deleted file mode 100755 index 5cec23bf0..000000000 --- a/meta-agl-distro/scripts/oe-depends-dot +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2018 Wind River Systems, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import os -import sys -import argparse -import logging -import re - -class Dot(object): - def __init__(self): - parser = argparse.ArgumentParser( - description="Analyse recipe-depends.dot generated by bitbake -g", - epilog="Use %(prog)s --help to get help") - parser.add_argument("dotfile", - help = "Specify the dotfile", nargs = 1, action='store', default='') - parser.add_argument("-k", "--key", - help = "Specify the key, e.g., recipe name", - action="store", default='') - parser.add_argument("-d", "--depends", - help = "Print the key's dependencies", - action="store_true", default=False) - parser.add_argument("-w", "--why", - help = "Print why the key is built", - action="store_true", default=False) - parser.add_argument("-r", "--remove", - help = "Remove duplicated dependencies to reduce the size of the dot files." - " For example, A->B, B->C, A->C, then A->C can be removed.", - action="store_true", default=False) - - self.args = parser.parse_args() - - if len(sys.argv) != 3 and len(sys.argv) < 5: - print('ERROR: Not enough args, see --help for usage') - - def main(self): - #print(self.args.dotfile[0]) - # The format is {key: depends} - depends = {} - with open(self.args.dotfile[0], 'r') as f: - for line in f.readlines(): - if ' -> ' not in line: - continue - line_no_quotes = line.replace('"', '') - m = re.match("(.*) -> (.*)", line_no_quotes) - if not m: - print('WARNING: Found unexpected line: %s' % line) - continue - key = m.group(1) - if key == "meta-world-pkgdata": - continue - dep = m.group(2) - if key in depends: - if not key in depends[key]: - depends[key].add(dep) - else: - print('WARNING: Fonud duplicated line: %s' % line) - else: - depends[key] = set() - depends[key].add(dep) - - if self.args.remove: - reduced_depends = {} - for k, deps in depends.items(): - child_deps = set() - added = set() - # Both direct and indirect depends are already in the dict, so - # we don't have to do this recursively. - for dep in deps: - if dep in depends: - child_deps |= depends[dep] - - reduced_depends[k] = deps - child_deps - outfile= '%s-reduced%s' % (self.args.dotfile[0][:-4], self.args.dotfile[0][-4:]) - with open(outfile, 'w') as f: - print('Saving reduced dot file to %s' % outfile) - f.write('digraph depends {\n') - for k, v in reduced_depends.items(): - for dep in v: - f.write('"%s" -> "%s"\n' % (k, dep)) - f.write('}\n') - sys.exit(0) - - if self.args.key not in depends: - print("ERROR: Can't find key %s in %s" % (self.args.key, self.args.dotfile[0])) - sys.exit(1) - - if self.args.depends: - if self.args.key in depends: - print('Depends: %s' % ' '.join(depends[self.args.key])) - - reverse_deps = [] - if self.args.why: - for k, v in depends.items(): - if self.args.key in v and not k in reverse_deps: - reverse_deps.append(k) - print('Because: %s' % ' '.join(reverse_deps)) - -if __name__ == "__main__": - try: - dot = Dot() - ret = dot.main() - except Exception as esc: - ret = 1 - import traceback - traceback.print_exc() - sys.exit(ret) diff --git a/meta-agl-profile-cluster-qt5/LICENSE b/meta-agl-profile-cluster-qt5/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-cluster-qt5/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only b/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster-qt5/LICENSE.MIT b/meta-agl-profile-cluster-qt5/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-cluster-qt5/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster-qt5/conf/layer.conf b/meta-agl-profile-cluster-qt5/conf/layer.conf deleted file mode 100644 index 6ed7d8ca8..000000000 --- a/meta-agl-profile-cluster-qt5/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofileclusterqt5" -BBFILE_PATTERN_aglprofileclusterqt5 = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofileclusterqt5 = "70" - -LAYERSERIES_COMPAT_aglprofileclusterqt5 = "dunfell" diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb b/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb deleted file mode 100644 index 244e2ba48..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "A basic Wayland based cluster image with Qt5 support" - -require agl-image-cluster-qt5.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - profile-cluster-qt5 \ - " diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc b/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc deleted file mode 100644 index 93826aa46..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc +++ /dev/null @@ -1,7 +0,0 @@ -require recipes-platform/images/agl-image-boot.inc - -IMAGE_FEATURES += "splash package-management ssh-server-dropbear" - -inherit features_check - -REQUIRED_DISTRO_FEATURES = "wayland" diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb b/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb deleted file mode 100644 index 5436a5617..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb +++ /dev/null @@ -1,21 +0,0 @@ -SUMMARY = "The middleware for AGL Qt5 based cluster profile" -DESCRIPTION = "The set of packages required for AGL Qt5 based Cluster Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-cluster-qt5 \ - profile-cluster-qt5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-image-boot \ - packagegroup-agl-core-security \ - packagegroup-agl-graphical-weston \ - packagegroup-agl-appfw-native-qt5 \ -" - -RDEPENDS_profile-cluster-qt5 = "${PN}" diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb b/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb deleted file mode 100644 index 9d54b33a4..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb +++ /dev/null @@ -1,36 +0,0 @@ -SUMMARY = "The middleware for AGL Qt5 based cluster qtcompositor" -DESCRIPTION = "The set of packages required for AGL Qt5 based Cluster Demo Qtcompositor Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-cluster-qtcompositor \ - profile-cluster-qt5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-image-boot \ - packagegroup-agl-core-security \ - packagegroup-agl-core-connectivity \ -" - -QT_LITE = " \ - qtbase \ - qtdeclarative \ - qtwayland \ - qtgraphicaleffects-qmlplugins \ - qtsvg-plugins \ - qtwebsockets \ - qtwebsockets-qmlplugins \ - qtcompositor-conf \ -" - -RDEPENDS_${PN}_append = " \ - ${QT_LITE} \ - agl-login-manager \ -" - -RDEPENDS_profile-cluster-qt5 = "${PN}" diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch deleted file mode 100644 index 5c936e7ae..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch +++ /dev/null @@ -1,45 +0,0 @@ -537bb3cc027eed14500fe5724ab30f Mon Sep 17 00:00:00 2001 -From: Laszlo Agocs -Date: Fri, 14 Dec 2018 10:48:43 +0100 -Subject: eglfs: avoid breaking builds without EGL_EXT_platform_base - -Change-Id: I9183e17b42c00435f20c00a414e1f20aa3972351 -Fixes: QTBUG-72559 -Reviewed-by: Johan Helsing ---- - .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp | 1 - - .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp | 4 ++++ - 2 files changed, 4 insertions(+), 1 deletion(-) - -(limited to 'src/plugins/platforms/eglfs/deviceintegration/eglfs_kms') - -diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -index 1e4f4e72c8..f154520669 100644 ---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -@@ -63,7 +63,6 @@ QEglFSKmsGbmIntegration::QEglFSKmsGbmIntegration() - - #ifndef EGL_EXT_platform_base - typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); --typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); - #endif - - #ifndef EGL_PLATFORM_GBM_KHR -diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp -index 65a7c4f38a..a93762e5b4 100644 ---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp -+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp -@@ -45,6 +45,10 @@ - - QT_BEGIN_NAMESPACE - -+#ifndef EGL_EXT_platform_base -+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -+#endif -+ - void QEglFSKmsGbmWindow::resetSurface() - { - QEglFSKmsGbmScreen *gbmScreen = static_cast(screen()); --- -cgit v1.2.1 - diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch deleted file mode 100644 index 3c33cfc10..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 9514c51b5a6881c445586fa3a232ccd47fe4b1e5 Mon Sep 17 00:00:00 2001 -From: Stefan Zehetbauer -Date: Fri, 14 Dec 2018 13:26:03 +0100 -Subject: [PATCH] fixed invalid conversion from EGLNativeDisplayType to void* - ---- - .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -index d495a8d..34ca9e8 100644 ---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp -@@ -82,7 +82,7 @@ EGLDisplay QEglFSKmsGbmIntegration::createDisplay(EGLNativeDisplayType nativeDis - } - - if (getPlatformDisplay) { -- display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, nativeDisplay, nullptr); -+ display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, reinterpret_cast(&nativeDisplay), nullptr); - } else { - qCDebug(qLcEglfsKmsDebug, "No eglGetPlatformDisplay for GBM, falling back to eglGetDisplay"); - display = eglGetDisplay(nativeDisplay); --- -1.9.1 diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend deleted file mode 100644 index e94ef03ae..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend +++ /dev/null @@ -1,12 +0,0 @@ -#Enable eglfs for QT based application - -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -# FIXME: Disabled as they do not apply against 5.13.2, and it is -# unclear if they are still required for building dra7xx-evm, -# which fails for what looks like a different reason. -#SRC_URI += " file://0001-fixed-eglfs_kms-fails-to-build.patch \ -# file://0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch \ -# " - -PACKAGECONFIG_GL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ' eglfs kms gbm', '', d)}" diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb deleted file mode 100644 index 49111b6e8..000000000 --- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb +++ /dev/null @@ -1,40 +0,0 @@ -SUMMARY = "Configuration files for running wayland with a non-weston compositor" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -inherit allarch agl-graphical - -do_configure[noexec] = "1" -do_compile[noexec] = "1" - -do_install() { - # Add a rule to ensure the 'display' user has permissions to - # open the graphics device - install -d ${D}${sysconfdir}/udev/rules.d - cat >${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF' -SUBSYSTEM=="drm", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*" -EOF - - # user 'display' must also be able to access /dev/input/* - cat >${D}${sysconfdir}/udev/rules.d/zz-input.rules <<'EOF' -SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="^" -EOF - - # user 'display' must also be able to access /dev/media*, etc. - cat >${D}${sysconfdir}/udev/rules.d/zz-remote-display.rules <<'EOF' -SUBSYSTEM=="media", MODE="0660", GROUP="display", SECLABEL{smack}="*" -SUBSYSTEM=="video4linux", MODE="0660", GROUP="display", SECLABEL{smack}="*" -KERNEL=="uvcs", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*" -KERNEL=="rgnmm", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*" -EOF -} - -do_install_append_imx() { - install -d ${D}${sysconfdir}/udev/rules.d - cat >>${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF' -SUBSYSTEM=="gpu_class", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*" -EOF - -} - -RCONFLICTS_${PN} = "weston-init" diff --git a/meta-agl-profile-cluster/LICENSE b/meta-agl-profile-cluster/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-cluster/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster/LICENSE.GPL-2.0-only b/meta-agl-profile-cluster/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-cluster/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster/LICENSE.MIT b/meta-agl-profile-cluster/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-cluster/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-cluster/conf/layer.conf b/meta-agl-profile-cluster/conf/layer.conf deleted file mode 100644 index e71e04c90..000000000 --- a/meta-agl-profile-cluster/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofilecluster" -BBFILE_PATTERN_aglprofilecluster = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofilecluster = "70" - -LAYERSERIES_COMPAT_aglprofilecluster = "dunfell" diff --git a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb b/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb deleted file mode 100644 index 552d7a74e..000000000 --- a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "A basic Wayland based cluster image" - -require agl-image-cluster.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - profile-cluster \ - " diff --git a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc b/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc deleted file mode 100644 index 93826aa46..000000000 --- a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc +++ /dev/null @@ -1,7 +0,0 @@ -require recipes-platform/images/agl-image-boot.inc - -IMAGE_FEATURES += "splash package-management ssh-server-dropbear" - -inherit features_check - -REQUIRED_DISTRO_FEATURES = "wayland" diff --git a/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb b/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb deleted file mode 100644 index c0c612467..000000000 --- a/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "The middleware for AGL cluster profile" -DESCRIPTION = "The set of packages required for AGL Cluster Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-cluster \ - profile-cluster \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-image-boot \ - packagegroup-agl-core-security \ - packagegroup-agl-graphical-weston \ -" - -RDEPENDS_profile-cluster = "${PN}" diff --git a/meta-agl-profile-core/LICENSE b/meta-agl-profile-core/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-core/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-core/LICENSE.GPL-2.0-only b/meta-agl-profile-core/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-core/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-core/LICENSE.MIT b/meta-agl-profile-core/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-core/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-core/classes/cloc.bbclass b/meta-agl-profile-core/classes/cloc.bbclass deleted file mode 100644 index 9b73704e8..000000000 --- a/meta-agl-profile-core/classes/cloc.bbclass +++ /dev/null @@ -1,33 +0,0 @@ -# (C) 2017 Jan-Simon Möller -# -# License: GPLv2 -# -# summary with -# cloc --sum-reports `find . -name "*clocreport" | grep -v "\-native" ` --out summary.report - -# cloc needs to be installed on the host -# FIXME: create a cloc-native -HOSTTOOLS += "cloc" - -CLOC_DIRECTORY ??= "${DEPLOY_DIR}/cloc/" -CLOCSTATEDIR = "${WORKDIR}/cloc-destdir/" - -python do_cloc() { - - import subprocess - - source_dir = d.getVar('S', True) - pn = d.getVar('PN', True) - - destdir = d.expand('${CLOCSTATEDIR}') - bb.utils.mkdirhier(destdir) - - cloc_cmd = 'cloc %s -q --out=%s/%s.clocreport' % (source_dir, destdir, pn ) - subprocess.call(cloc_cmd, shell=True) - -} - - -addtask cloc before do_configure after do_patch - -EXPORT_FUNCTIONS do_cloc diff --git a/meta-agl-profile-core/conf/include/agl-devel.inc b/meta-agl-profile-core/conf/include/agl-devel.inc deleted file mode 100644 index 6ecd6a075..000000000 --- a/meta-agl-profile-core/conf/include/agl-devel.inc +++ /dev/null @@ -1,20 +0,0 @@ -IMAGE_FEATURES =+ "debug-tweaks tools-debug tools-profile" - -IMAGE_INSTALL_append = " \ - packagegroup-agl-core-devel \ -" - -IMAGE_INSTALL_append = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic.vmdk wic.vmdk.xz', ' open-vm-tools vboxguestdrivers', '', d)}" - -# Install libdrm-test, including modetest, to images with GUI -IMAGE_INSTALL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', ' libdrm-tests', '', d)}" - -IMAGE_FEATURES_append = " agl-devel-wgt" - -# disable install of debug files in SDK -# initial value: SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs staticdev-pkgs" -SDKIMAGE_FEATURES="dev-pkgs" - -# allows insertion of code or items specific to developement -OVERRIDES .= ":agl-devel" -DISTRO_FEATURES_append = " agl-devel" diff --git a/meta-agl-profile-core/conf/include/agl-gplv2.inc b/meta-agl-profile-core/conf/include/agl-gplv2.inc deleted file mode 100644 index fc9a4072b..000000000 --- a/meta-agl-profile-core/conf/include/agl-gplv2.inc +++ /dev/null @@ -1,8 +0,0 @@ -# GPLv3 Compliance -PREFERRED_VERSION_bash = "3.2.%" -PREFERRED_VERSION_gawk = "3.1.%" -PREFERRED_VERSION_gdbm = "1.8.%" -PREFERRED_VERSION_gnupg = "1.4.7" -PREFERRED_VERSION_gnutls = "3.3.%" -PREFERRED_VERSION_mc = "4.7.5.%" -PREFERRED_VERSION_readline = "5.2" diff --git a/meta-agl-profile-core/conf/include/agl-sign-wgts.inc b/meta-agl-profile-core/conf/include/agl-sign-wgts.inc deleted file mode 100644 index 6e6674fd1..000000000 --- a/meta-agl-profile-core/conf/include/agl-sign-wgts.inc +++ /dev/null @@ -1,3 +0,0 @@ -# allows insertion of code or items specific to developement -OVERRIDES .= ":agl-sign-wgts" -DISTRO_FEATURES_append = " agl-sign-wgts" diff --git a/meta-agl-profile-core/conf/include/base-agl.inc b/meta-agl-profile-core/conf/include/base-agl.inc deleted file mode 100644 index c5cf1a57f..000000000 --- a/meta-agl-profile-core/conf/include/base-agl.inc +++ /dev/null @@ -1,20 +0,0 @@ -# AGL includes all kernel modules here for ease-of-use during development. -# Comment this out to be able to select the kernel modules yourself. -IMAGE_INSTALL_append = " kernel-modules" - -# Likewise as we included all kernel modules by default in the filesystem, -# we do not need a separate tarball stored. -# Comment this out to receive the separate modules tarball again. -MODULE_TARBALL_DEPLOY ?= "0" - -# Comment out below if want to use QtWebkit -PACKAGECONFIG_remove_pn-qtquick1 = "webkit" - - -ASSUME_PROVIDED_remove = "tar-native" - -# Use static IDs to enable full-filesystem updates -USERADDEXTENSION = "useradd-staticids" -USERADD_ERROR_DYNAMIC = "error" -USERADD_GID_TABLES = "files/group" -USERADD_UID_TABLES = "files/passwd" diff --git a/meta-agl-profile-core/conf/layer.conf b/meta-agl-profile-core/conf/layer.conf deleted file mode 100644 index fef746d76..000000000 --- a/meta-agl-profile-core/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofilecore" -BBFILE_PATTERN_aglprofilecore = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofilecore = "80" - -LAYERSERIES_COMPAT_aglprofilecore = "dunfell" diff --git a/meta-agl-profile-core/files/group b/meta-agl-profile-core/files/group deleted file mode 100644 index c309f6a05..000000000 --- a/meta-agl-profile-core/files/group +++ /dev/null @@ -1,92 +0,0 @@ -root::0: -daemon::1: -bin::2: -sys::3: -adm::4: -tty::5: -disk::6: -lp::7: -mail::8: -news::9: -uucp::10: -man::12: -proxy::13: -kmem::15: -input::19: -dialout::20: -fax::21: -voice::22: -cdrom::24: -floppy::25: -tape::26: -sudo::27: -audio::29: -dip::30: -www-data::33: -backup::34: -operator::37: -list::38: -irc::39: -src::40: -gnats::41: -shadow::42: -utmp::43: -video::44: -sasl::45: -plugdev::46: -staff::50: -games::60: -shutdown::70: -users::100: -nogroup::65534: -cynagora::999: -dhcp::998: -avahi::997: -tracing::1000: -sshd::996: -systemd-bus-proxy::995: -netdev::993: -messagebus::994: -afm::992: -weston-launch::986: -lock::990: -systemd-journal::989: -systemd-timesync::988: -systemd-coredump::888: -pulse::991: -bind::987: -trinity::985: -mpd::984: -mysql::983: -polkitd::982: -datetime::981: -network::980: -zabbix::979: -nm-openvpn::978: -xuser::2002: -builder::977: -rpc::976: -crontab::975: -lpadmin::974: -_apt::972: -rpcuser::970: -avahi-autoipd::969: -ntp::968: -dovecot::967: -dovenull::966: -quagga::965: -quaggavty::964: -rwhod::963: -ftp::962: -squid::960: -postfix::959: -vmail::958: -opensaf::957: -lldpd::956: -postdrop::954: -display::200: -agl-driver::1001: -agl-passenger::1002: -systemd-network::1005: -systemd-resolve::1006: -mosquitto::1007: diff --git a/meta-agl-profile-core/files/passwd b/meta-agl-profile-core/files/passwd deleted file mode 100644 index ac70c0f9b..000000000 --- a/meta-agl-profile-core/files/passwd +++ /dev/null @@ -1,62 +0,0 @@ -root::0:0::: -daemon::1:1::: -bin::2:2::: -sys::3:3::: -sync::4:65534::: -games::5:60::: -man::6:12::: -lp::7:7::: -mail::8:8::: -news::9:9::: -uucp::10:10::: -proxy::13:13::: -www-data::33:33::: -backup::34:34::: -list::38:38::: -irc::39:39::: -gnats::41:41::: -nobody::65534:65534::: -cynagora::999:999::: -dhcp::998:998::: -avahi::997:997::: -sshd::996:996::: -systemd-bus-proxy::995:995::: -agl-driver::1001:1001::: -agl-passenger::1002:1002::: -messagebus::994:994::: -afm::992:992::: -systemd-timesync::988:988::: -systemd-coredump::888:888::: -pulse::991:991::: -bind::987:987::: -trinity::985:985::: -mpd::984:984::: -mysql::983:983::: -polkitd::982:982::: -zabbix::979:979::: -nm-openvpn::978:978::: -xuser::2002:2002::: -builder::977:977::: -rpc::976:976::: -distcc::973:65534::: -_apt::972:972::: -ppp::971:65534::: -rpcuser::970:970::: -avahi-autoipd::969:969::: -ntp::968:968::: -dovecot::967:967::: -dovenull::966:966::: -quagga::965:965::: -rwhod::963:963::: -ftp::962:962::: -radvd::961:65534::: -squid::960:960::: -postfix::959:959::: -vmail::958:958::: -opensaf::957:957::: -lldpd::956:956::: -cyrus::955:8::: -display::200:200::: -systemd-network::1005:1005::: -systemd-resolve::1006:1006::: -mosquitto::1007:1007::: diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb deleted file mode 100644 index bc53051f2..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Bluetooth MAP Service Binding" -DESCRIPTION = "AGL Bluetooth MAP Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth-map" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth-map;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "glib-2.0 json-c" -RDEPENDS_${PN} = "bluez5-obex agl-service-bluetooth" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb deleted file mode 100644 index 3f9ff7be1..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Bluetooth PBAP Service Binding" -DESCRIPTION = "AGL Bluetooth PBAP Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth-pbap" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth-pbap;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "glib-2.0 json-c" -RDEPENDS_${PN} = "bluez5-obex agl-service-bluetooth agl-service-data-persistence" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb deleted file mode 100644 index 8cfa8ec8f..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Bluetooth Service Binding" -DESCRIPTION = "AGL Bluetooth Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "glib-2.0 json-c" -RDEPENDS_${PN} = "agl-service-data-persistence agl-service-network" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb deleted file mode 100644 index 83f6c1e75..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "Low level CAN service" -DESCRIPTION = "AGL Service application for read and decode CAN messages" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/low-level-can-service" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-can-low-level;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - -DEPENDS = "libafb-helpers libappcontroller" - -inherit cmake aglwgt pkgconfig ptest - -# For now, just enable J1939 on the qemu platforms where we know the -# linux-yocto kernel is new enough (>= 5.4) and has the support enabled. -AGLWGT_CMAKE_CONFIGURE_ARGS_append_qemuall = " -DWITH_FEATURE_J1939=ON" - -RDEPENDS_${PN} = "virtual/low-can-dev-mapping" diff --git a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest b/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest deleted file mode 100644 index cc9c41365..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -afm-test /usr/AGL/apps/testwgt/low-can-service-test.wgt diff --git a/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb deleted file mode 100644 index 569f0707e..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "AGL low level user database binding" -HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-data-persistence/" -SECTION = "base" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-data-persistence;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -inherit cmake aglwgt pkgconfig - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS += " af-binder json-c gdbm " - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb deleted file mode 100644 index a12923247..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "GeoClue Service Binding" -DESCRIPTION = "AGL GeoClue Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-geoclue" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-geoclue;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c geoclue" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb deleted file mode 100644 index 8bdcd7c93..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Geofence Service Binding" -DESCRIPTION = "AGL Geofence Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-geofence" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-geofence;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c glib-2.0" -RDEPENDS_${PN} = "agl-service-gps" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb deleted file mode 100644 index 254e5e409..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "GPS/GNSS Service Binding" -DESCRIPTION = "AGL GPS/GNSS Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-gps" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-gps;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c gpsd" -RDEPENDS_${PN} = "libgps" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb deleted file mode 100644 index e4dccbf3d..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb +++ /dev/null @@ -1,27 +0,0 @@ -SUMMARY = "HVAC Service Binding Configuration" -DESCRIPTION = "AGL HVAC Service Binding Configuration" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-hvac" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-hvac;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -do_configure[noexec] = "1" -do_compile[noexec] = "1" - -do_install () { - install -D -m 644 ${S}/hvac.json ${D}${sysconfdir}/hvac.json -} - -do_install_append_ulcb() { - sed -i -e "s#vcan0#sllin0#g" ${D}${sysconfdir}/hvac.json -} - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb deleted file mode 100644 index 545ab6a28..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "HVAC Service Binding" -DESCRIPTION = "AGL HVAC Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-hvac" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-hvac;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c" - -inherit cmake aglwgt pkgconfig - -RDEPENDS_${PN} += "agl-service-identity-agent agl-service-can-low-level" -RRECOMMENDS_${PN} += "agl-service-hvac-conf" diff --git a/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb deleted file mode 100644 index f2474be7b..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "AGL identity agent binding" -HOMEPAGE = "https://gitlab.com/iotbzh/aia-binding" -SECTION = "base" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-identity-agent;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" -PV = "1.0+git${SRCPV}" - -inherit cmake aglwgt pkgconfig - -S = "${WORKDIR}/git" - -DEPENDS = "curl af-binder json-c systemd" - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb deleted file mode 100644 index cc893698c..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "IIODEVICES Service Binding" -DESCRIPTION = "AGL IIODEVICES Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-iiodevices" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-iiodevices;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c libiio glib-2.0" - -RDEPENDS_${PN} = "libiio" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb deleted file mode 100644 index c50a04804..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Mediascanner Service Binding" -DESCRIPTION = "AGL Mediascanner Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-mediascanner" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-mediascanner;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c sqlite3 glib-2.0" -RDEPENDS_${PN} = "lightmediascanner" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb deleted file mode 100755 index 71a615cf4..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Navigation Service Binding" -DESCRIPTION = "AGL Navigation Service API Binding" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -DEPENDS = "json-c libdbus-c++" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-navigation;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "0.1+git${SRCPV}" -S = "${WORKDIR}/git" - -inherit cmake aglwgt pkgconfig - -RDEPENDS_${PN} += "json-c libdbus-c++" diff --git a/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb deleted file mode 100644 index c7fb72f22..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb +++ /dev/null @@ -1,25 +0,0 @@ -SUMMARY = "Network Service Binding" -DESCRIPTION = "AGL Network Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-network" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-network;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "glib-2.0 json-c" - -inherit cmake aglwgt pkgconfig - -do_install_append() { - install -d ${D}${sbindir} - install -m 755 ${B}/build-release/test/agl-service-network-ctl ${D}${sbindir} -} - -FILES_${PN}-tools = "${sbindir}/agl-service-network-ctl" -PACKAGES_prepend = "${PN}-tools " diff --git a/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb deleted file mode 100644 index 1757dcb38..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "agl-service-nfc" -DESCRIPTION = "" -HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-nfc/" -SECTION = "apps" -DEPENDS = "af-binder json-c glib-2.0 neardal" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -inherit cmake pkgconfig aglwgt - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-nfc;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb deleted file mode 100644 index 43eed3f2e..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "Platform info provider binding" -DESCRIPTION = "AGL Platform info provider binding" -HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-platform-info/" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-platform-info;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "libafb-helpers" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb deleted file mode 100644 index bf714f45d..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "agl-service-signal-composer" -DESCRIPTION = "AGL High Level Signaling service to handle CAN, LIN, and others signaling sources" -HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-signal-composer/" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -inherit cmake pkgconfig aglwgt ptest - -DEPENDS += "lua lua-native libappcontroller libafb-helpers" -RDEPENDS_${PN} += "lua" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-signal-composer;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" diff --git a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest b/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest deleted file mode 100644 index 49187ad85..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -afm-test /usr/AGL/apps/testwgt/signal-composer-test.wgt diff --git a/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb deleted file mode 100644 index ff3913643..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Telephony Service Binding" -DESCRIPTION = "AGL Telephony Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-telephony" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-telephony;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c glib-2.0" -RDEPENDS_${PN} = "ofono" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb deleted file mode 100644 index 85ebc90f6..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "Infotainment network device control" -DESCRIPTION = "Abstraction layer to control INICnet devices" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-unicens-controller" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" - -SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-unicens-controller;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "0.1+git${SRCPV}" -S = "${WORKDIR}/git" - -inherit cmake aglwgt pkgconfig - -DEPENDS += "json-c af-binder libafb-helpers" -RDEPENDS_${PN} += "agl-service-unicens" - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb deleted file mode 100644 index e7e25c74e..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "4A - Infotainment network setup and access" -DESCRIPTION = "Infotainment network setup and access (using Unified Centralized Network Stack)" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-unicens" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-unicens;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "0.1+git${SRCPV}" -S = "${WORKDIR}/git" - -inherit cmake aglwgt pkgconfig - -DEPENDS += "alsa-lib json-c systemd af-binder glib-2.0 libxml2 libafb-helpers" -RDEPENDS_${PN} += "libxml2 " - diff --git a/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb deleted file mode 100644 index 75532da42..000000000 --- a/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Weather Service Binding" -DESCRIPTION = "AGL Weather Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-weather" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-weather;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "glib-2.0 json-c" -RDEPENDS_${PN} = "agl-service-geoclue" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb b/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb deleted file mode 100644 index 49efce796..000000000 --- a/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "AGL Login manager" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -LOGIN_USER ??="1001 1002" - -RDEPENDS_${PN} += "af-main" - -do_install_append() { - - install -d ${D}${systemd_system_unitdir}/multi-user.target.wants/ - - for AGL_USER in ${LOGIN_USER};do - ln -s ../afm-user-session@.service ${D}${systemd_system_unitdir}/multi-user.target.wants/afm-user-session@${AGL_USER}.service - done -} - -FILES_${PN} += "${systemd_system_unitdir}" diff --git a/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb b/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb deleted file mode 100644 index 709a1091f..000000000 --- a/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb +++ /dev/null @@ -1,27 +0,0 @@ -inherit allarch useradd - -SUMMARY = "AGL Users Seed" -DESCRIPTION = "This is a core framework component that\ - defines how users are managed and who are the default users." - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -ALLOW_EMPTY_${PN} = "1" - -USERADD_PACKAGES = "${PN}" - -USERADDEXTENSION = "useradd-staticids" - -GROUPADD_PARAM_${PN} = "\ - --system display ; \ - --system weston-launch ; \ - -g 1001 agl-driver ; \ - -g 1002 agl-passenger \ -" - -USERADD_PARAM_${PN} = "\ - -g 1001 -u 1001 -o -d /home/1001 -m -K PASS_MAX_DAYS=-1 agl-driver ; \ - -g 1002 -u 1002 -o -d /home/1002 -m -K PASS_MAX_DAYS=-1 agl-passenger ; \ - --gid display --groups weston-launch,video,input --home-dir /run/platform/display --shell /bin/false --comment \"Display daemon\" --key PASS_MAX_DAYS=-1 display \ -" diff --git a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default b/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default deleted file mode 100644 index 7bd8bf2eb..000000000 --- a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default +++ /dev/null @@ -1,6 +0,0 @@ -; Default CAN device mapping -; Format has to follow ini rules key="value", notice " around value. - -[CANbus-mapping] -hs="can0" -ls="can0" diff --git a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb b/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb deleted file mode 100644 index 1309ffa20..000000000 --- a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "AGL Device mapping configuration file" -DESCRIPTION = "This provide default dev-mapping.conf file \ - that defines mapping between kernel device and logical name \ - used in low-can binding by example." - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -SRC_URI += "file://dev-mapping.conf.default" - -inherit allarch - -do_install() { - install -d ${D}${sysconfdir} - install -m 0644 ${WORKDIR}/dev-mapping.conf.default ${D}${sysconfdir}/dev-mapping.conf -} - -RPROVIDES_${PN} = "virtual/low-can-dev-mapping" diff --git a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb b/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb deleted file mode 100644 index 010329ee7..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb +++ /dev/null @@ -1,43 +0,0 @@ -SUMMARY = "Bluetooth Audio ALSA Backend" -HOMEPAGE = "https://github.com/Arkq/bluez-alsa" -SECTION = "libs" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://LICENSE;md5=3d7d6ac7e2dbd2505652dceb3acdf1fe" - -SRC_URI = "git://github.com/Arkq/bluez-alsa.git;protocol=https;branch=master" -SRCREV = "2cd6e4686f7808276480b430fb37df55dfdcc02b" - -SRC_URI += "file://bluez-alsa.service" - -S = "${WORKDIR}/git" - -DEPENDS += "alsa-lib bluez5 systemd glib-2.0 sbc" - -PACKAGECONFIG[aac] = "--enable-aac, --disable-aac, " -PACKAGECONFIG[aptx] = "--enable-aptx,--disable-aptx," -PACKAGECONFIG[ofono] = "--enable-ofono, --disable-ofono," - -inherit autotools pkgconfig -inherit systemd - -SYSTEMD_AUTO_ENABLE = "enable" -SYSTEMD_SERVICE_${PN} = "bluez-alsa.service" - -PACKAGECONFIG += "ofono" - -# enable debug tools in devel images -PACKAGECONFIG[hcitop] = "--enable-hcitop, --disable-hcitop, libbsd ncurses" -PACKAGECONFIG[rfcomm] = "--enable-rfcomm, --disable-rfcomm," -PACKAGECONFIG_append_agl-devel = " hcitop rfcomm" - -do_install_append () { - install -d ${D}${base_libdir}/systemd/system - install -m 0644 ${WORKDIR}/bluez-alsa.service ${D}${base_libdir}/systemd/system -} - -FILES_${PN} += "\ - ${datadir}/alsa/alsa.conf.d/20-bluealsa.conf\ - ${libdir}/alsa-lib/libasound_module_ctl_bluealsa.so\ - ${libdir}/alsa-lib/libasound_module_pcm_bluealsa.so\ -" diff --git a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service b/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service deleted file mode 100644 index b59302ee4..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Bluetooth Audio ALSA Backend -After=bluetooth.service -Requires=bluetooth.service - -[Service] -Type=simple -ExecStart=/usr/bin/bluealsa -p a2dp-sink -p hfp-ofono - -[Install] -WantedBy=multi-user.target diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf deleted file mode 100644 index 1f2762de7..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service deleted file mode 100644 index 8ae83bd48..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service +++ /dev/null @@ -1,21 +0,0 @@ -[Unit] -Description=Bluetooth service -Documentation=man:bluetoothd(8) -ConditionPathIsDirectory=/sys/class/bluetooth - -[Service] -Type=dbus -BusName=org.bluez -ExecStartPre=-/usr/bin/hciconfig hci0 aclmtu 930:10 -ExecStart=/usr/libexec/bluetooth/bluetoothd -NotifyAccess=main -#WatchdogSec=10 -#Restart=on-failure -CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE -LimitNPROC=1 -ProtectHome=true -ProtectSystem=full - -[Install] -WantedBy=bluetooth.target -Alias=dbus-org.bluez.service diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service deleted file mode 100644 index 87ffff6ae..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Bluetooth OBEX service - -[Service] -Type=dbus -BusName=org.bluez.obex -ExecStart=/usr/libexec/bluetooth/obexd --root=/var/volatile/tmp - -[Install] -Alias=dbus-org.bluez.obex.service diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf deleted file mode 100644 index 8545d76ec..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -Environment="TMPDIR=/run/user/%U/usrshr" diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend deleted file mode 100644 index 52ae30bc5..000000000 --- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend +++ /dev/null @@ -1,24 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = " \ - file://bluetooth.conf \ - file://tmpdir.conf \ - file://obex.service \ - file://bluetooth.service \ -" - -FILES_${PN} += "${systemd_user_unitdir}/obex.service.d/tmpdir.conf" - -do_install_append() { - install -m 0644 ${WORKDIR}/bluetooth.conf ${D}${sysconfdir}/dbus-1/system.d/bluetooth.conf - - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - mkdir -p ${D}${systemd_user_unitdir}/obex.service.d - - install -m 0644 ${WORKDIR}/obex.service ${D}${systemd_user_unitdir} - install -m 0644 ${WORKDIR}/tmpdir.conf ${D}${systemd_user_unitdir}/obex.service.d/tmpdir.conf - mkdir -p ${D}/etc/systemd/user - ln -sf ${systemd_user_unitdir}/obex.service ${D}/etc/systemd/user/dbus-org.bluez.obex.service - mkdir -p ${D}${systemd_system_unitdir} - install -m 0644 ${WORKDIR}/bluetooth.service ${D}${systemd_system_unitdir} - fi -} diff --git a/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend b/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend deleted file mode 100644 index 198b651dd..000000000 --- a/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -SRC_URI += "file://enable-wget-https.cfg" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" diff --git a/meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg b/meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg deleted file mode 100644 index e92006bef..000000000 --- a/meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Thu Jun 8 17:32:07 2017 -CONFIG_FEATURE_WGET_OPENSSL=y -CONFIG_FEATURE_WGET_SSL_HELPER=y diff --git a/meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb b/meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb deleted file mode 100644 index 61086dfe7..000000000 --- a/meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb +++ /dev/null @@ -1,27 +0,0 @@ -SUMMARY = "A simple ncurses interface for connman" -DESCRIPTION = "A simple ncurses interface for connman" -HOMEPAGE = "https://gitlab.com/iotbzh/connman-json-client" - -SECTION = "console/network" - -DEPENDS = "dbus ncurses connman json-c" - -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=8c16666ae6c159876a0ba63099614381" - -SRC_URI = "git://gitlab.com/iotbzh/connman-json-client.git;protocol=https" -SRCREV = "2b0f93ec9518c978c04807fe52e95315d6d80e6b" - -inherit autotools pkgconfig - -EXTRA_AUTORECONF += " -i" -EXTRA_OECONF += " --disable-optimization --enable-debug" - -S = "${WORKDIR}/git" - -do_install () { - install -dm755 ${D}${bindir} - install -Dm755 connman_ncurses ${D}${bindir} -} - -FILES_${PN} = "${bindir}/connman_ncurses" diff --git a/meta-agl-profile-core/recipes-connectivity/connman/.appends.core b/meta-agl-profile-core/recipes-connectivity/connman/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend b/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend deleted file mode 100644 index 469345880..000000000 --- a/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend +++ /dev/null @@ -1,20 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI += "file://0001-disable-when-booting-over-nfs.patch \ - file://main.conf \ -" - -FILES_${PN} += "${sysconfdir}/connman/main.conf" - -PACKAGECONFIG[session-policy-local] = "--enable-session-policy-local,--disable-session-policy-local," -PACKAGECONFIG_append = " session-policy-local" - -do_install_append() { - install -d ${D}${sysconfdir}/connman - install -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/connman - - # Need to ignore eth1 in cluster demo setup - if ${@bb.utils.contains('DISTRO_FEATURES', 'agl-cluster-demo-support', 'true', 'false', d)}; then - sed -i 's/^\(NetworkInterfaceBlacklist=.*\)/\1,eth1/' ${D}${sysconfdir}/connman/main.conf - fi -} diff --git a/meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch b/meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch deleted file mode 100644 index f129a6580..000000000 --- a/meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- connman-1.36.orig/src/connman.service.in 2019-02-18 18:02:07.034947373 -0500 -+++ connman-1.36/src/connman.service.in 2019-02-18 18:07:24.689959219 -0500 -@@ -7,6 +7,7 @@ - Before=network.target multi-user.target shutdown.target - Wants=network.target - Conflicts=systemd-resolved.service -+ConditionKernelCommandLine=!root=/dev/nfs - - [Service] - Type=dbus diff --git a/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf b/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf deleted file mode 100644 index 4dba25b70..000000000 --- a/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf +++ /dev/null @@ -1,3 +0,0 @@ -[General] -FallbackTimeservers=pool.ntp.org -NetworkInterfaceBlacklist=vmnet,vboxnet,virbr,ifb,meth diff --git a/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch b/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch deleted file mode 100644 index c32951693..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch +++ /dev/null @@ -1,25 +0,0 @@ -From d8c03a31e2734e59af43dd50cbd7f5a94d798ab1 Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Tue, 10 Jul 2018 21:18:26 -0700 -Subject: [PATCH] systemd: neard: add multi-user.target to neard.service - -Allowing a service to be system level requires a WantedBy= target - -Signed-off-by: Matt Ranostay ---- - src/neard.service.in | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/neard.service.in b/src/neard.service.in -index dfa238c..540da7e 100644 ---- a/src/neard.service.in -+++ b/src/neard.service.in -@@ -9,4 +9,5 @@ ExecStart=@pkglibexecdir@/neard -n - LimitNPROC=1 - - [Install] -+WantedBy=multi-user.target - Alias=dbus-org.neard.service --- -2.17.1 - diff --git a/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch b/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch deleted file mode 100644 index 49c11a509..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch +++ /dev/null @@ -1,33 +0,0 @@ -From d7ea2a00e00795ad24897e3481b015a27d37d60f Mon Sep 17 00:00:00 2001 -From: Raquel Medina -Date: Tue, 22 Jan 2019 09:00:05 -0500 -Subject: [PATCH] ndef: avoid dbus property_get_type method on empty record - -Signed-off-by: Raquel Medina ---- - src/ndef.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/ndef.c b/src/ndef.c -index 5656baf..883c6f4 100644 ---- a/src/ndef.c -+++ b/src/ndef.c -@@ -2832,10 +2832,14 @@ GList *near_ndef_parse_msg(uint8_t *ndef_data, size_t ndef_length, - case RECORD_TYPE_WKT_ALTERNATIVE_CARRIER: - case RECORD_TYPE_WKT_COLLISION_RESOLUTION: - case RECORD_TYPE_WKT_ERROR: -- case RECORD_TYPE_UNKNOWN: - case RECORD_TYPE_ERROR: - break; - -+ case RECORD_TYPE_UNKNOWN: -+ if (record->header->tnf == RECORD_TNF_EMPTY) -+ goto fail; -+ break; -+ - case RECORD_TYPE_WKT_HANDOVER_REQUEST: - case RECORD_TYPE_WKT_HANDOVER_SELECT: - /* --- -2.17.1 - diff --git a/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend b/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend deleted file mode 100644 index 64a044cb5..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI_append = "\ - file://0001-systemd-neard-add-multi-user.target-to-neard.service.patch \ - file://0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch \ - " -SYSTEMD_SERVICE_${PN} = "neard.service" diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc b/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc deleted file mode 100644 index 3bb6b24ec..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc +++ /dev/null @@ -1,22 +0,0 @@ -SUMMARY = "Neard Abstraction Library (NeardAL)" - -DESCRIPTION = "NeardAL is a library that provides a simple C API \ -to exchange data with NFC daemon (Neard)." - -HOMEPAGE = "https://github.com/connectivity/neardal" -SECTION = "libs" -LICENSE = "LGPLv2" - -DEPENDS = "glib-2.0 readline glib-2.0-native" - -LIC_FILES_CHKSUM = "file://COPYING;md5=6a6e689d19255cf0557f3fe7d7068212 \ - file://lib/neardal.h;endline=20;md5=a53e93aea9357387078ed217565c0a99" - -inherit autotools pkgconfig - -PACKAGES =+ "${PN}-tools ${PN}-tools-dbg" - -FILES_${PN}-tools = "${libexecdir}/ncl" -FILES_${PN}-tools-dbg += "${libexecdir}/.debug" - -RDEPENDS_${PN}-tools = "bash" diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch deleted file mode 100644 index 596fe0579..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 795308b2452ee617da4096914b53ba3a1142e3db Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Fri, 6 Jul 2018 17:19:09 -0700 -Subject: [PATCH] neardal: ncl: fix segfault on help page being displayed - -LISTCMD_NAME is declared as a const char due to being defined in a -macro so g_strdup it to stop proceeding operations from segfaulting. - -Signed-off-by: Matt Ranostay - ---- - ncl/ncl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ncl/ncl.c b/ncl/ncl.c -index 590d13b..f4165b7 100644 ---- a/ncl/ncl.c -+++ b/ncl/ncl.c -@@ -329,7 +329,7 @@ int main(int argc, char *argv[]) - g_io_channel_unref(gNclCtx.channel); - - if (show_help) -- ncl_exec(LISTCMD_NAME); -+ ncl_exec(g_strdup(LISTCMD_NAME)); - - rl_callback_handler_install(NCL_PROMPT, ncl_parse_line); - diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch deleted file mode 100644 index d40d9a4fe..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch +++ /dev/null @@ -1,58 +0,0 @@ -From ee6267f357b3d158f0a0e88460782e8b9d44274a Mon Sep 17 00:00:00 2001 -From: Raquel Medina -Date: Fri, 4 Jan 2019 07:43:03 -0500 -Subject: [PATCH] neardal: lib: fix memory corruption - - The current commit fixes an invalid memory access - which manifests as a random segfault when executing - continuous tag read operations. - - The corruption happens when releasing the memory allocated to a - record: in the time between the memory being g_free'd and the - subsequent memset operation, the memory could have been reused by - some other process. And since memory allocation depends on - system-wide factors, it makes this bug hard to track. - - Tested using ACR122U reader and NTAG213 - tags on Automotive Grade Linux (flounder, - guppy and master branches) - -Signed-off-by: Raquel Medina ---- - lib/neardal_record.c | 1 - - lib/neardal_tools.c | 5 ++++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/lib/neardal_record.c b/lib/neardal_record.c -index 669012c..cfed5e8 100644 ---- a/lib/neardal_record.c -+++ b/lib/neardal_record.c -@@ -31,7 +31,6 @@ void neardal_record_free(neardal_record *r) - { - g_return_if_fail(r); - neardal_g_strfreev((void **) r, &r->uriObjSize); -- memset(r, 0, sizeof(*r)); - } - - void neardal_free_record(neardal_record *record) \ -diff --git a/lib/neardal_tools.c b/lib/neardal_tools.c -index f0d6157..f307df6 100644 ---- a/lib/neardal_tools.c -+++ b/lib/neardal_tools.c -@@ -32,9 +32,12 @@ - void neardal_g_strfreev(void **array, void *end) - { - void **p = array; -- for (; (void *) p < end; p++) -+ for (; (void *) p < end; p++) { - g_free(*p); -+ *p = NULL; -+ } - g_free(array); -+ array = NULL; - } - - void neardal_g_variant_add_parsed(GVariant **v, const char *format, ...) --- -2.17.1 - diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch deleted file mode 100644 index baef6ccaa..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch +++ /dev/null @@ -1,25 +0,0 @@ -From eab402bae42c3ea5caa8d540b6702d39e56c84c1 Mon Sep 17 00:00:00 2001 -From: Oleg Zhurakivskyy -Date: Tue, 10 Feb 2015 12:58:39 +0200 -Subject: [PATCH] build: Install ncl - -Signed-off-by: Oleg Zhurakivskyy ---- - ncl/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ncl/Makefile.am b/ncl/Makefile.am -index beda75b..c06742f 100644 ---- a/ncl/Makefile.am -+++ b/ncl/Makefile.am -@@ -1,6 +1,6 @@ - AM_CPPFLAGS = @gio_CFLAGS@ -I$(top_builddir)/lib -I$(top_srcdir)/lib - --noinst_PROGRAMS=ncl -+libexec_PROGRAMS = ncl - - ncl_SOURCES = \ - $(srcdir)/ncl.c $(srcdir)/ncl.h \ --- -2.1.0 - diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb b/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb deleted file mode 100644 index f8634c468..000000000 --- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb +++ /dev/null @@ -1,10 +0,0 @@ -require neardal.inc - -SRC_URI = "git://github.com/connectivity/neardal.git;protocol=https \ - file://ncl.patch \ - file://0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch \ - file://0002-neardal-lib-fix-memory-corruption.patch \ - " -SRCREV = "fe0fa79c94e9a0f1c2cfa1f58b3acc9bdc7d5e13" - -S = "${WORKDIR}/git" diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch b/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch deleted file mode 100644 index 7b44e483e..000000000 --- a/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 7782f8f9d9634ebeddafefedab10ba254f9cc34a Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Fri, 1 Mar 2019 17:53:17 +0900 -Subject: [PATCH] provision: allow duplicate entries from mbpi_lookup_apn() - results - -Signed-off-by: Matt Ranostay ---- - plugins/provision.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/plugins/provision.c b/plugins/provision.c -index 99c299eb..aa0b05e4 100644 ---- a/plugins/provision.c -+++ b/plugins/provision.c -@@ -50,7 +50,7 @@ static int provision_get_settings(const char *mcc, const char *mnc, - - DBG("Provisioning for MCC %s, MNC %s, SPN '%s'", mcc, mnc, spn); - -- apns = mbpi_lookup_apn(mcc, mnc, FALSE, &error); -+ apns = mbpi_lookup_apn(mcc, mnc, TRUE, &error); - if (apns == NULL) { - if (error != NULL) { - ofono_error("%s", error->message); --- -2.20.1 - diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf b/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf deleted file mode 100644 index e47214c76..000000000 --- a/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend b/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend deleted file mode 100644 index b02d6ee22..000000000 --- a/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend +++ /dev/null @@ -1,11 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" -SRC_URI_append = "\ - file://ofono.conf \ - file://0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch \ - " - -do_install_append() { - install -m 0644 ${WORKDIR}/ofono.conf ${D}${sysconfdir}/dbus-1/system.d/ofono.conf -} - -SYSTEMD_AUTO_ENABLE = "enable" diff --git a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch b/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch deleted file mode 100644 index 86b7392df..000000000 --- a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 3aeaf8054fcb2617ca8f6196ca32be3e69337f77 Mon Sep 17 00:00:00 2001 -From: Martin Kelly -Date: Fri, 21 Apr 2017 10:29:19 -0700 -Subject: [PATCH] remove -I/usr/include in pkg-config - -This shouldn't be necessary as it's part of the default compiler include -paths anyway. Morever, it can cause GCC 6 C++ build failures in -downstream packages when combined with QMake (such as -qtmultimedia-rtlfm-radio-plugin). - -Fix these issues by removing it. - -Upstream-Status: Inappropriate [disable-feature] - -This patch should not go upstream because it breaks the ability to build -with --prefix. That's not a problem for Openembedded, but it is for -upstream more generally. See this mail thread for more information: - -http://lists.osmocom.org/pipermail/osmocom-sdr/2017-April/001580.html - -Signed-off-by: Martin Kelly ---- - librtlsdr.pc.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/librtlsdr.pc.in b/librtlsdr.pc.in -index 5e55049..84b6d0c 100644 ---- a/librtlsdr.pc.in -+++ b/librtlsdr.pc.in -@@ -6,6 +6,6 @@ includedir=@includedir@ - Name: RTL-SDR Library - Description: C Utility Library - Version: @VERSION@ --Cflags: -I${includedir}/ @RTLSDR_PC_CFLAGS@ -+Cflags: @RTLSDR_PC_CFLAGS@ - Libs: -L${libdir} -lrtlsdr -lusb-1.0 - Libs.private: @RTLSDR_PC_LIBS@ --- -2.1.4 - diff --git a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb b/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb deleted file mode 100644 index b442d9f46..000000000 --- a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "Turns a Realtek RTL2832U-based DVB dongle into a SDR receiver" -DESCRIPTION = "DVB-T dongles based on the Realtek RTL2832U chipset can be used as Software Digital Radio adapters, since the chip allows transferring raw I/Q samples to the host, which is really used for DAB/DAB+/FM demodulation." -HOMEPAGE = "http://sdr.osmocom.org/trac/wiki/rtl-sdr" - -LICENSE = "GPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \ - file://src/librtlsdr.c;endline=18;md5=1b05599c3ebd4d74857a0a7c45f3d4ef" - -DEPENDS = "libusb1" - -SRC_URI = "git://git.osmocom.org/rtl-sdr \ - file://0001-remove-I-usr-include-in-pkg-config.patch \ - " -SRCREV = "e3c03f738f5aef4dc51e2b741fbdb542b9cc1bb1" -S = "${WORKDIR}/git" - -inherit autotools pkgconfig - -EXTRA_OECONF = "--enable-driver-detach" - -do_configure_append() { - # remove included temporary path from pc file due to pass-through of OE CFLAGS - # debug-prefix-map - # See: http://lists.openembedded.org/pipermail/openembedded-devel/2016-May/107456.html - sed -i -e "s# -fdebug-prefix-map=.*##g;s# -fmacro-prefix-map=.*##g" librtlsdr.pc -} - -do_install_append() { - install -D -m 0644 ${S}/rtl-sdr.rules ${D}${sysconfdir}/udev/rules.d/55-rtl-sdr.rules - sed -i 's/MODE:="0666"/GROUP="audio", MODE="0660", SECLABEL{smack}="*"/' \ - ${D}${sysconfdir}/udev/rules.d/55-rtl-sdr.rules -} diff --git a/meta-agl-profile-core/recipes-core/dbus/.appends.core b/meta-agl-profile-core/recipes-core/dbus/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service deleted file mode 100644 index dee6ad741..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=D-Bus User Message Bus -Documentation=man:dbus-daemon(1) -Requires=dbus.socket - -[Service] -ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation -ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig -Restart=always -RestartSec=1 diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket deleted file mode 100644 index af76b2f12..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=D-Bus User Message Bus Socket -Before=sockets.target - -[Socket] -ListenStream=%t/bus - -[Install] -WantedBy=default.target diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf deleted file mode 100644 index f8f02669b..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Wants=dbus.service - -[Service] -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/bus diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch b/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch deleted file mode 100644 index c4fafef62..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h.threading 2017-02-15 13:40:53.796004263 +0000 -+++ libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h 2017-02-15 13:40:46.907000493 +0000 -@@ -188,6 +188,7 @@ - /* classes for multithreading support - */ - -+#if 0 - class DXXAPI Mutex - { - public: -@@ -243,9 +244,11 @@ - typedef bool (*CondVarWaitTimeoutFn)(CondVar *cv, Mutex *mx, int timeout); - typedef void (*CondVarWakeOneFn)(CondVar *cv); - typedef void (*CondVarWakeAllFn)(CondVar *cv); -+#endif - - void DXXAPI _init_threading(); - -+#if 0 - void DXXAPI _init_threading( - MutexNewFn, MutexFreeFn, MutexLockFn, MutexUnlockFn, - CondVarNewFn, CondVarFreeFn, CondVarWaitFn, CondVarWaitTimeoutFn, CondVarWakeOneFn, CondVarWakeAllFn -@@ -312,6 +315,7 @@ - cv->wake_all(); - } - }; -+#endif - - } /* namespace DBus */ - ---- libdbus-c++-0.9.0/src/dispatcher.cpp.threading 2017-02-15 13:48:22.627249868 +0000 -+++ libdbus-c++-0.9.0/src/dispatcher.cpp 2017-02-15 13:48:29.164253445 +0000 -@@ -253,6 +253,7 @@ - #endif//DBUS_HAS_THREADS_INIT_DEFAULT - } - -+#if 0 - void DBus::_init_threading( - MutexNewFn m1, - MutexFreeFn m2, -@@ -318,3 +319,4 @@ - #endif//DBUS_HAS_RECURSIVE_MUTEX - dbus_threads_init(&functions); - } -+#endif diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend b/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend deleted file mode 100644 index 379c5435e..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend +++ /dev/null @@ -1,28 +0,0 @@ -FILESEXTRAPATHS_append := ":${THISDIR}/dbus" - -SRC_URI += "file://dbus.service \ - file://dbus.socket \ - file://dbus_env.conf \ - " - -inherit systemd - -do_install_append() { - if [ "${PN}" != "nativesdk-dbus" ]; then - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - install -m 644 -p -D ${WORKDIR}/dbus.service ${D}${systemd_user_unitdir}/dbus.service - install -m 644 -p -D ${WORKDIR}/dbus.socket ${D}${systemd_user_unitdir}/dbus.socket - install -m 644 -p -D ${WORKDIR}/dbus_env.conf ${D}${systemd_system_unitdir}/user@.service.d/dbus_env.conf - - # Execute these manually on behalf of systemctl script (from systemd-systemctl-native.bb) - # because it does not support systemd's user mode. - mkdir -p ${D}/etc/systemd/user/default.target.wants/ - ln -sf ${systemd_user_unitdir}/dbus.socket ${D}/etc/systemd/user/default.target.wants/dbus.socket - fi - fi -} - -FILES_${PN} += " \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_user_unitdir}/dbus.*', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/user@.service.d/dbus_env.conf', '', d)} \ - " diff --git a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch b/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch deleted file mode 100644 index c4fafef62..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h.threading 2017-02-15 13:40:53.796004263 +0000 -+++ libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h 2017-02-15 13:40:46.907000493 +0000 -@@ -188,6 +188,7 @@ - /* classes for multithreading support - */ - -+#if 0 - class DXXAPI Mutex - { - public: -@@ -243,9 +244,11 @@ - typedef bool (*CondVarWaitTimeoutFn)(CondVar *cv, Mutex *mx, int timeout); - typedef void (*CondVarWakeOneFn)(CondVar *cv); - typedef void (*CondVarWakeAllFn)(CondVar *cv); -+#endif - - void DXXAPI _init_threading(); - -+#if 0 - void DXXAPI _init_threading( - MutexNewFn, MutexFreeFn, MutexLockFn, MutexUnlockFn, - CondVarNewFn, CondVarFreeFn, CondVarWaitFn, CondVarWaitTimeoutFn, CondVarWakeOneFn, CondVarWakeAllFn -@@ -312,6 +315,7 @@ - cv->wake_all(); - } - }; -+#endif - - } /* namespace DBus */ - ---- libdbus-c++-0.9.0/src/dispatcher.cpp.threading 2017-02-15 13:48:22.627249868 +0000 -+++ libdbus-c++-0.9.0/src/dispatcher.cpp 2017-02-15 13:48:29.164253445 +0000 -@@ -253,6 +253,7 @@ - #endif//DBUS_HAS_THREADS_INIT_DEFAULT - } - -+#if 0 - void DBus::_init_threading( - MutexNewFn m1, - MutexFreeFn m2, -@@ -318,3 +319,4 @@ - #endif//DBUS_HAS_RECURSIVE_MUTEX - dbus_threads_init(&functions); - } -+#endif diff --git a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend b/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend deleted file mode 100644 index dac44b5e6..000000000 --- a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = "file://dbus-c++-threading.patch" diff --git a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb deleted file mode 100644 index 823cc28a1..000000000 --- a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb +++ /dev/null @@ -1,164 +0,0 @@ -SUMMARY = "Distribution build manifest" -DESCRIPTION = "The folder /etc/platform-info contains build manifest (SPEC-720)." -LICENSE = "MIT" - -# information distributed by the package is machine specific -PACKAGE_ARCH = "${MACHINE_ARCH}" - -# dependencies of ${DISTRO_MANIFEST_GENERATOR} -DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native jq-native" - -# force a rebuild everytime a build is started -do_compile[nostamp] = "1" - -# borrowed to os-release.bb (output format is very close) -python do_compilestep1 () { - import shutil - with open(d.expand('${B}/bbinfo-deploy'),'w') as f: - allkeys=[] - for field in d.getVar('BUILD_MANIFEST_FIELDS_DEPLOY').split(): - key='DIST_BB_{0}'.format(field) - allkeys.append(key) - value=d.getVar(field) - if value: - f.write('{0}="{1}"\n'.format(key,value)) - f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[deploy]="%s"' % ' '.join(allkeys)) - - with open(d.expand('${B}/bbinfo-target'),'w') as f: - allkeys=[] - for field in d.getVar('BUILD_MANIFEST_FIELDS_TARGET').split(): - key='DIST_BB_{0}'.format(field) - allkeys.append(key) - value=d.getVar(field) - if value: - f.write('{0}="{1}"\n'.format(key,value)) - f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[target]="%s"' % ' '.join(allkeys)) - - with open(d.expand('${B}/bbinfo-sdk'),'w') as f: - allkeys=[] - for field in d.getVar('BUILD_MANIFEST_FIELDS_SDK').split(): - key='DIST_BB_{0}'.format(field) - allkeys.append(key) - value=d.getVar(field) - if value: - f.write('{0}="{1}"\n'.format(key,value)) - f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[sdk]="%s"' % ' '.join(allkeys)) -} - -do_compilestep2 () { - rc=99 - timestamp=${DATETIME} - outfile=${B}/build-info - if [ -x "${DISTRO_MANIFEST_GENERATOR}" -a -f "${DISTRO_SETUP_MANIFEST}" ]; then - rc=0 - for format in bash json; do - if [ "$format" = "json" ]; then - ext=".json" - else - ext="" - fi - for mode in deploy target sdk; do - ${DISTRO_MANIFEST_GENERATOR} -m $mode -f $format -t $timestamp -s ${B}/bbinfo-${mode} ${DISTRO_SETUP_MANIFEST} >${outfile}-${mode}${ext} - rc=$? - if [ $rc -ne 0 ]; then - break - fi - done - done - else - if [ -z "${DISTRO_MANIFEST_GENERATOR}" ]; then - echo "The name of the generation script is not defined." - elif [ ! -f "${DISTRO_MANIFEST_GENERATOR}" ]; then - echo "Generation script ${DISTRO_MANIFEST_GENERATOR} is missing." - elif [ ! -x "${DISTRO_MANIFEST_GENERATOR}" ]; then - echo "Generation script ${DISTRO_MANIFEST_GENERATOR} isn't executable." - fi - if [ -z "${DISTRO_SETUP_MANIFEST}" ]; then - echo "The name of the data file is not defined." - elif [ ! -f "${DISTRO_SETUP_MANIFEST}" ]; then - echo "Data file ${DISTRO_SETUP_MANIFEST} is missing." - fi - echo "You can try to rerun aglsetup.sh to solve that issue." - echo "You can also try to source agl-init-build-env instead of oe-init-build-env." - fi - - if [ "$rc" -ne 0 ]; then - echo "distro-build-manifest generation failed." - fi - return $rc -} - -do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_DEPLOY}" -do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_TARGET}" -do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_SDK}" - -# avoid errors "ERROR: When reparsing .../distro-build-manifest/distro-build-manifest.bb.do_compile, the basehash value changed from .... to .... . The metadata is not deterministic and this needs to be fixed." -do_compilestep2[vardepsexclude] = "DATETIME" - -# combine the two steps -python do_compile() { - bb.build.exec_func("do_compilestep1",d) - bb.build.exec_func("do_compilestep2",d) -} - -do_install () { - # install in target dir - install -d ${D}${sysconfdir}/platform-info - install -m 0644 build-info-target ${D}${sysconfdir}/platform-info/build - install -m 0644 build-info-target.json ${D}${sysconfdir}/platform-info/build.json - - # also copy in deploy dir - install -d ${DEPLOY_DIR_IMAGE} - install -m 0644 build-info-deploy ${DEPLOY_DIR_IMAGE}/build-info - install -m 0644 build-info-deploy.json ${DEPLOY_DIR_IMAGE}/build-info.json - - # copy into sdk deploy dir - install -d ${DEPLOY_DIR}/sdk - install -m 0644 build-info-sdk ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info - install -m 0644 build-info-sdk.json ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info.json - - # and copy to nativesdk package - # TODO -} - -# list of variables to add to the various manifests -# smalles one is 'target', then 'deploy' and finally 'sdk' -BUILD_MANIFEST_FIELDS_TARGET = "\ - MACHINE_ARCH \ - MACHINEOVERRIDES \ - MACHINE_FEATURES \ - DISTRO_CODENAME \ - DISTRO_FEATURES \ - DISTRO_BRANCH_VERSION_TAG \ - AGLVERSION \ - AGL_BRANCH \ - AGLRELEASETYPE \ -" - -BUILD_MANIFEST_FIELDS_DEPLOY = "\ - ${BUILD_MANIFEST_FIELDS_TARGET} \ - DISTRO \ - DISTRO_VERSION \ - DISTROOVERRIDES \ - TUNE_FEATURES \ - TUNE_PKGARCH \ - ALL_MULTILIB_PACKAGE_ARCHS \ -" - -BUILD_MANIFEST_FIELDS_SDK = "\ - ${BUILD_MANIFEST_FIELDS_DEPLOY} \ - HOST_SYS \ - TARGET_SYS \ - TARGET_VENDOR \ - SDK_ARCH \ - SDK_VENDOR \ - SDK_VERSION \ - SDK_OS \ -" - -# dont exec useless tasks -do_fetch[noexec] = "1" -do_unpack[noexec] = "1" -do_patch[noexec] = "1" -do_configure[noexec] = "1" - diff --git a/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend b/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend deleted file mode 100644 index 301a1d573..000000000 --- a/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend +++ /dev/null @@ -1 +0,0 @@ -RDEPENDS_${PN}_remove_sota = "systemtap" diff --git a/meta-agl-profile-core/recipes-core/psplash/.appends.core b/meta-agl-profile-core/recipes-core/psplash/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h b/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h deleted file mode 100644 index 447490397..000000000 --- a/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * pslash - a lightweight framebuffer splashscreen for embedded devices. - * - * Copyright (c) 2012 sleep(5) ltd - * Author: Tomas Frydrych - * - * 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, 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. - * - */ - -#ifndef _HAVE_PSPLASH_COLORS_H -#define _HAVE_PSPLASH_COLORS_H - -/* This is the overall background color */ -#define PSPLASH_BACKGROUND_COLOR 0xff,0xff,0xff - -/* This is the color of any text output */ -#define PSPLASH_TEXT_COLOR 0x00,0x00,0x00 - -/* This is the color of the progress bar indicator */ -#define PSPLASH_BAR_COLOR 0x00,0x00,0x00 - -/* This is the color of the progress bar background */ -#define PSPLASH_BAR_BACKGROUND_COLOR 0xff,0xff,0xff - -#endif diff --git a/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h b/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h deleted file mode 100644 index c0e8b0818..000000000 --- a/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h +++ /dev/null @@ -1,5411 +0,0 @@ -/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */ - -#define POKY_IMG_ROWSTRIDE (1800) -#define POKY_IMG_WIDTH (600) -#define POKY_IMG_HEIGHT (400) -#define POKY_IMG_BYTES_PER_PIXEL (3) /* 3:RGB, 4:RGBA */ -#define POKY_IMG_RLE_PIXEL_DATA ((uint8*) \ - "\377\377\377\377\377\377\377\377\203\377\377\377\1\376\376\376\221\377" \ - "\377\377\1\376\376\376\215\377\377\377\1\376\376\376\203\377\377\377" \ - "\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \ - "\376\202\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\376\376\376\206\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \ - "\376\204\377\377\377\1\376\376\376\203\377\377\377\5\376\376\376\377" \ - "\377\377\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\202\376\376\376\207\377\377" \ - "\377\1\376\376\376\205\377\377\377\1\376\376\376\211\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\235\377\377\377\1\376\376\376\203\377" \ - "\377\377\1\376\376\376\213\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\216\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\365\377\377\377\1\376" \ - "\376\376\203\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \ - "\203\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\205\377" \ - "\377\377\1\376\376\376\203\377\377\377\12\376\376\376\377\377\377\346" \ - "\346\346\315\315\315\316\316\316\265\265\265\235\235\235\234\234\234" \ - "\233\233\233\204\204\204\203kkm\202lln\2EEG;;=\215::<\204kkm\3kkkxxx" \ - "\235\235\235\202\234\234\234\1\265\265\265\202\316\316\316\1\332\332" \ - "\332\207\377\377\377\202\376\376\376\2\377\377\377\376\376\376\211\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\203\377\377\377\5\376" \ - "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\366\377\377\377\1\376\376\376\205" \ - "\377\377\377\1\376\376\376\214\377\377\377\11\376\376\376\332\332\332" \ - "\316\316\320\247\247\251\236\236\240\204\204\206kkm__a<<>\202::<\11;" \ - ";=99;;;=99;::<;;=::<;;=99;\203::<\1<<>\213::<\13;;=::<;;=::<;;=::<;;" \ - "=::<;;=::<;;=\207::<\3SSUllnxxz\202\234\234\236\202\316\316\316\2\377" \ - "\377\377\376\376\376\214\377\377\377\1\376\376\376\203\377\377\377\1" \ - "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\376\377" \ - "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\203\377\377\377" \ - "\7\332\332\334\302\302\304\234\234\236\203\203\205llnEEG;;=\202::<\6" \ - ";;=::<;;=::<;;=99;\204::<\1""99;\202;;=\1""99;\205::<\1;;=\213::<\11" \ - ";;=::<;;=::<;;=::<;;=::<;;=\202::<\1""99;\206::<\1;;=\203::<\13;;=99" \ - ";;;=::<;;=::\202::<\7llnkkm\233" \ - "\233\235\235\235\237\302\302\304\316\316\320\347\347\351\241\377\377" \ - "\377\202\376\376\376\203\377\377\377\17\376\376\376\377\377\377\376\376" \ - "\376\377\377\377\376\376\376\363\363\363\316\316\316\315\315\315\234" \ - "\234\234\235\235\235xxxllnFFH::<;;=\205::<\5;;=99;;;=::<;;=\212::<\202" \ - ";;=\212::<\5;;=99;;;=::<99;\202::<\5__a\250\250\252\346\346\346\377\377" \ - "\377\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\271\377\377\377\202\376\376\376\2\377\377\377" \ - "\376\376\376\203\377\377\377\3\363\363\363\266\266\266wwy\202;;=\210" \ - "::<\1<<>\203::<\2<<>99;\215::<\1;;=\205::<\11;;=::<;;;___xxx\235\235" \ - "\235\266\266\266\315\315\315\364\364\364\207\377\377\377\1\376\376\376" \ - "\213\377\377\377\1\376\376\376\231\377\377\377\5\376\376\376\377\377" \ - "\377\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376" \ - "\204\377\377\377\1\376\376\376\202\377\377\377\5\316\316\316\302\302" \ - "\302\233\233\233yyykkk\202::<\6;;=::<;;=::<99;;;=\211::<\1;;=\202::<" \ - "\1;;=\206::<\1""99;\202;;=\202::<\203;;=\1""99;\202::<\3__a\251\251\253" \ - "\346\346\346\204\377\377\377\3\376\376\376\377\377\377\376\376\376\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\266\377\377\377\1\376\376" \ - "\376\202\377\377\377\2\302\302\302xxx\203::<\3;;=::<;;=\232::<\1;;=\202" \ - "::<\6RRTkkm\235\235\237\301\301\303\332\332\334\376\376\376\222\377\377" \ - "\377\1\376\376\376\260\377\377\377\3\376\376\376\377\377\377\376\376" \ - "\376\202\377\377\377\5\345\345\347\316\316\320\235\235\237xxzSSU\215" \ - "::<\202;;=\202::<\203;;=\2::<;;=\203::<\1;;=\204::<\10;;=::<;;=::<;;" \ - "=kkm\266\266\266\363\363\363\202\377\377\377\1\376\376\376\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\245\377\377\377\1\376\376\376\214" \ - "\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376\377\377\377" \ - "\332\332\332\205\205\207GGI\202::<\1;;=\211::<\202;;=\205::<\2;;=::<" \ - "\202;;=\203::<\14;;=99;::<;;=99;;;=FFFxxx\234\234\234\315\315\315\364" \ - "\364\364\376\376\376\323\377\377\377\4\317\317\317\250\250\250xxxSSS" \ - "\202::<\1;;=\206::<\2;;=::<\203;;=\202::<\2;;=99;\204::<\7;;=::<;;=:" \ - ":<;;=::<;;=\204::<\3\204\204\206\301\301\301\376\376\376\220\377\377" \ - "\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\225" \ - "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\206\377\377" \ - "\377\1\376\376\376\202\377\377\377\4\363\363\363\251\251\251___;;=\202" \ - "::<\1;;=\202::<\202;;=\204::<\1;;=\202::<\7;;=::<;;=::<;;=::<;;=\203" \ - "::<\3""99;::<;;=\202::<\5;;=__a\221\221\223\265\265\267\346\346\346\323" \ - "\377\377\377\1\376\376\376\211\377\377\377\5\363\363\363\301\301\303" \ - "\235\235\237lln::<\202;;=\203::<\1;;=\204::<\1;;=\202::<\2""99;;;=\205" \ - "::<\2;;=99;\203::<\1""99;\204::<\3TTT\233\233\233\346\346\346\207\377" \ - "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\250\377\377\377\3\316\316\316\204\204\204;;=\203::<\1;;=\203::<\1;;" \ - "=\202::<\1;;=\205::<\3;;=::<;;=\202::<\4""99;;;=::<;;=\202::<\202;;=" \ - "\4___\221\221\221\301\301\303\363\363\365\203\377\377\377\1\376\376\376" \ - "\203\377\377\377\202\376\376\376\321\377\377\377\1\376\376\376\210\377" \ - "\377\377\1\376\376\376\202\377\377\377\4\316\316\316\235\235\235kkk;" \ - ";=\202::<\202;;=\203::<\5;;=::<;;=99;;;=\204::<\202;;=\7::<;;=99;::<" \ - ";;=::<;;=\202::<\202;;=\2xxz\302\302\304\213\377\377\377\1\376\376\376" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\1\376" \ - "\376\376\212\377\377\377\3\363\363\363\266\266\266TTV\203::<\3;;=::<" \ - ";;=\202::<\203;;=\202::<\202;;=\205::<\1;;=\202::<\1;;=\204::<\4SSU\221" \ - "\221\223\301\301\301\363\363\363\206\377\377\377\1\376\376\376\203\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\315\377\377\377" \ - "\202\376\376\376\202\377\377\377\1\376\376\376\210\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\3\316\316\316" \ - "\221\221\223__a\203::<\1;;=\203::<\3;;=::<;;=\203::<\5;;=99;;;=::<;;" \ - "=\204::<\1""99;\205::<\3SSU\234\234\236\346\346\346\207\377\377\377\3" \ - "\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\233\377\377\377\4\376\376\376\347\347\347\221\221\221" \ - "FFH\207::<\4""99;;;=::<;;=\20299;\202;;=\202::<\1;;=\203::<\2;;=::<\202" \ - ";;=\202::<\3xxz\250\250\252\346\346\350\215\377\377\377\203\376\376\376" \ - "\316\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\211\377" \ - "\377\377\1\376\376\376\211\377\377\377\4\363\363\363\265\265\267\205" \ - "\205\207FFH\210::<\3;;=::<;;=\204::<\1;;=\207::<\2;;=::<\202;;=\2\203" \ - "\203\205\317\317\321\206\377\377\377\1\376\376\376\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\233\377\377\377\3\316\316\316yy{99;\206" \ - "::<\2;;=99;\202;;=\205::<\5""99;::<;;=::<;;=\202::<\6;;=::<;;=SSU\204" \ - "\204\204\301\301\301\226\377\377\377\1\376\376\376\317\377\377\377\1" \ - "\376\376\376\203\377\377\377\1\376\376\376\204\377\377\377\1\376\376" \ - "\376\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\202" \ - "\377\377\377\3\316\316\316\221\221\221SSU\203::<\3;;=::<99;\204::<\1" \ - ";;=\203::<\2""99;;;=\202::<\1;;=\204::<\5""99;<<>::99;\202::<\4""99;;;=F" \ - "FF\234\234\234\377\377\377\377\377\377\377\377\375\377\377\377\11\316" \ - "\316\320kkm::<;;=::<;;=99;::<;;=\203::<\202;;=\2::<99;\205::<\13;;=F" \ - "FH\221\221\221\346\346\346\376\376\376\377\377\377\376\376\376\377\377" \ - "\377\376\376\376\377\377\377\376\376\376\204\377\377\377\1\376\376\376" \ - "\273\377\377\377\2\376\376\376\317\317\317\212::<\6;;=;;;\316\316\316" \ - "\376\376\376\377\377\377\376\376\376\304\377\377\377\1\376\376\376\206" \ - "\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\204\377\377\377\4\363\363\363\235\235\235RRT;;=\202::<\202;;=\7" \ - "::<;;=99;::<;;=::<;;=\203::<\1;;=\202::<\6;;=::\202::<\2FFH\331\331\333\377\377\377\377\205\377" \ - "\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\216\377\377" \ - "\377\1\376\376\376\203\377\377\377\4\376\376\376\377\377\377\363\363" \ - "\363__a\204::<\2;;=99;\206::<\2;;=\204\204\204\203\377\377\377\1\376" \ - "\376\376\377\377\377\377\377\377\377\377\220\377\377\377\1\204\204\204" \ - "\205::<\1;;=\203::<\1;;=\203::<\4__a\363\363\363\377\377\377\376\376" \ - "\376\377\377\377\377\204\377\377\377\1\316\316\316\214::<\1\316\316\316" \ - "\377\377\377\377\224\377\377\377\4\376\376\376\363\363\363xxx::<\202" \ - ";;=\202::<\1;;=\203::<\1;;=\203::<\1\205\205\207\204\377\377\377\1\376" \ - "\376\376\377\377\377\377\377\377\377\377\215\377\377\377\1\250\250\250" \ - "\205::<\1;;=\203::<\12;;=99;;;=::<__a\363\363\365\377\377\377\376\376" \ - "\376\377\377\377\376\376\376\377\377\377\377\203\377\377\377\1\316\316" \ - "\316\214::<\1\316\316\316\377\377\377\377\227\377\377\377\5\204\204\204" \ - "::<;;=::<;;=\204::<\1""99;\204::<\1\204\204\204\377\377\377\377\377\377" \ - "\377\377\213\377\377\377\1\376\376\376\202\377\377\377\4\376\376\376" \ - "\377\377\377\265\265\267;;=\212::<\4;;=::<__a\363\363\363\217\377\377" \ - "\377\1\376\376\376\367\377\377\377\1\316\316\316\214::<\1\316\316\316" \ - "\376\377\377\377\202\377\377\375\3\377\376\377\377\377\377\376\377\375" \ - "\224\377\377\377\3\204\204\206::<;;=\211::<\7""99;::<\203\203\205\377" \ - "\377\377\376\376\376\377\377\377\376\376\376\205\377\377\377\1\376\376" \ - "\376\202\377\377\377\202\376\376\376\377\377\377\377\377\377\377\377" \ - "\2\264\264\266;;=\202::<\202;;=\1""99;\207::<\2__a\363\363\365\217\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\366\377\377\377\1\316" \ - "\316\316\214::<\1\316\316\316\375\377\377\377\5\377\377\375\377\376\377" \ - "\377\375\377\377\377\375\377\377\377\202\377\376\377\221\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\204\204\206\203::<\1;;=\202::<\2;;=" \ - "::<\202;;=\202::<\3;;=\204\204\204\376\376\376\211\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\377\377\377\377\375\377\377\377\7\376" \ - "\376\376\264\264\266;;=99;::<;;=99;\204::<\1;;=\203::<\2aac\363\363\363" \ - "\221\377\377\377\1\376\376\376\367\377\377\377\1\316\316\316\214::<\1" \ - "\316\316\316\375\377\377\377\202\376\376\376\203\377\377\377\202\376" \ - "\377\377\222\377\377\377\10\376\376\376\377\377\377\376\376\376\204\204" \ - "\206::<;;=::<;;=\203::<\202;;=\202::<\6""99;;;=\205\205\207\376\376\376" \ - "\377\377\377\376\376\376\203\377\377\377\202\376\376\376\202\377\377" \ - "\377\1\376\376\376\377\377\377\377\375\377\377\377\3\376\376\376\302" \ - "\302\304;;=\203::<\1;;=\204::<\6;;=99;;;=::\202::<\2__a\363\363\365\202\377\377\377\1" \ - "\376\376\376\213\377\377\377\1\376\376\376\375\377\377\377\1\316\316" \ - "\316\214::<\1\316\316\316\374\377\377\377\7\377\376\377\376\377\377\376" \ - "\376\374\377\376\377\377\377\375\376\377\377\377\377\375\226\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\203\203\203\214::<\2;;=\265\265" \ - "\265\206\377\377\377\1\376\376\376\377\377\377\377\374\377\377\377\4" \ - "\364\364\364GGI99;;;=\206::<\1;;=\203::<\2__a\363\363\363\205\377\377" \ - "\377\1\376\376\376\212\377\377\377\1\363\363\363\203\377\377\377\1\376" \ - "\376\376\370\377\377\377\1\316\316\316\214::<\1\316\316\316\374\377\377" \ - "\377\10\377\377\375\377\376\377\377\377\377\377\377\375\377\376\377\370" \ - "\373\362\370\373\364\377\376\377\220\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\204\204\204\203::<\1;;=\210::<\2FFH\332\332\334\204\377\377\377\1" \ - "\376\376\376\377\377\377\377\374\377\377\377\3\363\363\363___;;=\202" \ - "::<\1;;=\204::<\6;;=99;;;=::<__a\363\363\365\220\377\377\377\3\265\265" \ - "\265FFF\333\333\333\373\377\377\377\1\316\316\316\214::<\1\316\316\316" \ - "\376\377\377\377\6\374\377\377\377\377\375\371\374\365\242\320c\240\322" \ - "c\371\372\362\221\377\377\377\1\376\376\376\210\377\377\377\2\203\203" \ - "\203;;=\202::<\1;;=\203::<\1;;=\203::<\3;;=FFH\333\333\333\202\377\377" \ - "\377\1\376\376\376\377\377\377\377\371\377\377\377\1\376\376\376\203" \ - "\377\377\377\2kkm::<\202;;=\1""99;\205::<\202;;=\3::<__a\363\363\363" \ - "\220\377\377\377\5\265\265\267::<;;=FFH\332\332\332\206\377\377\377\3" \ - "\376\376\376\377\377\377\376\376\376\361\377\377\377\1\316\316\316\213" \ - "::<\2;;=\316\316\316\365\377\377\377\22\376\376\377\377\377\375\377\377" \ - "\377\377\377\375\377\377\377\377\376\377\377\377\375\377\377\377\376" \ - "\376\377\377\377\377\371\374\365\242\320c\215\307\77\215\305@\242\322" \ - "e\372\373\365\376\377\375\377\376\377\230\377\377\377\3\205\205\207:" \ - ":<;;=\206::<\1;;=\202::<\4;;=SSU\363\363\365\376\376\376\377\377\377" \ - "\377\374\377\377\377\13\376\376\376\204\204\204::<;;=99;::<;;=::<;;=" \ - "::<;;=\203::<\3__a\364\364\366\376\376\376\217\377\377\377\1\265\265" \ - "\267\203::<\3;;=FFF\332\332\332\206\377\377\377\1\376\376\376\361\377" \ - "\377\377\2\376\376\376\317\317\317\212::<\6;;=;;;\316\316\316\376\376" \ - "\376\377\377\377\376\376\376\361\377\377\377\6\376\376\377\377\376\377" \ - "\375\376\377\376\377\377\377\377\375\375\377\376\202\377\377\377\17\376" \ - "\376\376\377\377\377\371\372\364\240\322a\215\305@\212\307>\215\307\77" \ - "\215\305>\242\320c\370\372\365\377\377\377\377\376\377\376\377\375\377" \ - "\377\375\377\376\377\225\377\377\377\5kkm::<;;=99;;;=\210::<\4__a\364" \ - "\364\364\376\376\376\377\377\377\202\376\376\376\377\377\377\377\363" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\4" \ - "\250\250\252::<;;=99;\202;;=\205::<\202;;=\3FFH\345\345\345\376\376\376" \ - "\217\377\377\377\4\264\264\266;;=::<;;=\203::<\2GGI\332\332\332\203\377" \ - "\377\377\1\376\376\376\356\377\377\377\1\376\376\376\205\377\377\377" \ - "\2\315\315\315;;;\211::<\3;;;:::\315\315\315\202\377\377\377\1\376\376" \ - "\376\361\377\377\377\23\377\377\375\375\376\377\376\377\377\376\377\375" \ - "\377\374\377\377\377\375\375\377\376\377\377\377\377\377\375\371\372" \ - "\364\242\321g\215\306A\212\307>\215\306A\212\306@\214\305@\212\306B\241" \ - "\322_\367\372\361\204\377\377\377\1\377\377\375\220\377\377\377\1\376" \ - "\376\376\203\377\377\377\3\363\363\363__a99;\202::<\6;;=::<99;;;=99;" \ - ";;=\203::<\1\205\205\207\204\377\377\377\1\376\376\376\377\377\377\377" \ - "\362\377\377\377\1\376\376\376\202\377\377\377\22\376\376\376\265\265" \ - "\267::<99;;;=::<;;=99;;;=::<;;=::<;;=::\214\305@\214" \ - "\306>\202\214\305@\4\241\321a\371\374\365\376\376\377\377\377\375\202" \ - "\376\377\377\221\377\377\377\1\376\376\376\203\377\377\377\3\362\362" \ - "\362``b99;\205::<\1;;=\203::<\6;;=99;\235\235\237\376\376\376\377\377" \ - "\377\376\376\376\377\377\377\377\366\377\377\377\2\332\332\332FFH\202" \ - ";;=\4""99;;;=::<;;=\205::<\2FFH\332\332\334\202\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\213\377\377\377\4\266\266\26699;::<;;=\202" \ - "::<\1;;=\202::<\4;;=::\215\305" \ - "@\212\306@\213\310=\214\306<\216\306\77\214\304=\214\306>\241\321c\372" \ - "\375\362\376\376\376\377\376\377\376\376\374\220\377\377\377\2\376\376" \ - "\376\377\377\377\203\376\376\376\4\377\377\377\364\364\364FFH;;=\202" \ - "::<\1;;=\202::<\1;;=\203::<\3;;=::<\265\265\265\377\377\377\377\367\377" \ - "\377\377\4\362\362\362SSU::<;;=\205::<\1""99;\202;;=\3::<;;=\265\265" \ - "\267\216\377\377\377\3\376\376\376\377\377\377\265\265\265\202::<\5;" \ - ";=99;;;=::<;;=\204::<\4;;=FFH\332\332\332\376\376\376\205\377\377\377" \ - "\1\376\376\376\355\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \ - "\376\366\377\377\377\1\375\377\376\202\377\377\375\24\377\377\377\376" \ - "\376\376\373\373\363\243\322b\213\307A\214\306>\215\305@\214\305@\212" \ - "\307>\214\306>\215\305>\213\307A\214\305@\216\310@\214\306>\215\305>" \ - "\242\320c\366\373\364\375\377\376\377\376\377\221\377\377\377\1\376\376" \ - "\376\204\377\377\377\3\376\376\376\333\333\333EEG\202;;=\2::<;;=\207" \ - "::<\3GGI\332\332\332\376\376\376\377\377\377\377\365\377\377\377\1__" \ - "a\205::<\10;;=::<;;=::<;;=::<;;=\265\265\265\202\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\213\377\377\377\1\266\266\266\203::<\5""9" \ - "9;<<>::<;;=::<\202;;=\203::<\4;;=FFH\333\333\333\376\376\376\202\377" \ - "\377\377\1\376\376\376\355\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\215\377\377\377\1\376\376\376\363\377\377\377\3\377\376" \ - "\377\377\377\377\375\377\376\202\377\377\377\2\373\373\363\241\321d\202" \ - "\214\306>\17\216\306=\215\305@\215\307\77\214\306>\217\304>\214\306>" \ - "\214\305B\215\307\77\211\305A\215\306A\216\306\77\214\305@\242\322e\370" \ - "\373\364\377\377\375\230\377\377\377\1\333\333\335\203::<\202;;=\206" \ - "::<\3;;=FFH\363\363\363\377\377\377\377\364\377\377\377\1\204\204\206" \ - "\203::<\1;;=\207::<\2;;=\204\204\206\220\377\377\377\1\346\346\346\204" \ - "::<\1;;=\203::<\1;;=\202::<\202;;=\203::<\2FFH\332\332\332\357\377\377" \ - "\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\204\377\377" \ - "\377\1\377\377\375\202\377\377\377\17\377\376\377\370\373\364\243\322" \ - "b\214\306>\213\310\77\212\307>\214\306>\215\306C\212\307>\214\306<\213" \ - "\310\77\214\305@\214\306<\214\306>\216\306\77\203\214\306>\3\214\306" \ - "<\265\334\211\376\376\376\222\377\377\377\1\376\376\376\205\377\377\377" \ - "\4\376\376\377\265\265\267::<;;=\212::<\1___\377\377\377\377\363\377" \ - "\377\377\1\265\265\267\204::<\1;;=\206::<\2;;=\203\203\203\222\377\377" \ - "\377\2\265\265\265;;=\203::<\1;;=\205::<\1;;=\204::<\3;;=FFH\332\332" \ - "\332\206\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\377\345\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375" \ - "\377\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370" \ - "\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4" \ - "\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306" \ - ">\215\307\77\214\305@\244\317c\367\375\361\233\377\377\377\3\234\234" \ - "\236::<99;\211::<\2;;=\204\204\206\377\377\377\377\360\377\377\377\13" \ - "\376\376\376\332\332\33299;::<99;;;=::<99;;;=::<;;=\202::<\3;;=^^`\364" \ - "\364\364\223\377\377\377\12\265\265\267;;=::<;;=99;;;=::<;;=::<;;=\202" \ - "::<\1;;=\203::<\3;;=FFF\332\332\332\206\377\377\377\1\376\376\376\377" \ - "\377\377\377\345\377\377\377\6\376\376\377\377\376\377\375\376\377\376" \ - "\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373" \ - "\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212" \ - "\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306" \ - ">\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\233" \ - "\377\377\377\1\204\204\206\203::<\13;;=::<;;=::<;;=::<;;=::<;;=\266\266" \ - "\266\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377\352\377" \ - "\377\377\2\363\363\363TTV\202::<\3;;=99;;;=\204::<\4;;=99;FFH\363\363" \ - "\363\224\377\377\377\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<" \ - "\1;;=\203::<\1;;=\203::<\2GGI\332\332\332\203\377\377\377\1\376\376\376" \ - "\377\377\377\377\347\377\377\377\7\377\377\375\375\376\377\376\377\377" \ - "\376\377\375\377\374\377\377\377\375\375\377\376\202\377\377\377\5\372" \ - "\373\366\240\320b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305" \ - "@\212\306@\214\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@" \ - "\214\306>\215\307\77\215\305@\242\320c\370\373\362\377\377\373\377\376" \ - "\377\377\377\375\232\377\377\377\3\376\376\376\377\377\377^^`\202;;=" \ - "\205::<\1""99;\202;;=\5::<;;=\332\332\332\377\377\377\376\376\376\377" \ - "\377\377\377\347\377\377\377\1\376\376\376\204\377\377\377\1lln\204:" \ - ":<\202;;=\203::<\6;;=99;GGI\332\332\332\377\377\377\376\376\376\225\377" \ - "\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::<\3""99;;;=::<\202;;" \ - "=\202::<\4;;=::\212\307<\214\306>\214\306<\214\306>\216" \ - "\306\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306" \ - ">\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \ - "\234\377\377\377\2\364\364\364RRT\202::<\4""99;;;=::<;;=\205::<\3SSU" \ - "\362\362\362\377\377\377\202\376\376\376\377\377\377\377\351\377\377" \ - "\377\1\234\234\236\204::<\1;;=\203::<\1;;=\203::<\1\265\265\267\231\377" \ - "\377\377\2\265\265\267;;=\203::<\2""99;;;=\202::<\1;;=\202::<\1;;=\202" \ - "::<\4;;=::\212\307>\212\306@\214\305B" \ - "\214\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214" \ - "\306>\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377" \ - "\377\375\235\377\377\377\3\376\376\376\332\332\334GGI\202;;=\6::<;;=" \ - "99;;;=::<;;=\203::<\1yyy\202\376\376\376\202\377\377\377\1\376\376\376" \ - "\377\377\377\377\345\377\377\377\4\376\376\376\317\317\317::<;;=\202" \ - "::<\3;;=99;;;=\204::<\6;;=\221\221\223\377\377\377\376\376\376\377\377" \ - "\377\376\376\376\226\377\377\377\3\376\376\376\265\265\267;;=\202::<" \ - "\2;;=99;\205::<\1;;=\204::<\4;;=FFH\332\332\332\376\376\376\205\377\377" \ - "\377\1\376\376\376\377\377\377\377\342\377\377\377\1\375\377\376\202" \ - "\377\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307" \ - "B\212\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214" \ - "\306<\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307" \ - ">\244\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377" \ - "\377\377\375\377\376\377\236\377\377\377\4\265\265\267::<;;=99;\202;" \ - ";=\205::<\202;;=\1\250\250\250\202\377\377\377\1\376\376\376\377\377" \ - "\377\377\343\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363" \ - "FFH;;=\202::<\5;;=::<;;=::<99;\202;;=\2::\213\310=\214\306>\214" \ - "\305@\213\310=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214" \ - "\306>\215\305>\217\304@\215\307\77\215\307=\242\320c\367\375\361\376" \ - "\376\377\377\376\377\376\376\376\202\377\377\375\2\374\377\377\377\376" \ - "\377\234\377\377\377\1\376\376\376\202\377\377\377\10\221\221\221::<" \ - ";;=99;::<;;=::<;;=\205::<\2\333\333\333\376\376\376\377\377\377\377\347" \ - "\377\377\377\1kkk\202::<\1;;=\205::<\1;;=\202::<\2RRT\363\363\365\236" \ - "\377\377\377\1\265\265\267\203::<\2""99;;;=\203::<\1;;=\202::<\202;;" \ - "=\203::<\2FFH\332\332\332\377\377\377\377\346\377\377\377\1\377\377\375" \ - "\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213\310" \ - "\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307=\214" \ - "\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244\317c" \ - "\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377\377" \ - "\377\202\377\376\377\241\377\377\377\2kkm::<\202;;=\1""99;\204::<\203" \ - ";;=\2SSU\364\364\364\377\377\377\377\336\377\377\377\3\376\376\376\377" \ - "\377\377\376\376\376\204\377\377\377\2\376\376\376\250\250\252\202::" \ - "<\1;;=\210::<\2FFH\333\333\333\202\377\377\377\1\376\376\376\235\377" \ - "\377\377\2\265\265\265;;=\203::<\1;;=\205::<\1;;=\204::<\3;;=FFH\332" \ - "\332\332\206\377\377\377\3\376\376\376\377\377\377\376\376\376\243\377" \ - "\377\377\4\376\377\377\377\377\375\377\376\377\376\376\377\202\377\377" \ - "\377\2\376\377\375\376\377\377\230\377\377\377\10\376\377\377\377\376" \ - "\377\376\377\377\376\377\375\376\376\376\376\377\377\377\377\377\377" \ - "\376\377\231\377\377\377\7\377\376\377\376\376\374\376\377\377\377\377" \ - "\375\374\377\377\376\377\377\377\376\377\231\377\377\377\17\375\377\374" \ - "\377\377\375\377\377\377\377\376\377\376\377\377\377\376\377\377\377" \ - "\377\376\377\377\376\376\374\377\377\377\377\377\373\377\377\377\376" \ - "\377\377\377\377\377\377\377\375\220\377\377\377\4\377\377\373\377\377" \ - "\377\377\377\375\377\377\377\202\376\377\377\2\377\377\375\377\377\373" \ - "\251\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377" \ - "\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373" \ - "\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214" \ - "\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215" \ - "\307\77\214\305@\244\317c\367\375\361\251\377\377\377\6\363\363\363T" \ - "TT::<;;=::<;;=\206::<\2;;=www\204\377\377\377\1\376\376\376\377\377\377" \ - "\377\340\377\377\377\2\332\332\332;;=\203::<\3;;=99;;;=\203::<\3;;=:" \ - ":<\265\265\267\204\377\377\377\1\376\376\376\235\377\377\377\12\265\265" \ - "\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\203::<\3;;=FFF\332\332\332" \ - "\206\377\377\377\1\376\376\376\244\377\377\377\202\377\377\375\1\377" \ - "\377\377\202\376\377\375\3\376\376\377\377\377\377\377\376\377\230\377" \ - "\377\377\3\376\377\375\377\377\377\377\377\373\202\377\376\377\2\377" \ - "\377\377\376\376\376\231\377\377\377\10\376\377\373\376\375\377\377\377" \ - "\375\377\376\377\377\375\377\377\377\373\377\376\377\377\377\375\230" \ - "\377\377\377\12\377\376\377\377\377\377\377\375\376\376\377\377\376\377" \ - "\372\376\377\377\377\377\377\376\377\375\377\376\377\377\377\375\203" \ - "\377\377\377\202\376\377\375\1\375\376\377\227\377\377\377\1\377\374" \ - "\377\250\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377" \ - "\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241" \ - "\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@" \ - "\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \ - "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\251\377" \ - "\377\377\2\331\331\331;;=\206::<\1;;=\203::<\2;;=\265\265\265\204\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377" \ - "\322\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\202\377\377\377\2\363\363\363SSU\203::<\2;;=::<\202" \ - ";;=\2""99;;;=\202::<\1\204\204\204\206\377\377\377\1\376\376\376\234" \ - "\377\377\377\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203" \ - "::<\1;;=\203::<\2GGI\332\332\332\203\377\377\377\1\376\376\376\247\377" \ - "\377\377\1\377\377\375\202\377\376\377\1\377\375\377\202\377\377\377" \ - "\1\377\376\377\232\377\377\377\6\377\377\375\377\377\377\375\377\376" \ - "\376\377\375\377\377\375\377\375\377\230\377\377\377\202\377\377\375" \ - "\2\377\377\377\376\376\376\202\377\377\377\2\376\377\377\374\377\377" \ - "\230\377\377\377\1\377\377\375\202\377\376\377\1\375\376\377\203\377" \ - "\377\377\1\377\377\375\202\377\377\377\6\376\376\377\377\377\375\377" \ - "\377\377\377\375\377\377\376\377\377\377\375\220\377\377\377\1\376\377" \ - "\377\202\377\377\377\3\376\377\375\376\376\376\377\376\377\252\377\377" \ - "\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377\377" \ - "\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307\77" \ - "\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216\306" \ - "\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215\305" \ - "@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\252\377\377" \ - "\377\2\250\250\25099;\204::<\12;;=99;::<;;=99;::\212\307<\214\306" \ - ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \ - "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \ - "\376\376\376\376\377\377\253\377\377\377\1yyy\205::<\3;;=::<99;\202;" \ - ";=\3::<__a\376\376\376\377\377\377\377\335\377\377\377\1\376\376\376" \ - "\202\377\377\377\5\301\301\301::<;;=99;;;=\207::<\2GGI\332\332\332\203" \ - "\377\377\377\1\376\376\376\243\377\377\377\2\265\265\267;;=\203::<\2" \ - "99;;;=\202::<\1;;=\202::<\1;;=\202::<\4;;=::\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>" \ - "\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370" \ - "\373\362\377\377\377\202\377\376\377\1\377\377\375\254\377\377\377\4" \ - "\363\363\363SSU;;=99;\202;;=\1""99;\204::<\3;;=::<\235\235\237\377\377" \ - "\377\377\334\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363" \ - "GGI\202::<\7;;=::<99;::<;;=::<;;=\202::<\2\266\266\266\376\376\376\204" \ - "\377\377\377\202\376\376\376\202\377\377\377\1\376\376\376\236\377\377" \ - "\377\3\376\376\376\265\265\267;;=\202::<\2;;=99;\205::<\1;;=\204::<\4" \ - ";;=FFH\332\332\332\376\376\376\205\377\377\377\1\376\376\376\240\377" \ - "\377\377\10\376\377\375\377\375\377\377\377\375\376\377\375\377\377\377" \ - "\377\376\377\377\377\377\376\376\374\230\377\377\377\10\374\377\377\377" \ - "\376\374\377\377\377\376\376\374\377\376\377\376\377\377\377\377\377" \ - "\377\376\377\230\377\377\377\3\377\377\375\377\377\377\376\377\375\203" \ - "\377\377\377\1\377\376\377\231\377\377\377\6\377\375\377\376\376\374" \ - "\377\377\377\377\376\377\376\377\375\377\376\377\202\377\377\377\2\377" \ - "\376\377\377\377\377\202\376\377\377\2\376\376\377\376\377\377\222\377" \ - "\377\377\2\377\377\375\377\375\377\202\376\377\377\4\376\376\376\376" \ - "\377\377\375\377\374\377\375\377\251\377\377\377\1\375\377\376\202\377" \ - "\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212" \ - "\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<" \ - "\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244" \ - "\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377" \ - "\377\375\377\376\377\252\377\377\377\5\376\376\376\377\377\377\333\333" \ - "\33399;;;=\202::<\5;;=99;;;=99;;;=\203::<\1\332\332\334\377\377\377\377" \ - "\330\377\377\377\1\376\376\376\205\377\377\377\1xxx\202::<\1;;=\202:" \ - ":<\1;;=\204::<\4:::xxx\376\376\376\377\377\377\202\376\376\376\205\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\237\377\377\377\1\265" \ - "\265\265\204::<\6;;=::<;;=::<;;=::<\202;;=\203::<\4;;=FFH\333\333\333" \ - "\376\376\376\202\377\377\377\1\376\376\376\242\377\377\377\7\376\376" \ - "\376\377\376\377\326\352\267\247\324o\247\324m\252\324r\247\324o\231" \ - "\252\324p\10\323\353\271\377\376\377\377\377\377\376\377\377\350\365" \ - "\333\253\323p\250\324r\251\324k\230\252\324p\10\250\325n\252\324p\277" \ - "\337\223\376\377\377\377\377\377\375\377\376\376\377\377\276\336\222" \ - "\230\252\324p\7\250\325p\250\324r\247\324o\253\324n\251\323m\346\364" \ - "\332\377\376\377\202\377\377\377\7\323\352\266\253\323p\251\323m\253" \ - "\323r\251\323o\247\324m\252\324r\220\252\324p\10\252\324n\253\324n\247" \ - "\324k\252\324p\254\325o\247\324m\252\324p\324\353\267\250\377\377\377" \ - "\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11\373\373\363" \ - "\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304" \ - ">\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307" \ - "\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376" \ - "\202\377\377\375\2\374\377\377\377\376\377\254\377\377\377\2\376\376" \ - "\376\251\251\251\202::<\5;;=::<;;=99;;;=\204::<\1``b\377\377\377\377" \ - "\334\377\377\377\3\376\376\376\301\301\301:::\205::<\1""99;\202::<\4" \ - ";;=::\10\304\341\237\377\374\377\377\376\377\377\377\377" \ - "\341\362\322\215\305>\212\307>\215\305>\230\214\306>\4\215\305<\214\305" \ - "@\252\324r\376\377\377\202\377\377\377\2\377\377\375\250\324r\230\214" \ - "\306>\20\215\307\77\214\306>\214\306<\214\305B\212\307>\337\363\320\377" \ - "\376\377\376\377\377\376\376\374\305\342\240\214\305@\213\310=\215\305" \ - "@\214\306>\212\307<\214\305@\220\214\306>\10\214\305@\215\306C\212\307" \ - "<\214\306>\215\305>\212\306@\215\305>\304\343\237\250\377\377\377\1\377" \ - "\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306" \ - ">\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215" \ - "\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<" \ - "\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377" \ - "\377\377\377\202\377\376\377\257\377\377\377\1kkm\202::<\2;;=::<\202" \ - ";;=\3::<;;=::<\202;;=\1\233\233\233\377\377\377\377\330\377\377\377\1" \ - "\376\376\376\202\377\377\377\3\364\364\366FFH;;=\205::<\3;;=::<;;=\202" \ - "::<\1\316\316\316\256\377\377\377\2\265\265\265;;=\203::<\1;;=\205::" \ - "<\1;;=\204::<\3;;=FFH\332\332\332\206\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\235\377\377\377\1\304\343\240\235\214\306>\1\305\342" \ - "\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377" \ - "\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377" \ - "\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306" \ - ">\1\214\305@\205\214\306>\1\305\342\237\241\377\377\377\10\376\376\377" \ - "\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377\377\377" \ - "\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307B\213" \ - "\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306<\215" \ - "\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244\317" \ - "c\367\375\361\267\377\377\377\2\363\363\363FFF\204::<\1;;=\203::<\4:" \ - "9>::<;;=\332\332\332\377\377\377\377\332\377\377\377\1yy{\202::<\2""9" \ - "9;;;=\202::<\6;;=99;::<;;=::<\234\234\236\260\377\377\377\12\265\265" \ - "\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\203::<\3;;=FFF\332\332\332" \ - "\206\377\377\377\1\376\376\376\236\377\377\377\1\304\343\240\235\214" \ - "\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250" \ - "\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316" \ - "\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305" \ - "@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\240\377\377\377" \ - "\6\376\376\377\377\376\377\375\376\377\376\377\377\377\377\375\375\377" \ - "\376\203\377\377\377\27\377\377\375\372\373\366\241\321a\217\304@\212" \ - "\307<\214\306>\215\305>\215\305@\213\310=\212\306@\214\306>\214\305B" \ - "\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77\214\306>\242" \ - "\322b\370\373\362\376\376\377\377\375\376\267\377\377\377\1\301\301\301" \ - "\205::<\3;;=::<;;=\202::<\2""99;```\377\377\377\377\331\377\377\377\1" \ - "\301\301\301\202::<\1;;=\203::<\1;;=\202::<\3<<>::<__a\261\377\377\377" \ - "\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203::<\1;;=\203" \ - "::<\2GGI\332\332\332\203\377\377\377\1\376\376\376\240\377\377\377\1" \ - "\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \ - "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \ - "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \ - "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \ - "\240\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377" \ - "\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320" \ - "b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214" \ - "\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307" \ - "\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375" \ - "\270\377\377\377\3\204\204\204::<;;=\206::<\4;;=::<;;=\234\234\236\377" \ - "\377\377\377\325\377\377\377\4\376\376\376\377\377\377\363\363\363SS" \ - "U\211::<\4""99;::<\332\332\334\376\376\376\202\377\377\377\1\376\376" \ - "\376\257\377\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::<\3""99;" \ - ";;=::<\202;;=\202::<\4;;=::\1\305\342\237\203\377" \ - "\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252" \ - "\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342" \ - "\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305" \ - "@\205\214\306>\1\305\342\237\241\377\377\377\37\376\377\377\376\377\375" \ - "\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373" \ - "\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306" \ - ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \ - "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \ - "\376\376\376\376\377\377\270\377\377\377\3\363\363\363TTT;;=\202::<\1" \ - ";;=\203::<\5""99;;;=::<;;=\332\332\332\377\377\377\377\323\377\377\377" \ - "\1\376\376\376\202\377\377\377\4\221\221\221;;=99;;;=\202::<\1;;=\202" \ - "::<\1;;=\202::<\1\233\233\233\202\377\377\377\1\376\376\376\262\377\377" \ - "\377\2\265\265\267;;=\203::<\2""99;;;=\202::<\1;;=\202::<\1;;=\202::" \ - "<\4;;=::\1\305\342\237" \ - "\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377" \ - "\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \ - "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \ - "\305@\205\214\306>\1\305\342\237\240\377\377\377\202\377\377\375\3\377" \ - "\374\377\375\377\376\376\377\377\202\377\377\377\25\370\373\364\243\322" \ - "b\217\304@\212\306@\214\305@\215\305>\212\307>\212\306@\214\305B\214" \ - "\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214\306" \ - ">\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377\377" \ - "\375\272\377\377\377\7\316\316\316::<;;=::<99;::<;;=\205::<\1kkm\377" \ - "\377\377\377\325\377\377\377\1\315\315\315\206::<\6""99;::<99;;;=::<" \ - "```\206\377\377\377\1\376\376\376\257\377\377\377\3\376\376\376\265\265" \ - "\267;;=\202::<\2;;=99;\205::<\1;;=\204::<\4;;=FFH\332\332\332\376\376" \ - "\376\205\377\377\377\1\376\376\376\232\377\377\377\1\304\343\240\235" \ - "\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306>\1" \ - "\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362" \ - "\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214" \ - "\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\241\377\377" \ - "\377\1\375\377\376\202\377\377\375\34\377\377\377\376\376\376\373\373" \ - "\363\243\322b\211\307B\212\307<\215\305>\214\306>\212\307>\214\305@\217" \ - "\304>\212\307<\214\306<\214\306>\215\307\77\213\307A\214\306>\215\305" \ - "@\215\307\77\212\307>\244\317c\370\373\362\377\377\373\376\377\377\377" \ - "\376\377\375\376\377\377\377\375\377\376\377\272\377\377\377\2\222\222" \ - "\22299;\205::<\1;;=\203::<\2;;=\250\250\250\377\377\377\377\324\377\377" \ - "\377\4```;;=99;;;=\204::<\5;;=::<;;=::<\331\331\331\207\377\377\377\1" \ - "\376\376\376\260\377\377\377\1\265\265\265\204::<\6;;=::<;;=::<;;=::" \ - "<\202;;=\203::<\4;;=FFH\333\333\333\376\376\376\202\377\377\377\1\376" \ - "\376\376\234\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203" \ - "\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1" \ - "\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \ - "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \ - "\305@\205\214\306>\1\305\342\237\240\377\377\377\3\377\376\377\377\377" \ - "\377\375\377\376\202\377\377\377\11\373\373\363\241\321d\214\306>\213" \ - "\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202\215\307=\14\214" \ - "\306>\215\305>\214\306>\215\305>\217\304@\215\307\77\215\307=\242\320" \ - "c\367\375\361\376\376\377\377\376\377\376\376\376\202\377\377\375\2\374" \ - "\377\377\377\376\377\262\377\377\377\2\376\376\376\377\377\377\202\376" \ - "\376\376\204\377\377\377\5\363\363\363SSU99;::<;;=\207::<\2GGG\363\363" \ - "\363\377\377\377\377\322\377\377\377\4\234\234\234:::::<;;=\202::<\1" \ - ";;=\203::<\202;;=\1\234\234\236\207\377\377\377\1\376\376\376\262\377" \ - "\377\377\1\265\265\267\203::<\2""99;;;=\203::<\1;;=\202::<\202;;=\203" \ - "::<\2FFH\332\332\332\237\377\377\377\1\304\343\240\235\214\306>\1\305" \ - "\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377" \ - "\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377" \ - "\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214" \ - "\306>\1\214\305@\205\214\306>\1\305\342\237\240\377\377\377\1\377\377" \ - "\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213" \ - "\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307" \ - "=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244" \ - "\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377" \ - "\377\377\202\377\376\377\273\377\377\377\2\376\376\376\316\316\316\206" \ - "::<\202;;=\4::<;;=::\1\305\342\237\203\377" \ - "\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252" \ - "\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342" \ - "\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305" \ - "@\205\214\306>\1\305\342\237\231\377\377\377\10\376\376\377\377\377\375" \ - "\377\377\377\377\377\375\377\377\377\377\376\377\377\377\375\376\377" \ - "\377\202\377\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305" \ - "@\214\306<\202\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214" \ - "\306>\6\212\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\305" \ - "\377\377\377\2xxz;;=\203::<\3;;=::<;;=\203::<\2;;=\315\315\315\377\377" \ - "\377\377\313\377\377\377\203\376\376\376\202\377\377\377\3xxz;;=::<\202" \ - ";;=\1""99;\202;;=\202::<\4;;=::<\333\333\335\376\376\376\274\377\377" \ - "\377\12\265\265\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\202::<\4;" \ - ";=99;GGI\332\332\332\235\377\377\377\1\304\343\240\235\214\306>\1\305" \ - "\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377" \ - "\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377" \ - "\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214" \ - "\306>\1\214\305@\205\214\306>\1\305\342\237\230\377\377\377\6\376\376" \ - "\377\377\376\377\375\376\377\376\377\377\377\377\375\375\377\376\203" \ - "\377\377\377\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214" \ - "\306>\215\305>\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77" \ - "\215\305>\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370" \ - "\373\362\376\376\377\377\375\376\304\377\377\377\2\364\364\364FFH\203" \ - "::<\2""99;;;=\203::<\4<<>99;TTT\376\376\376\377\377\377\377\310\377\377" \ - "\377\1\376\376\376\205\377\377\377\3\316\316\316::<99;\206::<\1;;=\202" \ - "::<\1\221\221\221\203\377\377\377\1\376\376\376\272\377\377\377\7\376" \ - "\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203::<\6;;=::<;;=::<" \ - "FFH\332\332\332\234\377\377\377\1\304\343\240\235\214\306>\1\305\342" \ - "\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377" \ - "\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377" \ - "\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306" \ - ">\1\214\305@\205\214\306>\1\305\342\237\230\377\377\377\7\377\377\375" \ - "\375\376\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377" \ - "\376\202\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305" \ - ">\202\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215" \ - "\307\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373" \ - "\362\377\377\373\377\376\377\377\377\375\304\377\377\377\3\376\376\376" \ - "\265\265\267;;=\204::<\1""99;\203::<\3;;=::<\234\234\234\203\377\377" \ - "\377\1\376\376\376\377\377\377\377\306\377\377\377\7\376\376\376\377" \ - "\377\377\376\376\376\377\377\377__a::<;;=\203::<\7;;=::<;;=::<;;=SSU" \ - "\363\363\363\300\377\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::" \ - "<\3""99;;;=::<\202;;=\204::<\2FFH\332\332\332\233\377\377\377\1\304\343" \ - "\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214" \ - "\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77" \ - "\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214" \ - "\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\231" \ - "\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377" \ - "\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215\307" \ - "=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215" \ - "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \ - "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\301\377" \ - "\377\377\1\376\376\376\204\377\377\377\2kkm99;\203::<\202;;=\1""99;\203" \ - "::<\2FFH\363\363\363\377\377\377\377\310\377\377\377\1\376\376\376\203" \ - "\377\377\377\3\250\250\252::<;;=\203::<\1;;=\202::<\5;;=::<;;=\301\301" \ - "\301\376\376\376\301\377\377\377\2\265\265\267;;=\203::<\2""99;;;=\202" \ - "::<\1;;=\202::<\2;;=::<\202;;=\3::\1\305\342\237\203\377\377\377\1\342\362\316" \ - "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \ - "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \ - "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \ - "\230\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377" \ - "\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215" \ - "\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>" \ - "\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362" \ - "\377\377\377\202\377\376\377\1\377\377\375\301\377\377\377\1\376\376" \ - "\376\204\377\377\377\2\376\376\376\346\346\350\203::<\4;;=99;::<;;=\204" \ - "::<\3\203\203\203\377\377\377\376\376\376\377\377\377\377\311\377\377" \ - "\377\2\364\364\364FFH\202::<\5;;=::<;;=::<;;=\202::<\2;;=kkm\202\377" \ - "\377\377\1\376\376\376\300\377\377\377\3\376\376\376\265\265\267;;=\202" \ - "::<\2;;=99;\204::<\3;;=99;;;=\202::<\3;;=::<\265\265\265\232\377\377" \ - "\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362" \ - "\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>" \ - "\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215" \ - "\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1" \ - "\305\342\237\231\377\377\377\1\375\377\376\202\377\377\375\34\377\377" \ - "\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214" \ - "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \ - "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \ - "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \ - "\377\301\377\377\377\202\376\376\376\2\377\377\377\376\376\376\202\377" \ - "\377\377\1\234\234\236\203::<\1;;=\206::<\2;;=\331\331\331\377\377\377" \ - "\377\306\377\377\377\1\376\376\376\203\377\377\377\4\233\233\233;;=:" \ - ":<;;=\202::<\3;;=99;;;=\203::<\1\346\346\350\305\377\377\377\1\265\265" \ - "\265\204::<\3;;=::<;;=\203::<\5;;=99;;;=::<\265\265\267\233\377\377\377" \ - "\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \ - "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \ - "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \ - "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \ - "\230\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \ - "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \ - "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \ - ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \ - "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\301\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\6\364" \ - "\364\364SSU::<;;=::<;;=\205::<\4""99;kkk\377\377\377\376\376\376\377" \ - "\377\377\377\307\377\377\377\2\346\346\346;;;\204::<\3;;=99;;;=\203:" \ - ":<\1\234\234\236\205\377\377\377\1\376\376\376\301\377\377\377\1\265" \ - "\265\267\203::<\2""99;;;=\202::<\1;;;\204::<\1\265\265\267\234\377\377" \ - "\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362" \ - "\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>" \ - "\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215" \ - "\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1" \ - "\305\342\237\230\377\377\377\1\377\377\375\202\377\377\377\32\377\376" \ - "\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215\305" \ - "@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212" \ - "\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377" \ - "\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377\306\377" \ - "\377\377\1\376\376\376\202\377\377\377\2\301\301\303::<\202;;=\11::<" \ - ";;=::<;;=::<99;;;=::<\301\301\301\377\377\377\377\306\377\377\377\12" \ - "\376\376\376\377\377\377\204\204\204;;=::<:9>;;=::<99;;;=\203::<\5SS" \ - "U\363\363\363\376\376\376\377\377\377\376\376\376\305\377\377\377\5\265" \ - "\265\26599;;;=::<;;=\206::<\1\266\266\270\235\377\377\377\1\304\343\240" \ - "\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306" \ - ">\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342" \ - "\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306" \ - ">\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\221\377" \ - "\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377\377\377" \ - "\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243" \ - "\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214" \ - "\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77" \ - "\214\305@\244\317c\367\375\361\322\377\377\377\1kkk\203::<\4;;=99;::" \ - "<;;=\203::<\1SSU\210\377\377\377\1\376\376\376\377\377\377\377\276\377" \ - "\377\377\1\316\316\316\202::<\1;;=\202::<\202;;=\202::<\4;;=::<\265\265" \ - "\267\376\376\376\307\377\377\377\3\376\376\376\377\377\377\265\265\267" \ - "\207::<\3""99;\266\266\270\376\376\377\202\377\377\377\1\376\376\376" \ - "\232\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \ - "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \ - "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \ - "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \ - "\214\306>\1\305\342\237\220\377\377\377\6\376\376\377\377\376\377\375" \ - "\376\377\376\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377" \ - "\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305" \ - "@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212" \ - "\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377" \ - "\375\376\321\377\377\377\1\346\346\346\204::<\1;;=\202::<\5;;=99;;;=" \ - "::<\266\266\266\205\377\377\377\202\376\376\376\2\377\377\377\376\376" \ - "\376\377\377\377\377\273\377\377\377\5\376\376\376\377\377\377kkm::<" \ - ";;=\202::<\1;;=\203::<\3;;=::\1\305\342\237" \ - "\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377" \ - "\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \ - "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \ - "\305@\205\214\306>\1\305\342\237\220\377\377\377\7\377\377\375\375\376" \ - "\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377\376\202" \ - "\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>\202" \ - "\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307\77" \ - "\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \ - "\377\377\373\377\376\377\377\377\375\322\377\377\377\1\221\221\223\202" \ - "::<\12;;=99;::<;;=::<;;=99;;;=EEG\364\364\364\203\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\376\376\376\377\377\377\377\275\377\377\377\2" \ - "\316\316\320;;=\205::<\2""99;;;=\203::<\3\316\316\316\377\377\377\376" \ - "\376\376\313\377\377\377\3\265\265\265;;=99;\202::<\1\266\266\270\203" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1" \ - "\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \ - "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \ - "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \ - "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \ - "\221\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377" \ - "\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215" \ - "\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77" \ - "\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242" \ - "\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\322" \ - "\377\377\377\2\363\363\363FFH\203::<\202;;=\203::<\3;;=::<\235\235\235" \ - "\204\377\377\377\1\376\376\376\377\377\377\377\277\377\377\377\1__a\202" \ - "::<\1;;=\203::<\5;;=::<;;=::<\204\204\206\312\377\377\377\1\376\376\376" \ - "\202\377\377\377\7\376\376\376\377\377\377\265\265\267;;=99;\266\266" \ - "\270\376\376\377\203\377\377\377\202\376\376\376\233\377\377\377\1\304" \ - "\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235" \ - "\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307" \ - "\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214" \ - "\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\220" \ - "\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202" \ - "\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305" \ - ">\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212" \ - "\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377" \ - "\377\377\202\377\376\377\1\377\377\375\324\377\377\377\4\234\234\234" \ - ";;=::<<<>\204::<\1;;=\202::<\2FFH\363\363\363\204\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\376\376\376\377\377\377\377\272\377\377\377\1" \ - "\265\265\265\202::<\5;;=99;::<;;=::<\202;;=\3""99;;;=\346\346\346\320" \ - "\377\377\377\2\264\264\266\265\265\267\203\377\377\377\202\376\376\376" \ - "\235\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \ - "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \ - "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \ - "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \ - "\214\306>\1\305\342\237\221\377\377\377\1\375\377\376\202\377\377\375" \ - "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \ - "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \ - "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \ - "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \ - "\377\376\377\320\377\377\377\1\376\376\376\203\377\377\377\2SSU;;=\203" \ - "::<\1;;=\203::<\3""99;::<\234\234\236\203\377\377\377\1\376\376\376\377" \ - "\377\377\377\276\377\377\377\5RRT99;;;=99;;;=\203::<\4""99;;;=::<\234" \ - "\234\236\314\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376" \ - "\235\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \ - "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \ - "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \ - "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \ - "\214\306>\1\305\342\237\220\377\377\377\3\377\376\377\377\377\377\375" \ - "\377\376\202\377\377\377\11\373\373\363\241\321d\214\306>\213\310=\214" \ - "\306>\214\305@\213\310=\212\306@\217\304>\202\215\307=\14\214\306>\215" \ - "\305>\214\306>\215\305>\217\304@\215\307\77\215\307=\242\320c\367\375" \ - "\361\376\376\377\377\376\377\376\376\376\202\377\377\375\2\374\377\377" \ - "\377\376\377\324\377\377\377\3\265\265\265;;=99;\202;;=\1""99;\202;;" \ - "=\5::<;;=::\1\305\342\237\203\377\377" \ - "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \ - "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \ - "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \ - "\214\306>\1\305\342\237\220\377\377\377\1\377\377\375\202\377\377\377" \ - "\32\377\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215" \ - "\305>\215\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>" \ - "\215\306A\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377" \ - "\377\377\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376" \ - "\377\326\377\377\377\1__a\203::<\1;;=\203::<\1;;=\202::<\1\234\234\234" \ - "\377\377\377\377\274\377\377\377\1\376\376\376\203\377\377\377\3SSU;" \ - ";=99;\210::<\1\234\234\234\365\377\377\377\7\376\377\375\304\341\236" \ - "\215\306A\214\305B\215\307=\212\307>\212\306@\230\214\305@\1\304\341" \ - "\236\203\377\377\377\4\341\362\320\214\306>\213\310\77\215\305@\231\214" \ - "\305@\2\215\307\77\252\322q\202\377\376\377\202\377\377\377\1\250\325" \ - "n\230\214\305@\3\215\305>\215\306A\215\307\77\202\214\306<\10\342\360" \ - "\317\376\377\377\377\377\375\376\377\377\305\342\240\215\305@\212\306" \ - "@\215\305>\202\214\305@\1\215\307=\220\214\305@\10\214\306>\212\306@" \ - "\216\306A\212\307>\215\305>\215\305@\214\305@\304\343\237\211\377\377" \ - "\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377\377\377\377" \ - "\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322" \ - "b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305" \ - "@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214" \ - "\305@\244\317c\367\375\361\335\377\377\377\2\376\376\376\316\316\316" \ - "\211::<\3;;=GGI\363\363\365\203\377\377\377\1\376\376\376\377\377\377" \ - "\377\266\377\377\377\10\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\265\265\265;;=::<;;=\207::<\2GGI\363\363\363\364\377\377\377\7\377\376" \ - "\377\377\377\375\304\341\236\215\305>\215\307\77\214\306>\214\305@\231" \ - "\214\306>\7\304\343\237\377\377\377\375\376\377\377\377\375\341\360\321" \ - "\215\306A\214\305@\233\214\306>\6\252\324n\376\376\376\377\377\377\376" \ - "\377\377\377\376\377\252\324p\230\214\306>\7\215\306A\212\307>\214\306" \ - ">\212\307>\214\306>\343\361\320\376\377\377\202\377\377\377\7\305\342" \ - "\237\215\305>\213\310\77\214\306>\214\305@\212\306@\215\307\77\222\214" \ - "\306>\6\215\305>\212\307>\214\306>\215\307=\215\305@\305\342\237\210" \ - "\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377\377\377" \ - "\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241\321a" \ - "\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@\214\306" \ - ">\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77" \ - "\214\306>\242\322b\370\373\362\376\376\377\377\375\376\336\377\377\377" \ - "\1kkm\202::<\1;;=\205::<\202;;=\3\233\233\235\377\377\377\376\376\376" \ - "\377\377\377\377\274\377\377\377\3SSU99;;;=\20299;\1;;=\203::<\3;;=:" \ - ":<\234\234\236\366\377\377\377\7\376\377\375\305\342\240\213\304\77\213" \ - "\310\77\214\305@\215\306A\216\306=\230\214\306>\10\305\342\240\377\377" \ - "\375\376\377\377\377\376\377\341\360\317\214\306<\214\305@\212\306@\231" \ - "\214\306>\7\215\305@\252\324p\377\377\377\377\377\375\376\377\377\377" \ - "\376\374\252\324p\230\214\306>\7\212\307>\215\307\77\216\306A\212\307" \ - ">\213\304\77\343\361\320\377\377\375\202\377\377\377\3\307\342\237\214" \ - "\304\77\213\310\77\203\214\306>\1\215\307\77\220\214\306>\4\214\305@" \ - "\214\306<\215\304B\213\310\77\202\212\307>\2\215\305@\305\342\240\210" \ - "\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374" \ - "\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215" \ - "\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D" \ - "\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77" \ - "\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\331" \ - "\377\377\377\1\376\376\376\203\377\377\377\4\376\376\376\317\317\321" \ - "::<;;=\203::<\3;;=::<;;=\202::<\4FFH\363\363\363\377\377\377\376\376" \ - "\376\377\377\377\377\264\377\377\377\1\376\376\376\205\377\377\377\1" \ - "\265\265\267\202;;=\3::<99;;;=\202::<\202;;=\2::\231\214\306>\2\305\342\240\377\377\377\202\377\376\377\3\341" \ - "\362\316\216\306\77\214\306<\231\214\306>\3\215\305@\212\307>\252\324" \ - "p\203\377\377\377\2\377\376\377\247\324o\230\214\306>\20\215\306A\214" \ - "\305B\215\307\77\211\305\77\214\304;\342\362\315\377\377\377\377\376" \ - "\377\376\376\376\305\342\237\215\306A\210\307;\215\306A\216\306A\214" \ - "\306>\212\306@\220\214\306>\202\214\305@\6\216\305C\213\305=\214\305" \ - "B\215\307\77\216\306\77\303\344\237\211\377\377\377\37\376\377\377\376" \ - "\377\375\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377" \ - "\370\373\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<" \ - "\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215" \ - "\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376" \ - "\377\377\376\376\376\376\377\377\331\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\203\377\377\377\1kkm\202::<\6;;=::<;;=::<;;=::<\202" \ - ";;=\1\233\233\235\377\377\377\377\267\377\377\377\1\376\376\376\204\377" \ - "\377\377\2kkm;;=\202::<\2;;=::<\202;;=\203::<\5\265\265\267\377\377\377" \ - "\376\376\376\377\377\377\376\376\376\362\377\377\377\2\376\377\377\377" \ - "\376\377\202\377\377\377\202\377\376\377\2\377\377\377\377\377\375\231" \ - "\377\377\377\4\377\376\377\376\377\377\375\377\376\377\377\377\202\376" \ - "\377\377\231\377\377\377\10\374\377\375\377\376\377\377\377\375\376\376" \ - "\376\377\377\377\376\377\377\376\376\374\377\376\377\230\377\377\377" \ - "\1\377\376\377\203\377\377\375\4\376\377\377\377\375\377\377\377\377" \ - "\376\377\377\202\377\377\377\3\376\376\376\377\376\377\377\377\375\202" \ - "\376\377\377\1\377\377\375\220\377\377\377\10\377\377\375\377\377\377" \ - "\376\376\376\377\377\377\377\377\375\377\377\377\376\377\377\377\375" \ - "\377\210\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377" \ - "\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305" \ - "@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212" \ - "\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373" \ - "\362\377\377\377\202\377\376\377\1\377\377\375\340\377\377\377\1\316" \ - "\316\316\203::<\3;;=99;;;=\204::<\2FFH\363\363\363\202\377\377\377\1" \ - "\376\376\376\377\377\377\377\264\377\377\377\1\376\376\376\202\377\377" \ - "\377\1\316\316\320\206::<\1;;=\203::<\2SSU\376\376\376\366\377\377\377" \ - "\1\377\377\375\202\377\376\377\202\377\377\377\3\377\377\375\377\377" \ - "\377\376\377\377\230\377\377\377\202\376\377\377\6\377\377\375\377\377" \ - "\377\376\377\375\377\377\377\376\377\375\377\377\375\231\377\377\377" \ - "\2\376\377\377\377\377\375\202\377\377\377\1\376\376\376\232\377\377" \ - "\377\5\377\376\377\377\377\377\376\377\375\377\377\377\377\377\375\204" \ - "\377\377\377\202\376\377\377\1\376\376\376\202\377\377\377\202\376\377" \ - "\377\220\377\377\377\1\377\377\375\202\377\377\377\4\376\376\374\377" \ - "\376\377\377\377\377\376\377\375\212\377\377\377\1\375\377\376\202\377" \ - "\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212" \ - "\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<" \ - "\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244" \ - "\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377" \ - "\377\375\377\376\377\334\377\377\377\1\376\376\376\202\377\377\377\10" \ - "\376\376\376kkm::<;;=99;;;=::<;;=\202::<\202;;=\1\234\234\236\203\377" \ - "\377\377\1\376\376\376\377\377\377\377\262\377\377\377\5\376\376\376" \ - "\377\377\377\376\376\376\377\377\377lln\210::<\3""99;;;=\265\265\265" \ - "\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\370\377" \ - "\377\377\1\376\377\377\230\377\377\377\7\377\376\377\377\377\375\377" \ - "\376\377\376\376\377\377\377\375\377\377\377\377\377\375\233\377\377" \ - "\377\1\377\376\377\203\377\377\377\1\376\377\375\231\377\377\377\5\377" \ - "\377\375\377\377\377\377\377\375\377\377\377\377\377\375\202\377\377" \ - "\377\1\377\377\375\203\377\377\377\2\376\376\376\377\376\377\226\377" \ - "\377\377\5\377\377\375\377\377\377\376\377\377\377\377\375\376\377\377" \ - "\210\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \ - "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \ - "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \ - ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \ - "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\333\377\377" \ - "\377\1\376\376\376\202\377\377\377\3\376\376\376\377\377\377\316\316" \ - "\320\203::<\1;;=\202::<\1;;=\203::<\2FFH\377\377\377\202\376\376\376" \ - "\377\377\377\377\262\377\377\377\5\376\376\376\377\377\377\376\376\376" \ - "\377\377\377\332\332\332\206::<\1;;=\202::<\5;;=FFH\363\363\363\377\377" \ - "\377\376\376\376\203\377\377\377\1\376\376\376\365\377\377\377\1\377" \ - "\377\375\202\377\377\377\1\377\377\375\230\377\377\377\2\376\377\377" \ - "\377\377\375\204\377\377\377\2\377\376\377\376\377\375\230\377\377\377" \ - "\4\377\377\375\377\377\377\377\377\373\376\377\377\203\377\377\377\1" \ - "\377\376\377\230\377\377\377\13\376\377\377\377\377\375\377\377\377\376" \ - "\377\377\377\375\376\377\377\377\377\377\375\376\377\377\377\376\377" \ - "\377\377\377\376\376\376\202\377\377\377\1\377\377\375\226\377\377\377" \ - "\202\376\377\377\2\377\377\375\377\376\377\210\377\377\377\1\377\377" \ - "\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213" \ - "\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307" \ - "=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244" \ - "\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377" \ - "\377\377\202\377\376\377\333\377\377\377\1\376\376\376\204\377\377\377" \ - "\11\376\376\376\377\377\377kkm::<;;=99;;;=::<;;=\202::<\3;;=::<\264\264" \ - "\264\377\377\377\377\265\377\377\377\1\376\376\376\202\377\377\377\1" \ - "\204\204\204\203::<\1;;=\206::<\1\235\235\237\377\377\377\377\377\377" \ - "\377\377\203\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377" \ - "\375\377\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377" \ - "\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305" \ - "@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214" \ - "\306>\215\307\77\214\305@\244\317c\367\375\361\352\377\377\377\1\316" \ - "\316\316\203::<\1;;=\203::<\202;;=\2::\215\305>\215" \ - "\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215\306" \ - "A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376\376" \ - "\377\377\375\376\352\377\377\377\2kkm;;=\207::<\3;;=::<\301\301\301\377" \ - "\377\377\377\266\377\377\377\2\221\221\221;;=\202::<\202;;=\202::<\1" \ - ";;=\202::<\1\235\235\237\377\377\377\377\377\377\377\377\203\377\377" \ - "\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377\377" \ - "\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307\77" \ - "\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216\306" \ - "\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215\305" \ - "@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\350\377\377" \ - "\377\4\376\376\376\377\377\377\265\265\26799;\203::<\3;;=::<;;=\203:" \ - ":<\2kkk\376\376\376\377\377\377\377\264\377\377\377\2\362\362\362FFH" \ - "\202::<\1;;=\203::<\5;;=::<;;=::<\363\363\363\377\377\377\377\377\377" \ - "\377\377\204\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377" \ - "\376\377\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307" \ - "\77\215\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216" \ - "\306\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306" \ - ">\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \ - "\352\377\377\377\2\376\376\376TTV\204::<\7;;=99;::<;;=99;::<\332\332" \ - "\332\377\377\377\377\263\377\377\377\3\376\376\376\266\266\266;;=\203" \ - "::<\202;;=\204::<\1\205\205\207\377\377\377\377\377\377\377\377\204\377" \ - "\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202\377" \ - "\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305>" \ - "\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212\310" \ - "\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377" \ - "\377\202\377\376\377\1\377\377\375\354\377\377\377\2\265\265\267::<\202" \ - ";;=\205::<\4;;=::<\204\204\204\376\376\376\377\377\377\377\263\377\377" \ - "\377\1SSU\202::<\1;;=\206::<\2;;=\346\346\346\377\377\377\377\377\377" \ - "\377\377\205\377\377\377\1\375\377\376\202\377\377\375\34\377\377\377" \ - "\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214\306" \ - ">\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77\213" \ - "\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362\377" \ - "\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376\377" \ - "\354\377\377\377\4FFH;;=99;;;=\203::<\5;;=99;;;=99;\364\364\364\377\377" \ - "\377\377\262\377\377\377\1\316\316\316\202;;=\1""99;\203::<\1;;=\203" \ - "::<\1xxz\377\377\377\377\377\377\377\377\205\377\377\377\3\377\376\377" \ - "\377\377\377\375\377\376\202\377\377\377\11\373\373\363\241\321d\214" \ - "\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202\215\307" \ - "=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307\77\215\307" \ - "=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376\202\377\377" \ - "\375\2\374\377\377\377\376\377\354\377\377\377\1\235\235\237\204::<\1" \ - "<<>\202::<\4;;=::<;;=\247\247\251\377\377\377\377\262\377\377\377\4\204" \ - "\204\204;;=::<;;=\206::<\2;;=\316\316\316\377\377\377\377\377\377\377" \ - "\377\205\377\377\377\1\377\377\375\202\377\377\377\32\377\376\377\370" \ - "\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215\305@\214" \ - "\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@" \ - "\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375" \ - "\376\377\377\375\376\377\377\377\377\377\202\377\376\377\355\377\377" \ - "\377\1\363\363\363\212::<\1TTV\377\377\377\377\261\377\377\377\5\347" \ - "\347\351::<;;=::<;;=\204::<\3;;=::\6\212\307>\214\306>\215\307\77\214\305" \ - "@\244\317c\367\375\361\361\377\377\377\1\376\376\376\204\377\377\377" \ - "\1\204\204\204\202;;=\203::<\1;;=\202::<\202;;=\1\302\302\302\203\377" \ - "\377\377\1\376\376\376\377\377\377\377\244\377\377\377\1\376\376\376" \ - "\203\377\377\377\1\376\376\376\203\377\377\377\1\234\234\236\202::<\1" \ - ";;=\204::<\6;;=::<;;=\264\264\264\377\377\377\376\376\376\377\377\377" \ - "\377\373\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377" \ - "\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241" \ - "\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@" \ - "\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \ - "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\365\377" \ - "\377\377\1\332\332\332\202::<\1;;=\202::<\6""99;::<;;=99;;;=xxx\205\377" \ - "\377\377\1\376\376\376\377\377\377\377\243\377\377\377\1\376\376\376" \ - "\206\377\377\377\4SSU;;=::<;;=\202::<\1;;=\203::<\3GGI\362\362\362\376" \ - "\376\376\377\377\377\377\374\377\377\377\7\377\377\375\375\376\377\376" \ - "\377\377\376\377\375\377\374\377\377\377\375\375\377\376\202\377\377" \ - "\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>\202\214\305" \ - "@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307\77\214\306" \ - ">\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362\377\377" \ - "\373\377\376\377\377\377\375\364\377\377\377\3\376\376\376\377\377\377" \ - "__a\203::<\202;;=\6::<99;;;=::<;;=\345\345\345\203\377\377\377\1\376" \ - "\376\376\377\377\377\377\245\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\202\377\377\377\2\316\316\316::<\202;;=\205::<\202;;=\1\203" \ - "\203\205\204\377\377\377\1\376\376\376\377\377\377\377\372\377\377\377" \ - "\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377\375\377\377" \ - "\377\377\376\377\370\373\362\241\321a\215\307\77\215\307=\214\305@\214" \ - "\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307" \ - ">\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364" \ - "\377\377\377\376\377\377\376\376\376\376\377\377\362\377\377\377\202" \ - "\376\376\376\3\377\377\377\376\376\376\265\265\267\202::<\1;;=\207::" \ - "<\3\251\251\253\377\377\377\376\376\376\203\377\377\377\1\376\376\376" \ - "\377\377\377\377\247\377\377\377\2\376\376\376\204\204\206\207::<\1;" \ - ";=\202::<\3\346\346\346\377\377\377\376\376\376\377\377\377\377\374\377" \ - "\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202\377" \ - "\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305>" \ - "\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212\310" \ - "\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377" \ - "\377\202\377\376\377\1\377\377\375\364\377\377\377\17\376\376\376\377" \ - "\377\377\376\376\376\377\377\377FFH;;=99;::<;;=::<;;=99;;;=::\214" \ - "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \ - "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \ - "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \ - "\377\361\377\377\377\202\376\376\376\2\377\377\377\376\376\376\202\377" \ - "\377\377\1\221\221\221\205::<\202;;=\5::<;;=99;\316\316\320\376\376\376" \ - "\377\377\377\377\250\377\377\377\1\376\376\376\202\377\377\377\4\266" \ - "\266\270::<99;;;=\203::<\1;;=\203::<\1\265\265\265\377\377\377\377\377" \ - "\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11" \ - "\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212" \ - "\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217" \ - "\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377" \ - "\376\376\376\202\377\377\375\2\374\377\377\377\376\377\360\377\377\377" \ - "\1\376\376\376\202\377\377\377\202\376\376\376\202\377\377\377\6\346" \ - "\346\346;;=99;::<99;;;=\204::<\2;;=\204\204\206\202\377\377\377\1\376" \ - "\376\376\377\377\377\377\251\377\377\377\1__a\203::<\3;;=::<;;=\203:" \ - ":<\4FFF\363\363\363\377\377\377\376\376\376\377\377\377\377\375\377\377" \ - "\377\1\377\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322" \ - "b\214\306>\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212" \ - "\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>" \ - "\212\307<\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376" \ - "\377\377\377\377\377\202\377\376\377\371\377\377\377\4^^`;;=::<;;=\202" \ - "::<\5;;=::<;;=::\6\212\307>\214\306" \ - ">\215\307\77\214\305@\244\317c\367\375\361\377\377\377\377\202\377\377" \ - "\377\3\265\265\267::<;;=\204::<\1;;=\202::<\2;;=\265\265\265\202\377" \ - "\377\377\1\376\376\376\377\377\377\377\246\377\377\377\2\376\376\376" \ - "\234\234\234\202;;=\203::<\1;;=\202::<\3""99;::<\332\332\332\377\377" \ - "\377\377\370\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377" \ - "\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366" \ - "\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306" \ - "@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \ - "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\377\377" \ - "\377\377\5\377\377\377\363\363\365;;=::<;;=\202::<\3;;=::<;;=\202::<" \ - "\3xxz\377\377\377\376\376\376\377\377\377\377\246\377\377\377\3\376\376" \ - "\376\377\377\377SSS\202::<\1;;=\202::<\1;;=\202::<\6;;=SSU\377\377\377" \ - "\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376\377" \ - "\377\377\377\362\377\377\377\7\377\377\375\375\376\377\376\377\377\376" \ - "\377\375\377\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373" \ - "\366\240\320b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212" \ - "\306@\214\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306" \ - ">\215\307\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377" \ - "\377\375\377\377\377\377\11\377\377\377\376\376\376\204\204\206;;=::" \ - "<99;;;=::<;;=\204::<\3\362\362\362\377\377\377\376\376\376\377\377\377" \ - "\377\246\377\377\377\1\333\333\333\203::<\202;;=\202::<\5<<>99;::<\250" \ - "\250\252\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377\365" \ - "\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377" \ - "\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215\307" \ - "=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215" \ - "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \ - "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\377\377" \ - "\377\377\202\377\377\377\1\301\301\301\202::<\1;;=\203::<\1;;=\203::" \ - "<\1\266\266\270\377\377\377\377\250\377\377\377\2\220\220\220;;=\204" \ - "::<\6;;=::<99;;;=::<\346\346\346\205\377\377\377\1\376\376\376\377\377" \ - "\377\377\363\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376" \ - "\377\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214" \ - "\305@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>" \ - "\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370" \ - "\373\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377\377\204" \ - "\377\377\377\2TTV99;\202::<\1;;=\202::<\6;;=::<;;=__a\377\377\377\376" \ - "\376\376\377\377\377\377\244\377\377\377\3\376\376\376\377\377\377TT" \ - "V\207::<\3;;=99;```\377\377\377\377\373\377\377\377\1\375\377\376\202" \ - "\377\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307" \ - "B\212\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214" \ - "\306<\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307" \ - ">\244\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377" \ - "\377\377\375\377\376\377\377\377\377\377\203\377\377\377\3\221\221\221" \ - "::<;;=\202::<\202;;=\203::<\2;;=\345\345\347\377\377\377\377\246\377" \ - "\377\377\4\332\332\332;;=::<;;=\203::<\1;;=\203::<\1\265\265\265\203" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\364" \ - "\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11" \ - "\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212" \ - "\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217" \ - "\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377" \ - "\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377\377" \ - "\202\377\377\377\5\376\376\376\332\332\332;;=::<;;=\202::<\6;;=::<;;" \ - "=99;::<\250\250\252\377\377\377\377\244\377\377\377\6\376\376\376\377" \ - "\377\377\221\221\223::<;;=99;\202::<\3;;=::<;;=\202::<\1\363\363\363" \ - "\377\377\377\377\372\377\377\377\1\377\377\375\202\377\377\377\32\377" \ - "\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215" \ - "\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A" \ - "\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377" \ - "\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377\377" \ - "\377\377\377\204\377\377\377\2\376\376\376SSU\204::<\204;;=\2::<__a\377" \ - "\377\377\377\243\377\377\377\6\376\376\376\377\377\377\376\376\376TT" \ - "V99;;;=\204::<\4;;=99;<<>xxz\377\377\377\377\364\377\377\377\10\376\376" \ - "\377\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377\377" \ - "\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307B" \ - "\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306" \ - "<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244" \ - "\317c\367\375\361\377\377\377\377\213\377\377\377\5\376\376\376\377\377" \ - "\377\221\221\223::<;;=\204::<\5;;=::<;;=::<\363\363\363\204\377\377\377" \ - "\1\376\376\376\202\377\377\377\202\376\376\376\377\377\377\377\233\377" \ - "\377\377\5\332\332\332::<;;=99;<<>\202::<\1;;=\203::<\1\265\265\267\377" \ - "\377\377\377\363\377\377\377\6\376\376\377\377\376\377\375\376\377\376" \ - "\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373" \ - "\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212" \ - "\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306" \ - ">\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\377" \ - "\377\377\377\213\377\377\377\2\375\375\375\333\333\333\202::<\1;;=\202" \ - "::<\1;;=\202::<\3""99;::<\265\265\265\206\377\377\377\3\376\376\376\377" \ - "\377\377\376\376\376\377\377\377\377\233\377\377\377\2\235\235\23599" \ - ";\202;;=\1""99;\202;;=\202::<\3;;=::<\363\363\365\377\377\377\377\363" \ - "\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374" \ - "\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215" \ - "\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D" \ - "\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77" \ - "\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\377" \ - "\377\377\377\214\377\377\377\2\376\376\376SSU\207::<\3;;=::\212\307<\214\306>\214\306<\214\306>\216\306" \ - "\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>" \ - "\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \ - "\377\377\377\377\212\377\377\377\4\376\376\376\377\377\377\376\376\376" \ - "\222\222\222\205::<\1;;=\20299;\202::<\3\363\363\363\377\377\377\376" \ - "\376\376\377\377\377\377\240\377\377\377\1\346\346\346\202::<\1;;=\204" \ - "::<\1;;=\202::<\1\250\250\252\202\377\377\377\1\376\376\376\377\377\377" \ - "\377\361\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377" \ - "\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305" \ - "@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212" \ - "\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373" \ - "\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377\377\212\377" \ - "\377\377\1\376\376\376\203\377\377\377\2\332\332\332<<>\203::<\3;;=:" \ - ":<<<>\203::<\2\301\301\303\376\376\376\202\377\377\377\5\376\376\376" \ - "\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377\377\231" \ - "\377\377\377\4\376\376\376\251\251\253::<;;=\204::<\5;;=::<99;::<\346" \ - "\346\346\377\377\377\377\365\377\377\377\1\375\377\376\202\377\377\375" \ - "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \ - "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \ - "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \ - "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \ - "\377\376\377\377\377\377\377\212\377\377\377\1\376\376\376\203\377\377" \ - "\377\1SSS\207::<\3;;=::<\205\205\207\205\377\377\377\1\376\376\376\377" \ - "\377\377\377\234\377\377\377\3wwy::<;;=\206::<\2;;=__a\377\377\377\377" \ - "\365\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \ - "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \ - "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \ - ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \ - "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \ - "\377\211\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\204" \ - "\204\204::<\202;;=\1::<\202;;=\203::<\1SSU\204\377\377\377\1\376\376" \ - "\376\377\377\377\377\235\377\377\377\1;;=\203::<\1;;=\202::<\1;;=\202" \ - "::<\1\234\234\234\202\377\377\377\1\376\376\376\377\377\377\377\362\377" \ - "\377\377\1\377\377\375\202\377\377\377\32\377\376\377\370\373\364\243" \ - "\322b\214\306>\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305" \ - "B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214" \ - "\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376\377\377\375" \ - "\376\377\377\377\377\377\202\377\376\377\377\377\377\377\212\377\377" \ - "\377\1\376\376\376\204\377\377\377\6\301\301\301;;=::<;;=::<;;=\205:" \ - ":<\1\333\333\333\202\377\377\377\1\376\376\376\377\377\377\377\231\377" \ - "\377\377\1\376\376\376\203\377\377\377\1\301\301\303\204::<\1;;=\202" \ - "::<\1:9>\202::<\1\332\332\332\377\377\377\377\356\377\377\377\10\376" \ - "\376\377\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377" \ - "\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307" \ - "B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306" \ - "<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244" \ - "\317c\367\375\361\377\377\377\377\230\377\377\377\2""99;;;=\210::<\1" \ - "\250\250\250\377\377\377\377\240\377\377\377\3\221\221\223::<;;=\207" \ - "::<\2SSU\376\376\376\377\377\377\377\355\377\377\377\6\376\376\377\377" \ - "\376\377\375\376\377\376\377\377\377\377\375\375\377\376\203\377\377" \ - "\377\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215" \ - "\305>\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305" \ - ">\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362" \ - "\376\376\377\377\375\376\377\377\377\377\227\377\377\377\1yy{\211::<" \ - "\6lll\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377" \ - "\377\377\377\224\377\377\377\202\376\376\376\7\377\377\377\376\376\376" \ - "\377\377\377\376\376\376\377\377\377__a;;=\202::<\4<<>;;=::<;;=\202:" \ - ":<\1\204\204\206\203\377\377\377\1\376\376\376\377\377\377\377\352\377" \ - "\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377" \ - "\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307" \ - "\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216" \ - "\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215" \ - "\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\377\377" \ - "\377\377\221\377\377\377\3\376\376\376\377\377\377\376\376\376\203\377" \ - "\377\377\1\265\265\267\212::<\1\363\363\363\377\377\377\377\227\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1\345" \ - "\345\345\202::<\202;;=\1""99;\203::<\4;;=::<\301\301\301\376\376\376" \ - "\203\377\377\377\1\376\376\376\377\377\377\377\352\377\377\377\37\376" \ - "\377\377\376\377\375\377\375\376\375\377\376\377\377\375\377\377\377" \ - "\377\376\377\370\373\362\241\321a\215\307\77\215\307=\214\305@\214\306" \ - ">\212\307<\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307>\213" \ - "\307A\215\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364\377" \ - "\377\377\376\377\377\376\376\376\376\377\377\377\377\377\377\222\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\1\347" \ - "\347\347\212::<\1\302\302\304\205\377\377\377\1\376\376\376\377\377\377" \ - "\377\222\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202" \ - "\377\377\377\5\265\265\265::<;;=99;;;=\203::<\1;;=\202::<\1\363\363\363" \ - "\377\377\377\377\356\377\377\377\202\377\377\375\3\377\374\377\375\377" \ - "\376\376\377\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212" \ - "\306@\214\305@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B" \ - "\214\306>\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242" \ - "\322b\370\373\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377" \ - "\377\230\377\377\377\2\376\376\376TTT\211::<\3\221\221\223\377\377\377" \ - "\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377\231\377\377" \ - "\377\2\204\204\204::<\202;;=\202::<\1;;=\203::<\2``b\376\376\376\377" \ - "\377\377\377\357\377\377\377\1\375\377\376\202\377\377\375\34\377\377" \ - "\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214" \ - "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \ - "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \ - "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \ - "\377\377\377\377\377\225\377\377\377\1\376\376\376\202\377\377\377\1" \ - "\221\221\221\210::<\2;;=__a\202\377\377\377\1\376\376\376\377\377\377" \ - "\377\227\377\377\377\1\376\376\376\203\377\377\377\1SSU\202::<\1;;=\204" \ - "::<\202;;=\1\234\234\234\204\377\377\377\1\376\376\376\377\377\377\377" \ - "\352\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \ - "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \ - "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \ - ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \ - "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \ - "\377\222\377\377\377\1\376\376\376\205\377\377\377\1\301\301\301\210" \ - "::<\4""99;;;=\364\364\366\376\376\376\377\377\377\377\233\377\377\377" \ - "\1\346\346\346\207::<\4;;=99;::<\316\316\316\203\377\377\377\1\376\376" \ - "\376\377\377\377\377\353\377\377\377\1\377\377\375\202\377\377\377\32" \ - "\377\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305" \ - ">\215\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215" \ - "\306A\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377" \ - "\377\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377" \ - "\377\377\377\377\224\377\377\377\1\376\376\376\204\377\377\377\1\363" \ - "\363\363\210::<\3;;=::<\302\302\304\377\377\377\377\231\377\377\377\1" \ - "\376\376\376\202\377\377\377\1\266\266\270\203::<\203;;=\203::<\1:::" \ - "\377\377\377\377\351\377\377\377\10\376\376\377\377\377\375\377\377\377" \ - "\377\377\375\377\377\377\377\376\377\377\377\375\376\377\377\202\377" \ - "\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202" \ - "\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212" \ - "\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\377\377\377\377" \ - "\242\377\377\377\3__a::<;;=\207::<\1\221\221\221\377\377\377\377\234" \ - "\377\377\377\1\204\204\206\204::<\202;;=\203::<\1lll\203\377\377\377" \ - "\1\375\375\375\377\377\377\377\344\377\377\377\6\376\376\377\377\376" \ - "\377\375\376\377\376\377\377\377\377\375\375\377\376\203\377\377\377" \ - "\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215\305" \ - ">\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215" \ - "\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376" \ - "\376\377\377\375\376\377\377\377\377\241\377\377\377\2\221\221\223;;" \ - "=\202::<\202;;=\203::<\2;;=^^^\204\377\377\377\1\376\376\376\377\377" \ - "\377\377\224\377\377\377\1\376\376\376\202\377\377\377\1``b\202::<\1" \ - ";;=\206::<\1\234\234\234\205\377\377\377\1\376\376\376\377\377\377\377" \ - "\342\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377" \ - "\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320" \ - "b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214" \ - "\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307" \ - "\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375" \ - "\377\377\377\377\241\377\377\377\6\301\301\303::<;;=::<99;;;=\203::<" \ - "\6;;=:::\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\377\224\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363;;=\211" \ - "::<\1\316\316\316\203\377\377\377\1\376\376\376\202\377\377\377\1\376" \ - "\376\376\377\377\377\377\342\377\377\377\37\376\377\377\376\377\375\377" \ - "\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373\362" \ - "\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306>\214" \ - "\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212\307" \ - ">\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377\376" \ - "\376\376\376\377\377\377\377\377\377\241\377\377\377\1\363\363\365\202" \ - "::<\1;;=\202::<\2""99;;;=\202::<\2;;=\316\316\316\377\377\377\377\231" \ - "\377\377\377\10\376\376\376\316\316\316::<;;=::<;;=99;;;=\204::<\202" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\344" \ - "\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202" \ - "\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305" \ - ">\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212" \ - "\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377" \ - "\377\377\202\377\376\377\1\377\377\375\377\377\377\377\243\377\377\377" \ - "\1``b\203::<\203;;=\6::<<<>::<\234\234\234\377\377\377\376\376\376\377" \ - "\377\377\377\230\377\377\377\1\234\234\236\204::<\12;;=99;::<;;=::\214\306>\212\307>\214" \ - "\305@\217\304>\212\307<\214\306<\214\306>\215\307\77\213\307A\214\306" \ - ">\215\305@\215\307\77\212\307>\244\317c\370\373\362\377\377\373\376\377" \ - "\377\377\376\377\375\376\377\377\377\375\377\376\377\377\377\377\377" \ - "\242\377\377\377\2\222\222\222::<\202;;=\7""99;::<;;=::<99;;;=lln\202" \ - "\377\377\377\1\376\376\376\377\377\377\377\225\377\377\377\3\376\376" \ - "\376\377\377\377jjl\204;;=\2""99;;;=\202::<\2;;=\221\221\223\202\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377" \ - "\343\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \ - "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \ - "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \ - ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \ - "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \ - "\377\242\377\377\377\2\264\264\264;;=\206::<\6;;=::\213\310\77\214\305@\215\305>\215\305@\214\306" \ - ">\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212" \ - "\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376" \ - "\377\377\375\376\377\377\377\377\377\202\377\376\377\377\377\377\377" \ - "\243\377\377\377\2\346\346\346;;=\211::<\1\346\346\350\377\377\377\377" \ - "\230\377\377\377\3\346\346\350::<;;=\202::<\1;;=\205::<\1\346\346\346" \ - "\302\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376" \ - "\376\376\377\377\377\377\233\377\377\377\10\376\376\377\377\377\375\377" \ - "\377\377\377\377\375\377\377\377\377\376\377\377\377\375\376\377\377" \ - "\202\377\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214" \ - "\306<\202\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306" \ - ">\6\212\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\345\377" \ - "\377\377\1\376\376\376\305\377\377\377\3FFF::<;;=\202::<\3;;=::<;;=\202" \ - "::<\1\301\301\303\377\377\377\377\230\377\377\377\4\301\301\30399;::" \ - "<;;=\204::<\3;;=::\215\305>\215\305@\213\310=\212\306@\214\306>" \ - "\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77\214" \ - "\306>\242\322b\370\373\362\376\376\377\377\375\376\341\377\377\377\5" \ - "\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\265\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\212\377\377\377\3\376" \ - "\376\376\377\377\377lll\206::<\202;;=\2::<\234\234\236\377\377\377\377" \ - "\224\377\377\377\1\376\376\376\203\377\377\377\2\233\233\235;;=\203:" \ - ":<\2""99;;;=\202::<\2;;=xxz\213\377\377\377\1\376\376\376\265\377\377" \ - "\377\1\376\376\376\377\377\377\377\240\377\377\377\7\377\377\375\375" \ - "\376\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377\376" \ - "\202\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>" \ - "\202\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307" \ - "\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \ - "\377\377\373\377\376\377\377\377\375\377\377\377\377\233\377\377\377" \ - "\3\376\376\376\377\377\377\376\376\376\213\377\377\377\6\376\376\376" \ - "\377\377\377\233\233\233;;=::<;;=\206::<\1lln\377\377\377\377\226\377" \ - "\377\377\3\376\376\376\377\377\377kkm\210::<\2;;=\234\234\236\214\377" \ - "\377\377\1\315\315\315\202\234\234\234\262\234\234\236\2\234\234\234" \ - "\265\265\265\377\377\377\377\240\377\377\377\37\376\377\377\376\377\375" \ - "\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373" \ - "\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306" \ - ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \ - "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \ - "\376\376\376\376\377\377\344\377\377\377\4\376\376\376\347\347\347\234" \ - "\234\234\235\235\235\260\234\234\236\204\234\234\234\216\377\377\377" \ - "\1\301\301\301\202::<\1;;=\203::<\202;;=\2::\212\307>\212\306@\214\305B" \ - "\214\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214" \ - "\306>\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377" \ - "\377\375\346\377\377\377\2\316\316\316:::\263::<\4;;=:::\377\377\377" \ - "\376\376\376\214\377\377\377\3\346\346\346::<;;=\205::<\4;;=::<;;=\346" \ - "\346\346\377\377\377\377\226\377\377\377\2\362\362\362;;=\204::<\3""9" \ - "9;::<;;=\202::<\1\346\346\350\214\377\377\377\2\234\234\234;;=\264::" \ - "<\1kkm\377\377\377\377\240\377\377\377\1\375\377\376\202\377\377\375" \ - "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \ - "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \ - "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \ - "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \ - "\377\376\377\345\377\377\377\2\316\316\31699;\265::<\216\377\377\377" \ - "\2\376\376\376FFH\203::<\1;;=\203::<\3;;=99;\316\316\316\377\377\377" \ - "\377\226\377\377\377\1\317\317\317\206::<\202;;=\4""99;FFH\377\377\377" \ - "\376\376\376\213\377\377\377\1\234\234\236\202::<\1;;=\261::<\2;;=kk" \ - "m\205\377\377\377\1\376\376\376\377\377\377\377\231\377\377\377\3\377" \ - "\376\377\377\377\377\375\377\376\202\377\377\377\11\373\373\363\241\321" \ - "d\214\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202" \ - "\215\307=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307\77" \ - "\215\307=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376\202" \ - "\377\377\375\2\374\377\377\377\376\377\345\377\377\377\1\316\316\316" \ - "\264::<\202;;=\215\377\377\377\4\376\376\376\377\377\377lln99;\210::" \ - "<\2\234\234\234\376\376\376\377\377\377\377\225\377\377\377\5\234\234" \ - "\234::<;;=99;::<\202;;=\5::<;;=::\261::<\1kkm\377\377\377\377\237\377\377\377\1\377" \ - "\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306" \ - ">\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215" \ - "\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<" \ - "\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377" \ - "\377\377\377\202\377\376\377\346\377\377\377\1\316\316\316\266::<\217" \ - "\377\377\377\2\234\234\236;;=\206::<\3""99;;;=www\377\377\377\377\226" \ - "\377\377\377\3\204\204\206::<;;=\207::<\3\222\222\222\377\377\377\376" \ - "\376\376\213\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\210" \ - "\377\377\377\7\376\376\376\377\377\377\377\377\375\376\377\375\376\377" \ - "\377\377\377\377\377\376\377\203\377\377\377\1\376\376\376\203\377\377" \ - "\377\1\376\377\377\203\377\377\377\16\377\377\375\377\377\377\377\376" \ - "\377\377\377\377\377\377\373\376\377\377\377\377\377\377\377\373\371" \ - "\372\364\242\322d\214\306<\215\307\77\214\305@\214\306<\202\215\305@" \ - "\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214" \ - "\306>\215\307\77\214\305@\244\317c\367\375\361\356\377\377\377\1\316" \ - "\316\316\266::<\214\377\377\377\1\376\376\376\202\377\377\377\1\266\266" \ - "\266\202::<\1;;=\203::<\1;;=\202::<\3__a\377\377\377\376\376\376\377" \ - "\377\377\377\224\377\377\377\2kkm;;=\202::<\202;;=\202::<\3;;=::<\265" \ - "\265\265\215\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\214" \ - "\377\377\377\2\376\377\377\376\377\375\202\377\377\375\203\377\377\377" \ - "\204\377\377\375\205\377\377\377\1\376\376\377\202\377\377\377\6\377" \ - "\377\375\377\377\377\371\372\362\242\320c\214\305@\215\305@\202\214\306" \ - ">\20\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305" \ - ">\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362" \ - "\376\376\377\377\375\376\355\377\377\377\1\316\316\316\266::<\215\377" \ - "\377\377\4\376\376\376\377\377\377\315\315\315;;=\203::<\1;;=\203::<" \ - "\2;;=99;\377\377\377\377\226\377\377\377\203::<\1;;=\202::<\1;;=\203" \ - "::<\2\317\317\317\376\376\376\214\377\377\377\1\234\234\236\265::<\1" \ - "kkm\377\377\377\377\211\377\377\377\3\376\376\376\377\376\377\377\377" \ - "\377\203\377\376\377\204\377\377\377\1\376\376\376\202\377\377\377\1" \ - "\377\376\377\203\377\377\377\1\376\376\376\203\377\377\377\31\376\376" \ - "\377\377\376\377\371\372\365\241\322e\212\307<\216\306\77\212\311<\216" \ - "\303\77\212\307>\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307" \ - "\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \ - "\377\377\373\377\376\377\377\377\375\355\377\377\377\1\316\316\316\266" \ - "::<\220\377\377\377\202::<\4;;=::<;;=::<\202;;=\3""99;;;=\346\346\346" \ - "\377\377\377\377\224\377\377\377\2\362\362\362;;=\202::<\7""99;::<;;" \ - "=88:;;=::<;;=\216\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377" \ - "\212\377\377\377\202\376\377\377\202\377\377\377\1\377\376\377\206\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377" \ - "\1\376\376\376\202\377\377\377\6\370\373\364\242\322b\214\306>\214\305" \ - "@\215\305>\214\305@\202\215\306A\20\214\306<\214\306>\216\306\77\215" \ - "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \ - "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\355\377" \ - "\377\377\1\316\316\316\266::<\216\377\377\377\6\376\376\376\377\377\377" \ - "SSU;;=99;;;=\206::<\1\316\316\316\377\377\377\377\224\377\377\377\2\316" \ - "\316\31699;\205::<\1;;=\202::<\1FFH\216\377\377\377\1\234\234\236\265" \ - "::<\1kkm\377\377\377\377\207\377\377\377\202\377\376\377\2\377\377\377" \ - "\377\377\375\203\377\377\377\1\376\377\375\202\377\377\375\203\377\377" \ - "\377\202\377\377\375\2\377\377\377\377\377\375\205\377\377\377\26\377" \ - "\377\375\371\372\362\243\322b\211\305A\215\305>\215\307\77\214\305@\214" \ - "\306>\215\305@\212\307>\214\305@\214\305B\214\306>\212\307>\212\310\77" \ - "\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377\377" \ - "\202\377\376\377\1\377\377\375\356\377\377\377\1\316\316\316\266::<\220" \ - "\377\377\377\3kkm::<;;=\202::<\6;;=::<;;=::<;;=\233\233\233\377\377\377" \ - "\377\223\377\377\377\2\376\376\376\265\265\265\205::<\1;;=\202::<\2""9" \ - "9;lln\216\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377" \ - "\377\377\3\376\377\375\375\377\376\377\377\377\202\377\376\377\3\377" \ - "\376\374\377\377\377\376\377\377\202\377\377\377\1\377\377\375\204\377" \ - "\377\377\2\375\377\376\377\377\375\202\377\377\377\1\377\377\375\202" \ - "\377\377\377\32\376\376\374\365\367\354\223\312K\215\305>\214\306<\211" \ - "\305\77\214\306>\212\307>\215\307\77\214\306>\214\306<\214\306>\215\307" \ - "\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \ - "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \ - "\377\355\377\377\377\1\316\316\316\266::<\217\377\377\377\5\376\376\376" \ - "\234\234\236;;=::<;;=\202::<\2""99;::<\202;;=\1\221\221\221\377\377\377" \ - "\377\224\377\377\377\1\235\235\235\211::<\2\221\221\223\376\376\376\215" \ - "\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377\377\377" \ - "\1\377\376\377\202\377\377\375\202\377\377\377\202\377\377\375\1\377" \ - "\377\377\202\376\377\377\1\377\377\377\202\377\377\375\5\376\376\377" \ - "\377\377\377\377\377\373\377\377\377\376\376\376\203\377\377\377\27\376" \ - "\376\376\377\377\375\376\377\372\347\365\333\225\311K\217\304>\214\305" \ - "B\215\307\77\212\306B\214\306>\215\306A\214\306>\215\305>\214\306>\215" \ - "\305>\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377" \ - "\376\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\355\377" \ - "\377\377\1\316\316\316\266::<\214\377\377\377\1\376\376\376\203\377\377" \ - "\377\3\250\250\252::<;;=\203::<\202;;=\202::<\1kkk\377\377\377\377\224" \ - "\377\377\377\4www;;=::<;;=\202::<\202;;=\202::<\1\234\234\236\216\377" \ - "\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377\377\377\15" \ - "\367\374\365\343\361\316\316\346\254\305\342\240\304\343\240\303\342" \ - "\236\305\342\237\312\346\251\345\356\317\365\373\357\376\377\377\376" \ - "\376\377\377\377\375\214\377\377\377\24\350\365\333\223\312K\216\306" \ - "\77\212\307>\215\304B\214\306>\215\307=\214\306>\215\306A\212\306@\212" \ - "\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376" \ - "\377\377\375\376\377\377\377\377\377\202\377\376\377\356\377\377\377" \ - "\1\316\316\316\266::<\217\377\377\377\2\376\376\376\316\316\320\207:" \ - ":<\3;;=::\10\212\306@\212\307>\232\315W\277\337\224" \ - "\352\364\333\377\377\377\377\376\377\377\377\375\202\376\377\377\202" \ - "\377\377\377\2\377\376\377\377\377\375\202\377\377\377\17\377\377\375" \ - "\377\376\377\347\365\333\226\312L\215\306A\213\310=\212\306@\217\304" \ - ">\216\307<\214\305@\215\305<\214\305@\215\307=\244\317c\366\373\364\377" \ - "\377\377\377\276\377\377\377\6\346\346\346;;=99;;;=::<;;=\205::<\377" \ - "\377\377\377\224\377\377\377\1::<\202;;=\2::<;;=\203::<\4;;=::<\316\316" \ - "\316\376\376\376\377\377\377\377\274\377\377\377\14\377\375\377\377\377" \ - "\377\376\376\374\377\377\375\377\376\377\377\377\375\376\377\377\377" \ - "\377\377\376\377\377\377\376\377\324\353\265\231\316Z\202\214\306<\1" \ - "\215\305>\210\214\306>\202\215\305>\16\214\306>\213\307A\211\306;\233" \ - "\314V\324\353\265\377\377\377\377\376\377\377\377\375\375\377\376\376" \ - "\377\377\377\377\377\377\376\377\376\377\377\377\377\373\202\377\377" \ - "\377\6\376\376\377\350\365\333\222\312K\215\306A\217\304>\212\306@\202" \ - "\214\305@\6\213\310\77\212\307>\242\322d\370\373\364\377\377\377\377" \ - "\377\375\377\377\377\377\276\377\377\377\203::<\3;;=::<99;\202;;=\202" \ - "::<\1\346\346\350\377\377\377\377\222\377\377\377\2\376\376\376;;=\202" \ - "::<\202;;=\205::<\377\377\377\377\275\377\377\377\4\377\377\375\377\377" \ - "\377\377\377\373\377\376\374\202\376\377\377\12\377\377\375\377\377\377" \ - "\376\377\375\342\360\317\232\315V\214\306<\220\306=\215\306A\215\306" \ - "C\215\306A\210\214\306>\202\215\307\77\7\215\306A\214\306>\214\305@\213" \ - "\307A\214\305@\230\315W\341\361\315\203\377\377\377\2\376\376\374\374" \ - "\377\375\202\377\377\377\2\377\377\375\377\376\377\202\377\377\377\13" \ - "\352\364\331\221\311J\215\306A\213\310=\216\306\77\214\305@\214\306<" \ - "\242\322e\370\373\364\376\376\377\377\377\375\377\377\377\377\277\377" \ - "\377\377\1``b\202::<\2;;=99;\202;;=\4::<;;=::<\316\316\320\377\377\377" \ - "\377\222\377\377\377\4\316\316\316;;=::<99;\202::<\2;;=::<\202;;=\3:" \ - ":<\376\376\376\377\377\377\202\376\376\376\377\377\377\377\271\377\377" \ - "\377\17\376\377\377\376\376\374\377\376\374\376\377\377\377\377\377\377" \ - "\377\375\376\377\377\370\373\364\277\336\222\215\305<\214\305@\215\307" \ - "\77\212\307>\215\307\77\213\307A\211\214\306>\16\216\306A\214\305B\213" \ - "\307A\214\306>\215\305<\213\305=\215\306A\214\306<\215\305>\300\337\223" \ - "\370\373\362\376\376\377\377\377\375\376\377\377\204\377\377\377\16\377" \ - "\376\377\376\376\377\376\377\377\352\364\331\222\312K\215\306A\214\306" \ - "<\214\305@\243\321d\371\373\360\376\376\377\376\377\377\377\377\377\376" \ - "\377\377\377\377\377\377\273\377\377\377\4\376\376\376\377\377\377\376" \ - "\376\376lln\203::<\1;;=\20299;\1;;=\202::<\1\266\266\270\377\377\377" \ - "\377\222\377\377\377\5\316\316\316::<;;=::<;;=\205::<\3kkm\377\377\377" \ - "\376\376\376\377\377\377\377\274\377\377\377\14\377\377\375\376\377\377" \ - "\377\377\377\377\377\375\376\376\376\367\374\365\244\317c\214\305@\215" \ - "\307=\211\306=\213\307A\215\306A\202\212\306@\1\213\310<\210\214\306" \ - ">\202\212\307>\3\212\307<\214\306>\216\306\77\202\214\306>\12\215\305" \ - "<\215\307\77\212\306@\242\322b\371\374\365\377\377\375\376\376\374\376" \ - "\377\377\377\376\377\376\377\377\202\377\377\377\13\376\377\375\376\376" \ - "\377\377\377\377\350\365\333\225\311K\214\305B\242\320c\371\374\361\377" \ - "\377\377\376\377\377\377\376\377\377\377\377\377\300\377\377\377\7\221" \ - "\221\223::<99;::<;;=::<;;=\203::<\1\234\234\236\377\377\377\377\222\377" \ - "\377\377\2\250\250\25099;\206::<\3;;=::\216\306" \ - "\77\215\305>\215\305@\210\214\306>\37\215\305@\215\307\77\212\306@\215" \ - "\307\77\214\304\77\215\306A\212\307;\212\306@\214\306>\216\307B\214\306" \ - ">\222\312K\354\364\334\377\376\377\377\377\377\377\377\373\376\377\377" \ - "\377\375\376\376\377\375\377\377\377\377\376\377\377\377\377\376\376" \ - "\377\347\365\333\260\327z\371\374\363\375\377\376\376\377\377\377\376" \ - "\377\377\377\377\377\377\375\377\377\377\377\276\377\377\377\3\376\376" \ - "\376\234\234\23699;\203;;=\205::<\1\221\221\223\377\377\377\377\222\377" \ - "\377\377\2\234\234\234;;=\204::<\202;;=\3::<;;=\235\235\237\377\377\377" \ - "\377\276\377\377\377\202\377\377\375\15\376\377\377\367\374\365\223\312" \ - "K\214\306>\213\310\77\215\305@\214\306<\215\307=\214\305@\213\307A\211" \ - "\305\77\215\307\77\215\305>\210\214\306>\20\215\306A\213\305=\215\307" \ - "=\214\305@\215\306A\214\306>\213\304A\220\305\77\216\306\77\212\306@" \ - "\215\305@\213\307A\221\311L\367\375\363\376\377\377\377\377\377\202\377" \ - "\377\373\1\377\375\376\202\377\377\377\4\377\376\377\376\377\377\377" \ - "\376\377\376\377\377\203\377\377\377\3\377\376\377\376\376\377\374\377" \ - "\375\377\377\377\377\277\377\377\377\2\265\265\267<<>\20299;\7::<;;=" \ - "::<99;;;=::\214\305" \ - "@\210\214\306>\22\216\306A\215\307\77\213\305=\216\306\77\214\306>\212" \ - "\307>\213\310\77\214\305@\215\306C\214\306<\215\307=\215\305>\213\310" \ - "=\242\320d\372\372\362\376\377\375\377\375\377\377\377\375\202\376\377" \ - "\377\5\377\377\377\377\377\375\377\377\377\377\377\375\377\377\377\202" \ - "\377\376\377\5\376\377\375\376\377\377\377\377\377\377\375\376\377\377" \ - "\375\377\377\377\377\274\377\377\377\5\376\376\376\377\377\377\316\316" \ - "\320::<;;=\202::<\1;;=\202::<\3""99;::\214" \ - "\306<\214\306>\211\307>\231\214\306>\1\216\306\77\203\214\306>\2\214" \ - "\305@\266\334\207\202\377\377\377\7\377\376\377\377\377\377\377\376\377" \ - "\377\377\375\377\377\377\377\377\375\376\377\377\377\377\377\377\303" \ - "\377\377\377\1\376\376\376\202\377\377\377\1\316\316\316\206::<\6;;=" \ - "::<;;=FFH\377\377\377\376\376\376\205\377\377\377\1\376\376\376\377\377" \ - "\377\377\212\377\377\377\1lln\202::<\3;;=99;;;=\204::<\3\317\317\317" \ - "\377\377\377\376\376\376\377\377\377\377\273\377\377\377\10\377\375\377" \ - "\374\377\375\343\361\320\214\306>\215\306A\214\304=\212\307>\215\305" \ - ">\230\214\306>\20\214\306<\213\304\77\212\307>\212\306B\214\306<\212" \ - "\307>\220\304>\337\363\316\377\376\377\377\377\377\376\377\377\377\377" \ - "\377\376\376\377\377\377\377\376\376\376\376\377\377\377\377\377\377" \ - "\302\377\377\377\1\376\376\376\202\377\377\377\2\376\376\376\377\377" \ - "\377\204::<\1;;=\202::<\3;;=99;;;=\203\377\377\377\1\376\376\376\202" \ - "\377\377\377\1\376\376\376\377\377\377\377\213\377\377\377\2SSU;;=\202" \ - "::<\2;;=99;\204::<\1\315\315\315\203\377\377\377\1\376\376\376\377\377" \ - "\377\377\271\377\377\377\10\376\376\376\377\377\377\233\316W\214\305" \ - "@\212\306@\216\306=\214\305@\215\305@\230\214\306>\17\214\306<\215\306" \ - "C\211\306=\213\307A\214\304\77\212\306@\214\305B\234\313W\376\377\375" \ - "\377\377\377\376\377\375\377\377\375\376\377\377\376\376\377\376\377" \ - "\375\377\377\377\377\302\377\377\377\1\376\376\376\202\377\377\377\4" \ - "\376\376\376\377\377\377\376\376\376;;=\206::<\202;;=\3::<\377\377\377" \ - "\376\376\376\203\377\377\377\3\376\376\376\377\377\377\376\376\376\377" \ - "\377\377\377\212\377\377\377\3::<99;;;=\202::<\10;;=::<;;=99;;;=\363" \ - "\363\363\377\377\377\376\376\376\377\377\377\377\274\377\377\377\7\323" \ - "\354\265\214\305@\215\307\77\215\306A\216\305C\213\304\77\212\307<\230" \ - "\214\306>\20\215\307\77\215\304B\214\305@\214\306>\215\305>\215\307=" \ - "\212\307<\215\307\77\323\351\270\377\376\377\377\377\377\376\376\376" \ - "\376\377\375\376\376\376\376\377\377\377\376\374\377\377\377\377\302" \ - "\377\377\377\202\376\376\376\202\377\377\377\2\376\376\376FFH\210::<" \ - "\2;;=\316\316\316\202\377\377\377\1\376\376\376\377\377\377\377\215\377" \ - "\377\377\1\376\376\376\202;;=\4""99;;;=::<;;=\202::<\2;;=::<\377\377" \ - "\377\377\277\377\377\377\7\231\316X\220\304>\214\305@\215\307\77\214" \ - "\306<\214\311>\214\305@\231\214\306>\11\215\304B\214\306>\215\306A\214" \ - "\306<\215\306A\214\305B\215\307\77\234\315X\375\377\374\204\377\377\377" \ - "\2\376\377\377\377\376\377\377\377\377\377\304\377\377\377\202\376\376" \ - "\376\4\377\377\377jjl::<99;\202;;=\205::<\7\316\316\316\377\377\377\376" \ - "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\377\212\377\377\377\6\363\363\363::<99;;;=::<;;=\202::<\1;;=\202::<" \ - "\377\377\377\377\276\377\377\377\2\342\361\320\214\306<\202\215\305>" \ - "\4\212\307>\215\307=\211\306=\215\305>\230\214\306>\2\213\310=\214\306" \ - "<\202\214\305@\7\215\306A\214\306>\215\307=\214\304\77\211\310<\343\362" \ - "\321\377\377\375\202\377\376\377\2\377\377\375\376\376\376\377\377\377" \ - "\377\310\377\377\377\4kkm::<;;=::<\202;;=\202::<\3;;=::<\316\316\316" \ - "\202\377\377\377\1\376\376\376\377\377\377\377\215\377\377\377\3\316" \ - "\316\316::<;;=\202::<\1;;=\204::<\1__a\202\377\377\377\3\376\376\376" \ - "\377\377\377\376\376\376\377\377\377\377\271\377\377\377\4\270\333\207" \ - "\214\306>\214\305@\214\306>\203\214\305@\1\215\305>\230\214\306>\17\215" \ - "\306A\213\310=\212\307<\214\306>\214\306<\215\306A\214\306>\214\305@" \ - "\213\306E\267\332\206\377\377\375\376\377\377\377\377\375\377\377\377" \ - "\377\377\375\377\377\377\377\303\377\377\377\1\376\376\376\204\377\377" \ - "\377\6lln;;=::<99;::<;;=\204::<\1\250\250\250\204\377\377\377\1\376\376" \ - "\376\377\377\377\377\213\377\377\377\1\316\316\316\203::<\1;;=\205::" \ - "<\1lln\203\377\377\377\1\376\376\376\377\377\377\377\272\377\377\377" \ - "\10\232\315V\215\305@\212\306@\215\305>\214\306<\215\304D\215\305<\212" \ - "\306@\230\214\306>\3\217\304@\214\306<\215\306A\202\215\305@\7\214\306" \ - ">\214\305@\212\307>\215\305<\233\316W\376\376\377\376\377\375\203\377" \ - "\377\377\1\376\377\377\377\377\377\377\305\377\377\377\3\376\376\376" \ - "\377\377\377\234\234\236\203::<\2;;=99;\204::<\1\234\234\234\202\377" \ - "\377\377\1\376\376\376\377\377\377\377\215\377\377\377\5\316\316\320" \ - "::<;;=::<;;=\202::<\1;;=\202::<\1kkm\377\377\377\377\266\377\377\377" \ - "\10\375\377\374\376\377\377\376\376\376\377\377\375\377\377\377\376\377" \ - "\377\377\377\375\360\371\350\250\214\306>\4\214\305@\212\307>\360\371" \ - "\346\376\377\375\202\377\377\377\1\377\377\375\377\377\377\377\304\377" \ - "\377\377\1\376\376\376\203\377\377\377\1\234\234\234\211::<\1\234\234" \ - "\234\205\377\377\377\1\376\376\376\377\377\377\377\212\377\377\377\4" \ - "\316\316\320llnkkmlln\203kkm\1jjl\202kkm\1\221\221\223\377\377\377\377" \ - "\270\377\377\377\1\377\376\377\202\377\377\377\3\375\376\377\377\377" \ - "\375\341\361\315\251\214\306>\2\215\307\77\342\360\314\377\377\377\377" \ - "\310\377\377\377\202\376\376\376\202\377\377\377\2\266\266\266kkk\210" \ - "kkm\1\265\265\265\206\377\377\377\1\376\376\376\377\377\377\377\211\377" \ - "\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \ - "\377\377\377\377\264\377\377\377\1\377\376\377\205\377\377\377\2\375" \ - "\377\374\310\340\246\252\214\306>\1\310\340\246\377\377\377\377\307\377" \ - "\377\377\1\376\376\376\202\377\377\377\3\375\375\375\377\377\377\376" \ - "\376\376\211\377\377\377\7\376\376\376\377\377\377\376\376\376\377\377" \ - "\377\376\376\376\377\377\377\376\376\376\377\377\377\377\213\377\377" \ - "\377\1\376\376\376\204\377\377\377\1\376\376\376\206\377\377\377\1\376" \ - "\376\376\377\377\377\377\263\377\377\377\1\377\376\377\204\377\377\377" \ - "\3\376\376\377\376\377\375\304\342\234\251\214\306>\7\215\305@\305\343" \ - "\235\376\376\377\377\377\377\376\376\377\377\376\377\377\377\375\377" \ - "\377\377\377\306\377\377\377\1\376\376\376\217\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\377\377\377\377\214\377\377\377\5\376\376" \ - "\376\377\377\377\376\376\376\377\377\377\376\376\376\203\377\377\377" \ - "\1\376\376\376\377\377\377\377\267\377\377\377\1\377\377\375\202\377" \ - "\377\377\3\377\376\377\376\377\375\305\342\237\251\214\306>\3\215\305" \ - "@\303\344\235\376\376\376\202\377\377\377\1\377\376\377\377\377\377\377" \ - "\305\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377" \ - "\377\377\1\376\376\376\377\377\377\377\216\377\377\377\1\376\376\376" \ - "\203\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376\377\377" \ - "\377\377\266\377\377\377\5\376\377\377\376\376\377\377\376\377\377\377" \ - "\377\305\342\242\251\214\306>\4\215\306A\302\341\236\377\377\375\376" \ - "\376\376\377\377\377\377\305\377\377\377\1\376\376\376\203\377\377\377" \ - "\1\376\376\376\214\377\377\377\1\376\376\376\377\377\377\377\231\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\264\377" \ - "\377\377\2\376\376\376\377\376\377\202\376\377\377\202\377\377\377\1" \ - "\305\342\240\251\214\306>\7\214\305@\306\343\240\377\376\374\377\377" \ - "\377\376\377\377\377\377\377\376\376\376\377\377\377\377\325\377\377" \ - "\377\1\376\376\376\377\377\377\377\222\377\377\377\1\376\376\376\205" \ - "\377\377\377\1\376\376\376\377\377\377\377\265\377\377\377\4\377\377" \ - "\375\377\376\377\375\377\376\376\377\375\202\377\377\377\1\305\343\235" \ - "\251\214\306>\4\213\310\77\306\341\234\377\376\377\377\377\377\202\376" \ - "\377\375\377\377\377\377\311\377\377\377\1\377\377\375\215\377\377\377" \ - "\1\376\376\376\377\377\377\377\377\377\377\377\314\377\377\377\3\377" \ - "\377\375\377\377\377\376\377\375\203\377\377\377\11\376\377\377\345\360" \ - "\320\214\305@\214\306>\214\305@\214\304\77\214\306<\215\305>\212\307" \ - ">\231\214\306>\1\214\305@\202\215\307\77\205\214\306>\5\212\307>\214" \ - "\306>\342\360\315\377\377\377\376\376\376\202\377\377\377\1\377\377\375" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\244" \ - "\377\377\377\3\377\376\377\377\377\377\376\377\375\203\377\377\377\11" \ - "\376\377\377\362\371\347\214\306>\214\305B\215\310<\215\306A\214\305" \ - "@\215\307\77\214\305@\231\214\306>\4\215\307\77\213\305=\214\306>\215" \ - "\307\77\202\214\306>\5\215\307\77\214\306>\216\306\77\215\306A\360\367" \ - "\345\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\251\377\377\377\2\377\376\377\377\377\375\203\377\377\377\13\377\377" \ - "\375\377\377\377\375\377\374\233\316W\214\305@\213\304\77\212\306@\215" \ - "\307\77\214\305@\215\306A\214\305@\230\214\306>\3\215\307\77\214\306" \ - ">\215\306A\203\214\305@\7\215\306A\214\305@\215\304B\232\315T\377\377" \ - "\375\376\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\250\377\377\377\1\377\377\375\205\377\377\377" \ - "\11\377\376\377\267\333\204\213\307A\213\307C\215\307\77\213\304\77\215" \ - "\307\77\215\305<\212\306@\231\214\306>\1\215\307\77\203\214\305@\202" \ - "\214\306>\7\215\307\77\212\306@\267\333\204\377\376\377\376\377\377\377" \ - "\377\375\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\247\377\377\377\17\377\377\375\377\377\377\377\377\375" \ - "\376\376\376\377\377\377\377\377\375\376\376\377\334\354\305\211\306" \ - "=\213\307A\213\305;\215\306A\214\306<\215\305>\213\307A\232\214\306>" \ - "\202\214\305@\11\214\306>\214\306<\214\306>\215\307\77\212\311=\333\355" \ - "\305\377\376\377\377\377\377\376\376\376\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\252\377\377\377\3\377\377\375\377" \ - "\377\377\377\376\377\203\377\377\375\7\233\314V\215\307\77\215\305>\214" \ - "\306>\215\307\77\214\305@\212\307>\232\214\306>\14\214\305@\214\306>" \ - "\214\306<\215\307=\215\307\77\214\305@\232\315V\374\377\373\376\376\377" \ - "\377\377\375\377\377\377\376\376\376\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\255\377\377\377\10\377\377\375\377\376" \ - "\377\324\353\267\214\304\77\215\305>\214\305@\212\307<\214\305@\232\214" \ - "\306>\2\215\307\77\215\306A\202\214\306>\4\215\307\77\213\304\77\215" \ - "\306E\316\346\254\202\377\377\377\3\377\377\375\376\376\377\376\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\247" \ - "\377\377\377\1\376\376\376\206\377\377\377\10\377\377\373\375\376\377" \ - "\232\315W\214\306>\215\307=\211\307>\215\306A\215\305>\232\214\306>\1" \ - "\214\305@\202\215\307\77\13\214\305@\215\306E\227\317P\377\377\377\377" \ - "\377\375\376\377\377\377\377\377\377\377\375\375\377\376\377\377\377" \ - "\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\254\377\377\377\20\376\377\377\377\375\377\331\356\303\215\305" \ - "@\213\310\77\215\305>\216\306\77\213\307A\215\306A\214\306<\214\306>" \ - "\216\306\77\213\304\77\212\307<\214\306>\215\305@\210\214\306>\1\214" \ - "\305@\202\215\307\77\205\214\306>\10\214\305@\212\307>\215\305>\214\305" \ - "@\215\305>\214\305@\215\305>\331\356\305\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\264\377\377\377\20\376\376\374\377" \ - "\377\375\376\376\374\261\330{\214\306>\216\306A\214\306>\213\307A\215" \ - "\305>\215\306A\215\307\77\213\304A\215\307\77\214\305@\214\306<\216\306" \ - "A\210\214\306>\4\215\307\77\213\305=\214\306>\215\307\77\202\214\306" \ - ">\12\215\307\77\214\306>\212\307>\220\305\77\212\307>\214\306>\213\310" \ - "=\214\306<\262\327z\376\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\265\377\377\377\17\374\377\377\377\377\377\370" \ - "\373\362\241\321d\211\310<\215\305>\215\305@\216\306=\214\305@\214\306" \ - ">\215\307\77\214\306>\212\307<\212\306@\212\307<\210\214\306>\3\215\307" \ - "\77\214\306>\215\306A\203\214\305@\12\215\306A\214\305@\215\305>\212" \ - "\307>\213\307A\216\305C\215\307=\242\322e\371\372\364\375\377\376\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\264\377" \ - "\377\377\1\375\377\374\203\377\377\377\4\352\364\333\223\311O\212\306" \ - "@\215\305@\202\213\310\77\202\214\306>\4\216\307F\213\305=\215\307\77" \ - "\215\305@\211\214\306>\1\215\307\77\203\214\305@\202\214\306>\1\215\307" \ - "\77\202\214\305@\6\216\305C\215\307\77\225\311K\351\363\332\377\377\377" \ - "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\265\377\377\377\17\377\375\376\377\376\377\377\377\377\377\377" \ - "\375\352\365\327\223\313L\212\307<\215\305>\214\305@\215\307=\214\305" \ - "@\214\306<\213\310\77\213\304\77\220\305A\212\214\306>\202\214\305@\12" \ - "\214\306>\214\306<\214\306>\215\307\77\214\306>\213\310=\215\307=\225" \ - "\311K\347\365\334\377\377\375\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\267\377\377\377\1\377\377\375\202\377\377\377" \ - "\13\377\376\377\376\377\377\353\363\334\245\320d\214\305B\214\305@\215" \ - "\306A\213\305=\214\306>\213\307A\213\310=\213\214\306>\5\214\305@\214" \ - "\306>\214\306<\215\307=\215\307\77\202\214\305@\5\214\306<\242\322e\351" \ - "\363\332\377\377\375\376\376\376\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\267\377\377\377\1\376\376\374\202\377\377" \ - "\375\6\376\377\377\377\376\377\377\377\375\371\372\364\255\330|\217\304" \ - ">\202\212\306@\2\215\306A\214\303A\202\214\305@\211\214\306>\2\215\307" \ - "\77\215\306A\202\214\306>\6\215\307\77\213\304\77\215\306E\215\305>\262" \ - "\327z\371\372\364\203\377\377\377\2\376\377\377\377\377\375\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\264\377\377\377" \ - "\1\376\376\376\202\377\377\377\2\377\377\375\377\376\377\203\377\377" \ - "\377\6\377\377\375\331\356\303\233\314W\215\310<\214\305@\215\307\77" \ - "\214\214\306>\1\214\305@\202\215\307\77\7\214\305@\215\306E\227\317P" \ - "\331\356\305\376\377\377\375\377\376\376\377\377\202\377\377\377\2\377" \ - "\377\375\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\274\377\377\377\10\377\377\375\377\376\377\365\375\362" \ - "\307\342\237\234\315Z\212\306@\212\307>\214\305@\202\215\307\77\16\214" \ - "\306>\215\307\77\214\306>\215\306A\214\306>\213\310\77\214\306>\215\305" \ - "<\216\306A\213\310\77\212\307>\232\315T\307\341\242\370\373\362\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377\377" \ - "\377\1\377\377\375\202\377\377\377\10\377\376\377\376\376\374\335\354" \ - "\303\270\333\207\222\311J\214\305@\215\306A\213\305=\202\214\306>\13" \ - "\215\307\77\216\306\77\215\305>\212\306@\212\307>\226\312K\270\333\211" \ - "\334\354\307\376\377\377\376\376\376\377\377\375\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\306\377\377\377\2\376\377" \ - "\375\376\377\377\204\377\377\377\16\350\366\334\332\354\302\311\341\245" \ - "\306\341\234\305\342\237\304\341\237\305\342\240\305\342\237\334\355" \ - "\303\352\364\333\377\377\375\377\375\376\377\376\377\377\377\375\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\307\377" \ - "\377\377\15\376\376\376\377\376\377\377\377\375\377\377\373\376\377\377" \ - "\376\377\375\376\377\377\377\377\375\377\377\377\376\376\376\376\377" \ - "\377\376\377\375\377\377\377\202\377\376\377\204\377\377\377\1\376\376" \ - "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\307\377\377\377\3\376\377\377\377\377\377\376\376\376\202\377\377\377" \ - "\1\376\376\376\210\377\377\377\3\375\377\376\376\377\377\377\377\377" \ - "\203\377\376\377\4\376\377\375\376\377\377\377\377\377\377\376\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377" \ - "\377\377\10\377\377\375\377\376\377\377\377\373\377\377\377\375\377\376" \ - "\376\377\377\376\376\376\377\376\377\202\376\377\377\1\377\377\377\202" \ - "\376\376\376\202\377\377\377\202\376\377\377\5\376\377\375\377\377\377" \ - "\376\376\374\377\377\377\377\377\375\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\307\377\377\377\1\376\376\377\202\377" \ - "\377\377\2\377\377\375\376\376\377\202\377\377\377\2\376\377\375\377" \ - "\377\375\204\377\377\377\202\377\377\375\1\376\377\375\202\376\377\377" \ - "\202\377\377\375\202\377\377\377\1\377\376\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\310\377\377\377\5\377\377\375" \ - "\377\376\377\377\377\375\376\376\377\377\376\377\207\377\377\377\202" \ - "\377\376\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\377\261\377\377\377" \ - "\1\376\376\376\210\377\377\377\3\376\376\376\377\377\377\376\376\376" \ - "\331\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\257\377" \ - "\377\377\1\376\376\376\212\377\377\377\1\376\376\376\211\377\377\377" \ - "\1\376\376\376\221\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \ - "\376\205\377\377\377\1\376\376\376\312\377\377\377\1\376\376\376\214" \ - "\377\377\377\1\376\376\376\202\377\377\377\6\377\376\375\377\377\377" \ - "\376\377\377\377\377\377\377\376\377\376\377\377\270\377\377\377\7\376" \ - "\377\377\377\376\377\376\377\377\377\377\375\377\377\377\377\375\377" \ - "\377\376\377\273\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \ - "\376\302\377\377\377\1\376\376\376\305\377\377\377\1\376\376\376\241" \ - "\377\377\377\1\376\376\376\214\377\377\377\1\376\376\376\235\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\252\377\377\377\1\376\376\376" \ - "\212\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377" \ - "\1\376\376\376\251\377\377\377\202\376\376\376\215\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \ - "\224\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\232\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\206\377\377\377\1\376\376" \ - "\376\243\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\202" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\2" \ - "\376\376\376\377\377\377\202\377\377\375\3\377\377\377\376\377\377\377" \ - "\377\375\202\377\376\377\1\377\377\377\270\377\376\377\14\377\377\377" \ - "\377\376\377\377\376\374\377\377\375\375\376\377\376\377\377\377\377" \ - "\375\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\203" \ - "\377\377\377\1\376\376\376\266\377\377\377\1\376\376\376\203\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\214\377\377\377\202" \ - "\376\376\376\207\377\377\377\1\376\376\376\272\377\377\377\1\376\376" \ - "\376\252\377\377\377\202\376\376\376\247\377\377\377\5\376\376\376\377" \ - "\377\377\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376" \ - "\376\203\377\377\377\1\376\376\376\311\377\377\377\1\376\376\376\221" \ - "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\302\377\377" \ - "\377\1\376\376\376\207\377\377\377\1\346\346\346\204\316\316\316\10\317" \ - "\317\317\315\315\315\316\316\316\363\363\365\377\377\377\376\376\376" \ - "\377\377\377\376\376\376\204\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\234\377\377\377\1\376\376\376\262\377\377\377\1\376\376" \ - "\376\213\377\377\377\1\377\377\375\202\376\377\377\1\376\376\377\202" \ - "\377\377\377\2\377\376\377\377\377\375\270\276\317\331\1\377\376\377" \ - "\205\377\377\377\3\376\377\375\377\377\375\376\376\376\257\377\377\377" \ - "\1\376\376\376\210\377\377\377\202\376\376\376\210\377\377\377\1\376" \ - "\376\376\220\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \ - "\243\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\207\377\377\377\1\376\376\376\331\377\377\377\12\376" \ - "\376\376\377\377\377\235\235\235kkmllnkkmllnjjlkkm\346\346\346\202\377" \ - "\377\377\1\376\376\376\237\377\377\377\2\346\346\346\317\317\317\204" \ - "\316\316\316\2\317\317\317\346\346\346\234\377\377\377\1\376\376\376" \ - "\203\377\377\377\1\376\376\376\202\377\377\377\1\332\332\332\203\316" \ - "\316\316\1\317\317\317\202\316\316\316\213\377\377\377\5\346\346\346" \ - "\317\317\317\315\315\315\316\316\316\315\315\315\252\316\316\316\1\363" \ - "\363\363\205\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376" \ - "\211\377\377\377\4\346\346\346\250\250\250\204\204\206``b\202::<\1;;" \ - "=\202::<\3;;=99;;;=\203::<\4lln\220\220\222\266\266\266\363\363\363\202" \ - "\376\376\376\240\377\377\377\1\346\346\346\202\316\316\316\10\317\317" \ - "\317\315\315\315\317\317\317\316\316\316\332\332\332\376\376\376\377" \ - "\377\377\376\376\376\203\377\377\377\1\376\376\376\241\377\377\377\6" \ - "\376\376\376\377\377\377\346\346\346\316\316\320\317\317\321\316\316" \ - "\320\203\316\316\316\2\347\347\347\376\376\376\205\377\377\377\1\376" \ - "\376\376\202\377\377\375\5\376\377\377\377\377\375\377\377\377\317\334" \ - "\344\37V\177\270\0>i\12\37U{\317\334\344\377\376\374\377\377\375\376" \ - "\377\377\377\376\374\376\377\377\376\376\376\377\377\377\363\363\363" \ - "\202\316\316\316\1\315\315\315\202\317\317\317\251\316\316\316\1\332" \ - "\332\332\202\377\377\377\1\376\376\376\203\377\377\377\202\376\376\376" \ - "\204\377\377\377\3\346\346\346\316\316\316\316\316\320\204\316\316\316" \ - "\2\346\346\346\376\376\376\212\377\377\377\1\347\347\347\206\316\316" \ - "\316\2\317\317\317\363\363\363\250\377\377\377\2\376\376\376\331\331" \ - "\331\206\316\316\316\1\332\332\332\202\377\377\377\1\376\376\376\204" \ - "\377\377\377\1\376\376\376\203\377\377\377\3\332\332\332\316\316\316" \ - "\316\316\320\250\316\316\316\1\363\363\363\205\377\377\377\1\376\376" \ - "\376\242\377\377\377\4\346\346\346::<;;=99;\204::<\1\204\204\206\237" \ - "\377\377\377\1\376\376\376\202\377\377\377\3\235\235\235::<;;=\202::" \ - "<\3;;=::<\235\235\235\202\377\377\377\1\376\376\376\232\377\377\377\1" \ - "\376\376\376\205\377\377\377\4kkm;;;99;;;=\202::<\1;;;\213\377\377\377" \ - "\4\234\234\234:::::<;;=\202::<\1;;;\250::<\1\316\316\316\202\377\377" \ - "\377\1\376\376\376\203\377\377\377\1\376\376\376\212\377\377\377\203" \ - "\376\376\376\203\377\377\377\3\346\346\346\250\250\250```\204::<\202" \ - ";;=\202::<\3;;=::<;;=\203::<\1;;=\202::<\5;;=::<```\265\265\265\362\362" \ - "\362\203\377\377\377\1\376\376\376\233\377\377\377\1\234\234\236\204" \ - "::<\5""99;;;=::<\333\333\335\376\376\376\203\377\377\377\1\376\376\376" \ - "\241\377\377\377\4\376\376\376\377\377\377\363\363\363FFH\202::<\1;;" \ - "=\203::<\1\234\234\234\210\377\377\377\6\376\377\377\377\377\375\375" \ - "\376\377\356\363\366\40Vz\0\77h\270\0=i\20\0>i\22Ip\356\363\367\376\377" \ - "\377\377\377\375\377\377\377\376\376\377\377\376\377\377\377\377\315" \ - "\315\315:::::<;;=::<99;;;;\250::<\1kkm\205\377\377\377\1\376\376\376" \ - "\203\377\377\377\4\376\376\376\377\377\377\376\376\376\234\234\234\203" \ - "::<\6;;=::<:::\234\234\234\377\377\377\376\376\376\211\377\377\377\3" \ - "\332\332\332:::;;=\202::<\202;;=\2::<\204\204\206\250\377\377\377\2\364" \ - "\364\364FFF\204::<\202:::\1\234\234\234\206\377\377\377\1\376\376\376" \ - "\204\377\377\377\2kkk;;=\251::<\1\316\316\316\202\377\377\377\1\376\376" \ - "\376\203\377\377\377\1\376\376\376\240\377\377\377\6\376\376\376\234" \ - "\234\236::<;;=::<;;=\203::<\2FFH\362\362\362\235\377\377\377\1\376\376" \ - "\376\203\377\377\377\3\234\234\236::<;;=\202::<\3;;=::<\234\234\236\203" \ - "\377\377\377\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377" \ - "\377\7kkm::<;;=::<;;=::<;;=\213\377\377\377\4\235\235\235::<;;=99;\202" \ - ";;=\251::<\1\315\315\315\203\377\377\377\202\376\376\376\213\377\377" \ - "\377\1\376\376\376\202\377\377\377\6\376\376\376\377\377\377\315\315" \ - "\315\205\205\205::<;;=\213::<\4;;=::<;;=::<\203;;=\204::<\4FFF\204\204" \ - "\204\346\346\346\376\376\376\234\377\377\377\3\234\234\236::<;;=\202" \ - "::<\4;;=99;::<``b\244\377\377\377\1\376\376\376\203\377\377\377\1xxz" \ - "\202::<\10;;=99;;;=::<;;=\233\233\235\377\377\377\376\376\376\202\377" \ - "\377\377\1\376\376\376\203\377\377\377\4\375\377\376\377\376\373\377" \ - "\377\375\235\267\310\202\0>i\271\0=i\4\0\77j\237\266\306\377\376\377" \ - "\377\375\374\202\376\377\377\4\377\377\377\376\376\376\316\316\31699" \ - ";\202;;=\2::<;;=\251::<\1kkm\203\377\377\377\1\376\376\376\210\377\377" \ - "\377\4\235\235\235::<99;;;=\203::<\1\235\235\235\214\377\377\377\2ll" \ - "n99;\202;;=\1::<\203;;=\2\362\362\364\376\376\376\245\377\377\377\2\376" \ - "\376\376\250\250\250\204::<\4;;=::<:::\346\346\346\203\377\377\377\1" \ - "\376\376\376\205\377\377\377\3\376\376\376\377\377\377jjl\252::<\1\315" \ - "\315\315\203\377\377\377\202\376\376\376\242\377\377\377\3\362\362\364" \ - "GGI::<\202;;=\2""99;;;=\202::<\2""99;\235\235\235\237\377\377\377\3\376" \ - "\376\376\377\377\377\235\235\237\202::<\202;;=\202::<\3\235\235\237\377" \ - "\377\377\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\4" \ - "\376\376\376\377\377\377kkm;;=\202::<\5""99;;;=99;\377\377\377\376\376" \ - "\376\211\377\377\377\1\233\233\233\202::<\3;;=::<99;\251::<\1\317\317" \ - "\317\205\377\377\377\1\376\376\376\214\377\377\377\3\376\376\376\347" \ - "\347\347xxz\203::<\1;;=\202::<\1;;=\204::<\1;;=\203::<\1;;=\205::<\1" \ - ";;=\203::<\1;;=\203::<\2\234\234\236\362\362\362\233\377\377\377\2\233" \ - "\233\235;;=\204::<\1;;=\202::<\1\234\234\236\245\377\377\377\4\376\376" \ - "\376\302\302\304::<;;=\206::<\1\235\235\237\202\377\377\377\1\376\376" \ - "\376\203\377\377\377\7\375\376\377\377\377\377\377\377\375\376\377\377" \ - "\377\377\377\177\235\265\0\77k\271\0\77j\7\0\77k\0\77j~\236\265\377\376" \ - "\377\376\377\377\375\377\374\377\377\375\202\377\377\377\5\315\315\315" \ - ";;=::<99;;;=\252::<\3kkm\377\377\377\376\376\376\203\377\377\377\1\376" \ - "\376\376\203\377\377\377\1\376\376\376\202\377\377\377\3\233\233\233" \ - "::<;;=\202::<\3;;=::<\234\234\234\202\377\377\377\1\376\376\376\211\377" \ - "\377\377\4\264\264\264;;=::<;;=\204::<\3\247\247\251\377\377\377\376" \ - "\376\376\245\377\377\377\1SSS\203::<\1;;=\202::<\1\204\204\204\213\377" \ - "\377\377\4\376\376\376lln::<:9>\250::<\1\317\317\317\205\377\377\377" \ - "\1\376\376\376\241\377\377\377\1\265\265\267\204::<\1;;=\204::<\1FFF" \ - "\241\377\377\377\2\234\234\236;;=\204::<\2;;=\234\234\236\234\377\377" \ - "\377\3\376\376\376\377\377\377\376\376\376\204\377\377\377\1kkm\203:" \ - ":<\4;;=::<;;=\376\376\376\212\377\377\377\1\234\234\234\204::<\1;;=\251" \ - "::<\1\316\316\316\203\377\377\377\202\376\376\376\215\377\377\377\4\234" \ - "\234\234;;=::<;;=\202::<\1""99;\204::<\1;;=\203::<\1;;=\211::<\1""99" \ - ";\207::<\2FFF\301\301\301\232\377\377\377\2\234\234\23699;\210::<\1\333" \ - "\333\333\241\377\377\377\6\376\376\376\377\377\377\376\376\376\363\363" \ - "\363FFH;;=\205::<\3;;=::<\234\234\236\206\377\377\377\7\377\376\377\377" \ - "\377\377\377\377\375\375\376\377\377\376\377\201\235\263\0>g\272\0>i" \ - "\13\0>e\177\236\263\377\375\374\377\377\377\377\377\375\376\376\376\377" \ - "\376\377\377\377\377\316\316\316::<;;=\202::<\2""99;;;=\250::<\1kkm\204" \ - "\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\202\377\377\377\2\376\376\376\234\234\234\206::<\1\234\234\234\215" \ - "\377\377\377\2RRT;;=\205::<\1SSU\246\377\377\377\2\316\316\316999\206" \ - "::<\1\316\316\316\202\377\377\377\3\376\376\376\377\377\377\376\376\376" \ - "\207\377\377\377\3jjl::<:9>\250::<\1\316\316\316\203\377\377\377\202" \ - "\376\376\376\242\377\377\377\2SSU99;\202;;=\204::<\4;;=99;::<\264\264" \ - "\266\240\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377" \ - "\1kkm\206::<\213\377\377\377\2\234\234\236;;=\216::<\4""99;;;=::<;;=" \ - "\206::<\3;;=::<;;=\222::<\1\316\316\316\205\377\377\377\1\376\376\376" \ - "\207\377\377\377\1\376\376\376\202\377\377\377\2\346\346\350__a\202:" \ - ":<\3;;=::<;;=\204::<\1;;=\202::<\3;;=::<;;=\203::<\1;;=\202::<\2""99" \ - ";;;=\202::<\1;;=\204::<\7;;=::<;;=::<;;=\204\204\206\363\363\363\203" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\222\377\377\377\4" \ - "\234\234\236::<;;=99;\204::<\3;;=::<__a\244\377\377\377\1xxx\205::<\1" \ - ";;=\203::<\1\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\211\0" \ - "=i\2\0>j\0=i\202\1>j\2\0\77k\0>j\232\0>i\2\0>j\0\77k\202\1>j\2\0=i\0" \ - ">j\211\0=i\3\0>i\0=i\177\236\263\206\377\377\377\6\316\316\316:::::<" \ - ";;=::<;;=\217::<\1;;=\203::<\1;;=\202::<\1;;=\222::<\1kkk\205\377\377" \ - "\377\1\376\376\376\206\377\377\377\1\234\234\236\206::<\1\234\234\236" \ - "\215\377\377\377\3\234\234\234;;=::<\202;;=\203::<\3\316\316\320\377" \ - "\377\377\376\376\376\240\377\377\377\1\376\376\376\202\377\377\377\3" \ - "xxz::<;;=\202::<\3;;=::<__a\215\377\377\377\1kkm\204::<\1;;=\202::<\1" \ - ";;=\242::<\1\316\316\316\205\377\377\377\1\376\376\376\240\377\377\377" \ - "\1\265\265\265\202::<\5;;=::<;;=::<;;=\204::<\2TTV\376\376\376\237\377" \ - "\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206" \ - "::<\213\377\377\377\3\234\234\23499;;;=\214::<\1""99;\207::<\1;;=\227" \ - "::<\1\316\316\316\204\377\377\377\3\376\376\376\377\377\377\376\376\376" \ - "\203\377\377\377\1\376\376\376\204\377\377\377\2\333\333\335FFH\214:" \ - ":<\16``b\221\221\223\251\251\251\315\315\315\316\316\316\363\363\363" \ - "\377\377\377\332\332\332\316\316\316\301\301\301\235\235\237jjlFFH;;" \ - "=\207::<\1;;=\202::<\3;;=__a\363\363\363\227\377\377\377\4\234\234\236" \ - "99;::<;;=\205::<\3;;=::<\233\233\233\240\377\377\377\12\376\376\376\377" \ - "\377\377\301\301\301;;=::<;;=::<;;=::<99;\203::<\1\234\234\236\213\377" \ - "\377\377\3\177\236\263\0=i\0>i\211\0=i\7\1>j\0=i\1>j\0=i\0>g\3>h\2=g" \ - "\230\0=i\7\2=g\3>h\0>g\0=i\1>j\0=i\1>j\211\0=i\3\0>i\0=i\177\236\263" \ - "\206\377\377\377\2\317\317\317:::\221::<\202;;=\202::<\3;;=::<99;\203" \ - "::<\2;;=99;\220::<\1kkk\214\377\377\377\1\234\234\236\206::<\1\234\234" \ - "\236\213\377\377\377\3\376\376\376\377\377\377\363\363\363\204::<\4;" \ - ";=::<;;=xxz\202\377\377\377\1\376\376\376\236\377\377\377\1\376\376\376" \ - "\202\377\377\377\3\346\346\346::<;;=\202::<\4;;=99;;;=\266\266\270\215" \ - "\377\377\377\1kkm\203::<\1;;=\202::<\1;;=\243::<\1\316\316\316\204\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1\376" \ - "\376\376\204\377\377\377\1kkm\202;;=\202::<\202;;=\2::<;;=\204::<\3\317" \ - "\317\317\377\377\377\376\376\376\235\377\377\377\1\234\234\234\206::" \ - "<\1\234\234\234\243\377\377\377\1kkm\206::<\212\377\377\377\1\376\376" \ - "\376\224\377\377\377\1lln\203::<\1;;=\202::<\1\234\234\236\234\377\377" \ - "\377\1\376\376\376\204\377\377\377\4\376\376\376\265\265\267::<;;=\202" \ - "::<\1;;=\202::<\1;;=\203::<\5__a\266\266\270\363\363\363\377\377\377" \ - "\376\376\376\204\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \ - "\376\202\377\377\377\4\301\301\303\204\204\206;;=::<\203;;=\202::<\2" \ - ";;=::<\202;;=\3GGI\332\332\334\376\376\376\203\377\377\377\1\376\376" \ - "\376\221\377\377\377\2\235\235\237::<\202;;=\202::<\1;;=\202::<\4""9" \ - "9;::<;;=\331\331\331\240\377\377\377\2\363\363\363GGI\203::<\2;;=::<" \ - "\203;;=\202::<\1\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\210" \ - "\0=i\10\0\77k\0=i\1>j\0>i\0\77j\0=i\0>i\0>j\230\0>i\10\0>j\0>i\0=i\0" \ - "\77j\0>i\1>j\0=i\0\77k\210\0=i\3\0>i\0=i\177\236\263\206\377\377\377" \ - "\1\376\376\376\217\377\377\377\1\376\376\376\203\377\377\377\1\315\315" \ - "\317\204::<\3;;=::i\211\0=i\202\0>i\5\0j\0=i\1>j" \ - "\0>i\230\0=i\5\0>i\1>j\0=i\1>j\0i\211\0=i\3\0>i\0=i\177\236" \ - "\263\212\377\377\377\3\376\376\376\377\377\377\376\376\376\212\377\377" \ - "\377\1\376\376\376\202\377\377\377\10\316\316\320::<;;=::<;;=99;::::<99;::<99;\202;;=\203::<\1" \ - "\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\210\0=i\7\2=g\0>i" \ - "\0>j\0\77j\0=i\0\77j\0=h\232\1>j\7\0=h\0\77j\0=i\0\77j\0>j\0>i\2=g\210" \ - "\0=i\3\0>i\0=i\177\236\263\213\377\377\377\1\376\376\376\216\377\377" \ - "\377\1\317\317\321\202::<\6;;=::<;;=::i\210\0=i\10\0\77j\0>j\0\77k\0=i\3>h\2=" \ - "g\1>j\0\77k\230\0=i\10\0\77k\1>j\2=g\3>h\0=i\0\77k\0>j\0\77j\210\0=i" \ - "\3\0>i\0=i\177\236\263\232\377\377\377\12\316\316\316;;=::<;;=::<;;=" \ - "::i\210\0=i\10\0>i\0=i\0>i\0\77k\0>j\2=g\1\77h\0>l\230\0>i\10\0>l\1\77" \ - "h\2=g\0>j\0\77k\0>i\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\205\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\221\377\377\377\3\316" \ - "\316\316::<;;=\204::<\1kkm\225\377\377\377\202\376\376\376\211\377\377" \ - "\377\1\234\234\236\206::<\1\234\234\236\217\377\377\377\3\376\376\376" \ - "TTV99;\202::<\4""99;;;=::i\210\0=i\7\0>j\2=g\0>g\0>j\40V|o\224\256\177\236\262\232" \ - "\177\236\263\7\177\236\262o\224\256\40V|\0>j\0>g\2=g\0>j\210\0=i\3\0" \ - ">i\0=i\177\236\263\232\377\377\377\3\316\316\316::<;;=\203::<\2;;=kk" \ - "m\232\377\377\377\1\376\376\376\205\377\377\377\1\234\234\236\206::<" \ - "\1\234\234\236\220\377\377\377\2\233\233\235;;=\202::<\1<<>\203::<\1" \ - "\346\346\346\237\377\377\377\1\204\204\204\206::<\2SSU\376\376\376\217" \ - "\377\377\377\1kkm\203::<\4;;=::<;;=\316\316\320\304\377\377\377\1\376" \ - "\376\376\202\377\377\377\2\234\234\236;;=\202::<\4;;=::<;;=\234\234\234" \ - "\203\377\377\377\1\346\346\346\205::<\3;;=FFH\363\363\365\203\377\377" \ - "\377\1\376\376\376\230\377\377\377\1\234\234\234\206::<\1\234\234\234" \ - "\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236" \ - "\235\377\377\377\2\316\316\316;;=\202::<\6;;=::<;;=::<:::\265\265\265" \ - "\237\377\377\377\7\376\376\376\363\363\363___::<;;=::<;;=\203::<\2GG" \ - "I\363\363\363\204\377\377\377\1\376\376\376\214\377\377\377\1\234\234" \ - "\234\203::<\202;;=\5::<\266\266\266GGI99;;;=\202::<\1;;=\202::<\1\332" \ - "\332\332\206\377\377\377\1\376\376\376\211\377\377\377\1\376\376\376" \ - "\207\377\377\377\2\363\363\363FFH\206::<\3FFH\301\301\30399;\202::<\202" \ - ";;=\2::<\234\234\236\206\377\377\377\7\377\377\375\377\377\377\377\377" \ - "\375\376\377\377\376\376\376\200\237\263\0\77i\211\0>i\7\0>g\1>j\0>g" \ - "_\210\236\377\377\377\376\377\377\377\376\377\231\377\377\377\10\377" \ - "\377\375\376\377\375\377\377\377\377\377\375`\210\242\3>h\0\77j\1\77" \ - "h\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<" \ - "\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377" \ - "\377\1\363\363\363\204::<\202;;=\2""99;\205\205\207\207\377\377\377\1" \ - "\376\376\376\224\377\377\377\4\376\376\376\377\377\377\363\363\363FF" \ - "H\202::<\5;;=99;;;=::<\265\265\265\220\377\377\377\1kkm\206::<\1\316" \ - "\316\316\305\377\377\377\5\376\376\376\364\364\364FFH::<;;=\202::<\4" \ - ";;=FFH\363\363\363\377\377\377\202\376\376\376\6\377\377\377xxz::<;;" \ - "=::<;;=\202::<\1\234\234\236\206\377\377\377\202\376\376\376\224\377" \ - "\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206" \ - "::<\237\377\377\377\1kkm\206::<\1\234\234\236\225\377\377\377\1\376\376" \ - "\376\207\377\377\377\2SSS;;=\202::<\1;;=\203::<\1\234\234\234\202\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1\376" \ - "\376\376\202\377\377\377\4\332\332\332FFH::<;;=\202::<\1;;=\202::<\1" \ - "\222\222\224\205\377\377\377\1\376\376\376\213\377\377\377\3\234\234" \ - "\234::<;;=\202::<\5""99;;;=\315\315\315\250\250\252;;=\206::<\2``b\376" \ - "\376\376\202\377\377\377\1\376\376\376\216\377\377\377\1\376\376\376" \ - "\205\377\377\377\2xxx;;=\202::<\1;;=\203::<\2\300\300\300\317\317\321" \ - "\203::<\1;;=\202::<\1\234\234\236\207\377\377\377\1\377\376\377\202\377" \ - "\377\377\4\377\376\377\201\235\263\0=j\3>j\210\0=i\5\1>j\0=j\37V\177" \ - "\377\376\377\376\376\376\202\377\377\377\1\376\377\377\230\377\377\377" \ - "\10\376\377\377\377\377\375\374\377\377\377\376\374\376\377\377#W\177" \ - "\0>g\0\77i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \ - "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377" \ - "\377\377\2\376\376\376\204\204\206\205::<\3;;=FFH\362\362\362\204\377" \ - "\377\377\202\376\376\376\2\377\377\377\376\376\376\224\377\377\377\3" \ - "\376\376\376\265\265\265;;=\203::<\4;;=99;FFH\363\363\363\220\377\377" \ - "\377\1kkm\206::<\1\316\316\316\306\377\377\377\4\265\265\26599;;;=::" \ - "<\202;;=\2""99;\222\222\224\204\377\377\377\12\376\376\376\316\316\320" \ - ";;=::<;;=99;;;=99;SSU\376\376\376\202\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\226\377\377\377\1\234\234\234\206::<\1\234\234\234\243" \ - "\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\234" \ - "\377\377\377\11\234\234\234::<;;=99;;;=99;::<;;=kkm\241\377\377\377\1" \ - "\376\376\376\202\377\377\377\1\301\301\303\203::<\6;;=99;::<;;=::<\346" \ - "\346\350\203\377\377\377\1\376\376\376\214\377\377\377\1\234\234\234" \ - "\203::<\202;;=\10""99;\316\316\316\377\377\377kkm::<;;=::<;;=\203::<" \ - "\1\235\235\237\203\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \ - "\376\205\377\377\377\3\302\302\304::<;;=\202::<\7""99;;;=99;xxz\377\377" \ - "\377\315\315\315;;=\203::<\3:9>::<\234\234\236\206\377\377\377\3\376" \ - "\377\377\377\377\375\377\377\377\202\377\377\375\3|\237\265\0\77k\0>" \ - "g\210\0=i\10\0@h\3j\210\0=i\3\0>i\0=i\177" \ - "\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1" \ - "\234\234\236\206::<\1\234\234\236\215\377\377\377\1\376\376\376\203\377" \ - "\377\377\2\332\332\334;;=\206::<\2\266\266\266\376\376\376\202\377\377" \ - "\377\1\376\376\376\202\377\377\377\1\376\376\376\222\377\377\377\1\376" \ - "\376\376\203\377\377\377\1SSS\203::<\4""99;::<;;=\221\221\223\221\377" \ - "\377\377\1kkm\206::<\1\316\316\316\306\377\377\377\4RRT;;=::<;;=\202" \ - "::<\2;;=\345\345\345\202\377\377\377\1\376\376\376\203\377\377\377\2" \ - "__a;;=\202::<\1;;=\202::<\1\264\264\264\206\377\377\377\1\376\376\376" \ - "\224\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1" \ - "kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\226\377\377\377" \ - "\1\376\376\376\204\377\377\377\2\363\363\363FFH\203::<\1;;=\202::<\2" \ - "FFH\346\346\346\204\377\377\377\1\376\376\376\233\377\377\377\1\376\376" \ - "\376\203\377\377\377\3\376\376\376xxz99;\202::<\1""99;\202::<\4;;=\204" \ - "\204\206\377\377\377\376\376\376\202\377\377\377\1\376\376\376\213\377" \ - "\377\377\1\234\234\234\202::<\10;;=99;;;=::<\317\317\317\376\376\376" \ - "\363\363\363GGI\203::<\1;;=\203::<\3\331\331\331\377\377\377\376\376" \ - "\376\202\377\377\377\1\376\376\376\217\377\377\377\5\363\363\363GGI;" \ - ";=::<;;=\202::<\7""99;FFH\363\363\363\377\377\377\316\316\316::<;;=\202" \ - "::<\3:9>::<\234\234\236\207\377\377\377\7\376\377\377\376\376\376\377" \ - "\377\377\377\377\375\377\377\377\377\375\374\376\377\377\210\377\377" \ - "\377\10\376\376\374\376\377\377\354\364\366\377\377\375\376\377\377\377" \ - "\376\374\377\377\375\376\377\377\230\377\377\377\10\377\377\375\376\377" \ - "\377\377\376\375\375\376\377\376\377\377\301\317\330\0>g\0>j\210\0=i" \ - "\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \ - "\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377\377\5\376" \ - "\376\376\377\377\377kkm::<;;=\202::<\3""99;::<^^`\204\377\377\377\1\376" \ - "\376\376\227\377\377\377\1\316\316\316\202::<\203;;=\202::<\1\347\347" \ - "\347\221\377\377\377\1kkm\206::<\1\316\316\316\303\377\377\377\12\376" \ - "\376\376\377\377\377\301\301\301;;=::<;;=::<99;::<\204\204\206\204\377" \ - "\377\377\4\376\376\376\377\377\377\376\376\376\266\266\266\202::<\5;" \ - ";=::<;;=::<``b\203\377\377\377\1\376\376\376\227\377\377\377\1\234\234" \ - "\234\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377" \ - "\1kkm\206::<\1\234\234\236\233\377\377\377\1\265\265\267\204::<\4""9" \ - "9;;;=::<\234\234\234\203\377\377\377\3\376\376\376\377\377\377\376\376" \ - "\376\231\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\376\376\376\202\377\377\377\5\363\363\363GGI99;::<;;=\202::<\3;;=::" \ - "<\346\346\346\204\377\377\377\1\376\376\376\212\377\377\377\3\234\234" \ - "\234::<99;\202;;=\202::<\1\315\315\315\202\377\377\377\3\301\301\303" \ - ";;=99;\202;;=\5::<;;=::<``b\376\376\376\202\377\377\377\1\376\376\376" \ - "\215\377\377\377\6\376\376\376\377\377\377\376\376\376xxz::<;;=\203:" \ - ":<\202;;=\1\300\300\302\202\377\377\377\3\316\316\316;;=99;\202::<\3" \ - ";:\77::<\234\234\236\206\377\377\377\2\377\377\375\376\377\375\202\376" \ - "\377\377\4\377\377\375\377\377\377\377\376\377\377\377\375\211\377\377" \ - "\377\1\376\376\374\202\377\377\377\3\377\376\377\377\377\377\375\376" \ - "\377\231\377\377\377\202\376\377\377\5\377\376\377\376\377\377\377\377" \ - "\375\277\320\332\0\77j\211\0=i\3\0>i\0=i\177\236\263\232\377\377\377" \ - "\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234" \ - "\234\236\213\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377" \ - "\377\377\1\265\265\265\202::<\1;;=\204::<\1\315\315\317\204\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\220\377\377\377\1\376\376" \ - "\376\202\377\377\377\3\204\204\204::<;;=\204::<\2yy{\376\376\376\221" \ - "\377\377\377\1kkm\206::<\1\316\316\316\305\377\377\377\4kkm;;=::<;;=" \ - "\203::<\1\316\316\316\210\377\377\377\1TTV\206::<\2\317\317\321\376\376" \ - "\376\231\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377" \ - "\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\233\377\377\377" \ - "\1TTV\202::<\7;;=::<;;=::i\0=i\177\236\263\232\377\377" \ - "\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1" \ - "\234\234\236\221\377\377\377\4\376\376\376\377\377\377SSU;;=\202::<\4" \ - ";;=99;;;=\204\204\206\203\377\377\377\1\376\376\376\226\377\377\377\11" \ - "\363\363\36399;;;=::<;;=::<;;=::<\316\316\316\202\377\377\377\1\376\376" \ - "\376\217\377\377\377\1kkm\206::<\1\316\316\316\304\377\377\377\1\316" \ - "\316\316\206::<\1kkk\211\377\377\377\2\235\235\23599;\202;;=\6::<;;=" \ - "::99;\202::<\3;;" \ - "=::<\234\234\236\211\377\377\377\4\377\375\376\376\377\377\254\334\363" \ - "Z\266\347\211[\267\350\6\\\266\350X\267\347\326\354\367\377\376\377\376" \ - "\377\377\377\377\375\232\377\377\377\3\377\377\373\375\377\376\376\377" \ - "\377\202\377\377\375\3\276\320\336\0>g\0>i\210\0=i\3\0>i\0=i\177\236" \ - "\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234" \ - "\234\236\206::<\1\234\234\236\223\377\377\377\1\235\235\237\204::<\4" \ - "<<>::<;;=\363\363\363\206\377\377\377\1\376\376\376\222\377\377\377\2" \ - "\234\234\234;;=\205::<\1SSU\204\377\377\377\1\376\376\376\216\377\377" \ - "\377\1kkm\206::<\1\316\316\316\304\377\377\377\1\204\204\204\203::<\1" \ - "99;\202::<\1\265\265\265\211\377\377\377\2\363\363\363FFH\205::<\2;;" \ - "=\346\346\346\231\377\377\377\1\234\234\234\206::<\1\234\234\234\243" \ - "\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\232" \ - "\377\377\377\1\222\222\222\202::<\1;;=\202::<\3;;=FFH\362\362\364\251" \ - "\377\377\377\1\235\235\235\203::<\7;;=::<;;=;;;\331\331\331\377\377\377" \ - "\376\376\376\214\377\377\377\2\234\234\234;;=\205::<\1\316\316\316\202" \ - "\377\377\377\3\376\376\376\377\377\377\301\301\301\205::<\4;;=::<__a" \ - "\376\376\376\216\377\377\377\4\376\376\376yyy::<;;=\205::<\1\316\316" \ - "\320\204\377\377\377\2\316\316\31699;\203::<\3""99;::<\234\234\236\207" \ - "\377\377\377\2\376\377\377\376\376\374\202\377\376\377\3\254\332\362" \ - "Y\267\352[\267\350\210Y\270\350\7[\267\350Y\267\352\326\356\370\376\376" \ - "\377\377\376\377\377\375\377\376\377\377\231\377\377\377\10\377\377\375" \ - "\376\377\377\377\377\377\377\376\377\377\377\375\276\317\331\1>j\0>j" \ - "\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1" \ - "kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377\377" \ - "\1\376\376\376\202\377\377\377\4\363\363\365;;=::<;;=\204::<\1\234\234" \ - "\234\231\377\377\377\1SSS\202::<\1;;=\203::<\1\265\265\267\223\377\377" \ - "\377\1kkm\206::<\1\316\316\316\300\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\346\346\350\203::<\4;;=::<;;=SSU\213\377\377\377\1\204\204" \ - "\204\203::<\1;;=\202::<\1\204\204\206\202\377\377\377\1\376\376\376\226" \ - "\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm" \ - "\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\227\377\377\377\1\376" \ - "\376\376\202\377\377\377\3TTV::<;;=\203::<\2;;=\205\205\205\252\377\377" \ - "\377\1\347\347\347\202::<\202;;=\203::<\1\235\235\237\204\377\377\377" \ - "\1\376\376\376\211\377\377\377\1\234\234\234\206::<\1\316\316\316\205" \ - "\377\377\377\1\205\205\205\202::<\6;;=::<;;=::<;;=\234\234\236\213\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\302\302\302\202;;=\203::<\3" \ - ";;=::<\221\221\221\202\377\377\377\1\376\376\376\202\377\377\377\1\316" \ - "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \ - "\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317" \ - "\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \ - "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224" \ - "\377\377\377\4\204\204\204;;=::<;;=\203::<\1TTT\204\377\377\377\1\376" \ - "\376\376\223\377\377\377\1\300\300\300\203::<\5;;=::<;;=FFF\363\363\363" \ - "\223\377\377\377\1kkm\203::<\4;;=::<;;=\316\316\320\277\377\377\377\14" \ - "\376\376\376\377\377\377\376\376\376\377\377\377\204\204\206::<;;=::" \ - "<99;<<>99;\265\265\267\213\377\377\377\3\346\346\346::<;;=\202::<\1;" \ - ";=\202::<\2\347\347\347\376\376\376\227\377\377\377\1\234\234\234\206" \ - "::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206" \ - "::<\1\234\234\236\226\377\377\377\4\376\376\376\377\377\377\376\376\376" \ - "\346\346\350\202;;=\203::<\3""99;<<>\301\301\301\253\377\377\377\1aa" \ - "c\202::<\1;;=\202::<\2;;=jjl\205\377\377\377\1\376\376\376\210\377\377" \ - "\377\1\234\234\234\206::<\1\316\316\316\202\377\377\377\1\376\376\376" \ - "\202\377\377\377\3\362\362\362SSU;;=\205::<\2;;=\332\332\332\210\377" \ - "\377\377\1\376\376\376\203\377\377\377\2\363\363\363FFH\202::<\202;;" \ - "=\5::<;;=SSS\363\363\363\376\376\376\204\377\377\377\1\316\316\316\206" \ - "::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350" \ - "\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0" \ - ">i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::" \ - "<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377" \ - "\377\1\332\332\332\207::<\1\301\301\301\227\377\377\377\1lll\204::<\3" \ - ";;=::<\221\221\221\202\377\377\377\3\376\376\376\377\377\377\376\376" \ - "\376\217\377\377\377\1kkm\204::<\3;;=99;\316\316\316\241\377\377\377" \ - "\1\376\376\376\234\377\377\377\10\376\376\376\377\377\377\376\376\376" \ - "\377\377\377\363\363\363FFH;;=::<\202;;=\3::i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \ - "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \ - "\225\377\377\377\1__a\204;;=\5""99;::99;\202::<\4;;=::<;;=\331\331\331\215\377\377\377\1\234\234\234" \ - "\206::<\1\316\316\316\207\377\377\377\1\222\222\224\202::<\3;;=99;<<" \ - ">\202::<\4\234\234\236\376\376\376\377\377\377\376\376\376\203\377\377" \ - "\377\1\376\376\376\203\377\377\377\6\302\302\304;;=99;;;=::<;;=\202:" \ - ":<\1\234\234\234\202\377\377\377\1\376\376\376\204\377\377\377\1\316" \ - "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \ - "\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317" \ - "\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \ - "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\225" \ - "\377\377\377\2\265\265\265;;=\202::<\2""99;;;=\202::<\2\347\347\347\376" \ - "\376\376\215\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377" \ - "\377\377\3\221\221\223;;=99;\204::<\3xxz\377\377\377\376\376\376\202" \ - "\377\377\377\202\376\376\376\217\377\377\377\1kkm\202::<\5;;=99;;;=9" \ - "9;\317\317\317\233\377\377\377\1\376\376\376\237\377\377\377\1\376\376" \ - "\376\204\377\377\377\3\376\376\376\377\377\377GGI\202::<\5;;=::<;;=:" \ - ":<\346\346\346\213\377\377\377\1\376\376\376\202\377\377\377\2``b99;" \ - "\202;;=\203::<\3\247\247\247\377\377\377\376\376\376\225\377\377\377" \ - "\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377" \ - "\377\377\1kkm\206::<\1\234\234\236\231\377\377\377\10kkm::<;;=::<;;=" \ - "99;::<\235\235\237\255\377\377\377\202::<\1;;=\204::<\1\301\301\301\215" \ - "\377\377\377\1\234\234\234\206::<\1\316\316\316\206\377\377\377\5\376" \ - "\376\376\364\364\364TTV::<99;\202;;=\203::<\4\332\332\334\376\376\376" \ - "\377\377\377\376\376\376\203\377\377\377\6\376\376\376\377\377\377\363" \ - "\363\363FFH::<;;=\204::<\1__a\210\377\377\377\1\316\316\316\206::<\1" \ - "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270" \ - "\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0" \ - "=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \ - "\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377\377\5\376" \ - "\376\376\377\377\377GGI::<;;=\203::<\4;;=\220\220\222\377\377\377\376" \ - "\376\376\214\377\377\377\1\376\376\376\203\377\377\377\10\376\376\376" \ - "\377\377\377\363\363\363FFH::<;;=99;;;=\202::<\1\316\316\320\202\377" \ - "\377\377\1\376\376\376\204\377\377\377\1\376\376\376\215\377\377\377" \ - "\1kkm\206::<\1\316\316\316\277\377\377\377\3\376\376\376\377\377\377" \ - "\265\265\267\204::<\3;;=::<\205\205\205\213\377\377\377\1\376\376\376" \ - "\202\377\377\377\2\376\376\376\265\265\265\202::<\5""99;<<>::<;;=SSU" \ - "\202\377\377\377\1\376\376\376\224\377\377\377\1\234\234\234\206::<\1" \ - "\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<" \ - "\1\234\234\236\230\377\377\377\2\376\376\376SSU\204::<\3;;=::<\266\266" \ - "\266\253\377\377\377\3\376\376\376\377\377\377^^`\206::<\1\234\234\234" \ - "\202\377\377\377\1\376\376\376\212\377\377\377\1\234\234\234\206::<\1" \ - "\316\316\316\205\377\377\377\6\376\376\376\377\377\377\376\376\376\315" \ - "\315\317::<;;=\202::<\4;;=99;::<``b\210\377\377\377\4xxz99;<<>::<\202" \ - ";;=\202::<\1\332\332\332\203\377\377\377\1\376\376\376\204\377\377\377" \ - "\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \ - "\350\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276" \ - "\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \ - "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \ - "\226\377\377\377\1\234\234\234\206::<\2FFH\376\376\376\214\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\3\265\265" \ - "\265;;=99;\202;;=\202::<\1SSU\202\377\377\377\1\376\376\376\223\377\377" \ - "\377\1kkm\203::<\4""99;::<;;=\316\316\320\275\377\377\377\202\376\376" \ - "\376\4\377\377\377\376\376\376SSU;;=\202::<\4;;=::<;;=\332\332\332\215" \ - "\377\377\377\5\376\376\376\377\377\377\376\376\376SSU;;=\204::<\2;;=" \ - "\264\264\264\226\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377" \ - "\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\231\377" \ - "\377\377\207::<\1\316\316\316\254\377\377\377\2\376\376\376lln\202::" \ - "<\1;;=\202::<\4;;=\233\233\233\377\377\377\376\376\376\202\377\377\377" \ - "\1\376\376\376\210\377\377\377\1\234\234\234\206::<\1\316\316\316\203" \ - "\377\377\377\202\376\376\376\204\377\377\377\1\234\234\234\207::<\1\234" \ - "\234\236\205\377\377\377\4\376\376\376\300\300\302::<;;=\205::<\2\234" \ - "\234\234\376\376\376\202\377\377\377\1\376\376\376\205\377\377\377\1" \ - "\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \ - "\350\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276" \ - "\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \ - "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \ - "\226\377\377\377\1\347\347\347\204::<\5;;=99;;;=\265\265\265\376\376" \ - "\376\222\377\377\377\2___99;\202::<\4;;=::<;;=\265\265\265\207\377\377" \ - "\377\1\376\376\376\216\377\377\377\1kkm\203::<\1;;=\202::<\1;;=\233:" \ - ":<\5""99;;;=::<:::\234\234\234\240\377\377\377\2\316\316\316;;=\204:" \ - ":<\2;;=kkm\221\377\377\377\1\234\234\236\203::<\1;;=\202::<\3kkk\377" \ - "\377\377\376\376\376\224\377\377\377\1\234\234\234\206::<\1\234\234\234" \ - "\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236" \ - "\231\377\377\377\207::<\1\316\316\316\255\377\377\377\2\221\221\221;" \ - ";=\205::<\1\204\204\204\203\377\377\377\1\376\376\376\211\377\377\377" \ - "\1\234\234\234\206::<\1\316\316\316\210\377\377\377\3\376\376\376\377" \ - "\377\377``b\202::<\7;;=::<;;=::<;;=\332\332\332\376\376\376\202\377\377" \ - "\377\3\376\376\376\363\363\363GGI\203::<\4;;=::<;;=__a\206\377\377\377" \ - "\1\376\376\376\203\377\377\377\1\316\316\316\206::<\1\234\234\236\213" \ - "\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[\267\350" \ - "\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3\0>i\0=i" \ - "\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \ - "\1\234\234\236\206::<\1\234\234\236\227\377\377\377\1\204\204\206\204" \ - "::<\3;;=::i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \ - "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\227\377" \ - "\377\377\1\315\315\315\205::<\3;;=::<\332\332\334\221\377\377\377\1\204" \ - "\204\206\205::<\2;;=\205\205\205\227\377\377\377\1kkm\203::<\3;;=::<" \ - ";;=\234::<\1:9>\203::<\1\234\234\236\237\377\377\377\1\331\331\331\202" \ - ";;=\204::<\1SSU\217\377\377\377\5\376\376\376\377\377\377\376\376\376" \ - "\377\377\377\204\204\204\204::<\3;;=99;yyy\203\377\377\377\1\376\376" \ - "\376\221\377\377\377\1\234\234\234\206::<\1\234\234\234\235\377\377\377" \ - "\1\376\376\376\205\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206:" \ - ":<\1\234\234\236\231\377\377\377\203::<\1;;=\203::<\202\377\377\377\1" \ - "\376\376\376\253\377\377\377\2\233\233\235;;=\205::<\3kkm\377\377\377" \ - "\376\376\376\202\377\377\377\1\376\376\376\210\377\377\377\1\234\234" \ - "\234\206::<\1\316\316\316\213\377\377\377\1\234\234\236\202;;=\1""99" \ - ";\203::<\5;;=\235\235\235\377\377\377\376\376\376\302\302\302\207::<" \ - "\1\251\251\251\213\377\377\377\1\316\316\316\206::<\1\234\234\236\213" \ - "\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[\267\350" \ - "\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3\0>i\0=i" \ - "\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \ - "\1\234\234\236\206::<\1\234\234\236\223\377\377\377\1\376\376\376\204" \ - "\377\377\377\1^^`\202::<\202;;=\3::<<<>\204\204\206\213\377\377\377\1" \ - "\376\376\376\204\377\377\377\1\363\363\363\205::<\3;;=::<\346\346\346" \ - "\227\377\377\377\1kkm\204::<\3;;=::<;;=\234::<\1;;=\202::<\1\234\234" \ - "\236\237\377\377\377\4\204\204\20499;::<;;=\203::<\3\266\266\270\377" \ - "\377\377\376\376\376\221\377\377\377\5\346\346\346;;=::<;;=::<\202;;" \ - "=\4::<\346\346\350\377\377\377\376\376\376\202\377\377\377\1\376\376" \ - "\376\217\377\377\377\1\234\234\234\206::<\1\234\234\234\237\377\377\377" \ - "\202\376\376\376\202\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206" \ - "::<\1\234\234\236\224\377\377\377\6\376\376\376\377\377\377\376\376\376" \ - "\377\377\377\376\376\376;;=\206::<\1\331\331\331\255\377\377\377\1\234" \ - "\234\236\202::<\1;;=\203::<\2kkm\376\376\376\202\377\377\377\1\376\376" \ - "\376\211\377\377\377\1\234\234\234\206::<\1\316\316\316\212\377\377\377" \ - "\3\376\376\376\377\377\377___\204::<\7;;=99;::<\332\332\332\363\363\365" \ - "FFH;;=\204::<\3;;=kkm\376\376\376\213\377\377\377\1\316\316\316\206:" \ - ":<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350" \ - "\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0" \ - ">i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::" \ - "<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377" \ - "\377\1\376\376\376\203\377\377\377\4\265\265\267::<;;=::<\202;;=\3::" \ - "i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206" \ - "::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\231\377\377" \ - "\377\10FFH::<;;=99;;;=::<;;=\265\265\265\216\377\377\377\4\376\376\376" \ - "TTV99;;;=\202::<\202;;=\1\301\301\301\230\377\377\377\1kkm\202::<\1;" \ - ";=\204::<\3;;=::<;;=\232::<\5;;=::<\234\234\234\377\377\377\376\376\376" \ - "\232\377\377\377\3\376\376\376\377\377\377\221\221\221\202::<\1""99;" \ - "\203::<\5\234\234\236\377\377\377\376\376\376\377\377\377\376\376\376" \ - "\216\377\377\377\1\376\376\376\202\377\377\377\2\316\316\320::<\202;" \ - ";=\204::<\2\363\363\363\376\376\376\202\377\377\377\1\376\376\376\217" \ - "\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm" \ - "\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\224\377\377\377\1\376" \ - "\376\376\204\377\377\377\1""99;\202::<\1;;=\203::<\1\316\316\316\252" \ - "\377\377\377\10\376\376\376\377\377\377\376\376\376kkm;;=::<;;=99;\202" \ - "::<\1\234\234\236\215\377\377\377\1\234\234\234\206::<\1\316\316\316" \ - "\215\377\377\377\5\247\247\247;;=99;::<;;=\210::<\5""99;::<\250\250\252" \ - "\377\377\377\376\376\376\213\377\377\377\1\316\316\316\206::<\1\234\234" \ - "\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[" \ - "\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3" \ - "\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \ - "\377\377\1\234\234\236\206::<\1\234\234\236\223\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\203\377\377\377\1\234\234\236\202::<\1;" \ - ";=\202::<\2""99;SSU\214\377\377\377\5\376\376\376\377\377\377\301\301" \ - "\301;;=<<>\202::<\3;;=::i\210\0=i\3\0>i\0=i\177\236\263" \ - "\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234" \ - "\236\206::<\1\234\234\236\224\377\377\377\1\376\376\376\204\377\377\377" \ - "\2\346\346\34699;\202::<\2;;=::<\202;;=\1\315\315\315\212\377\377\377" \ - "\1\376\376\376\202\377\377\377\1yy{\203::<\4;;=99;;;=\250\250\250\202" \ - "\377\377\377\1\376\376\376\226\377\377\377\1kkm\206::<\1\317\317\317" \ - "\240\377\377\377\1\376\376\376\234\377\377\377\1\234\234\234\202::<\2" \ - "99;;;=\202::<\1\204\204\206\203\377\377\377\1\376\376\376\220\377\377" \ - "\377\1\376\376\376\202\377\377\377\2\264\264\264::<\202;;=\203::<\3G" \ - "GI\364\364\364\376\376\376\202\377\377\377\1\376\376\376\216\377\377" \ - "\377\1\234\234\234\206::<\1\234\234\234\241\377\377\377\3\376\376\376" \ - "\377\377\377kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\225" \ - "\377\377\377\202\376\376\376\202\377\377\377\12kkm::<;;=99;::<;;=::<" \ - "\204\204\204\377\377\377\376\376\376\251\377\377\377\4\376\376\376\377" \ - "\377\377::<99;\202;;=\203::<\1\316\316\320\215\377\377\377\1\234\234" \ - "\234\206::<\1\316\316\316\216\377\377\377\5\346\346\350GGI;;=::<;;=\202" \ - "::<\2""99;;;=\202::<\3;;=GGI\346\346\350\216\377\377\377\1\316\316\316" \ - "\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267" \ - "\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0" \ - "=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206" \ - "::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\231\377\377" \ - "\377\2\376\376\376\205\205\205\202::<\5""99;;;=::<;;=\205\205\207\213" \ - "\377\377\377\12\376\376\376\346\346\346::<;;=99;::<99;;;=FFH\363\363" \ - "\363\231\377\377\377\1kkm\202::<\2;;=::<\202;;=\3\316\316\316\377\377" \ - "\377\376\376\376\234\377\377\377\1\376\376\376\236\377\377\377\1SSS\204" \ - "::<\3;;=99;\347\347\351\204\377\377\377\1\376\376\376\215\377\377\377" \ - "\1\376\376\376\205\377\377\377\1SSU\203::<\4;;=99;::<\265\265\265\202" \ - "\377\377\377\1\376\376\376\217\377\377\377\1\234\234\234\206::<\1\234" \ - "\234\234\242\377\377\377\2\376\376\376SSU\206::<\237\377\377\377\1kk" \ - "m\206::<\1\234\234\236\231\377\377\377\4\221\221\223;;=::<;;=\202::<" \ - "\3;;=___\376\376\376\253\377\377\377\1\332\332\332\204::<\1;;=\202::" \ - "<\1\346\346\350\203\377\377\377\1\376\376\376\211\377\377\377\1\234\234" \ - "\234\206::<\1\316\316\316\217\377\377\377\1\250\250\252\204::<\202;;" \ - "=\2::<;;=\202::<\1\265\265\267\217\377\377\377\1\316\316\316\206::<\1" \ - "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270" \ - "\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0" \ - "=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \ - "\377\377\377\1\234\234\236\206::<\1\234\234\236\232\377\377\377\1\316" \ - "\316\316\203::<\2""99;<<>\202::<\1\346\346\350\213\377\377\377\4\221" \ - "\221\223;;=::<;;=\203::<\1\204\204\206\232\377\377\377\1kkm\203::<\1" \ - ";;=\202::<\1\316\316\316\274\377\377\377\2\265\265\267;;=\205::<\1xx" \ - "x\231\377\377\377\1\250\250\250\206::<\1TTV\222\377\377\377\1\234\234" \ - "\234\204::<\3;;=::<\235\235\235\203\377\377\377\1\376\376\376\237\377" \ - "\377\377\202;;=\203::<\3;;=::<\376\376\376\236\377\377\377\1kkm\206:" \ - ":<\1\234\234\236\225\377\377\377\1\376\376\376\203\377\377\377\1\265" \ - "\265\267\204::<\1;;=\202::<\1\363\363\363\253\377\377\377\1\250\250\250" \ - "\204::<\3;;=::j\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \ - "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\233\377" \ - "\377\377\1``b\205::<\2;;=\235\235\237\210\377\377\377\1\376\376\376\202" \ - "\377\377\377\2FFH;;=\205::<\1\346\346\346\202\377\377\377\1\376\376\376" \ - "\227\377\377\377\1kkm\206::<\1\316\316\316\266\377\377\377\1\376\376" \ - "\376\205\377\377\377\5__a::<;;=::<;;=\202::<\1SSU\202kkm\1lln\203kkm" \ - "\1lln\222kkm\4__a;;=99;;;=\204::<\3\301\301\301\377\377\377\376\376\376" \ - "\215\377\377\377\202\376\376\376\1\235\235\235\204::<\3""99;;;=\221\221" \ - "\221\243\377\377\377\203::<\1;;=\202::<\1""99;\237\377\377\377\1kkm\206" \ - "::<\1\234\234\236\231\377\377\377\1\332\332\332\202::<\3;;=::<99;\202" \ - ";;=\1\264\264\264\210\377\377\377\1\376\376\376\232\377\377\377\1\376" \ - "\376\376\206\377\377\377\2\376\376\376xxx\202::<\1;;=\203::<\1xxz\216" \ - "\377\377\377\1\234\234\234\206::<\1\316\316\316\220\377\377\377\3\363" \ - "\363\365FFH;;=\202::<\1;;=\202::<\2FFH\363\363\363\220\377\377\377\1" \ - "\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \ - "\350\211[\267\350\10X\267\347Y\267\352\326\354\371\377\377\377\376\376" \ - "\376\377\376\377\377\377\377\377\376\377\234\377\377\377\2\376\376\374" \ - "\277\320\330\212\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \ - "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\233" \ - "\377\377\377\1\265\265\267\203::<\4""99;;;=::9" \ - "9;::<;;=::<99;\203::<\2;;=99;\202::<\1;;=\224::<\1;;=\202::<\1;;=\203" \ - "::<\1kkm\203\377\377\377\1\376\376\376\215\377\377\377\1\300\300\300" \ - "\202::<\11;;=::<99;;;=jjl\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\236\377\377\377\1\346\346\350\206::<\1__a\237\377\377\377\1kkm\206" \ - "::<\1\234\234\236\231\377\377\377\2\376\376\376SSU\206::<\2yy{\376\376" \ - "\376\206\377\377\377\1\376\376\376\234\377\377\377\1\376\376\376\205" \ - "\377\377\377\4\363\363\363::<<<>99;\202::<\3;;=::<\265\265\267\203\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\210\377\377\377\1\234" \ - "\234\234\206::<\1\316\316\316\221\377\377\377\4\301\301\30199;::<;;=" \ - "\202::<\6;;=\301\301\301\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\215\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377" \ - "\2\255\333\363Y\270\350\211[\267\350\6Y\270\350Y\267\352\325\353\370" \ - "\377\377\377\376\377\375\377\375\377\234\377\377\377\5\376\376\376\377" \ - "\377\377\377\377\375\276\317\327\2\77k\211\0=i\3\0>i\0=i\177\236\263" \ - "\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234" \ - "\236\206::<\1\234\234\236\234\377\377\377\1GGI\203::<\1;;=\202::<\2\301" \ - "\301\301\376\376\376\204\377\377\377\1\376\376\376\203\377\377\377\3" \ - "lln::<;;=\202::<\202;;=\4\301\301\303\376\376\376\377\377\377\376\376" \ - "\376\230\377\377\377\1kkm\206::<\1\316\316\316\265\377\377\377\1\376" \ - "\376\376\205\377\377\377\3kkm::<;;=\202::<\2""99;<<>\202::<\3;;=::<;" \ - ";=\202::<\1;;=\222::<\4""99;;;=::<;;=\203::<\1;;=\202::<\3\316\316\316" \ - "\377\377\377\376\376\376\215\377\377\377\3\376\376\376\316\316\316;;" \ - "=\203::<\3;;=::\204::<\3\346" \ - "\346\346\377\377\377\376\376\376\202\377\377\377\1\376\376\376\211\377" \ - "\377\377\1\234\234\234\206::<\1\316\316\316\220\377\377\377\14\376\376" \ - "\376\377\377\377yy{::<99;;;=::j\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \ - "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\234" \ - "\377\377\377\1\234\234\234\206::<\3jjj\377\377\377\376\376\376\204\377" \ - "\377\377\4\376\376\376\377\377\377\332\332\33299;\203::<\3;;=::j\210\0=i\3\0>i\0=i\177" \ - "\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1" \ - "\234\234\236\206::<\1\234\234\236\233\377\377\377\2\376\376\376\347\347" \ - "\347\202::<\2;;=::<\203;;=\1\346\346\346\207\377\377\377\5\204\204\204" \ - "<<>99;::<;;=\202::<\2\251\251\251\376\376\376\205\377\377\377\1\376\376" \ - "\376\225\377\377\377\1kkm\206::<\1\316\316\316\264\377\377\377\1\376" \ - "\376\376\205\377\377\377\3\204\204\206::<;;=\203::<\1;;=\205::<\1;;=" \ - "\225::<\3;;=::<;;=\202::<\1;;=\202::<\1;;=\202::<\1\347\347\347\220\377" \ - "\377\377\2SSU;;=\203::<\3;;=::<\265\265\265\237\377\377\377\7\376\376" \ - "\376\377\377\377lln99;::<;;=99;\202::<\1\265\265\267\237\377\377\377" \ - "\1kkm\206::<\1\234\234\236\225\377\377\377\1\376\376\376\204\377\377" \ - "\377\3\376\376\376SSU;;=\204::<\3;;=FFH\346\346\346\202\377\377\377\1" \ - "\376\376\376\237\377\377\377\1\376\376\376\204\377\377\377\2\265\265" \ - "\267;;=\202::<\1;;=\203::<\1\265\265\265\217\377\377\377\1\234\234\234" \ - "\206::<\1\316\316\316\223\377\377\377\4\301\301\301::<:::\302\302\302" \ - "\223\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2" \ - "\255\333\363Y\270\350\212[\267\350\2Y\270\350\332\354\370\202\377\377" \ - "\377\3\376\376\376\376\377\377\377\376\373\235\377\377\377\1\276\317" \ - "\331\202\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \ - "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\235" \ - "\377\377\377\1\204\204\204\206::<\1\221\221\223\206\377\377\377\2\363" \ - "\363\363GGI\202::<\5""99;;;=::i\210\0=i\3\0>i\0=i\177\236" \ - "\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234" \ - "\234\236\206::<\1\234\234\236\235\377\377\377\1\316\316\316\206::<\1" \ - "FFH\203\377\377\377\1\376\376\376\202\377\377\377\1\250\250\250\203:" \ - ":<\1;;=\202::<\1\204\204\206\203\377\377\377\1\376\376\376\231\377\377" \ - "\377\1kkm\206::<\1\316\316\316\271\377\377\377\1\234\234\236\204::<\4" \ - ";;=::j\0>i\210\0=i\3\0>i\0=i\177\236\263\232" \ - "\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236" \ - "\206::<\1\234\234\236\236\377\377\377\2__a;;=\204::<\5;;=\265\265\265" \ - "\376\376\376\377\377\377\376\376\376\202\377\377\377\1SSU\204::<\3;;" \ - "=::<\346\346\350\235\377\377\377\1kkm\206::<\1\316\316\316\270\377\377" \ - "\377\2\363\363\365GGI\205::<\3;;=\333\333\333\376\376\376\237\377\377" \ - "\377\10FFH::<;;=::<;;=99;;;=\233\233\235\217\377\377\377\5\346\346\346" \ - "::<;;=::<;;=\203::<\1\234\234\234\210\377\377\377\1\376\376\376\217\377" \ - "\377\377\1\376\376\376\206\377\377\377\1TTT\205::<\3;;=\221\221\221\376" \ - "\376\376\237\377\377\377\1kkm\206::<\1\234\234\236\234\377\377\377\12" \ - "\233\233\233::<;;=::<;;=::<;;=::l\0\77j\210\0=i\3\0>i\0=" \ - "i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \ - "\1\234\234\236\206::<\1\234\234\236\236\377\377\377\1\265\265\265\204" \ - "::<\3;;=::<__a\204\377\377\377\1\317\317\321\206::<\1kkk\236\377\377" \ - "\377\1kkm\206::<\1\316\316\316\267\377\377\377\3\376\376\376\250\250" \ - "\25299;\202;;=\203::<\1kkm\233\377\377\377\1\376\376\376\205\377\377" \ - "\377\10\234\234\236;;=::<;;=::<;;=99;GGI\204\377\377\377\3\376\376\376" \ - "\377\377\377\376\376\376\210\377\377\377\5\376\376\376__a::<;;=99;\203" \ - ";;=\2FFH\363\363\363\204\377\377\377\3\376\376\376\377\377\377\376\376" \ - "\376\224\377\377\377\5\376\376\376\377\377\377\301\301\301:::;;=\202" \ - "::<\202;;=\4::<\332\332\332\377\377\377\376\376\376\236\377\377\377\1" \ - "kkm\206::<\1\234\234\236\233\377\377\377\3\376\376\376\364\364\364FF" \ - "H\205::<\4;;=99;xxx\376\376\376\203\377\377\377\1\376\376\376\203\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\224\377\377\377" \ - "\4\376\376\376\377\377\377\362\362\362GGI\202::<\6;;=::<;;=::<99;\250" \ - "\250\252\221\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377" \ - "\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363" \ - "Y\270\350\211[\267\350\7Y\267\352X\267\347[\266\353\301\344\367\377\377" \ - "\377\376\376\376\376\377\377\211\377\377\377\6\377\376\377\377\377\377" \ - "\377\375\376\377\377\377\377\377\375\377\376\377\202\377\377\377\210" \ - "\377\376\377\10\377\377\375\376\377\377\377\377\377\376\377\375\237\266" \ - "\306\0=i\2=g\0>e\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \ - "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \ - "\237\377\377\377\1EEG\202::<\202;;=\11""99;;;=\332\332\332\377\377\377" \ - "\376\376\376\377\377\377xxz::<;;=\204::<\1\302\302\302\236\377\377\377" \ - "\1kkm\206::<\1\316\316\316\266\377\377\377\4\376\376\376\377\377\377" \ - "SSU;;=\202::<\1;;=\202::<\1\316\316\320\235\377\377\377\15\376\376\376" \ - "\377\377\377\376\376\376\377\377\377\363\363\365::<;;=99;;;=::<;;=::" \ - "<\265\265\265\215\377\377\377\3\376\376\376\377\377\377\266\266\270\202" \ - "::<\1;;=\203::<\2;;=\204\204\206\205\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\213\377\377\377\1\376\376\376\205\377\377\377\1\376" \ - "\376\376\202\377\377\377\2\363\363\363SSU\203::<\4;;=99;;;=SSU\241\377" \ - "\377\377\1kkm\206::<\1\234\234\236\235\377\377\377\3\265\265\265;;=9" \ - "9;\202::<\1;;=\203::<\1\204\204\206\206\377\377\377\1\376\376\376\216" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377\377\377\6" \ - "\376\376\376\377\377\377\362\362\364``b::<;;=\202::<\1;;=\202::<\2aa" \ - "c\376\376\376\221\377\377\377\1\234\234\234\206::<\1\316\316\316\252" \ - "\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255" \ - "\333\363Y\270\350\211[\267\350\10X\267\347[\267\346[\265\347[\267\346" \ - "\230\320\361\327\360\367\325\356\365\331\355\370\210\326\354\371\10\325" \ - "\355\367\323\355\372\366\373\377\377\376\374\376\377\375\276\320\332" \ - "\277\320\330\301\317\330\210\276\317\331\10\276\317\327\276\320\334\301" \ - "\316\327_\207\241\0>i\0=l\0\77k\0>i\210\0=i\3\0>i\0=i\177\236\263\232" \ - "\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236" \ - "\206::<\1\234\234\236\237\377\377\377\3\222\222\224::<;;=\202::<\3;;" \ - "=99;\205\205\207\202\377\377\377\2\346\346\346;;=\202::<\1;;=\202::<" \ - "\1SSU\237\377\377\377\1kkm\206::<\1\316\316\316\267\377\377\377\5\265" \ - "\265\26799;;;=::<;;=\202::<\1TTV\243\377\377\377\1\204\204\206\205::" \ - "<\2;;=SSU\206\377\377\377\1\376\376\376\210\377\377\377\3\376\376\376" \ - "GGI;;=\202::<\5;;=::<;;=::<\301\301\303\203\377\377\377\1\376\376\376" \ - "\214\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\204\377\377\377\3\204\204\206;;=::<\202;;=\203" \ - "::<\1\265\265\265\241\377\377\377\1kkm\206::<\1\234\234\236\236\377\377" \ - "\377\12kkk::<99;;;=::<99;;;=::<;;=\204\204\206\210\377\377\377\202\376" \ - "\376\376\213\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \ - "\202\377\377\377\1\376\376\376\202\377\377\377\2\364\364\366__a\206:" \ - ":<\3;;=::<\332\332\332\222\377\377\377\1\234\234\234\206::<\1\316\316" \ - "\316\252\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377" \ - "\2\255\333\363Y\270\350\211[\267\350\3\\\266\350X\270\352\\\266\352\202" \ - "[\267\350\3X\267\347Y\270\350Z\266\347\210Y\270\350\10[\267\350[\265" \ - "\351\327\355\372\376\377\377\377\377\375\0>j\0>i\1\77h\210\0>i\10\0\77" \ - "k\0>g\2=g\0=i\0\77j\0j\210\0=i\3\0>i\0=i\177\236\263\232\377" \ - "\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206" \ - "::<\1\234\234\236\236\377\377\377\2\376\376\376\346\346\346\202::<\10" \ - ";;=::<99;;;=::<\363\363\363\377\377\377\234\234\236\202::<\6;;=::<;;" \ - "=::<\250\250\250\376\376\376\236\377\377\377\1kkm\206::<\1\316\316\316" \ - "\267\377\377\377\10kkm;;=::<;;=99;::<;;=\264\264\266\236\377\377\377" \ - "\1\376\376\376\204\377\377\377\2\346\346\346;;=\202::<\202;;=\202::<" \ - "\2\316\316\320\376\376\376\203\377\377\377\1\376\376\376\205\377\377" \ - "\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3\234\234" \ - "\234::<;;=\202::<\6;;=::<;;=GGI\332\332\332\376\376\376\224\377\377\377" \ - "\1\376\376\376\203\377\377\377\2\266\266\266;;=\202::<\6;;=::<;;=::<" \ - "SSU\376\376\376\241\377\377\377\1kkm\206::<\1\234\234\236\236\377\377" \ - "\377\2\363\363\363GGI\203::<\1;;=\203::<\3""99;\204\204\204\363\363\363" \ - "\225\377\377\377\1\376\376\376\204\377\377\377\4\376\376\376\346\346" \ - "\346``b::<\202;;=\3::<99;<<>\202::<\1\250\250\250\223\377\377\377\1\234" \ - "\234\234\206::<\1\316\316\316\252\377\377\377\1\316\316\316\206::<\1" \ - "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\10Y" \ - "\270\350X\270\353Y\267\352X\266\351X\271\346[\267\350\\\266\353[\267" \ - "\350\210Y\270\350\7X\267\345]\267\351\323\355\372\377\376\377\376\377" \ - "\377\4=h\0>g\211\0=i\10\2=i\0@j\0>i\1>j\0>i\1\77h\0>g\0>j\210\0=i\3\0" \ - ">i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \ - "\377\377\1\234\234\236\206::<\1\234\234\236\237\377\377\377\6\376\376" \ - "\376yy{::<;;=::<;;=\202::<\4\251\251\251\376\376\376SSU;;=\203::<\3;" \ - ";=FFH\363\363\363\237\377\377\377\1kkm\206::<\1\316\316\316\264\377\377" \ - "\377\5\376\376\376\377\377\377\315\315\317::<;;=\204::<\2FFH\376\376" \ - "\376\237\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376kkm;" \ - ";=\204::<\6""99;lln\377\377\377\376\376\376\377\377\377\376\376\376\202" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377\10" \ - "\376\376\376\377\377\377SSU::<99;;;=99;;;=\202::<\2FFF\332\332\332\203" \ - "\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376\210\377\377" \ - "\377\1\265\265\265\206::<\3""99;::<\265\265\265\203\377\377\377\1\376" \ - "\376\376\236\377\377\377\1kkm\206::<\1\234\234\236\233\377\377\377\1" \ - "\376\376\376\203\377\377\377\1\331\331\331\204::<\3""99;;;=99;\202;;" \ - "=\2^^^\332\332\332\202\377\377\377\1\376\376\376\216\377\377\377\1\376" \ - "\376\376\206\377\377\377\5\376\376\376\316\316\316FFH::<;;=\204::<\7" \ - "99;::<\204\204\204\377\377\377\376\376\376\377\377\377\376\376\376\220" \ - "\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377\377\1\316" \ - "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \ - "\213[\267\350\6Y\270\350[\266\353[\267\350]\267\351X\266\351X\270\350" \ - "\210[\267\350\10X\266\351Z\266\351\326\354\367\377\376\377\376\377\372" \ - "\0>j\0>i\1>j\210\0=i\10\1\77h\0=h\0>i\1\77h\0>j\0=i\0>i\1>j\210\0=i\3" \ - "\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \ - "\377\377\1\234\234\236\206::<\1\234\234\236\237\377\377\377\2\376\376" \ - "\376\316\316\316\203::<\1;;=\202::<\4SSU\265\265\267;;=99;\202::<\5;" \ - ";=99;\204\204\204\377\377\377\376\376\376\236\377\377\377\1kkm\206::" \ - "<\1\316\316\316\263\377\377\377\1\376\376\376\202\377\377\377\1xxz\202" \ - "::<\1;;=\202::<\3""99;\234\234\236\376\376\376\236\377\377\377\1\375" \ - "\375\375\202\377\377\377\1\376\376\376\202\377\377\377\5\317\317\317" \ - "99;::<;;=::<\202;;=\2::<\332\332\332\210\377\377\377\3\376\376\376\377" \ - "\377\377\376\376\376\204\377\377\377\2\316\316\316;;=\206::<\3;;=::<" \ - "\250\250\252\217\377\377\377\1\376\376\376\204\377\377\377\2\363\363" \ - "\363\222\222\224\202::<\2;;=::<\202;;=\3""99;;;=kkm\205\377\377\377\1" \ - "\376\376\376\235\377\377\377\1kkm\206::<\1\234\234\236\235\377\377\377" \ - "\1\376\376\376\202\377\377\377\2\266\266\26699;\202::<\3;;=::<;;=\202" \ - "::<\3;;=FFH\234\234\234\202\377\377\377\1\376\376\376\223\377\377\377" \ - "\2\364\364\364\204\204\206\202::<\1;;=\202::<\1;;=\202::<\3""99;``b\376" \ - "\376\376\224\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377" \ - "\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363" \ - "Y\270\350\211[\267\350\10Y\271\353Z\266\347\\\267\344[\267\346X\267\347" \ - "[\267\350X\270\353Z\266\347\210Y\270\350\10Y\267\352\\\267\346\325\355" \ - "\371\377\377\377\376\377\377\0>g\0\77k\0>i\210\0\77j\10\0>i\3>h\0=i\0" \ - "\77i\0=j\0>g\0=j\0=f\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1" \ - "\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234" \ - "\236\234\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377" \ - "\377\2SSU;;=\202::<\202;;=\3::j\0=i\1>j\210\0>i\10\0\77j\1\77h\0>j\0>g\3>j\0\77i\0=j\0>i\210" \ - "\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm" \ - "\240\377\377\377\1\234\234\236\206::<\1\234\234\236\241\377\377\377\6" \ - "\266\266\270::<;;=::<99;::<\202;;=\205::<\2kkm\376\376\376\240\377\377" \ - "\377\1kkm\206::<\1\316\316\316\265\377\377\377\4\205\205\205;;=::<;;" \ - "=\203::<\3\204\204\206\377\377\377\376\376\376\245\377\377\377\1\265" \ - "\265\267\207::<\2\346\346\346\376\376\376\216\377\377\377\4\376\376\376" \ - "lll::<;;=\202::<\13;;=::<;;=::<;;=::g\1\1>k\220\0=i\15\0>g\1>j\0>" \ - "i\0\77j\1>j\0=i\0\77j\0>j\0=i\199;\203::<\1;;=\202::<\2""99;;;=\203::<\1\204\204\206" \ - "\206\377\377\377\1\376\376\376\221\377\377\377\10\234\234\234;;=::<9" \ - "9;;;=::<99;\316\316\316\252\377\377\377\4\317\317\317;;=88:;;=\202::" \ - "<\3;;=\234\234\234\376\376\376\205\377\377\377\1\377\375\377\202\377" \ - "\377\375\6\377\376\377\377\377\375\253\333\362Y\270\350X\267\347Z\266" \ - "\347\202Y\270\350\1[\267\350\202Z\266\347\2[\267\350Z\266\347\220[\267" \ - "\350\5[\267\352Z\266\351\327\355\372\377\375\376\377\376\377\202\1>j" \ - "\1\1>k\220\0>i\202\0=i\14\0\77k\0>i\0=i\1>j\0=i\0=j\0\77k\0=i\177\236" \ - "\263\377\377\377\376\377\377\375\376\377\224\377\377\377\1\376\376\376" \ - "\202\377\377\377\1\316\316\316\203::<\202;;=\3""99;kkm\376\376\376\234" \ - "\377\377\377\1\376\376\376\202\377\377\377\1\233\233\233\202::<\7;;=" \ - "::<;;=::<\234\234\236\377\377\377\376\376\376\233\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\202\377\377\377\4\221\221\221;;=99;;;=\202" \ - "::<\202;;=\203::<\1SSU\203\377\377\377\1\376\376\376\233\377\377\377" \ - "\10\376\376\376\377\377\377\376\376\376kkm::<;;=::<;;=\202::<\1;;=\202" \ - "::<\1;;=\240::<\1kkk\207\377\377\377\1\376\376\376\203\377\377\377\3" \ - "\375\375\375\377\377\377\376\376\376\202\377\377\377\2\233\233\235::" \ - "<\202;;=\203::<\1xxz\251\377\377\377\1\235\235\237\202::<\1;;=\203::" \ - "<\3GGI\363\363\363\376\376\376\217\377\377\377\2\363\363\363yyy\204:" \ - ":<\1;;=\203::<\1;;=\206::<\1""99;\203::<\1;;=\203::<\6;;=99;;;=::<;;" \ - "=99;\202;;=\3""99;GGI\301\301\301\206\377\377\377\1\376\376\376\232\377" \ - "\377\377\1\376\376\376\204\377\377\377\1lln\202::<\1;;=\202::<\2;;=\234" \ - "\234\236\241\377\377\377\1\376\376\376\202\377\377\377\2\332\332\334" \ - "__a\211::<\1;;=\205::<\1;;=\202::<\1;;=\202::<\4;;=::<99;;;=\202::<\1" \ - ";;=\202::<\1;;=\203::<\2FFH\265\265\267\206\377\377\377\3\376\376\376" \ - "\377\377\377\376\376\376\220\377\377\377\3\234\234\236::<;;=\203::<\2" \ - ";;=\316\316\316\252\377\377\377\2\315\315\31599;\203::<\5;;=::<\234\234" \ - "\234\377\377\377\376\376\376\205\377\377\377\7\377\377\375\375\377\376" \ - "\377\377\377\375\376\377\255\333\365Z\266\345[\267\350\202Y\270\350\1" \ - "X\267\347\202Y\267\352\3Z\266\351Z\266\347Y\270\350\221[\267\350\2[\267" \ - "\352\323\355\372\202\376\377\377\1\0=j\222\0=i\204\0>i\14\1\77h\0>g\0" \ - "=f\1>j\0\77i\0>i\177\237\266\377\377\375\377\376\375\377\377\377\376" \ - "\377\377\377\376\377\225\377\377\377\2\316\316\316::<\202;;=\202::<\4" \ - ";;=kkm\377\377\377\376\376\376\235\377\377\377\2\376\376\376\235\235" \ - "\235\202::<\1;;=\202::<\2;;=\234\234\236\242\377\377\377\3\346\346\346" \ - "::<;;=\210::<\2\235\235\237\376\376\376\234\377\377\377\1\376\376\376" \ - "\204\377\377\377\1lln\202::<\3;;=::<;;=\203::<\2;;=99;\240::<\1kkk\210" \ - "\377\377\377\11\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\377\377\377\376\376\376\364\364\366GGI\205::<\6;;=\316\316\316\377" \ - "\377\377\376\376\376\377\377\377\376\376\376\245\377\377\377\11\345\345" \ - "\345;;=::<;;=::<;;=::<;;=\234\234\236\222\377\377\377\7\234\234\234;" \ - ";=::<;;=99;;;=99;\203::<\1;;=\202::<\203;;=\2::<;;=\202::<\1;;=\202:" \ - ":<\1;;=\202::<\12;;=::<;;=99;::<``b\332\332\332\376\376\376\377\377\377" \ - "\376\376\376\202\377\377\377\5\376\376\376\377\377\377\376\376\376\377" \ - "\377\377\376\376\376\232\377\377\377\5\376\376\376\377\377\377\376\376" \ - "\376kkm;;=\202::<\1;;=\202::<\1\234\234\236\236\377\377\377\1\376\376" \ - "\376\207\377\377\377\2\234\234\236;;=\202::<\1;;=\204::<\1;;=\211::<" \ - "\1;;=\202::<\1;;=\202::<\1;;=\202::<\1;;=\203::<\3;;=kkm\346\346\346" \ - "\203\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\221\377" \ - "\377\377\2\234\234\236;;=\202::<\1;;=\202::<\1\316\316\316\252\377\377" \ - "\377\4\316\316\316;;=99;;;=\203::<\1\234\234\234\210\377\377\377\7\376" \ - "\377\377\377\375\376\377\377\375\256\332\363Y\270\350Y\267\352[\267\352" \ - "\202[\267\350\5X\270\350X\270\352Y\267\352Y\270\350X\267\347\220[\267" \ - "\350\5X\267\347[\267\350\325\355\367\377\377\373\377\377\375\202\0\77" \ - "j\1\0>g\220\0>i\1\0\77j\203\0>i\202\0=i\6\1>j\0>i\0\77h\0>g\177\236\263" \ - "\377\377\375\203\377\377\377\1\377\376\377\222\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\316\316\316\203::<\1;;=\202::<\2kkm\376\376\376" \ - "\233\377\377\377\1\376\376\376\203\377\377\377\5\234\234\234::<;;=::" \ - "<;;=\202::<\1\234\234\236\235\377\377\377\202\376\376\376\202\377\377" \ - "\377\5\376\376\376\377\377\377xxz99;;;=\204::<\4;;=::<;;=\362\362\362" \ - "\237\377\377\377\5\376\376\376\377\377\377\376\376\376kkm;;=\207::<\2" \ - "99;;;=\240::<\1lll\205\377\377\377\1\376\376\376\203\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\4\265\265\267" \ - ";;=::<;;=\202::<\2;;=__a\205\377\377\377\1\376\376\376\245\377\377\377" \ - "\3\204\204\206::<;;=\204::<\2SSU\376\376\376\215\377\377\377\1\376\376" \ - "\376\204\377\377\377\2\316\316\316__a\206::<\1;;=\214::<\5;;=::<;;=:" \ - ":<;;=\203::<\2\234\234\234\363\363\363\204\377\377\377\1\376\376\376" \ - "\243\377\377\377\1lln\206::<\2\233\233\235\376\376\376\233\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\207\377\377\377\3\345\345" \ - "\345lln;;=\204::<\5;;=99;::<99;;;=\205::<\1;;=\203::<\3""99;;;=99;\206" \ - "::<\2TTV\265\265\265\234\377\377\377\10\234\234\234;;=::<;;=::<;;=::" \ - "<\316\316\316\252\377\377\377\1\315\315\315\206::<\4\235\235\235\376" \ - "\376\376\377\377\377\376\376\376\205\377\377\377\12\377\377\373\377\377" \ - "\377\377\377\375\267\340\366[\270\344Z\266\351[\267\352Z\266\351[\265" \ - "\347[\267\350\202Y\270\350\2\\\270\351Z\266\347\220[\267\350\10X\267" \ - "\347X\266\351\325\355\371\377\376\377\377\377\377\0\77k\0=h\3>j\220\0" \ - "\77j\16\1>j\0=i\1>j\0=i\0\77j\0>i\0=h\0\77j\0\77h\1g\0\77h\221\0=i\1\0>g\202\1\77h\1\0=i\202\0>i\11\0\77j\0>g\0>" \ - "j\0\77m\336\347\354\376\377\377\377\376\377\376\377\377\377\377\375\222" \ - "\377\377\377\1\376\376\376\203\377\377\377\1\316\316\316\202::<\1;;=" \ - "\203::<\2kkm\376\376\376\233\377\377\377\1\376\376\376\202\377\377\377" \ - "\3\376\376\376\234\234\234;;=\202::<\6""99;::<;;=\234\234\236\377\377" \ - "\377\376\376\376\237\377\377\377\1\376\376\376\202\377\377\377\1SSS\202" \ - ";;=\1""99;\204;;=\3\331\331\331\377\377\377\376\376\376\234\377\377\377" \ - "\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3lll::<;;=\202" \ - "::<\202;;=\203::<\1;;=\240::<\1kkk\204\377\377\377\1\376\376\376\211" \ - "\377\377\377\3\302\302\302;;;999\202::<\3;;=::g\0" \ - "\77m\220\0=i\6\0\77j\0>i\0=h\0\77j\0=i\0\77j\202\0>g\2\1\77h\240\266" \ - "\304\204\377\377\377\2\376\376\376\377\377\375\223\377\377\377\14\376" \ - "\376\376\377\377\377\315\315\315;;=::<:::;;;:::;;;kkk\377\377\377\376" \ - "\376\376\233\377\377\377\1\376\376\376\202\377\377\377\10\235\235\235" \ - "99;::<999;;;:::;;;\233\233\233\234\377\377\377\1\376\376\376\207\377" \ - "\377\377\1\265\265\265\202::<\1;;=\203::<\1kkk\203\377\377\377\1\376" \ - "\376\376\240\377\377\377\2kkk:::\202::<\3;;=99;;;=\244::<\1kkk\205\377" \ - "\377\377\1\376\376\376\210\377\377\377\1\346\346\346\206\316\316\316" \ - "\3\332\332\332\377\377\377\377\377\375\253\377\377\377\2\346\346\346" \ - "\316\316\316\202\316\316\320\203\316\316\316\1\315\315\315\225\377\377" \ - "\377\202\376\376\376\202\377\377\377\4\316\316\320\234\234\236kkmSSU" \ - "\205::<\1;;=\203::<\5kkm\204\204\206\264\264\266\346\346\350\376\376" \ - "\376\214\377\377\377\1\376\376\376\202\377\377\377\202\376\376\376\231" \ - "\377\377\377\1\376\376\376\203\377\377\377\2\331\331\331\317\317\317" \ - "\205\316\316\316\1\347\347\347\243\377\377\377\1\376\376\376\211\377" \ - "\377\377\5\376\376\377\347\347\351\265\265\267\204\204\206lln\212::<" \ - "\4``bxxz\234\234\236\332\332\332\207\377\377\377\1\376\376\376\210\377" \ - "\377\377\1\376\376\376\222\377\377\377\1\346\346\346\203\316\316\320" \ - "\4\316\316\316\316\316\320\315\315\315\364\364\364\251\377\377\377\2" \ - "\376\376\376\364\364\364\205\316\316\316\2\316\316\320\346\346\346\210" \ - "\377\377\377\16\377\376\377\377\377\375\376\377\377\377\377\377\377\375" \ - "\377\326\354\371\241\326\366\206\310\352\200\312\357\202\312\362\204" \ - "\310\357\204\312\356\203\311\355\205\311\360\220\204\312\356\10\203\311" \ - "\355\201\311\361\342\360\371\376\377\377\377\377\375>n\222Bm\215@n\220" \ - "\220@n\217\3@l\217An\217Bo\220\202An\217\5@m\214Dm\213l\223\260\277\320" \ - "\332\376\377\377\202\377\377\377\1\377\377\375\202\377\377\377\1\376" \ - "\377\377\225\377\377\377\3\363\363\363\317\317\321\316\316\320\204\316" \ - "\316\316\1\332\332\332\240\377\377\377\1\346\346\346\202\316\316\320" \ - "\204\316\316\316\1\347\347\347\243\377\377\377\3\376\376\376\363\363" \ - "\363lln\202kkm\1lln\202kkm\1\301\301\301\240\377\377\377\1\376\376\376" \ - "\203\377\377\377\2\331\331\331\317\317\317\202\316\316\316\202\317\317" \ - "\317\245\316\316\316\2\332\332\332\376\376\376\351\377\377\377\5\332" \ - "\332\332\315\315\315\316\316\316\315\315\315\363\363\363\361\377\377" \ - "\377\202\316\316\316\1\317\317\317\202\316\316\316\2\315\315\315\363" \ - "\363\363\377\377\377\377\377\377\377\377\377\377\377\377\334\377\377" \ - "\377\1\376\376\376\375\377\377\377\1\376\376\376\377\377\377\377\377" \ - "\377\377\377\377\377\377\377\340\377\377\377\1\376\376\376\370\377\377" \ - "\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\342" \ - "\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \ - "\377\377\377\377\377\334\377\377\377\1\376\376\376\362\377\377\377\1" \ - "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\346\377" \ - "\377\377\1\376\376\376\363\377\377\377\1\376\376\376\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\342\377\377\377\1\376\376\376\373\377" \ - "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \ - "\340\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377" \ - "\377\377\377\377\377\377\377\377\377\377\377\377\243\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\203\377\377\377\1\376\376\376\233\377" \ - "\377\377\1\376\376\376\205\377\377\377\1\376\376\376\214\377\377\377" \ - "\1\376\376\376\205\377\377\377\1\376\376\376\260\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\300\377\377\377\1\376\376\376\306\377\377" \ - "\377\1\376\376\376\233\377\377\377\4\376\377\377\376\376\376\377\376" \ - "\377\377\377\377\203\376\377\375\203\377\377\377\3\377\377\375\376\377" \ - "\375\376\377\377\265\377\377\377\4\377\377\375\377\376\377\376\377\377" \ - "\377\377\375\202\377\376\377\210\377\377\377\7\377\377\375\376\377\377" \ - "\377\377\377\375\377\376\376\377\377\377\376\377\376\377\377\211\377" \ - "\377\377\4\376\377\375\377\377\377\376\376\376\377\377\375\202\377\377" \ - "\377\2\377\377\375\376\376\376\220\377\377\377\1\376\377\375\202\377" \ - "\377\375\5\377\376\377\377\377\373\377\377\377\375\377\376\377\377\375" \ - "\210\377\377\377\1\377\376\377\202\377\377\375\202\377\377\377\3\376" \ - "\377\377\377\377\375\377\376\377\213\377\377\377\3\376\377\377\376\377" \ - "\375\377\377\375\203\377\377\377\203\376\377\375\4\377\377\377\377\376" \ - "\377\376\376\376\376\377\377\233\377\377\377\3\376\377\377\376\377\375" \ - "\377\377\375\203\377\377\377\203\376\377\375\4\377\377\377\377\376\377" \ - "\376\376\376\376\377\377\210\377\377\377\1\377\376\377\203\377\377\377" \ - "\4\376\377\377\377\377\375\377\376\377\376\377\373\211\377\377\377\4" \ - "\376\377\377\376\376\374\377\376\377\377\375\376\226\377\377\377\5\376" \ - "\377\377\375\377\374\377\377\375\376\375\377\377\377\375\210\377\377" \ - "\377\1\377\377\375\202\376\377\377\1\377\377\373\242\377\377\377\1\376" \ - "\376\376\212\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \ - "\237\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377" \ - "\377\377\1\376\376\376\204\377\377\377\202\376\376\376\257\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \ - "\376\246\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376\250" \ - "\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\236\377\377" \ - "\377\3\376\376\376\377\377\377\376\376\376\230\377\377\377\4\377\377" \ - "\373\376\377\377\376\376\376\377\376\377\203\377\377\377\1\377\377\375" \ - "\202\377\377\377\1\377\376\377\202\377\377\375\3\377\377\377\377\377" \ - "\375\376\376\374\260\377\377\377\2\377\377\375\376\376\376\203\377\376" \ - "\377\214\377\377\377\7\376\377\377\377\376\377\377\377\375\377\377\377" \ - "\377\376\377\375\377\376\377\377\375\210\377\377\377\7\377\376\374\377" \ - "\377\375\377\376\377\377\377\375\376\376\376\377\377\377\376\376\376" \ - "\221\377\377\377\1\377\376\377\203\377\377\377\202\377\377\375\212\377" \ - "\377\377\2\377\377\375\377\377\377\202\377\377\375\214\377\377\377\3" \ - "\376\376\374\377\377\375\377\377\377\202\377\377\375\1\377\376\377\202" \ - "\377\377\377\1\377\377\375\203\377\377\377\4\377\376\377\376\376\376" \ - "\376\377\377\377\377\373\230\377\377\377\3\376\376\374\377\377\375\377" \ - "\377\377\202\377\377\375\1\377\376\377\202\377\377\377\1\377\377\375" \ - "\203\377\377\377\4\377\376\377\376\376\376\376\377\377\377\377\373\213" \ - "\377\377\377\1\377\376\374\214\377\377\377\2\377\377\375\377\376\377" \ - "\202\377\377\375\3\376\377\377\377\377\377\377\377\373\221\377\377\377" \ - "\3\376\377\375\376\377\377\377\376\377\204\377\377\377\1\377\377\375" \ - "\212\377\377\377\5\377\376\377\377\377\375\377\377\377\376\377\375\376" \ - "\377\373\243\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \ - "\204\377\377\377\1\376\376\376\242\377\377\377\1\376\376\376\205\377" \ - "\377\377\1\376\376\376\213\377\377\377\1\376\376\376\206\377\377\377" \ - "\1\376\376\376\263\377\377\377\3\376\376\376\377\377\377\376\376\376" \ - "\270\377\377\377\1\376\376\376\312\377\377\377\1\376\376\376\234\377" \ - "\377\377\1\377\377\375\202\376\377\377\7\377\376\377\377\377\377\376" \ - "\377\377\377\376\377\377\377\375\377\377\377\376\377\377\202\377\376" \ - "\377\2\376\377\375\376\377\377\262\377\377\377\10\377\377\375\376\377" \ - "\377\377\376\377\377\377\373\377\377\377\377\376\377\376\377\375\377" \ - "\377\375\211\377\377\377\3\376\377\377\377\376\377\377\377\375\202\377" \ - "\377\377\2\376\377\377\376\376\376\210\377\377\377\202\377\376\377\4" \ - "\374\377\377\376\377\377\377\376\377\377\377\375\222\377\377\377\4\377" \ - "\376\375\376\377\377\377\377\377\376\377\377\202\377\376\377\202\377" \ - "\377\375\210\377\377\377\4\377\377\375\377\377\377\377\377\375\377\377" \ - "\377\202\377\376\377\2\377\377\377\376\377\377\212\377\377\377\2\376" \ - "\377\377\376\377\375\202\377\376\377\7\376\377\377\377\377\377\377\377" \ - "\375\377\376\377\376\377\377\377\377\377\377\376\377\202\376\377\377" \ - "\1\377\377\375\232\377\377\377\2\376\377\377\376\377\375\202\377\376" \ - "\377\7\376\377\377\377\377\377\377\377\375\377\376\377\376\377\377\377" \ - "\377\377\377\376\377\202\376\377\377\1\377\377\375\210\377\377\377\1" \ - "\377\377\375\202\377\377\377\4\377\377\375\377\376\377\377\377\377\376" \ - "\377\377\211\377\377\377\7\375\376\377\377\377\375\377\376\377\376\376" \ - "\377\376\377\375\375\377\376\377\377\375\222\377\377\377\6\376\377\377" \ - "\377\376\377\377\377\377\377\377\375\377\376\377\376\377\377\213\377" \ - "\377\377\202\377\376\377\3\377\377\375\376\377\377\376\377\375\236\377" \ - "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\203\377\377\377\2\376\376\376\377\377\377\202\376\376" \ - "\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\204" \ - "\377\377\377\1\376\376\376\235\377\377\377\1\376\376\376\217\377\377" \ - "\377\1\376\376\376\206\377\377\377\1\376\376\376\260\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\241\377\377\377\202\376\376\376\204" \ - "\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376\205\377\377" \ - "\377\1\376\376\376\246\377\377\377\1\376\376\376\233\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\234\377\377\377\15\376\376\376\377\377" \ - "\377\377\376\377\377\377\375\375\377\376\377\377\377\376\377\375\377" \ - "\377\377\375\376\377\377\377\377\377\377\375\376\377\377\377\377\377" \ - "\202\377\376\377\260\377\377\377\7\377\376\377\376\377\377\377\377\377" \ - "\376\377\377\377\377\377\377\377\375\376\377\377\212\377\377\377\1\376" \ - "\376\374\203\377\377\377\3\376\376\377\377\377\375\376\377\377\210\377" \ - "\377\377\10\376\377\377\377\376\377\374\377\373\376\377\373\377\376\377" \ - "\376\376\376\377\377\377\376\377\375\220\377\377\377\2\377\376\377\377" \ - "\377\377\202\377\377\375\202\377\377\377\2\376\376\374\376\377\377\210" \ - "\377\377\377\1\376\377\377\202\377\377\377\5\376\377\377\377\377\377" \ - "\376\376\376\377\377\377\376\377\375\210\377\377\377\202\377\376\377" \ - "\15\377\377\377\376\377\377\377\377\375\377\377\377\375\376\377\377\377" \ - "\377\376\377\375\377\377\377\375\377\376\377\377\375\377\376\377\377" \ - "\377\377\376\376\376\231\377\377\377\202\377\376\377\15\377\377\377\376" \ - "\377\377\377\377\375\377\377\377\375\376\377\377\377\377\376\377\375" \ - "\377\377\377\375\377\376\377\377\375\377\376\377\377\377\377\376\376" \ - "\376\211\377\377\377\4\377\376\377\377\377\377\376\377\375\376\377\377" \ - "\202\377\377\377\2\376\377\377\376\377\375\210\377\377\377\1\376\377" \ - "\375\202\376\376\376\202\377\377\377\2\377\377\375\375\376\377\221\377" \ - "\377\377\10\377\377\375\377\377\377\376\376\374\376\377\373\376\376\376" \ - "\377\376\377\376\377\377\377\377\375\210\377\377\377\6\376\376\376\377" \ - "\377\377\377\377\375\377\377\377\374\375\377\377\377\375\242\377\377" \ - "\377\1\376\376\376\214\377\377\377\1\376\376\376\204\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\235\377\377\377\1\376\376\376\203\377" \ - "\377\377\202\376\376\376\212\377\377\377\1\376\376\376\202\377\377\377" \ - "\202\376\376\376\264\377\377\377\5\376\376\376\377\377\377\376\376\376" \ - "\377\377\377\376\376\376\242\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\202\377\377\377\1\376\376\376\223\377\377\377\1\376\376\376" \ - "\244\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\233\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\234\377\377\377" \ - "\1\375\377\372\202\377\377\377\3\376\376\376\377\377\375\377\377\377" \ - "\202\376\377\377\204\377\377\377\4\376\377\377\377\377\377\377\376\377" \ - "\375\377\372\260\377\377\377\202\377\377\375\2\377\377\377\376\375\377" \ - "\202\377\377\377\1\375\377\376\212\377\377\377\6\377\377\375\377\377" \ - "\377\376\377\375\377\377\375\377\376\377\377\376\375\212\377\377\377" \ - "\1\377\376\377\202\377\377\377\4\377\375\376\377\377\377\377\377\373" \ - "\376\375\377\221\377\377\377\203\376\376\376\4\377\377\375\376\376\374" \ - "\377\376\377\376\376\374\210\377\377\377\5\377\376\377\377\377\375\377" \ - "\376\377\376\376\376\376\377\375\202\377\377\377\1\376\376\376\210\377" \ - "\377\377\4\375\377\372\377\376\377\377\377\377\376\377\377\204\377\377" \ - "\377\202\376\377\377\3\377\377\377\377\377\375\376\376\376\202\377\377" \ - "\377\1\375\377\372\230\377\377\377\4\375\377\372\377\376\377\377\377" \ - "\377\376\377\377\204\377\377\377\202\376\377\377\3\377\377\377\377\377" \ - "\375\376\376\376\202\377\377\377\1\375\377\372\210\377\377\377\3\376" \ - "\377\377\377\377\377\376\376\376\202\376\377\377\202\377\377\377\1\376" \ - "\377\375\210\377\377\377\7\376\376\377\377\377\375\376\377\375\376\376" \ - "\376\377\376\377\377\377\377\376\377\377\221\377\377\377\5\376\376\376" \ - "\376\377\377\377\377\377\375\375\375\377\376\377\202\377\377\377\1\377" \ - "\377\375\211\377\377\377\7\377\376\377\376\376\374\376\377\377\377\377" \ - "\377\377\376\377\377\377\375\377\377\373\233\377\377\377\1\376\376\376" \ - "\205\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\203\377" \ - "\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\204\377\377\377\1\376\376\376\237\377\377\377\1\376\376\376" \ - "\212\377\377\377\1\376\376\376\213\377\377\377\1\376\376\376\255\377" \ - "\377\377\1\376\376\376\247\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\224\377\377\377\1\376\376\376\247\377\377\377\1\376\376" \ - "\376\236\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\232" \ - "\377\377\377\10\377\376\377\377\377\375\377\377\377\376\377\377\376\376" \ - "\376\377\376\377\377\377\375\377\376\377\202\377\377\375\1\377\376\377" \ - "\202\377\377\377\3\377\376\377\377\375\376\377\376\377\260\377\377\377" \ - "\2\377\376\377\377\377\377\202\377\376\377\4\377\377\375\376\376\374" \ - "\377\375\377\377\376\377\210\377\377\377\3\376\376\374\377\376\377\376" \ - "\376\376\204\377\377\377\1\376\377\375\210\377\377\377\4\375\377\374" \ - "\377\377\377\377\375\376\377\376\377\203\377\377\377\1\377\377\375\220" \ - "\377\377\377\3\376\377\377\377\377\375\376\377\377\202\377\377\377\3" \ - "\377\376\377\373\377\377\376\377\377\211\377\377\377\202\376\377\375" \ - "\1\377\377\375\203\377\377\377\1\377\376\377\210\377\377\377\3\377\376" \ - "\377\377\375\376\377\376\377\202\377\377\377\1\377\376\377\202\377\377" \ - "\375\10\377\376\377\377\377\375\377\376\377\376\376\376\376\377\377\377" \ - "\377\377\377\377\375\377\376\377\230\377\377\377\3\377\376\377\377\375" \ - "\376\377\376\377\202\377\377\377\1\377\376\377\202\377\377\375\10\377" \ - "\376\377\377\377\375\377\376\377\376\376\376\376\377\377\377\377\377" \ - "\377\377\375\377\376\377\210\377\377\377\2\377\377\375\375\376\371\202" \ - "\377\376\377\3\377\377\377\377\377\375\377\376\377\212\377\377\377\1" \ - "\377\375\376\202\377\377\377\4\377\377\375\376\376\376\376\377\377\377" \ - "\376\377\220\377\377\377\2\376\377\377\376\376\377\202\377\377\377\2" \ - "\376\377\375\375\377\374\212\377\377\377\10\373\377\376\377\377\377\377" \ - "\377\375\376\376\374\377\377\375\377\376\377\377\377\377\376\377\377" \ - "\235\377\377\377\1\376\376\376\202\377\377\377\7\316\316\320\250\250" \ - "\252\221\221\223llnjjlGGI99;\204::<\7TTVkkmyy{\234\234\236\265\265\267" \ - "\332\332\332\376\376\376\237\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\222\377\377\377\1\376\376\376\205\377\377\377\3\376\376\376" \ - "\377\377\377\376\376\376\255\377\377\377\1\376\376\376\246\377\377\377" \ - "\1\376\376\376\227\377\377\377\1\376\376\376\252\377\377\377\1\376\376" \ - "\376\233\377\377\377\1\376\376\376\236\377\377\377\17\305\344\240\303" \ - "\342\237\304\343\240\304\343\237\307\342\237\303\342\236\305\342\240" \ - "\303\342\236\305\342\237\304\343\240\304\343\237\304\341\237\304\343" \ - "\237\323\352\266\376\377\375\250\377\377\377\210\305\342\240\10\305\342" \ - "\237\303\342\234\304\343\237\306\341\236\304\343\240\322\352\270\376" \ - "\377\377\375\377\376\211\377\377\377\5\377\376\377\376\376\376\377\376" \ - "\377\360\371\350\305\342\237\202\304\341\236\210\305\342\240\5\304\341" \ - "\236\327\356\302\376\377\377\377\377\373\376\377\375\202\377\377\375" \ - "\1\377\376\377\220\377\377\377\202\377\377\375\2\376\377\377\377\377" \ - "\377\202\377\377\375\2\304\343\237\306\341\236\210\305\342\240\5\307" \ - "\342\237\303\342\236\304\341\236\341\357\314\377\377\375\213\377\377" \ - "\377\17\376\377\375\323\352\266\304\343\237\304\341\237\304\343\237\304" \ - "\343\240\305\342\237\303\342\236\305\342\240\303\342\236\307\342\237" \ - "\304\343\237\304\343\240\303\342\237\305\344\240\231\377\377\377\17\376" \ - "\377\375\323\352\266\304\343\237\304\341\237\304\343\237\304\343\240" \ - "\305\342\237\303\342\236\305\342\240\303\342\236\307\342\237\304\343" \ - "\237\304\343\240\303\342\237\305\344\240\211\377\377\377\10\360\367\347" \ - "\306\343\241\303\342\237\307\342\237\303\342\237\304\343\235\307\341" \ - "\240\304\343\240\210\305\342\240\7\315\347\252\376\377\375\377\375\376" \ - "\376\377\375\377\377\377\377\377\373\376\377\377\221\377\377\377\10\377" \ - "\377\375\376\377\375\323\352\266\307\341\240\307\342\237\305\342\240" \ - "\307\340\236\306\341\236\210\305\342\240\4\304\343\237\311\335\236\377" \ - "\377\377\377\376\377\203\377\377\377\1\376\377\377\230\377\377\377\1" \ - "\376\376\376\203\377\377\377\3\346\346\346\251\251\251jjl\202;;=\210" \ - "::<\1;;=\202::<\2;;=99;\203::<\5FFHxxx\265\265\265\363\363\363\376\376" \ - "\376\234\377\377\377\2\376\376\376\346\346\346\214\234\234\234\1\235" \ - "\235\235\203\234\234\234\3\235\235\235\234\234\234\250\250\250\203\316" \ - "\316\316\1\346\346\346\263\377\377\377\202\250\250\250\245\377\377\377" \ - "\1\316\316\316\222\234\234\234\1\302\302\302\203\316\316\316\1\363\363" \ - "\363\247\377\377\377\3\316\316\316\234\234\234\235\235\235\240\234\234" \ - "\234\1\316\316\316\231\377\377\377\6\215\305>\216\306A\215\305@\213\310" \ - "=\215\305>\212\307>\202\214\305@\6\214\306>\212\306@\214\306<\215\304" \ - "B\214\306>\252\323m\251\377\377\377\210\214\306>\10\215\305@\215\307" \ - "\77\212\307>\217\304@\214\305@\251\323m\377\377\377\377\377\375\213\377" \ - "\377\377\5\377\375\377\341\363\315\215\305>\212\307>\215\305@\210\214" \ - "\306>\6\215\306A\220\305\77\350\365\333\377\377\377\376\377\377\377\376" \ - "\377\202\376\377\377\225\377\377\377\3\377\376\377\214\306>\215\306A" \ - "\210\214\306>\6\215\305>\212\310\77\215\305@\307\341\240\376\377\377" \ - "\377\376\377\213\377\377\377\6\252\323m\214\306>\215\304B\214\306<\212" \ - "\306@\214\306>\202\214\305@\6\212\307>\215\305>\213\310=\215\305@\216" \ - "\306A\215\305>\232\377\377\377\6\252\323m\214\306>\215\304B\214\306<" \ - "\212\306@\214\306>\202\214\305@\6\212\307>\215\305>\213\310=\215\305" \ - "@\216\306A\215\305>\211\377\377\377\4\376\377\377\242\321a\213\307A\215" \ - "\305>\202\214\306>\2\215\305@\215\307\77\210\214\306>\7\215\305<\332" \ - "\354\304\377\377\377\376\377\375\376\376\376\377\376\377\376\376\376" \ - "\221\377\377\377\10\377\376\377\342\362\316\215\305>\213\310\77\212\305" \ - "D\212\307<\216\306\77\211\307>\211\214\306>\4\304\343\240\373\377\376" \ - "\377\377\377\375\377\376\202\377\377\377\1\377\377\375\225\377\377\377" \ - "\1\376\376\376\204\377\377\377\6\265\265\267__a99;;;=::<;;=\202::<\1" \ - ";;=\202::<\1;;=\202::<\1;;=\203::<\1;;=\203::<\3;;=::<99;\202::<\2xx" \ - "z\301\301\301\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \ - "\376\206\377\377\377\1\376\376\376\217\377\377\377\1\316\316\316\205" \ - "::<\202;;=\221::<\4TTVwwy\250\250\252\346\346\350\255\377\377\377\1\316" \ - "\316\320\202::<\1\316\316\316\244\377\377\377\1\234\234\236\204::<\1" \ - ";;=\205::<\3;;=::<;;=\206::<\1;;=\204::<\6SSUkkm\204\204\206\250\250" \ - "\250\316\316\316\376\376\376\206\377\377\377\1\376\376\376\231\377\377" \ - "\377\1\234\234\234\206::<\3;;=::<;;=\222::<\1;;=\204::<\3;;=::<\234\234" \ - "\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \ - "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>" \ - "\15\212\306@\215\307\77\233\316W\365\374\364\377\376\375\376\377\377" \ - "\377\376\377\377\377\375\377\377\377\377\377\375\376\376\376\377\377" \ - "\377\376\376\374\202\377\377\377\1\376\376\376\216\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\212\377\377\377\7\350\364\334\215\305>\212\307" \ - "<\214\305@\215\304B\215\305@\213\310\77\210\214\306>\10\214\305@\225" \ - "\311J\370\373\362\377\376\377\376\377\377\377\377\375\377\377\377\376" \ - "\377\377\210\377\377\377\40\376\377\377\376\377\375\377\376\377\377\377" \ - "\377\375\376\377\377\377\375\377\376\377\376\377\377\370\373\364\233" \ - "\314W\215\307\77\214\304=\212\306@\215\307\77\213\305=\215\307\77\214" \ - "\306>\217\304@\215\306A\212\307>\214\306<\215\306A\214\306>\211\307@" \ - "\242\321a\377\377\377\377\376\377\376\377\377\377\376\377\377\377\377" \ - "\376\377\377\377\376\377\223\377\377\377\7\376\376\376\377\377\377\376" \ - "\376\376\377\377\377\363\363\365\234\234\236FFH\202::<\10;;=99;;;=::" \ - "<;;=::<99;;;=\203::<\1;;=\203::<\2;;=99;\204::<\11""99;;;=::<;;=::<;" \ - ";=TTV\265\265\265\363\363\363\203\377\377\377\1\376\376\376\207\377\377" \ - "\377\1\376\376\376\215\377\377\377\1\316\316\316\205::<\3;;=::<;;=\202" \ - "::<\1;;=\214::<\3;;=99;;;=\202::<\4lln\316\316\316\376\376\376\377\377" \ - "\377\202\376\376\376\246\377\377\377\2\376\376\376xxz\202::<\2xxx\376" \ - "\376\376\243\377\377\377\1\234\234\236\204::<\202;;=\205::<\1;;=\204" \ - "::<\1;;=\202::<\1""99;\206::<\1;;=\202::<\6;;=kkk\250\250\250\346\346" \ - "\346\377\377\377\376\376\376\205\377\377\377\1\376\376\376\225\377\377" \ - "\377\1\234\234\234\204::<\1;;=\202::<\4;;=::<99;;;=\225::<\3;;=::<\234" \ - "\234\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4" \ - "\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250" \ - "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306" \ - ">\4\215\306A\213\304\77\215\305@\262\327x\202\377\377\377\1\376\377\375" \ - "\203\377\377\375\204\377\377\377\1\376\376\376\217\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\212\377\377\377\7\376\376\376\305\342\237\212" \ - "\307>\214\306>\212\307<\214\306>\212\307>\210\214\306>\3\214\306<\215" \ - "\306A\300\337\221\202\377\377\377\3\377\376\377\376\376\376\377\377\375" \ - "\210\377\377\377\1\377\375\377\202\377\377\377\2\376\376\377\376\377" \ - "\375\202\377\376\377\30\377\377\377\277\340\221\215\306A\213\305=\215" \ - "\305>\212\306B\214\306>\216\306\77\214\306<\212\307>\215\307=\213\305" \ - ";\215\307\77\216\305C\214\306>\214\305@\216\306\77\347\365\333\377\376" \ - "\377\377\377\375\376\377\377\377\376\374\377\377\377\377\377\375\222" \ - "\377\377\377\1\376\376\376\204\377\377\377\12\265\265\267FFH;;=::<;;" \ - "=99;::<;;=::<;;=\202::<\4<<>99;::<;;=\202::<\1;;=\203::<\1<<>\204::<" \ - "\5<<>99;;;=99;;;=\202::<\4:::SSS\266\266\266\376\376\376\203\377\377" \ - "\377\1\376\376\376\204\377\377\377\1\376\376\376\216\377\377\377\1\316" \ - "\316\316\204::<\3;;=::<;;=\204::<\1;;=\214::<\1;;=\202::<\1;;=\202::" \ - "<\2yyy\363\363\363\202\377\377\377\1\376\376\376\245\377\377\377\3\346" \ - "\346\346::<;;=\202::<\1\347\347\347\202\377\377\377\1\376\376\376\240" \ - "\377\377\377\1\234\234\236\203::<\4;;=99;::<;;=\202::<\7;;=::<;;=99;" \ - ";;=::<;;=\203::<\202;;=\210::<\1""99;\202::<\4;;=xxz\317\317\317\376" \ - "\376\376\202\377\377\377\1\376\376\376\227\377\377\377\1\234\234\234" \ - "\204::<\1""99;\203;;=\224::<\1;;=\204::<\2<<>\234\234\236\231\377\377" \ - "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \ - "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \ - "\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\10\215\305>\214\306" \ - ">\213\307A\214\306>\315\345\253\377\377\375\377\376\377\376\377\377\226" \ - "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \ - "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \ - "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \ - "\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\7\377\377" \ - "\375\377\376\377\376\376\376\241\321a\212\307>\211\305\77\215\306A\211" \ - "\214\306>\4\213\310\77\214\305@\213\305=\342\361\320\202\377\376\377" \ - "\2\377\377\375\377\376\377\210\377\377\377\1\377\376\377\202\377\377" \ - "\377\30\377\377\375\376\377\377\377\377\375\376\377\377\351\366\334\214" \ - "\305B\211\306;\215\307\77\214\306>\212\306@\215\305>\215\305@\212\307" \ - ">\214\305@\212\306B\214\306>\213\305=\213\310\77\215\305>\215\307\77" \ - "\314\345\253\377\375\377\377\376\374\376\377\377\203\377\377\377\1\377" \ - "\376\374\225\377\377\377\2\345\345\345kkm\205::<\202;;=\203::<\1;;=\203" \ - "::<\1;;=\202::<\202;;=\202::<\1;;=\210::<\2;;=99;\205::<\2```\331\331" \ - "\331\211\377\377\377\1\376\376\376\214\377\377\377\1\316\316\316\206" \ - "::<\5""99;::<;;=::<99;\212::<\1;;=\202::<\1;;=\204::<\4;;=::\214\305@" \ - "\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215" \ - "\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214" \ - "\305@\210\214\306>\10\215\305@\212\307>\214\305@\215\306A\214\305@\352" \ - "\364\334\376\376\377\377\377\373\202\377\377\377\3\376\376\376\377\377" \ - "\377\377\377\375\202\377\377\377\1\376\376\374\216\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\211\377\377\377\1\376\377\377\202\377\377\375" \ - "\5\347\364\332\215\307\77\215\306C\214\307;\216\306\77\210\214\306>\10" \ - "\214\305@\214\305D\215\307\77\233\314V\371\374\363\376\377\377\377\377" \ - "\377\377\377\375\210\377\377\377\20\375\377\374\377\376\377\376\376\377" \ - "\376\377\377\377\376\377\376\377\375\376\377\377\244\317d\212\307>\215" \ - "\306A\215\305@\214\305@\211\306=\215\307=\215\306A\214\305@\204\214\306" \ - ">\14\211\305A\212\307>\251\324k\377\376\377\377\375\376\376\377\377\377" \ - "\377\377\377\377\375\377\377\377\377\377\375\377\377\377\377\377\375" \ - "\217\377\377\377\1\376\376\376\203\377\377\377\2\265\265\267FFH\205:" \ - ":<\1;;=\203::<\202;;=\7:::TTT\203\203\203\235\235\235\316\316\316\332" \ - "\332\332\377\377\377\202\376\376\376\202\377\377\377\5\316\316\316\317" \ - "\317\317\234\234\234yyyFFF\202::<\1;;=\202::<\3""99;;;=99;\204::<\2;" \ - ";=\233\233\233\206\377\377\377\1\376\376\376\216\377\377\377\1\316\316" \ - "\316\204::<\1;;=\205::<\1;;=\212::<\3""99;::<;;=\202::<\2;;=99;\204:" \ - ":<\2;;=\265\265\265\245\377\377\377\4\346\346\346::<99;;;=\202::<\4""9" \ - "9;\347\347\347\377\377\377\376\376\376\240\377\377\377\1\234\234\236" \ - "\205::<\1;;=\203::<\202;;=\1""99;\203;;=\2::<;;=\203::<\1;;=\202::<\2" \ - ";;=::<\202;;=\7::<;;=99;::<;;=99;;;=\202::<\3;;=xxx\362\362\362\227\377" \ - "\377\377\1\234\234\234\205::<\202;;=\4::<;;=::<;;=\223::<\2;;=99;\202" \ - ";;=\1\234\234\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \ - "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \ - ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \ - "\214\306>\12\212\307>\215\306A\214\305@\215\307\77\213\306:\226\312N" \ - "\372\374\361\375\376\377\377\377\375\377\377\373\224\377\377\377\213" \ - "\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p" \ - "\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \ - "\3\214\305@\214\306>\214\305@\211\377\377\377\10\376\377\377\376\376" \ - "\377\376\377\377\377\375\376\307\342\237\214\306<\215\306A\214\305@\210" \ - "\214\306>\5\215\307\77\213\305=\216\306A\213\310\77\277\337\223\202\377" \ - "\377\375\1\377\376\377\210\377\377\377\14\376\377\375\376\376\376\377" \ - "\376\377\377\377\375\377\376\377\377\377\377\303\342\236\215\307\77\216" \ - "\306A\215\305>\214\306<\215\306A\203\214\306>\20\215\307\77\212\307>" \ - "\215\305@\216\306\77\214\305@\216\307<\223\312K\356\372\346\377\377\377" \ - "\376\377\377\375\377\376\377\377\377\377\376\377\377\377\375\377\377" \ - "\377\377\377\375\216\377\377\377\1\376\376\376\203\377\377\377\2\375" \ - "\375\375\205\205\207\202::<\202;;=\3::<;;=::<\202;;=\6::<:::SSS\250\250" \ - "\250\346\346\346\376\376\376\216\377\377\377\3\332\332\332\220\220\220" \ - "SSS\202::<\4;;=99;::<;;=\202::<\1""99;\202;;=\2__a\332\332\334\223\377" \ - "\377\377\1\316\316\316\204::<\6;;=RRT\235\235\237\235\235\235\233\233" \ - "\233\234\234\234\212\234\234\236\5xxzkkm__a99;;;=\204::<\202;;=\1""9" \ - "9;\202::<\1\316\316\316\244\377\377\377\4\204\204\206;;=::<;;=\202::" \ - "<\2;;=\220\220\222\203\377\377\377\1\376\376\376\236\377\377\377\1\234" \ - "\234\236\203::<\3;;=::\214\305" \ - "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \ - "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \ - "\214\305@\210\214\306>\7\212\306@\214\306<\217\307@\214\304\77\214\311" \ - ">\214\306>\251\323m\202\376\377\377\4\376\376\374\377\377\375\377\377" \ - "\377\376\376\376\202\377\377\377\1\376\376\376\216\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\212\377\377\377\7\377\377\375\377\376\377\376" \ - "\377\377\377\376\377\251\323o\211\307>\214\305@\210\214\306>\7\212\307" \ - ">\215\305>\214\305@\214\306>\215\307\77\347\365\334\377\376\377\211\377" \ - "\377\377\2\377\376\377\375\377\374\203\377\376\377\15\352\364\333\212" \ - "\306@\215\306A\214\306>\215\307\77\213\310\77\214\306>\216\306A\215\306" \ - "A\214\306<\212\307>\213\310=\212\307>\202\214\305@\4\214\306>\314\345" \ - "\253\377\376\377\376\377\377\202\377\377\375\6\377\376\377\375\376\377" \ - "\377\377\377\377\376\377\376\377\375\377\376\377\217\377\377\377\3\376" \ - "\376\376\362\362\362lln\20299;\1;;=\204::<\202;;=\6::<\204\204\204\317" \ - "\317\317\376\376\376\377\377\377\376\376\376\206\377\377\377\1\376\376" \ - "\376\213\377\377\377\2\301\301\301kkm\211::<\6;;=FFH\301\301\301\376" \ - "\376\376\377\377\377\376\376\376\217\377\377\377\1\316\316\316\204::" \ - "<\3;;=kkm\376\376\376\221\377\377\377\3\316\316\316\204\204\204FFF\202" \ - "::<\1;;=\202::<\202;;=\2FFH\363\363\363\242\377\377\377\5\364\364\364" \ - "::<;;=99;;;=\203::<\3GGI\363\363\363\376\376\376\240\377\377\377\1\234" \ - "\234\236\205::<\1\234\234\236\210\377\377\377\1\376\376\376\204\377\377" \ - "\377\1\376\376\376\202\377\377\377\6\362\362\362\316\316\316\265\265" \ - "\265\234\234\234kkmFFH\202::<\2;;=99;\205::<\1;;=\202::<\1\221\221\221" \ - "\225\377\377\377\1\234\234\234\205::<\1\234\234\236\202\377\377\377\1" \ - "\376\376\376\225\377\377\377\1\375\375\375\235\377\377\377\3\214\305" \ - "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \ - "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \ - "\202\214\306>\1\214\305@\210\214\306>\4\215\307\77\214\306>\214\304\77" \ - "\214\306>\202\214\305@\6\215\307\77\307\341\240\376\377\375\376\377\377" \ - "\376\376\374\377\377\373\202\377\377\377\202\377\377\375\216\377\377" \ - "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \ - "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \ - "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\212\377\377\377\7\377\376\377\376\376" \ - "\377\377\377\377\376\376\377\361\372\347\222\312K\215\305>\210\214\306" \ - ">\10\214\305@\215\306A\214\305@\214\306<\213\304A\243\322b\376\376\374" \ - "\376\377\375\211\377\377\377\24\377\377\373\377\377\377\376\377\377\377" \ - "\377\375\242\320c\215\307=\214\306>\213\310\77\213\304A\212\306@\215" \ - "\307\77\215\305@\214\306>\215\307\77\212\306@\215\305>\215\307\77\213" \ - "\310\77\213\306:\253\325q\202\377\377\377\11\377\377\375\377\376\377" \ - "\377\377\377\377\377\375\376\377\375\377\377\375\377\375\377\376\377" \ - "\377\377\377\375\214\377\377\377\7\376\376\376\377\377\377\376\376\376" \ - "\363\363\363__a::<;;=\203::<\202;;=\202::<\4xxz\347\347\351\377\377\377" \ - "\376\376\376\210\377\377\377\1\376\376\376\204\377\377\377\2\376\376" \ - "\376\377\377\377\203\376\376\376\205\377\377\377\2\316\316\320kkm\202" \ - "::<\3;;=::<;;=\202::<\202;;=\2:::\250\250\250\202\377\377\377\1\376\376" \ - "\376\216\377\377\377\1\316\316\316\205::<\1kkm\203\377\377\377\1\376" \ - "\376\376\215\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363" \ - "xxx::<\202;;=\203::<\2;;=xxz\242\377\377\377\1\234\234\234\202::<\1;" \ - ";=\202::<\1;;=\202::<\1\234\234\234\241\377\377\377\1\234\234\236\202" \ - "::<\10;;=::<;;=\234\234\236\377\377\377\376\376\376\377\377\377\376\376" \ - "\376\216\377\377\377\1\376\376\376\203\377\377\377\3\332\332\332\221" \ - "\221\223FFH\205::<\2;;=::<\202;;=\2::<\204\204\204\224\377\377\377\1" \ - "\234\234\234\205::<\3\234\234\236\377\377\377\376\376\376\264\377\377" \ - "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \ - "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \ - "\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\5\216\306\77\212" \ - "\307>\215\307=\212\306@\214\306>\202\215\305>\5\215\305@\345\356\317" \ - "\376\377\375\376\377\377\377\377\375\202\377\377\377\1\377\377\375\217" \ - "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \ - "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \ - "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \ - "\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\4\376\377" \ - "\377\377\377\377\377\377\375\376\377\377\202\377\377\377\2\315\347\252" \ - "\212\306@\210\214\306>\10\216\306A\212\306@\212\307>\215\305<\213\310" \ - "\77\215\305>\307\341\240\376\377\377\212\377\377\377\10\375\377\374\377" \ - "\377\377\305\342\237\215\305@\212\306@\216\306\77\215\307=\215\305>\202" \ - "\214\306>\24\213\307A\213\310=\215\304B\214\306>\212\306@\215\304B\212" \ - "\307>\225\311K\370\373\362\377\377\377\376\377\375\377\377\375\377\377" \ - "\377\374\377\375\376\376\376\377\377\377\377\377\375\377\376\377\376" \ - "\377\377\377\377\375\211\377\377\377\1\376\376\376\205\377\377\377\1" \ - "___\204::<\1;;=\203::<\2SSS\316\316\316\235\377\377\377\2\317\317\317" \ - "``b\207::<\3;;=::<\204\204\206\220\377\377\377\1\316\316\316\205::<\1" \ - "kkm\226\377\377\377\3\204\204\206::<;;=\205::<\1\316\316\316\232\377" \ - "\377\377\1\376\376\376\205\377\377\377\2\364\364\364FFF\202;;=\202::" \ - "<\6;;=99;;;=::\214\305@\207\214\306>\4\214\305@\215" \ - "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \ - "\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\2\222\313" \ - "J\366\373\364\202\377\376\377\4\377\377\373\376\376\374\376\377\377\377" \ - "\376\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \ - "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \ - "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \ - ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377" \ - "-\377\377\375\376\377\377\377\377\377\376\376\374\376\377\377\377\376" \ - "\377\376\377\377\252\324p\212\306@\215\305>\212\307<\215\305@\215\305" \ - "<\214\305B\215\305@\214\306<\212\307>\215\305>\214\306>\211\306=\215" \ - "\305>\212\307>\214\306<\350\364\334\374\377\377\377\376\377\376\376\376" \ - "\374\377\375\377\377\377\376\377\375\377\377\375\377\376\377\377\377" \ - "\375\377\377\377\377\376\377\357\367\350\223\312K\213\310\77\215\305" \ - ">\214\306>\215\305>\213\310\77\212\306@\214\306>\215\305@\202\214\306" \ - ">\10\214\305@\216\306=\212\307>\215\305>\333\355\303\376\376\374\377" \ - "\377\377\377\377\375\223\377\377\377\1\376\376\376\203\377\377\377\1" \ - "\203\203\203\206::<\4;;=::<\204\204\206\363\363\363\230\377\377\377\1" \ - "\376\376\376\207\377\377\377\1\235\235\237\202::<\1;;=\203::<\5;;=99" \ - ";;;=\204\204\204\376\376\376\216\377\377\377\1\316\316\316\205::<\1k" \ - "km\227\377\377\377\12\204\204\206::<;;=::<99;;;=::<\204\204\204\377\377" \ - "\377\376\376\376\232\377\377\377\1\376\376\376\203\377\377\377\2\234" \ - "\234\234;;=\203::<\1;;=\204::<\3<<>\250\250\250\376\376\376\237\377\377" \ - "\377\1\234\234\236\205::<\1\234\234\234\231\377\377\377\10\376\376\376" \ - "\377\377\377\265\265\265FFH::<;;=::<;;=\203::<\2;;=\204\204\204\222\377" \ - "\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305" \ - "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \ - "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \ - "\202\214\306>\1\214\305@\220\214\306>\4\216\306\77\250\322n\376\377\375" \ - "\376\377\373\222\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \ - "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \ - "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377" \ - "\377\13\376\376\377\376\377\377\377\376\377\376\376\374\374\377\377\377" \ - "\377\375\377\376\377\356\372\346\225\311K\214\306>\213\310=\203\214\306" \ - ">\2\213\310\77\214\306>\202\214\305@\7\214\306<\213\307A\214\304\77\214" \ - "\305B\212\307>\244\317d\377\376\377\202\377\377\377\1\377\375\377\202" \ - "\377\377\377\25\376\377\377\377\376\377\377\377\377\374\377\375\376\376" \ - "\374\253\324n\214\306<\215\307\77\215\305>\211\307@\216\305C\214\305" \ - "@\215\307\77\214\305@\214\306<\212\307<\211\306=\214\306>\214\305@\213" \ - "\307A\263\327}\202\376\377\377\3\377\377\377\377\375\376\377\377\375" \ - "\221\377\377\377\1\376\376\376\203\377\377\377\1\250\250\250\204::<\1" \ - ";;=\202::<\2;;=\264\264\264\202\377\377\377\1\376\376\376\232\377\377" \ - "\377\1\376\376\376\205\377\377\377\2\332\332\332SSS\202::<\1;;=\204:" \ - ":<\4xxx\364\364\364\377\377\377\376\376\376\214\377\377\377\1\316\316" \ - "\316\205::<\1kkm\227\377\377\377\2\363\363\363SSU\202::<\4;;=99;::<;" \ - ";;\202\377\377\377\1\376\376\376\226\377\377\377\1\376\376\376\204\377" \ - "\377\377\11\376\376\376\363\363\363FFH99;;;=::<;;=99;;;=\203::<\4""9" \ - "9;SSU\377\377\377\376\376\376\236\377\377\377\1\234\234\236\205::<\1" \ - "\234\234\234\225\377\377\377\1\376\376\376\204\377\377\377\10\376\376" \ - "\376\377\377\377\363\363\363yyy::<;;=99;;;=\204::<\1\266\266\266\221" \ - "\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214" \ - "\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \ - "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \ - "\320\202\214\306>\1\214\305@\220\214\306>\4\214\306<\213\307A\275\335" \ - "\222\376\377\377\203\377\377\377\1\377\377\375\216\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\211\377\377\377\4\377\376\377\376\376\377\377" \ - "\377\377\377\377\375\202\376\377\377\5\377\375\376\377\376\377\315\346" \ - "\255\212\307>\214\305@\202\215\306A\22\214\305@\212\307<\214\305B\214" \ - "\306>\213\307A\214\306>\213\305=\214\306>\215\305>\213\307A\211\310<" \ - "\313\347\254\377\377\375\377\375\377\376\377\377\376\377\373\376\377" \ - "\377\377\376\377\202\376\377\377\10\377\377\377\315\346\254\212\307>" \ - "\212\306@\215\306A\216\306A\212\307>\214\306<\202\215\306A\10\215\306" \ - "C\214\305B\215\307\77\214\306<\214\305@\213\310<\222\310L\372\373\363" \ - "\225\377\377\377\1\376\376\376\202\377\377\377\6\376\376\376\333\333" \ - "\333::<;;=::<;;=\202::<\3;;=FFH\315\315\315\205\377\377\377\1\376\376" \ - "\376\225\377\377\377\202\376\376\376\202\377\377\377\1\376\376\376\202" \ - "\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363xxx\204::<\2" \ - ";;=\203\203\203\220\377\377\377\1\316\316\316\205::<\1kkm\230\377\377" \ - "\377\3\266\266\27099;;;=\204::<\1\316\316\316\230\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\376\376\376\202\377\377\377\3\265\265\267::<;" \ - ";=\204::<\202;;=\202::<\202;;=\1\265\265\265\237\377\377\377\1\234\234" \ - "\236\205::<\1\234\234\234\236\377\377\377\5\234\234\234::<;;=::<;;=\202" \ - "::<\3;;=FFH\332\332\332\220\377\377\377\1\234\234\234\205::<\1\234\234" \ - "\236\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \ - "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>" \ - "\4\215\307\77\214\304\77\213\310\77\333\355\303\202\377\377\377\1\376" \ - "\377\375\217\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \ - "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \ - "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \ - ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\213\377\377\377" \ - "\5\377\377\373\377\376\377\377\377\377\375\377\374\376\377\377\202\376" \ - "\376\376\22\260\331{\212\307>\214\306>\215\305>\215\305@\215\307\77\215" \ - "\307=\214\305@\214\306>\215\306A\214\306>\213\307C\214\306>\214\304;" \ - "\213\307A\222\312K\357\370\345\377\377\375\202\377\377\377\15\377\375" \ - "\376\377\377\375\376\376\376\377\377\375\361\367\351\222\311J\213\310" \ - "\77\214\305B\215\310<\213\305=\216\306\77\212\307<\214\305B\202\214\306" \ - ">\6\216\306\77\215\305@\215\306A\214\305@\215\305<\333\356\301\202\377" \ - "\376\377\3\377\377\375\377\377\377\377\376\377\225\377\377\377\1``b\202" \ - "::<\6;;=::<;;=::\214\305@\207\214\306>\4\214\305@\215" \ - "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \ - "\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\10\216\306" \ - "\77\215\306A\214\305@\224\310J\360\371\350\377\377\377\377\376\377\376" \ - "\377\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \ - "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \ - "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \ - ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\212\377\377\377" \ - "\1\377\377\375\202\377\377\377\2\377\376\377\377\377\377\202\376\377" \ - "\377\25\377\377\375\370\373\362\223\312K\212\307>\215\305>\216\306A\212" \ - "\307<\214\305B\215\307\77\214\305@\214\306>\214\305@\212\306@\215\307" \ - "=\216\306A\215\305>\214\306<\252\324n\376\377\377\376\376\376\377\376" \ - "\377\202\377\377\375\4\377\376\377\376\376\377\252\324n\215\306A\202" \ - "\214\306>\21\214\305@\215\307\77\215\305>\212\307>\214\306<\213\304A" \ - "\215\307=\214\304=\215\307\77\212\307>\214\306>\277\337\226\377\376\377" \ - "\376\377\375\377\377\375\377\377\377\376\376\376\225\377\377\377\3\234" \ - "\234\236::<;;=\204::<\4;;=\265\265\267\377\377\377\376\376\376\204\377" \ - "\377\377\202\376\376\376\202\377\377\377\1\376\376\376\225\377\377\377" \ - "\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \ - "\376\202\377\377\377\3\250\250\250::<\204\204\206\205\377\377\377\1\376" \ - "\376\376\214\377\377\377\1\316\316\316\205::<\1kkm\226\377\377\377\1" \ - "\376\376\376\202\377\377\377\2kkm99;\202::<\4;;=::<\204\204\206\376\376" \ - "\376\202\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376\203" \ - "\377\377\377\2\376\376\376\265\265\265\202::<\1;;=\202::<\3;;=\316\316" \ - "\320\316\316\316\204::<\3;;=::<\266\266\266\236\377\377\377\1\234\234" \ - "\236\205::<\1\234\234\234\226\377\377\377\202\376\376\376\2\377\377\377" \ - "\376\376\376\205\377\377\377\4\376\376\376\251\251\253;;=99;\202::<\4" \ - "<<>99;::<\250\250\252\217\377\377\377\1\234\234\234\205::<\1\234\234" \ - "\236\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \ - "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>" \ - "\202\214\305@\6\212\306@\215\307\77\243\321d\377\377\375\377\375\377" \ - "\376\377\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \ - "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \ - "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377" \ - "\377\2\376\377\377\377\377\375\202\377\377\377\1\376\376\376\202\377" \ - "\377\377\6\376\377\372\376\377\377\377\376\377\331\357\301\213\304\77" \ - "\215\307=\202\214\305@\25\214\305B\214\306<\215\305@\212\307<\214\306" \ - ">\216\306=\212\307>\212\306B\214\305@\215\306E\212\306@\313\347\255\376" \ - "\377\375\376\376\377\376\377\377\377\376\377\377\377\377\333\355\305" \ - "\212\307>\216\306\77\215\307\77\202\214\306>\1\215\307\77\202\214\306" \ - ">\13\215\305<\212\306@\212\307<\215\307\77\211\306=\213\307A\233\314" \ - "V\370\373\362\377\377\375\377\377\377\376\377\377\202\377\377\375\2\374" \ - "\377\377\377\375\376\222\377\377\377\3\363\363\363GGI::<\202;;=\202:" \ - ":<\2;;=\234\234\234\214\377\377\377\1\376\376\376\221\377\377\377\1\376" \ - "\376\376\202\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377" \ - "\377\377\3\376\376\376\377\377\377\316\316\316\203\377\377\377\1\376" \ - "\376\376\203\377\377\377\1\376\376\376\213\377\377\377\1\316\316\316" \ - "\205::<\1kkm\227\377\377\377\5\376\376\376\377\377\377\235\235\237::" \ - "<;;=\203::<\2lln\376\376\376\203\377\377\377\1\376\376\376\224\377\377" \ - "\377\13\376\376\376\377\377\377\376\376\376\377\377\377RRR::<99;::<;" \ - ";=::\214\305@\207\214\306" \ - ">\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>" \ - "\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\221" \ - "\214\306>\5\213\307A\216\306\77\212\307<\214\306>\277\337\223\220\377" \ - "\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377" \ - "\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306" \ - ">\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \ - "\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\4\376\377\377" \ - "\377\377\375\377\375\377\377\377\377\202\377\377\375\202\377\376\377" \ - "\202\376\377\377\22\377\376\377\262\331~\213\304\77\213\310\77\216\306" \ - "A\212\307<\215\306A\214\304=\213\310\77\214\305@\215\304B\214\305B\214" \ - "\306<\212\307>\212\307<\216\306A\221\312I\370\373\362\203\377\377\377" \ - "\13\370\373\364\226\310K\214\306>\212\307>\215\304B\214\306>\215\306" \ - "A\213\304\77\215\306A\214\306>\215\305@\202\212\306@\13\215\307\77\213" \ - "\310=\220\303@\336\362\315\377\376\377\377\377\377\374\377\377\377\376" \ - "\377\377\377\377\376\376\374\376\377\375\223\377\377\377\1\204\204\206" \ - "\203::<\4""99;;;=::\214\305@\207\214\306>\4\214\305@\215\305>\214" \ - "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \ - "\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\10\215\304B\214\306" \ - "<\214\305@\215\305@\212\306@\215\305>\323\354\265\377\376\377\216\377" \ - "\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377" \ - "\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306" \ - ">\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \ - "\214\306>\3\214\305@\214\306>\214\305@\212\377\377\377\3\375\377\376" \ - "\377\377\377\377\377\375\202\377\377\377\26\377\377\375\375\377\374\376" \ - "\377\377\377\376\377\377\377\375\365\375\362\225\311K\212\306@\214\306" \ - ">\214\305@\212\306@\216\306=\211\306;\215\306A\214\306>\215\307\77\217" \ - "\304@\214\306>\212\307>\215\305@\214\305@\262\327z\203\377\377\377\13" \ - "\260\331{\213\310\77\214\305B\214\305@\215\305@\215\307\77\212\307<\216" \ - "\306A\213\305;\214\305@\215\305>\202\214\306>\11\215\305@\214\306<\276" \ - "\340\224\377\376\375\377\377\375\376\377\377\377\376\375\376\377\375" \ - "\377\376\377\202\377\377\377\1\376\377\375\221\377\377\377\1\346\346" \ - "\346\206::<\2:::\346\346\346\202\377\377\377\1\376\376\376\276\377\377" \ - "\377\1\316\316\316\205::<\1kkm\216\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\207\377\377\377\3\234\234\236::<;;=\203::<\1k" \ - "km\226\377\377\377\1\376\376\376\204\377\377\377\2\376\376\376lln\205" \ - "::<\1``b\204\377\377\377\1SSS\205::<\1kkm\235\377\377\377\1\234\234\236" \ - "\205::<\1\234\234\234\242\377\377\377\2\316\316\316:::\202::<\5;;=::" \ - "<;;=FFH\363\363\363\206\377\377\377\1\376\376\376\206\377\377\377\1\234" \ - "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \ - "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \ - "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \ - ">\1\214\305@\210\214\306>\27\215\306A\212\307>\215\305>\215\305@\215" \ - "\307=\217\304B\214\306<\214\305@\215\307\77\215\305@\215\307\77\214\305" \ - "@\216\306\77\211\310<\226\312L\347\364\332\377\377\377\377\376\377\377" \ - "\377\375\374\377\377\377\376\377\376\376\376\376\377\377\207\377\377" \ - "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \ - "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \ - "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\221\377\377\377\1\377\377\375\203\377" \ - "\377\377\5\333\355\303\214\306>\212\307<\216\306A\214\305@\202\214\306" \ - ">\15\215\305@\214\306>\212\306@\213\310\77\215\305>\216\306A\211\306" \ - "=\212\306@\212\307<\334\354\305\377\377\375\335\354\303\212\307>\210" \ - "\214\306>\10\216\306A\212\307;\215\306A\216\306A\214\305@\241\321a\371" \ - "\374\361\375\376\377\223\377\377\377\1\376\376\376\204\377\377\377\2" \ - "\376\376\376\234\234\234\203::<\1""99;\202::<\1\234\234\234\302\377\377" \ - "\377\1\316\316\316\205::<\1kkm\217\377\377\377\1\376\376\376\202\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3\376" \ - "\376\376\377\377\377xxz\202::<\5""99;::<;;=xxz\376\376\377\232\377\377" \ - "\377\3\317\317\31799;;;=\202::<\5;;=::<\265\265\265\377\377\377\376\376" \ - "\376\202\377\377\377\2\265\265\265;;=\202::<\203;;=\1\332\332\332\203" \ - "\377\377\377\1\376\376\376\230\377\377\377\1\234\234\236\205::<\1\234" \ - "\234\234\242\377\377\377\4\376\376\376\204\204\204::<;;=\202::<\3;;=" \ - "::<\266\266\266\207\377\377\377\1\376\376\376\205\377\377\377\1\234\234" \ - "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \ - "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \ - "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \ - "\214\305@\211\214\306>\27\216\306A\214\306>\212\306@\214\306<\213\310" \ - "\77\215\305@\215\307\77\213\305=\216\306\77\212\307;\212\306@\215\305" \ - ">\215\306A\212\307>\245\320d\367\375\361\376\377\377\377\376\377\377" \ - "\377\377\376\376\377\377\376\377\375\377\376\377\377\375\206\377\377" \ - "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \ - "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \ - "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\221\377\377\377\6\376\376\376\377\376" \ - "\377\377\377\377\375\377\376\376\377\377\270\333\207\203\214\306>\17" \ - "\211\306=\212\307<\214\306<\214\305@\215\307\77\214\305@\216\305C\214" \ - "\306>\212\310A\215\305@\216\306\77\223\312K\360\371\346\222\311I\214" \ - "\305@\210\214\306>\10\214\305@\212\307>\214\305@\216\306A\215\307=\350" \ - "\364\334\375\377\376\377\376\377\225\377\377\377\7\376\376\376\377\377" \ - "\377\376\376\376\377\377\377SSS::<;;=\203::<\5FFH\364\364\364\376\376" \ - "\376\377\377\377\376\376\376\277\377\377\377\1\316\316\316\205::<\1k" \ - "km\222\377\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377" \ - "\377SSU\205::<\1\234\234\236\202\377\377\377\1\376\376\376\202\377\377" \ - "\377\1\376\376\376\220\377\377\377\1\376\376\376\204\377\377\377\2kk" \ - "m;;=\202::<\5;;=::\214\305@\207\214\306>\4\214\305" \ - "@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p" \ - "\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\27" \ - "\214\304=\215\305>\213\307A\212\306@\214\305B\215\305<\213\310=\215\307" \ - "\77\215\304B\214\306<\213\307A\215\305>\216\306A\212\306@\212\307>\270" \ - "\332\204\377\376\377\377\377\377\377\376\377\376\376\374\377\377\373" \ - "\377\376\377\377\377\375\206\377\377\377\213\214\306>\3\215\305>\214" \ - "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \ - "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \ - "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\223\377\377\377\1\377\377\375\202\377\377\377\2\371\372\364\232\315" \ - "W\202\214\305@\4\214\306<\215\307\77\214\305B\215\306C\202\215\306A\1" \ - "\214\306<\202\212\307>\6\215\305@\212\307>\215\305>\212\306B\216\306" \ - "A\212\307>\210\214\306>\10\214\305B\215\307\77\214\306<\214\306>\304" \ - "\341\237\377\377\377\377\376\377\377\377\375\220\377\377\377\1\376\376" \ - "\376\203\377\377\377\1\376\376\376\203\377\377\377\10\301\301\301::<" \ - ";;=99;;;=::<99;\234\234\236\207\377\377\377\1\376\376\376\273\377\377" \ - "\377\1\316\316\316\205::<\1kkm\216\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377\377\315" \ - "\315\315\202;;=\203::<\6;;=\265\265\267\377\377\377\376\376\376\377\377" \ - "\377\376\376\376\225\377\377\377\2\376\376\376\317\317\317\203::<\4;" \ - ";=::<;;=\264\264\264\206\377\377\377\10\234\234\234;;=::<;;=99;;;=::" \ - "<\346\346\346\233\377\377\377\1\234\234\236\205::<\1\234\234\234\237" \ - "\377\377\377\1\376\376\376\204\377\377\377\1\204\204\206\202::<\6;;=" \ - "99;;;=::<\346\346\346\376\376\376\204\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236\266" \ - "\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215" \ - "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \ - "\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\22\215\307" \ - "\77\212\307>\216\306A\212\304<\215\307\77\215\305@\216\306\77\213\307" \ - "A\214\306>\214\305@\215\307\77\213\310=\212\307>\214\306>\214\306<\214" \ - "\306>\216\306\77\324\353\267\202\376\376\376\3\377\377\377\376\376\377" \ - "\376\377\375\207\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \ - "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \ - "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377" \ - "\377\3\376\377\377\377\377\377\376\377\375\202\377\377\377\7\377\376" \ - "\377\341\363\315\215\305@\214\305@\215\306A\215\305@\216\306\77\202\214" \ - "\306>\12\214\305B\212\307<\213\304A\213\310=\216\306A\211\306;\213\310" \ - "=\214\305@\212\307>\215\305>\210\214\306>\10\215\307\77\214\304=\212" \ - "\307>\243\322b\377\377\377\376\377\377\377\376\377\377\377\375\226\377" \ - "\377\377\4\376\376\376\377\377\377\204\204\206;;=\203::<\3""99;;;=\364" \ - "\364\364\205\377\377\377\1\376\376\376\275\377\377\377\1\316\316\316" \ - "\205::<\1kkm\217\377\377\377\202\376\376\376\202\377\377\377\1\376\376" \ - "\376\203\377\377\377\4\376\376\376xxz;;=99;\202;;=\4::<;;=\346\346\346" \ - "\376\376\376\204\377\377\377\1\376\376\376\224\377\377\377\1xxz\203:" \ - ":<\3;;=::\214\305" \ - "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \ - "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \ - "\214\305@\210\214\306>\7\213\305=\214\306<\210\306\77\216\306\77\215" \ - "\307=\214\306>\215\307\77\202\214\306>\14\215\307\77\214\305B\214\306" \ - "<\212\307<\214\305@\216\306\77\215\305>\214\305@\224\313L\352\364\331" \ - "\374\377\377\377\376\377\211\377\377\377\213\214\306>\3\215\305>\214" \ - "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \ - "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \ - "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\222\377\377\377\1\376\377\377\202\377\377\377\24\376\376\374\376\377" \ - "\375\377\375\377\277\337\224\214\306>\212\307>\215\307\77\214\304=\215" \ - "\307=\213\304A\214\306<\212\307>\215\307\77\214\305@\213\304\77\215\307" \ - "\77\215\305@\214\304=\215\305<\215\306A\210\214\306>\1\212\307>\202\215" \ - "\306A\4\350\365\333\377\375\376\377\376\377\375\376\377\226\377\377\377" \ - "\1\376\376\376\202\377\377\377\3TTV::<99;\202;;=\4::<\203\203\203\377" \ - "\377\377\376\376\376\302\377\377\377\1\316\316\316\205::<\1kkm\222\377" \ - "\377\377\1\376\376\376\204\377\377\377\3\300\300\302;;=::<\202;;=\202" \ - "::<\2```\376\376\376\227\377\377\377\7\376\376\376\377\377\377\346\346" \ - "\346;;=99;::<;;=\202::<\3\251\251\251\377\377\377\376\376\376\206\377" \ - "\377\377\1\234\234\234\202::<\1;;=\202::<\2;;=\346\346\346\232\377\377" \ - "\377\1\234\234\236\205::<\1\234\234\234\235\377\377\377\1\376\376\376" \ - "\207\377\377\377\11SSU::<;;=99;<<>::\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \ - "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \ - "\320\202\214\306>\1\214\305@\210\214\306>\25\213\307A\216\306A\232\315" \ - "W\215\306C\212\306@\214\305@\212\307;\216\306A\215\305>\215\307\77\214" \ - "\305@\215\307\77\214\306>\214\305@\212\306B\213\307C\214\306>\215\305" \ - "@\232\315V\372\374\367\376\376\376\202\377\377\375\1\376\376\376\206" \ - "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \ - "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \ - "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \ - "\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377\377\5\377\376" \ - "\377\376\377\377\377\375\376\377\376\377\376\377\377\202\377\377\377" \ - "\10\370\373\362\233\314V\213\307A\211\306=\215\307\77\212\307<\212\306" \ - "@\215\305<\202\214\306>\7\215\307=\215\306A\214\305@\212\307>\216\306" \ - "A\212\306@\215\307=\210\214\306>\10\212\307>\212\307<\313\347\254\376" \ - "\377\377\377\377\377\377\376\377\376\377\377\377\377\375\223\377\377" \ - "\377\1\376\376\376\203\377\377\377\1\332\332\332\202::<\1;;=\203::<\1" \ - "\302\302\302\203\377\377\377\5\376\376\376\377\377\377\376\376\376\377" \ - "\377\377\376\376\376\274\377\377\377\1\316\316\316\205::<\1kkm\217\377" \ - "\377\377\1\376\376\376\206\377\377\377\3\332\332\334FFH;;=\205::<\1\265" \ - "\265\265\202\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376" \ - "\202\377\377\377\1\205\205\207\202::<\1;;=\202::<\2GGI\363\363\363\202" \ - "\377\377\377\1\376\376\376\205\377\377\377\1\363\363\363\202::<\1;;=" \ - "\202::<\2""99;\234\234\234\203\377\377\377\1\376\376\376\226\377\377" \ - "\377\1\234\234\236\205::<\1\234\234\234\234\377\377\377\1\376\376\376" \ - "\210\377\377\377\3\222\222\222::<99;\202;;=\5""99;GGI\376\376\376\377" \ - "\377\377\376\376\376\211\377\377\377\1\234\234\234\205::<\1\234\234\236" \ - "\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305" \ - "@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p" \ - "\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\10" \ - "\213\307A\214\306>\331\356\303\232\315W\215\305>\215\306A\214\305B\214" \ - "\306>\202\214\305@\7\213\310=\214\306>\215\304B\215\306A\211\306;\213" \ - "\310\77\214\305@\202\215\307\77\2\257\326{\376\377\373\202\377\377\377" \ - "\1\377\377\375\206\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \ - "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \ - ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \ - "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377" \ - "\377\6\377\377\373\377\377\375\377\377\377\376\376\377\377\376\377\373" \ - "\377\374\202\377\376\377\4\336\362\315\220\303@\213\310=\215\307\77\202" \ - "\212\306@\1\215\305@\202\214\306>\7\213\305=\214\306>\213\305=\214\305" \ - "@\213\310\77\212\306@\213\307A\210\214\306>\10\215\307\77\252\324p\377" \ - "\377\375\376\377\377\377\377\375\377\377\377\377\376\377\377\377\375" \ - "\220\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\265\265\265\204::<\5;;=::<\363\363\363\377\377\377\376\376" \ - "\376\302\377\377\377\1\316\316\316\205::<\1kkm\225\377\377\377\2\317" \ - "\317\317FFH\206::<\1SSU\204\377\377\377\1\376\376\376\225\377\377\377" \ - "\2\346\346\346;;=\203::<\3;;=::<\234\234\236\202\377\377\377\1\376\376" \ - "\376\207\377\377\377\2\204\204\206;;=\204::<\2FFF\362\362\362\231\377" \ - "\377\377\1\234\234\236\205::<\1\234\234\234\245\377\377\377\1\301\301" \ - "\301\202::<\6;;=::<;;=::<\347\347\347\376\376\376\212\377\377\377\1\234" \ - "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \ - "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \ - "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \ - ">\1\214\305@\210\214\306>\27\214\305@\215\305<\342\362\315\353\365\334" \ - "\223\312K\215\305<\212\306@\215\305<\212\307>\215\306A\214\306>\212\307" \ - ">\215\307\77\215\304B\215\307\77\215\305@\214\306>\215\305>\214\305@" \ - "\215\305<\315\345\253\377\377\375\376\377\377\207\377\377\377\213\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\221\377\377\377\14\376\377\377\376\376\377\377" \ - "\377\377\377\377\373\376\377\375\377\376\377\376\377\377\377\377\377" \ - "\377\376\375\276\340\224\214\306<\215\305@\202\214\306>\12\215\305>\214" \ - "\305@\215\305@\214\305@\213\310\77\214\306>\216\306\77\211\305\77\215" \ - "\307=\214\305@\210\214\306>\4\223\312K\360\367\347\377\377\377\377\377" \ - "\375\232\377\377\377\2\376\376\376\234\234\236\204::<\2;;=___\234\377" \ - "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\244\377\377\377" \ - "\1\316\316\316\205::<\1kkm\202\377\377\377\1\376\376\376\216\377\377" \ - "\377\4\376\376\376\377\377\377\347\347\347\204\204\204\203::<\6;;=::" \ - "<;;=::<;;=\301\301\303\226\377\377\377\1\376\376\376\203\377\377\377" \ - "\1\203\203\205\202;;=\5::<;;=::\214\305@\207\214\306>\4" \ - "\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250" \ - "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306" \ - ">\40\213\307A\215\305>\341\360\317\377\375\376\324\353\267\215\304B\214" \ - "\306>\215\307=\214\305@\212\307>\212\307<\215\305<\215\306A\214\306>" \ - "\214\306<\212\306@\214\305@\215\307\77\216\306=\212\306B\214\306>\352" \ - "\364\333\377\376\377\377\377\377\377\376\377\377\377\377\377\377\375" \ - "\376\377\373\375\376\377\377\376\377\214\306>\215\307\77\211\214\306" \ - ">\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214\306" \ - ">\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232\377" \ - "\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305" \ - "@\214\306>\214\305@\232\377\377\377\7\374\377\375\242\321a\216\306A\212" \ - "\307>\214\306>\215\307\77\212\307<\210\214\306>\16\215\307\77\214\307" \ - ";\213\304\77\216\306A\214\305B\215\307\77\215\305>\212\307>\320\345\254" \ - "\374\377\377\377\376\377\377\377\375\377\376\377\375\377\372\223\377" \ - "\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377\377kkm\203" \ - "::<\3<<>::<\221\221\221\305\377\377\377\1\316\316\316\204::<\2;;=jjl" \ - "\217\377\377\377\16\316\316\316\300\300\300\234\234\234__a::<;;=::<;" \ - ";=::<99;;;=::<;;=\204\204\206\232\377\377\377\1\362\362\362\202;;=\202" \ - "::<\3""99;::<\235\235\235\212\377\377\377\12\376\376\376\377\377\377" \ - "\205\205\20799;;;=::<;;=::\214\305" \ - "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \ - "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \ - "\214\305@\210\214\306>\202\214\306<\32\342\361\322\377\377\377\377\377" \ - "\375\266\334\205\212\306B\215\307\77\212\306@\220\306=\214\306>\215\307" \ - "\77\214\305B\213\305=\216\306\77\215\307\77\215\305<\212\306B\215\306" \ - "A\215\305@\216\306=\232\315V\371\373\360\377\377\375\377\377\377\375" \ - "\376\377\377\375\377\376\376\377\202\377\377\377\2\214\305@\212\307>" \ - "\211\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324" \ - "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \ - "\3\214\305@\214\306>\214\305@\233\377\377\377\5\347\365\334\211\306=" \ - "\215\305>\216\306=\214\305@\211\214\306>\2\215\304B\212\307>\202\214" \ - "\306>\14\215\306A\214\306<\215\305@\252\324p\374\377\377\377\377\377" \ - "\377\375\376\377\376\377\376\376\377\377\377\375\377\377\377\377\375" \ - "\377\222\377\377\377\1\376\376\376\203\377\377\377\4\376\376\376lln:" \ - ":<;;=\203::<\2\235\235\235\376\376\376\304\377\377\377\1\316\316\316" \ - "\205::<\202;;=\2::<;;=\202::<\1;;=\211::<\202;;=\204::<\1""99;\202::" \ - "<\5;;=::<;;=__a\376\376\376\224\377\377\377\1\376\376\376\205\377\377" \ - "\377\1\235\235\235\206::<\3\346\346\346\377\377\377\376\376\376\207\377" \ - "\377\377\5\376\376\376\377\377\377\376\376\376\346\346\350;;=\203::<" \ - "\3;;=::<\265\265\265\230\377\377\377\1\234\234\236\205::<\1\234\234\234" \ - "\246\377\377\377\1lln\202::<\4""99;;;=99;\234\234\234\213\377\377\377" \ - "\1\234\234\234\203::<\7;;=::<;;=::<;;=::<;;=\222::<\7;;=99;;;=::<;;=" \ - "::<\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \ - "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \ - ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \ - "\214\306>\13\216\306A\213\310\77\343\361\320\377\377\375\375\377\376" \ - "\371\374\361\242\320c\213\310\77\216\306\77\214\306>\215\306A\202\214" \ - "\305@\2\216\306A\213\305=\204\214\306>\11\213\307A\216\306A\212\307>" \ - "\260\331y\377\376\377\376\377\375\377\377\373\376\377\377\377\377\377" \ - "\202\377\376\377\2\212\311=\215\306A\211\214\306>\3\215\305>\214\306" \ - ">\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \ - "\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\231" \ - "\377\377\377\6\377\376\377\377\377\373\377\376\377\305\342\240\212\310" \ - "\77\214\304=\202\215\305@\210\214\306>\4\215\305>\213\305=\212\306@\215" \ - "\306A\202\214\306>\10\222\312M\370\373\362\377\376\377\377\375\376\377" \ - "\376\377\377\377\377\376\377\375\377\377\377\202\377\376\377\221\377" \ - "\377\377\1\376\376\376\205\377\377\377\2::<;;=\202::<\202;;=\3\300\300" \ - "\300\377\377\377\376\376\376\235\377\377\377\1\376\376\376\245\377\377" \ - "\377\1\316\316\316\207::<\5;;=::<;;=::<;;=\210::<\202;;=\2""99;;;=\202" \ - "::<\3;;=::<;;=\202::<\3;;=xxz\363\363\363\225\377\377\377\3\376\376\376" \ - "\377\377\377\376\376\376\202\377\377\377\3\363\363\363FFH::<\202;;=\202" \ - "::<\1\204\204\206\205\377\377\377\1\376\376\376\205\377\377\377\1\376" \ - "\376\376\202\377\377\377\1kkm\202::<\1;;=\202::<\1SSU\230\377\377\377" \ - "\1\234\234\236\205::<\1\234\234\234\244\377\377\377\3\376\376\376\377" \ - "\377\377xxz\202::<\1;;=\202::<\3xxx\377\377\377\376\376\376\211\377\377" \ - "\377\1\234\234\234\203::<\1;;=\202::<\1;;=\224::<\5;;=99;;;=::<;;=\202" \ - "::<\1\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \ - "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \ - ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \ - "\214\306>\3\214\305@\214\306<\343\361\316\202\377\377\377\26\377\376" \ - "\374\353\365\335\223\312K\211\305\77\215\307=\215\306C\211\306;\214\306" \ - ">\215\305@\215\307\77\214\305@\213\307A\214\306>\212\307<\216\306\77" \ - "\212\306B\215\305>\212\306@\304\341\236\377\376\377\375\377\376\377\377" \ - "\375\203\377\377\377\2\212\306@\214\306<\211\214\306>\3\215\305>\214" \ - "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \ - "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \ - "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\231\377\377\377\2\377\377\373\376\377\377\202\377\377\377\4\241\321" \ - "c\215\306A\215\305>\213\310\77\210\214\306>\20\215\305@\215\307=\213" \ - "\310\77\214\304;\216\306\77\213\310\77\333\355\303\377\375\376\377\377" \ - "\375\377\376\377\377\377\377\375\377\374\376\377\377\377\377\377\377" \ - "\377\375\376\376\376\222\377\377\377\1\376\376\376\204\377\377\377\206" \ - "::<\2\316\316\316\376\376\376\234\377\377\377\1\376\376\376\247\377\377" \ - "\377\1\316\316\316\204::<\1;;=\205::<\1;;=\212::<\4""99;;;=::<;;=\203" \ - "::<\1;;=\202::<\1\233\233\233\234\377\377\377\3\235\235\23799;;;=\203" \ - "::<\2;;=\346\346\346\203\377\377\377\1\376\376\376\204\377\377\377\3" \ - "\376\376\376\377\377\377\376\376\376\203\377\377\377\4\316\316\320;;" \ - "=::<;;=\202::<\2;;=\264\264\264\227\377\377\377\1\234\234\236\205::<" \ - "\1\234\234\234\246\377\377\377\2\234\234\236;;=\203::<\2;;=kkk\213\377" \ - "\377\377\1\234\234\234\204::<\3;;=::<;;=\225::<\2;;=99;\202::<\3;;=:" \ - "::\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306" \ - ">\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>" \ - "\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \ - "\214\306>\14\215\307\77\215\305@\340\361\315\376\376\376\377\376\377" \ - "\377\377\375\377\377\377\323\353\267\212\307>\215\305@\214\305@\214\311" \ - "@\202\214\306>\22\212\307>\215\305@\214\306>\212\306@\214\305@\215\305" \ - ">\215\307=\214\306>\214\304=\215\307\77\341\362\316\377\376\377\377\377" \ - "\377\376\376\376\377\377\375\375\376\377\217\307@\212\306@\211\214\306" \ - ">\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214\306" \ - ">\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232\377" \ - "\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305" \ - "@\214\306>\214\305@\232\377\377\377\7\377\376\377\376\377\377\377\377" \ - "\377\352\364\331\212\307<\215\307=\212\307>\211\214\306>\13\212\306@" \ - "\214\306<\216\306A\214\305@\252\322q\376\376\377\376\377\373\377\376" \ - "\377\376\376\377\377\377\375\376\377\377\203\377\377\377\1\376\377\375" \ - "\227\377\377\377\202::<\202;;=\3::<;;=\316\316\316\233\377\377\377\1" \ - "\375\375\375\251\377\377\377\1\316\316\316\211::<\1;;=\213::<\3;;=::" \ - "<;;=\204::<\3""99;\205\205\207\346\346\346\233\377\377\377\4\376\376" \ - "\376\364\364\364FFH;;=\202::<\202;;=\1\204\204\204\215\377\377\377\1" \ - "\376\376\376\202\377\377\377\7kkm::<99;::<;;=99;TTV\227\377\377\377\1" \ - "\234\234\236\205::<\1\234\234\234\246\377\377\377\1\234\234\236\202:" \ - ":<\202;;=\2::\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251" \ - "\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202" \ - "\214\306>\1\214\305@\210\214\306>\202\214\305@\15\341\362\316\377\377" \ - "\375\376\377\375\377\377\377\373\377\374\377\376\377\271\332\211\212" \ - "\307>\212\307<\214\305B\214\305@\216\306\77\212\307>\202\215\307\77\11" \ - "\214\305B\215\306A\212\311=\214\303A\214\306>\215\306A\212\307>\225\311" \ - "K\371\372\362\202\377\377\375\202\377\377\377\2\214\305@\215\306A\211" \ - "\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p" \ - "\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \ - "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \ - "\3\214\305@\214\306>\214\305@\231\377\377\377\10\376\377\377\377\376" \ - "\377\377\377\375\377\375\376\331\356\303\214\306>\214\305B\215\307\77" \ - "\210\214\306>\12\215\305>\212\306B\215\304B\214\306>\215\307=\224\310" \ - "J\364\370\351\376\376\374\375\377\372\377\377\375\203\377\377\377\3\377" \ - "\376\377\377\377\377\376\377\375\221\377\377\377\3\376\376\376\377\377" \ - "\377\376\376\376\203\377\377\377\7::<;;=99;::<;;=::<\315\315\315\232" \ - "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\246\377\377" \ - "\377\1\316\316\316\204::<\1;;=\202::<\1;;=\203::<\1;;=\210::<\1;;=\202" \ - "::<\1;;=\202::<\4``b\233\233\235\347\347\351\376\376\376\235\377\377" \ - "\377\2\265\265\265;;=\202::<\1;;=\202::<\1\332\332\332\216\377\377\377" \ - "\3\376\376\376\377\377\377\302\302\302\206::<\1\315\315\315\226\377\377" \ - "\377\1\234\234\236\205::<\1\234\234\234\245\377\377\377\2\376\376\376" \ - "\235\235\237\205::<\1jjj\203\377\377\377\3\376\376\376\377\377\377\376" \ - "\376\376\205\377\377\377\1\234\234\234\204::<\2;;=kkm\202\234\234\236" \ - "\1\233\233\235\223\234\234\234\202\235\235\235\1\233\233\233\203\234" \ - "\234\234\1\346\346\346\231\377\377\377\3\214\305@\214\306>\214\305@\207" \ - "\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214" \ - "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \ - "@\210\214\306>\17\212\307>\216\306A\342\360\315\376\377\377\376\376\374" \ - "\375\377\376\377\376\377\377\376\374\377\377\375\242\320d\215\307=\214" \ - "\306>\214\305@\215\305@\212\306@\202\214\305@\17\215\305@\212\307>\215" \ - "\307\77\214\306<\215\306A\213\304\77\215\306A\215\307\77\252\324n\377" \ - "\377\377\375\377\376\377\376\377\377\377\375\212\307<\215\305@\211\214" \ - "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \ - "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \ - "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \ - "\305@\214\306>\214\305@\232\377\377\377\6\376\377\375\377\375\377\367" \ - "\375\363\223\312H\216\306\77\215\305>\212\214\306>\2\215\305@\214\306" \ - ">\202\212\307>\3\214\305@\247\324o\377\376\377\202\377\377\377\2\377" \ - "\376\377\377\377\375\233\377\377\377\2::<;;=\204::<\2\316\316\316\376" \ - "\376\376\236\377\377\377\3\316\316\316;;;:::\230::<\213\377\377\377\1" \ - "\316\316\316\224::<\6kkmlln\205\205\207\234\234\236\301\301\303\363\363" \ - "\363\202\377\377\377\1\376\376\376\202\377\377\377\3\376\376\376\377" \ - "\377\377\376\376\376\231\377\377\377\1SSS\204::<\2;;=lln\213\377\377" \ - "\377\1\376\376\376\205\377\377\377\2\376\376\376TTV\205::<\1lll\226\377" \ - "\377\377\1\234\234\236\205::<\1\234\234\234\246\377\377\377\2\233\233" \ - "\235;;=\204::<\2kkk\376\376\376\203\377\377\377\1\376\376\376\206\377" \ - "\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305" \ - "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \ - "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \ - "\202\214\306>\1\214\305@\210\214\306>\3\212\307>\215\305>\342\362\315" \ - "\202\377\377\377\22\377\376\377\376\377\377\377\377\375\376\377\377\363" \ - "\367\346\225\311K\211\307@\216\306\77\212\307>\215\305@\214\306<\212" \ - "\307>\214\305@\214\306>\212\306@\215\306C\214\304\77\215\307\77\202\214" \ - "\306>\7\212\306@\307\341\240\377\376\377\376\377\372\377\377\377\212" \ - "\307>\215\305>\211\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \ - "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \ - "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \ - "\207\214\306>\3\214\305@\214\306>\214\305@\231\377\377\377\4\377\376" \ - "\377\376\377\375\376\377\377\257\330z\202\214\305@\1\215\307\77\211\214" \ - "\306>\14\212\307>\215\307\77\214\305@\215\305@\212\307>\215\307=\214" \ - "\305B\313\347\252\377\377\377\377\375\377\377\376\377\376\376\376\202" \ - "\376\377\375\231\377\377\377\4GGI;;=::<;;=\202::<\1\233\233\235\237\377" \ - "\377\377\3\316\316\316::<;;=\230::<\213\377\377\377\1\316\316\316\205" \ - "::<\1kkm\202\377\377\377\2\376\376\376\250\250\250\206::<\2FFH\346\346" \ - "\346\210\377\377\377\1\376\376\376\237\377\377\377\1\264\264\266\203" \ - ";;=\4::<;;=;;;\316\316\316\222\377\377\377\1\265\265\265\204::<\3;;=" \ - "::<\316\316\316\203\377\377\377\1\376\376\376\221\377\377\377\1\234\234" \ - "\236\205::<\1\234\234\234\245\377\377\377\2\376\376\376\235\235\237\205" \ - "::<\1lll\213\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377" \ - "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \ - "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \ - "\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \ - "\316\205\377\377\377\10\376\377\375\377\377\377\333\355\303\215\305@" \ - "\214\306>\214\306<\214\305@\215\305>\202\214\305@\207\214\306>\6\212" \ - "\306@\214\307;\330\355\304\377\376\377\377\377\377\215\305>\212\214\306" \ - ">\3\215\305>\214\306>\305\342\240\215\377\377\377\17\251\323q\214\306" \ - ">\215\307\77\214\305B\215\307\77\213\305=\215\307\77\214\305@\212\307" \ - ">\215\305@\213\310\77\214\305@\215\305<\214\306>\376\377\377\230\377" \ - "\377\377\6\376\377\377\253\323p\215\305@\213\307A\214\306<\212\306B\202" \ - "\214\306>\4\214\305@\214\306>\212\307>\214\305@\202\214\306>\2\214\305" \ - "@\376\377\375\220\377\377\377\1\377\377\375\202\377\377\377\16\376\377" \ - "\375\377\376\377\377\375\376\374\377\377\377\377\375\376\377\375\377" \ - "\377\377\336\355\304\214\306>\215\306A\214\306>\215\306A\212\306@\216" \ - "\306A\202\214\305@\4\215\307\77\214\306>\215\307\77\214\306>\202\214" \ - "\305@\16\214\306>\215\307\77\214\306>\215\307\77\214\305@\214\305B\222" \ - "\313H\361\370\346\376\377\377\377\377\377\377\376\377\377\377\377\374" \ - "\377\377\377\376\377\230\377\377\377\1kkm\202::<\1""99;\202::<\1\235" \ - "\235\237\233\377\377\377\1\376\376\376\203\377\377\377\1\316\316\316" \ - "\224::<\1;;=\205::<\213\377\377\377\1\316\316\316\205::<\1kkm\204\377" \ - "\377\377\3wwy::<;;=\202::<\4""99;;;=``b\363\363\363\206\377\377\377\1" \ - "\376\376\376\235\377\377\377\4\376\376\376\377\377\377\376\376\376TT" \ - "V\205::<\1lln\223\377\377\377\10\376\376\376SSU;;=::<;;=99;::\214\305@\207\214\306>\4\214\305@\215" \ - "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \ - "\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305" \ - "@\343\361\316\205\377\377\377\7\377\375\377\377\377\375\376\377\377\276" \ - "\337\220\213\310\77\213\304A\216\306=\207\214\306>\3\215\307\77\214\306" \ - ">\212\307>\202\215\305>\5\223\312J\361\371\344\377\375\377\212\307<\214" \ - "\305@\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\14" \ - "\376\376\374\252\324n\214\306>\213\305=\215\307\77\214\305@\215\306A" \ - "\214\306>\215\307\77\213\310\77\215\305@\212\307>\202\214\306>\1\214" \ - "\305@\232\377\377\377\3\247\324m\215\305>\214\305@\202\214\306>\1\215" \ - "\307=\202\214\305@\6\214\306<\215\307=\214\305B\215\307\77\214\306>\214" \ - "\305@\224\377\377\377\15\377\377\375\376\376\376\377\377\377\377\376" \ - "\377\376\377\375\377\377\375\372\373\366\222\312M\216\306A\215\305<\214" \ - "\306>\212\307>\215\305<\202\214\306>\2\215\307\77\213\305=\204\214\306" \ - ">\1\214\305@\203\214\306>\14\215\307\77\214\305@\213\304\77\214\305B" \ - "\253\324n\376\376\377\376\377\377\377\376\377\377\377\377\376\377\375" \ - "\377\377\375\376\377\375\227\377\377\377\3lln::<;;=\203::<\2kkm\376\376" \ - "\376\236\377\377\377\2\316\316\316;;=\226::<\3;;=::\214\305" \ - "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \ - "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \ - "\214\305@\211\214\306>\2\214\305@\343\361\316\205\377\377\377\2\377\377" \ - "\375\377\375\377\202\377\377\377\1\242\322b\202\214\305@\2\214\305B\215" \ - "\307\77\205\214\306>\12\215\307\77\214\306>\215\306A\214\306>\212\306" \ - "@\215\307=\241\321c\377\377\377\215\304B\212\307>\211\214\306>\3\215" \ - "\305>\214\306>\305\342\240\214\377\377\377\5\376\377\375\251\323o\215" \ - "\307\77\214\306>\215\307\77\202\214\305@\2\214\306>\215\307\77\202\214" \ - "\306>\5\213\310\77\215\305>\214\305@\214\306>\377\376\377\230\377\377" \ - "\377\12\377\376\377\247\326p\213\304\77\215\307\77\214\305B\214\306<" \ - "\214\306>\215\307\77\214\305@\214\306>\202\215\307\77\3\214\306>\215" \ - "\306A\216\306\77\223\377\377\377\5\376\377\372\377\377\375\376\376\376" \ - "\377\377\377\377\377\375\202\377\376\377\4\250\325p\212\307<\214\305" \ - "@\215\307\77\202\214\305@\3\214\307;\215\307=\214\306>\202\214\305@\202" \ - "\214\306>\1\215\307\77\207\214\306>\202\214\305@\5\212\307>\307\341\240" \ - "\376\376\374\377\377\377\377\376\377\202\377\377\377\1\376\376\374\227" \ - "\377\377\377\7\234\234\236;;=99;<<>99;::<;;=\237\377\377\377\1\316\316" \ - "\316\223::<\7;;=99;;;=99;::<;;=kkm\213\377\377\377\1\316\316\316\205" \ - "::<\2mmo\376\376\377\204\377\377\377\12\332\332\332FFH;;=::<;;=99;<<" \ - ">::<\266\266\270\376\376\376\203\377\377\377\1\376\376\376\202\377\377" \ - "\377\1\376\376\376\230\377\377\377\3\376\376\376\377\377\377\376\376" \ - "\376\202\377\377\377\1kkm\205::<\202;;=\224::<\10;;=::<;;=::<;;=88:;" \ - ";=\205\205\205\224\377\377\377\1\234\234\236\205::<\1\234\234\234\246" \ - "\377\377\377\3SSU;;=::<\203;;=\1\234\234\234\206\377\377\377\1\376\376" \ - "\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377" \ - "\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306" \ - ">\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1" \ - "\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \ - "\316\205\377\377\377\10\376\376\374\376\377\375\377\375\377\377\377\377" \ - "\367\372\357\224\313L\214\305B\215\305<\203\214\306>\202\215\307\77\204" \ - "\214\306>\6\215\306A\213\307A\214\306>\212\306@\277\337\223\215\305>" \ - "\212\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\2\376\377" \ - "\377\251\322r\202\215\307\77\1\214\305B\202\214\306>\202\215\307\77\7" \ - "\214\306>\215\307\77\214\306>\214\304\77\212\306@\215\307\77\377\376" \ - "\377\230\377\377\377\7\377\377\375\215\305@\214\306>\214\305@\214\306" \ - ">\216\306\77\214\306<\203\214\305@\6\215\306C\215\307=\214\305@\215\306" \ - "A\233\314V\377\377\375\220\377\377\377\5\376\376\376\377\377\377\377" \ - "\376\377\377\375\377\377\377\375\202\376\377\377\21\377\376\377\314\346" \ - "\251\212\306B\215\307=\212\307>\216\306\77\215\306C\212\307>\215\306" \ - "C\214\305@\215\307\77\213\304\77\215\306A\214\306>\214\305@\215\307\77" \ - "\215\306A\203\214\306>\1\215\307\77\202\214\306>\202\215\307\77\10\214" \ - "\306>\214\305@\350\364\334\377\377\375\377\376\377\377\377\377\376\376" \ - "\376\377\376\377\222\377\377\377\1\376\376\376\204\377\377\377\1\301" \ - "\301\301\202::<\2""99;;;=\202::<\1\316\316\316\233\377\377\377\1\376" \ - "\376\376\202\377\377\377\2\316\316\316;;;\222::<\7""99;;;=::<;;=::<9" \ - "9;\204\204\206\213\377\377\377\1\316\316\316\205::<\1jjl\202\377\377" \ - "\377\202\376\376\376\202\377\377\377\1\265\265\267\202::<\202;;=\202" \ - "::<\2FFH\332\332\332\205\377\377\377\1\376\376\376\234\377\377\377\2" \ - "\376\376\376\317\317\317\202::<\1;;=\204::<\3;;=::<;;=\222::<\2""99;" \ - ";;=\202::<\1;;=\203::<\3\346\346\346\377\377\377\376\376\376\221\377" \ - "\377\377\1\234\234\236\205::<\1\234\234\234\246\377\377\377\1;;=\203" \ - "::<\4;;=::<\316\316\316\376\376\376\203\377\377\377\1\376\376\376\206" \ - "\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214" \ - "\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \ - "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \ - "\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\205" \ - "\377\377\377\203\376\377\377\202\377\376\377\2\341\361\315\214\305@\203" \ - "\215\307\77\202\214\306>\1\215\307\77\203\214\306>\10\214\305@\215\307" \ - "\77\214\306>\212\307>\216\306A\213\305;\214\305@\215\305<\211\214\306" \ - ">\3\215\305>\214\306>\305\342\240\214\377\377\377\2\376\377\377\252\324" \ - "p\202\214\306>\3\214\305B\214\306<\215\307\77\203\214\306>\6\214\306" \ - "<\214\307;\217\307@\212\307>\214\305@\376\377\377\231\377\377\377\10" \ - "\215\307=\214\305B\213\304A\216\310@\214\304\77\215\307=\214\305@\215" \ - "\307\77\203\214\306>\3\215\307\77\214\306>\247\324o\222\377\377\377\3" \ - "\377\377\375\377\377\377\377\375\376\203\377\377\377\20\360\371\346\223" \ - "\312K\216\306\77\213\304A\215\306A\213\305=\215\305@\212\307>\215\305" \ - "<\214\305B\214\305@\214\306>\214\306<\214\306>\215\307\77\213\305=\204" \ - "\214\306>\202\215\307\77\203\214\306>\10\215\306A\212\307<\243\321d\377" \ - "\377\373\375\377\376\377\376\377\377\377\377\376\376\374\223\377\377" \ - "\377\5\375\375\375\377\377\377\376\376\376\377\377\377\346\346\346\202" \ - "::<\1;;=\203::<\1\221\221\221\235\377\377\377\3\376\376\376\377\377\377" \ - "\376\376\376\222\377\377\377\1__a\204::<\2;;=\234\234\234\213\377\377" \ - "\377\1\316\316\316\205::<\3jjl\377\377\377\376\376\376\205\377\377\377" \ - "\2\204\204\206;;=\204::<\3;;=RRT\363\363\363\237\377\377\377\1\376\376" \ - "\376\202\377\377\377\2jjl;;=\206::<\4;;=::<99;;;=\223::<\1;;=\205::<" \ - "\1\204\204\206\203\377\377\377\1\376\376\376\217\377\377\377\1\234\234" \ - "\236\205::<\1\234\234\234\245\377\377\377\3\315\315\315;;=99;\202::<" \ - "\5""99;;;=\346\346\346\377\377\377\376\376\376\211\377\377\377\1\234" \ - "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \ - "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \ - "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \ - ">\1\214\305@\211\214\306>\2\214\305@\343\361\316\207\377\377\377\202" \ - "\377\377\375\4\376\377\377\377\377\375\303\342\237\212\306@\202\214\305" \ - "@\206\214\306>\7\216\306\77\213\305;\214\305@\216\306A\214\306>\215\307" \ - "\77\213\307A\212\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \ - "\377\17\252\323k\215\306A\214\306>\215\307\77\214\306>\215\307\77\214" \ - "\305@\214\306>\213\304A\215\306C\214\305@\213\304A\213\310=\214\306<" \ - "\342\357\321\230\377\377\377\6\360\371\346\214\305B\212\307<\215\307" \ - "=\213\305=\215\307\77\202\214\305@\7\215\306A\214\306>\214\306<\214\305" \ - "@\214\306>\214\305@\252\324p\222\377\377\377\11\377\376\377\376\377\377" \ - "\377\377\377\377\377\375\376\376\374\377\377\377\253\323p\215\307\77" \ - "\211\306;\202\215\306A\6\214\306>\214\306<\215\305>\216\305C\215\307" \ - "\77\213\304\77\202\215\307\77\2\215\307=\213\305;\202\215\307\77\2\214" \ - "\306>\215\307\77\205\214\306>\5\215\307\77\212\306@\214\306>\215\307" \ - "\77\304\341\236\202\377\377\377\2\376\376\377\374\377\377\230\377\377" \ - "\377\7SSU;;=99;::<;;=::\214\305@\207\214\306>\4\214\305@\215\305>\214\306" \ - ">\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1" \ - "\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \ - "\316\206\377\377\377\13\377\376\377\377\377\377\376\377\375\377\377\377" \ - "\377\376\377\376\377\377\253\324l\214\305B\213\304\77\214\305@\215\307" \ - "\77\203\214\306>\11\214\305@\214\306<\216\306=\214\306>\212\306@\215" \ - "\306C\214\304;\212\307>\214\305@\211\214\306>\3\215\305>\214\306>\305" \ - "\342\240\215\377\377\377\1\261\330\177\202\214\306>\2\214\306<\215\306" \ - "A\203\214\306>\7\215\307\77\214\306>\214\306<\215\307=\214\306>\215\306" \ - "C\323\353\267\230\377\377\377\4\340\361\315\215\305@\215\306A\214\305" \ - "@\202\214\306>\2\213\305=\215\306A\202\214\305@\5\214\306>\215\307\77" \ - "\214\306>\214\305@\260\330x\221\377\377\377\3\376\376\376\377\377\373" \ - "\375\377\376\202\377\377\377\25\376\377\377\314\345\253\214\305@\213" \ - "\304\77\216\306\77\212\307>\215\305@\214\306>\214\305@\215\305>\214\305" \ - "@\214\306>\214\306<\214\305@\215\306A\214\305@\215\306C\214\306>\214" \ - "\305@\214\306>\215\307\77\207\214\306>\7\212\306@\220\306=\215\306C\350" \ - "\364\336\376\377\373\377\377\375\376\377\377\230\377\377\377\1\221\221" \ - "\223\203::<\1;;=\202::<\1\265\265\265\230\377\377\377\1\376\376\376\227" \ - "\377\377\377\1\316\316\316\202::<\1;;=\203::<\1\363\363\363\213\377\377" \ - "\377\1\316\316\316\205::<\1kkm\204\377\377\377\1\376\376\376\203\377" \ - "\377\377\2\346\346\346FFH\206::<\2\234\234\236\376\376\376\237\377\377" \ - "\377\1\205\205\205\206::<\3;;=::<;;=\223::<\1;;=\203::<\202;;=\204::" \ - "<\2\234\234\234\376\376\376\221\377\377\377\1\234\234\236\205::<\1\234" \ - "\234\234\245\377\377\377\1RRR\204::<\2""99;yy{\203\377\377\377\1\376" \ - "\376\376\202\377\377\377\202\376\376\376\204\377\377\377\1\234\234\234" \ - "\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305@\207" \ - "\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214" \ - "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \ - "@\211\214\306>\2\214\305@\343\361\316\205\377\377\377\30\377\377\375" \ - "\377\377\377\375\377\376\377\377\377\377\376\377\377\377\377\376\377" \ - "\377\371\372\365\222\313H\214\305B\214\305@\215\307\77\214\306>\215\307" \ - "\77\214\306>\214\305@\212\306B\214\305@\212\307>\216\306\77\212\307>" \ - "\215\307\77\214\306<\214\305@\211\214\306>\3\215\305>\214\306>\305\342" \ - "\240\214\377\377\377\20\377\376\377\301\345\237\215\305>\215\306A\213" \ - "\304\77\215\306C\214\306>\214\306<\216\306\77\214\306>\214\305B\215\307" \ - "\77\214\306>\215\307\77\214\305@\271\332\211\230\377\377\377\10\307\341" \ - "\240\215\305>\214\305@\214\306>\215\305<\212\307>\214\305B\214\306<\202" \ - "\214\306>\5\215\305<\214\305B\215\307\77\214\306>\303\344\235\222\377" \ - "\377\377\6\376\376\377\377\377\375\376\377\377\377\376\377\352\364\333" \ - "\215\305@\202\215\307\77\16\214\306>\215\307\77\214\306>\215\307\77\214" \ - "\306<\216\306A\213\310\77\214\305D\215\3108\214\305@\215\305>\223\312" \ - "K\236\323a\215\307\77\207\214\306>\202\214\305@\10\214\306>\215\307\77" \ - "\212\307>\212\307<\241\321c\377\376\377\377\375\376\377\375\377\230\377" \ - "\377\377\3\332\332\332:::;;=\204::<\1SSU\203\377\377\377\1\376\376\376" \ - "\247\377\377\377\1\376\376\376\204\377\377\377\1\221\221\221\202::<\1" \ - ";:\77\202::<\1RRT\214\377\377\377\1\316\316\316\205::<\1kkm\211\377\377" \ - "\377\2\316\316\316;;=\202::<\5;;=::<;;=::<\316\316\316\210\377\377\377" \ - "\1\376\376\376\215\377\377\377\1\376\376\376\207\377\377\377\2\346\346" \ - "\350::<\202;;=\202::<\2:::xxx\230\234\234\234\3\235\235\235\234\234\234" \ - "kkm\203::<\4;;=::\214\305@\204\214\306>\2\213\307A\213\310\77\204\214\306>\1\252\324" \ - "p\232\377\377\377\1\377\377\375\216\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \ - "\2\214\305@\343\361\316\215\377\377\377\10\352\363\336\214\306>\212\306" \ - "B\215\307\77\212\307<\215\305>\214\305@\215\307\77\221\214\306>\3\215" \ - "\305>\214\306>\305\342\240\214\377\377\377\30\377\376\377\313\347\254" \ - "\215\307\77\214\304=\215\307\77\212\306@\215\307\77\215\306A\214\305" \ - "@\214\306>\215\307\77\214\306>\215\307\77\214\305@\214\305B\222\313H" \ - "\377\376\377\377\375\376\377\376\377\377\377\377\377\376\377\377\377" \ - "\373\376\377\377\377\376\377\211\377\377\377\26\377\377\375\377\376\377" \ - "\377\377\377\376\377\377\377\377\375\376\377\375\377\377\377\241\323" \ - "b\215\304D\214\307;\215\307\77\214\305B\215\307\77\214\306<\215\306A" \ - "\212\307>\215\305@\214\306>\213\310=\215\305@\215\306A\323\352\264\221" \ - "\377\377\377\11\376\377\377\376\376\374\376\377\377\377\376\374\377\376" \ - "\377\242\320c\215\307\77\215\306A\214\306>\202\214\305@\203\214\306>" \ - "\25\214\305@\215\306A\214\305@\215\307\77\214\306>\215\307=\315\345\253" \ - "\361\370\346\215\307\77\214\306>\212\306@\216\306A\214\306>\215\305>" \ - "\215\305@\214\305@\212\307>\215\305@\212\306@\215\305<\215\305@\202\214" \ - "\306>\12\277\337\223\377\377\377\376\377\375\377\376\377\377\377\375" \ - "\376\377\377\377\377\377\376\376\376\377\377\377\377\377\375\222\377" \ - "\377\377\1___\202::<\202;;=\202::<\1\266\266\266\250\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1SSU\203::<\3" \ - ";;=::<\221\221\223\214\377\377\377\1\316\316\316\205::<\1kkm\210\377" \ - "\377\377\3\376\376\376\377\377\377\233\233\233\203::<\5;;=::<;;=FFH\364" \ - "\364\364\210\377\377\377\1\376\376\376\213\377\377\377\2\376\376\376" \ - "\377\377\377\202\376\376\376\205\377\377\377\1\204\204\206\202::<\1;" \ - ";=\202::<\3FFF\363\363\363\376\376\376\231\377\377\377\3\346\346\346" \ - "::<;;=\204::<\3\234\234\234\377\377\377\376\376\376\217\377\377\377\1" \ - "\234\234\236\205::<\1\234\234\234\234\377\377\377\1\376\376\376\207\377" \ - "\377\377\3\205\205\207::<;;=\204::<\1\346\346\350\214\377\377\377\1\234" \ - "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \ - "\305@\205\214\306>\7\214\306<\214\306>\215\307\77\214\305@\214\306>\252" \ - "\324p\376\377\375\230\377\377\377\203\377\376\377\203\377\377\377\1\376" \ - "\376\377\211\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342" \ - "\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316" \ - "\215\377\377\377\2\376\377\375\313\347\254\203\214\306>\3\214\305@\216" \ - "\306\77\211\306=\221\214\306>\3\215\305>\214\306>\305\342\240\214\377" \ - "\377\377\11\375\376\377\343\361\316\215\305>\215\307\77\213\304A\215" \ - "\307\77\215\305>\214\306<\214\305@\203\214\306>\14\215\307\77\214\305" \ - "@\213\304\77\214\305B\322\353\264\377\377\377\377\377\375\377\377\377" \ - "\377\376\377\376\377\377\377\377\377\376\377\377\210\377\377\377\13\377" \ - "\377\375\377\377\377\376\377\375\377\376\377\376\376\374\377\377\375" \ - "\377\377\377\350\364\334\215\304D\215\305>\215\307\77\202\214\305@\202" \ - "\214\306>\10\214\305@\215\306A\214\306<\215\306C\214\304=\215\307=\212" \ - "\307<\351\366\332\222\377\377\377\14\377\377\375\377\377\377\377\377" \ - "\375\304\343\237\214\306>\212\307>\217\307@\214\305@\215\307\77\214\306" \ - ">\214\305@\215\306A\202\214\306>\5\214\306<\215\305>\211\307>\216\306" \ - "=\251\323o\202\376\377\377\31\304\341\241\212\306@\215\306A\212\307>" \ - "\215\307\77\214\306<\216\305C\212\307<\216\306A\214\306<\215\307\77\215" \ - "\305>\212\307>\216\306A\214\305@\216\306A\341\361\315\377\376\377\377" \ - "\377\375\376\377\377\377\376\377\376\376\376\377\377\377\377\376\377" \ - "\376\377\375\222\377\377\377\1\265\265\265\202;;=\204::<\2SSU\364\364" \ - "\364\203\377\377\377\1\376\376\376\245\377\377\377\1\376\376\376\203" \ - "\377\377\377\1\316\316\316\203::<\1;;=\202::<\1\302\302\302\214\377\377" \ - "\377\1\316\316\316\205::<\1kkm\213\377\377\377\1lln\204::<\3;;=::<__" \ - "a\202\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376\213\377" \ - "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377" \ - "\3\346\346\346::<;;=\204::<\1\234\234\234\234\377\377\377\1\204\204\206" \ - "\202;;=\202::<\2;;=SSU\221\377\377\377\1\234\234\236\205::<\1\234\234" \ - "\234\235\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202" \ - "\377\377\377\2\346\346\346::<\202;;=\4""99;;;=::\214\305@\204\214\306>\10\214\305@\215\306A\215\305@\213\305=\214\306" \ - ">\215\307\77\252\324p\376\377\377\230\377\377\377\1\376\376\376\205\377" \ - "\377\377\2\376\377\377\376\377\375\210\377\377\377\215\214\306>\1\250" \ - "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306" \ - ">\2\214\305@\343\361\316\215\377\377\377\10\377\377\375\377\375\376\262" \ - "\331|\214\305@\215\306A\214\306>\214\305B\215\307\77\221\214\306>\3\215" \ - "\305>\214\306>\305\342\240\214\377\377\377\10\376\377\375\377\377\377" \ - "\214\304\77\212\307>\216\306A\214\306>\215\305@\215\307\77\206\214\306" \ - ">\202\214\305@\3\233\316X\376\376\377\376\377\373\202\377\377\377\3\377" \ - "\375\376\377\377\375\377\376\377\210\377\377\377\12\377\376\377\376\377" \ - "\375\377\375\376\376\376\374\377\377\377\377\377\375\377\377\377\257" \ - "\330x\214\307;\215\307\77\202\214\305@\2\215\307\77\213\305=\202\214" \ - "\306>\1\215\305>\202\214\306>\5\216\306\77\215\306A\215\305@\376\377" \ - "\375\377\376\377\220\377\377\377\11\377\377\375\377\377\377\376\377\377" \ - "\350\364\334\212\307>\213\310\77\216\306\77\212\307>\214\305@\202\214" \ - "\306>%\215\306A\214\306>\213\305=\214\306>\215\307\77\215\305@\211\307" \ - ">\223\311M\363\367\350\376\377\375\377\377\377\377\377\375\242\320d\212" \ - "\307<\215\306A\214\305@\212\306@\215\306A\214\306>\212\307>\215\307\77" \ - "\217\304@\211\310<\215\305>\213\310\77\212\307>\214\306>\234\315W\367" \ - "\372\363\376\377\377\377\376\377\377\377\375\377\377\377\376\376\376" \ - "\377\377\375\377\377\377\376\377\375\222\377\377\377\1RRR\202::<\203" \ - ";;=\2::<\234\234\236\204\377\377\377\1\376\376\376\246\377\377\377\3" \ - "\376\376\376\377\377\377kkk\202::<\4;;=99;;;=FFH\215\377\377\377\1\316" \ - "\316\316\205::<\1kkm\211\377\377\377\5\376\376\376\377\377\377\363\363" \ - "\363SSU;;=\202::<\202;;=\2""99;\222\222\222\207\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\214\377\377\377\1\376\376\376\204\377\377" \ - "\377\3\204\204\204;;=99;\202;;=\3::\214\305@\204\214\306>\2\214\305@\214\306>\203\215\306A\2\215\307\77" \ - "\251\323q\231\377\377\377\203\377\377\375\202\377\377\377\1\377\375\376" \ - "\202\377\376\377\210\377\377\377\215\214\306>\1\250\325p\216\377\377" \ - "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \ - "\361\316\215\377\377\377\7\376\376\376\377\377\375\366\373\364\233\316" \ - "X\215\305@\215\307=\215\305>\222\214\306>\3\215\305>\214\306>\305\342" \ - "\240\216\377\377\377\6\243\322b\214\306>\215\305@\215\307\77\215\305" \ - "@\215\306A\203\214\306>\1\215\307\77\202\214\306>\202\215\307\77\2\214" \ - "\306>\315\346\254\202\377\377\377\4\377\376\375\376\377\375\376\376\377" \ - "\377\376\377\212\377\377\377\7\377\377\375\377\376\377\377\377\373\377" \ - "\377\375\327\356\304\214\306>\215\307\77\202\214\305@\203\214\306>\12" \ - "\215\307\77\214\306>\214\305@\216\306\77\214\306<\214\304\77\212\307" \ - ">\260\331{\376\377\375\377\376\377\220\377\377\377\13\376\377\377\377" \ - "\377\375\370\373\362\233\315Z\216\306A\214\305@\212\307>\215\306A\214" \ - "\306>\214\305@\215\306A\202\214\306>\6\215\307\77\214\305@\214\305B\214" \ - "\306>\215\307=\313\347\254\202\377\377\377\23\377\376\377\377\377\375" \ - "\350\364\334\212\307>\220\306=\214\305@\216\306=\214\306>\214\305@\214" \ - "\306>\212\306@\215\305>\212\306@\215\307\77\212\307>\215\307\77\214\305" \ - "@\212\306@\277\340\221\202\377\377\377\1\377\377\375\203\377\377\377" \ - "\2\377\376\377\377\377\375\220\377\377\377\4\376\376\376\377\377\377" \ - "\265\265\265::<\202;;=\5""99;::<;;=99;\317\317\317\250\377\377\377\1" \ - "\376\376\376\202\377\377\377\2\316\316\31699;\202::<\202;;=\2::<\221" \ - "\221\223\215\377\377\377\1\316\316\316\205::<\1kkm\207\377\377\377\1" \ - "\376\376\376\204\377\377\377\1\332\332\334\203::<\5;;=::<;;=99;\302\302" \ - "\302\202\377\377\377\1\376\376\376\216\377\377\377\1\376\376\376\202" \ - "\377\377\377\1\376\376\376\204\377\377\377\4\362\362\362FFH::<;;=\202" \ - "::<\2;;=\221\221\223\204\377\377\377\202\376\376\376\224\377\377\377" \ - "\1\376\376\376\203\377\377\377\1kkm\202;;=\203::<\1SSU\220\377\377\377" \ - "\1\234\234\236\205::<\1\234\234\234\240\377\377\377\3\376\376\376\377" \ - "\377\377\315\315\315\203::<\1;;=\202::<\1SSU\216\377\377\377\1\234\234" \ - "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \ - "@\204\214\306>\3\215\306A\214\306<\215\307=\202\214\305@\3\214\306>\253" \ - "\324n\377\377\375\230\377\377\377\2\375\376\377\376\376\376\203\377\377" \ - "\377\1\377\377\375\212\377\377\377\215\214\306>\1\250\325p\216\377\377" \ - "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \ - "\361\316\220\377\377\377\5\350\365\333\214\306>\214\305@\214\306>\215" \ - "\306A\221\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\7" \ - "\377\377\375\277\337\224\212\306@\215\305@\212\307>\215\306A\215\307" \ - "\77\203\214\306>\202\215\307\77\203\214\306>\3\214\306<\214\306>\351" \ - "\363\330\202\377\377\377\3\376\376\376\374\377\377\376\377\377\211\377" \ - "\377\377\1\376\377\377\202\377\377\377\7\375\376\377\351\365\337\223" \ - "\311M\215\307=\214\305B\214\305@\215\307\77\202\214\306>\12\215\306A" \ - "\214\305@\214\306>\212\307>\215\306A\214\306>\215\307=\213\310\77\316" \ - "\345\255\376\377\377\221\377\377\377\7\376\377\377\377\377\375\300\337" \ - "\223\216\306A\213\305=\215\307=\215\305>\202\214\306>\1\215\307\77\203" \ - "\214\306>\202\214\305@\5\215\307\77\213\307A\251\322r\377\377\377\377" \ - "\377\375\202\377\377\377\14\377\376\377\377\377\377\305\342\237\212\307" \ - "<\220\305\77\214\306>\212\306@\215\306A\214\306<\214\305@\214\306<\216" \ - "\305C\202\214\306>\7\215\305<\214\306>\215\305>\214\305@\342\362\316" \ - "\377\377\377\377\377\375\202\377\377\377\3\376\377\377\377\376\377\376" \ - "\376\376\221\377\377\377\3\376\376\376\377\377\377___\205::<\4;;=FFH" \ - "\363\363\363\377\377\377\202\376\376\376\246\377\377\377\3\363\363\363" \ - "SSU;;=\204::<\4;;=\345\345\345\377\377\377\376\376\376\213\377\377\377" \ - "\1\316\316\316\205::<\1kkm\211\377\377\377\1\376\376\376\203\377\377" \ - "\377\4\264\264\266;;=99;::<\202;;=\3::\214\305@\204\214\306>\2\212\306@\213\310" \ - "\77\202\214\305@\3\215\307\77\214\306<\251\323o\231\377\377\377\4\377" \ - "\376\377\377\377\375\377\377\377\376\376\377\214\377\377\377\215\214" \ - "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \ - "@\211\214\306>\2\214\305@\343\361\316\215\377\377\377\1\377\377\375\203" \ - "\377\377\377\4\323\353\267\212\307<\214\306<\212\306B\221\214\306>\3" \ - "\215\305>\214\306>\305\342\240\214\377\377\377\7\376\377\377\377\376" \ - "\377\350\365\331\215\307\77\215\305>\214\306>\212\307>\202\214\306>\1" \ - "\215\307\77\205\214\306>\11\215\307\77\213\304A\212\307>\222\312M\343" \ - "\361\316\376\376\377\377\376\377\377\377\377\377\375\377\210\377\377" \ - "\377\1\377\376\377\202\377\377\375\12\377\376\377\350\364\334\220\313" \ - "K\216\306=\215\305<\215\307\77\214\306>\213\305=\214\306>\215\306A\202" \ - "\214\306>\1\214\305@\202\212\307>\6\214\305@\215\306C\215\305>\360\370" \ - "\351\377\377\373\376\377\377\221\377\377\377\7\345\360\322\215\305@\214" \ - "\305@\215\307=\214\304=\213\310=\215\305>\202\214\306>\2\213\305=\215" \ - "\307\77\202\214\305@\7\215\307\77\214\307;\214\305@\363\367\346\376\377" \ - "\377\377\377\373\377\376\377\202\377\377\377\30\376\377\375\377\376\377" \ - "\241\321a\216\306\77\212\306@\213\310=\215\305@\213\307A\217\304>\215" \ - "\305@\214\306<\216\306A\215\306A\212\307>\214\306<\214\306>\212\307<" \ - "\233\314W\366\373\365\377\377\375\377\377\377\377\376\377\373\377\377" \ - "\377\376\377\224\377\377\377\1\317\317\317\205::<\4;;=::<``b\362\362" \ - "\362\247\377\377\377\2\376\376\376\221\221\221\206::<\3\204\204\206\377" \ - "\377\377\376\376\376\214\377\377\377\1\316\316\316\205::<\1kkm\212\377" \ - "\377\377\6\376\376\376\377\377\377\376\376\376\377\377\377\203\203\203" \ - ";;=\205::<\3``b\363\363\363\376\376\376\216\377\377\377\1\376\376\376" \ - "\206\377\377\377\3\363\363\363FFH;;=\203::<\2;;=\203\203\203\203\377" \ - "\377\377\3\376\376\376\377\377\377\376\376\376\225\377\377\377\1\376" \ - "\376\376\204\377\377\377\3kkk::<<<>\202::<\2;;=kkm\217\377\377\377\1" \ - "\234\234\236\205::<\1\234\234\234\236\377\377\377\4\376\376\376\377\377" \ - "\377\376\376\376kkk\202::<\5;;=::<99;;;=TTV\202\377\377\377\1\376\376" \ - "\376\214\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377" \ - "\3\214\305@\214\306>\214\305@\204\214\306>\10\214\306<\214\306>\214\305" \ - "@\214\306>\215\307\77\214\306>\252\324r\376\377\377\230\377\377\377\1" \ - "\377\377\375\202\377\377\377\2\377\377\375\376\376\374\203\377\376\377" \ - "\210\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \ - "\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215\377" \ - "\377\377\10\375\377\374\377\376\377\375\377\376\376\376\377\377\377\377" \ - "\270\333\207\214\305@\215\307\77\221\214\306>\3\215\305>\214\306>\305" \ - "\342\240\214\377\377\377\12\375\376\377\377\376\377\376\377\377\234\313" \ - "Y\215\306A\214\305@\212\307>\214\305@\214\306>\215\307\77\206\214\306" \ - ">\7\215\307\77\214\306>\215\305@\213\310\77\304\343\240\371\372\364\376" \ - "\377\377\212\377\377\377\10\376\377\377\377\376\377\315\345\251\223\311" \ - "M\214\306>\216\306\77\214\305B\214\306<\202\214\306>\15\215\306A\214" \ - "\305@\214\306>\215\307\77\214\305@\214\306<\214\305@\215\307\77\213\304" \ - "A\263\330{\377\377\377\376\376\376\377\377\375\220\377\377\377\7\370" \ - "\373\364\232\315V\216\306=\212\311=\214\306>\216\306A\213\307A\202\214" \ - "\305@\202\214\306>\202\214\305@\10\215\307\77\215\305>\215\304D\304\341" \ - "\237\376\377\377\377\376\377\376\376\377\377\377\375\202\377\376\377" \ - "\24\376\377\377\377\377\373\350\365\333\215\305>\214\306<\214\306>\212" \ - "\306@\215\307\77\213\305=\215\305@\215\307\77\214\306>\215\305>\215\306" \ - "A\211\305A\215\305@\214\305B\213\310=\262\327z\374\377\377\202\377\377" \ - "\377\2\377\377\375\373\377\376\225\377\377\377\1\221\221\223\203::<\6" \ - ";;=99;;;=::<``b\362\362\362\246\377\377\377\2\265\265\265:::\202::<\1" \ - ";;=\203::<\1\346\346\350\216\377\377\377\1\316\316\316\205::<\1kkm\216" \ - "\377\377\377\6\363\363\363__a::<;;=::<;;=\202::<\1\204\204\204\204\377" \ - "\377\377\1\376\376\376\221\377\377\377\1\234\234\234\204::<\3;;=::<\347" \ - "\347\347\202\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \ - "\225\377\377\377\3\376\376\376\377\377\377\265\265\265\202::<\202;;=" \ - "\3::<;;=\316\316\316\216\377\377\377\1\234\234\236\205::<\1\234\234\234" \ - "\240\377\377\377\2\204\204\204:::\206::<\1\301\301\303\217\377\377\377" \ - "\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306" \ - ">\214\305@\205\214\306>\7\214\305@\216\306A\215\307=\213\304\77\213\307" \ - "A\242\321a\345\356\317\230\342\362\316\7\341\361\315\342\361\322\342" \ - "\361\320\343\361\315\345\360\322\365\373\357\376\377\377\211\377\377" \ - "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \ - ">\1\214\305@\211\214\306>\2\214\305@\343\361\316\216\377\377\377\7\376" \ - "\377\375\377\377\375\377\377\377\377\376\377\371\374\365\242\322d\215" \ - "\306A\221\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\10" \ - "\377\377\375\377\377\377\377\377\373\312\346\253\215\307=\212\307>\214" \ - "\305B\216\306=\206\214\306>\202\214\305@\10\214\306>\212\307>\216\306" \ - "\77\214\306>\212\307>\233\316W\306\340\237\361\370\346\210\377\377\377" \ - "\12\361\370\350\314\345\253\233\314W\214\306>\213\310\77\215\305<\214" \ - "\305@\212\307<\215\306A\214\305@\203\214\306>\202\214\305@\202\214\306" \ - ">\4\216\306A\212\306@\213\310\77\333\356\301\202\377\377\377\1\377\377" \ - "\375\220\377\377\377\26\270\332\204\215\306A\212\306B\214\306>\213\307" \ - "A\215\305@\214\306<\214\306>\215\306A\214\306<\215\307\77\214\305B\215" \ - "\307\77\214\307;\215\304D\241\323b\377\377\375\376\377\377\377\377\377" \ - "\377\377\373\377\377\377\376\377\377\202\377\377\375\16\377\377\377\376" \ - "\377\377\277\337\224\214\305@\215\306A\214\306>\215\305>\212\310\77\214" \ - "\305@\215\307\77\212\307>\214\305B\216\306=\215\306A\202\214\306<\6\214" \ - "\306>\213\307C\331\356\305\377\376\377\377\377\373\376\376\376\227\377" \ - "\377\377\3__a::<;:\77\205::<\2__a\363\363\363\203\377\377\377\1\376\376" \ - "\376\213\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377" \ - "\377\377\376\376\376\213\377\377\377\1\376\376\376\202\377\377\377\1" \ - "\265\265\267\205::<\3;;=:::\234\234\234\217\377\377\377\1\316\316\316" \ - "\205::<\1kkm\217\377\377\377\4\332\332\332GGI::<;;=\204::<\1\250\250" \ - "\252\225\377\377\377\1FFH\205::<\1\204\204\204\242\377\377\377\1TTV\205" \ - "::<\4lln\376\376\376\377\377\377\376\376\376\203\377\377\377\1\376\376" \ - "\376\207\377\377\377\1\234\234\236\205::<\1\235\235\237\221\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\202\376" \ - "\376\376\205\377\377\377\3\363\363\365\204\204\206;;=\204::<\3;;=:::" \ - "xxx\220\377\377\377\1\234\234\234\203::<\3;;=::<\234\234\234\204\377" \ - "\377\377\1\376\376\376\261\377\377\377\3\214\305@\214\306>\214\305@\250" \ - "\214\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250" \ - "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306" \ - ">\2\214\305@\343\361\316\216\377\377\377\11\375\376\377\377\376\377\377" \ - "\377\375\376\377\377\377\376\377\351\365\335\223\311M\212\307<\214\306" \ - ">\202\216\306A\4\212\307<\215\306A\215\305>\215\307\77\211\214\306>\3" \ - "\215\305>\214\306>\305\342\240\214\377\377\377\20\377\376\377\377\377" \ - "\375\377\376\377\365\374\364\223\312J\217\304>\215\307\77\212\307;\215" \ - "\306A\214\305B\214\305@\215\307\77\214\306<\213\310\77\214\305@\215\305" \ - ">\210\214\306>\10\234\315Z\257\327~\304\343\235\306\340\237\307\341\240" \ - "\304\343\237\257\327\177\241\321a\210\214\306>\20\217\304>\215\306A\212" \ - "\306@\212\307>\213\305;\216\306A\213\305=\215\306C\211\310<\216\306A" \ - "\214\306>\234\314V\377\377\377\375\377\374\376\377\377\377\376\377\211" \ - "\377\377\377\7\377\376\377\376\377\375\376\377\377\376\377\375\377\376" \ - "\377\377\377\377\333\355\303\210\214\306>\10\215\306A\214\305@\216\306" \ - "=\214\306>\215\307\77\214\305@\215\307\77\352\364\334\211\377\377\377" \ - "\6\377\376\377\367\375\363\232\315V\215\307\77\214\306>\214\305@\212" \ - "\214\306>\6\212\307>\223\311M\366\373\364\377\376\377\377\377\377\376" \ - "\377\373\221\377\377\377\1\376\376\376\204\377\377\377\2\346\346\346" \ - "FFH\203::<\1""99;\203::<\2__a\332\332\332\211\377\377\377\1\376\376\376" \ - "\203\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\206\377" \ - "\377\377\1\376\376\376\207\377\377\377\1\265\265\267\202::<\1;;=\204" \ - "::<\2```\376\376\376\217\377\377\377\1\316\316\316\205::<\1kkm\216\377" \ - "\377\377\4\376\376\376\377\377\377\301\301\301;;=\205::<\2;;=\331\331" \ - "\331\202\377\377\377\3\376\376\376\377\377\377\376\376\376\216\377\377" \ - "\377\1\265\265\267\205::<\3;;=\332\332\332\376\376\376\241\377\377\377" \ - "\1\266\266\270\205::<\2""99;\316\316\320\215\377\377\377\1\234\234\236" \ - "\203::<\5;;=::<\234\234\234\377\377\377\376\376\376\220\377\377\377\1" \ - "\376\376\376\206\377\377\377\1\376\376\376\203\377\377\377\2\346\346" \ - "\346``b\202::<\2""99;;;=\203::<\4FFF\363\363\363\377\377\377\376\376" \ - "\376\216\377\377\377\1\234\234\234\204::<\3;;=\234\234\234\376\376\376" \ - "\265\377\377\377\3\214\305@\214\306>\214\305@\250\214\306>\2\215\307" \ - "\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \ - "\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \ - "\316\215\377\377\377\16\377\376\377\376\377\377\377\376\377\377\377\377" \ - "\376\377\377\377\376\377\375\377\374\323\353\267\215\305<\215\306C\215" \ - "\305<\213\306:\213\310\77\212\306@\202\214\305@\211\214\306>\3\215\305" \ - ">\214\306>\305\342\240\215\377\377\377\4\376\377\377\377\377\375\377" \ - "\376\377\305\342\242\202\214\305@\5\216\306A\214\306>\215\307=\215\307" \ - "\77\213\304A\202\214\305@\2\214\306>\212\306@\210\214\306>\7\214\306" \ - "<\215\307=\215\307\77\213\305=\214\306>\215\307\77\213\305=\211\214\306" \ - ">\11\215\306A\215\305>\212\307;\213\304\77\215\306A\211\306=\215\306" \ - "A\212\307<\216\306A\202\215\307\77\4\343\361\320\376\377\375\377\377" \ - "\375\376\376\377\212\377\377\377\1\377\376\377\202\377\377\377\4\377" \ - "\376\377\376\377\377\367\375\363\225\311J\210\214\306>\10\215\307=\213" \ - "\310\77\214\305@\216\306\77\214\305@\212\307>\307\341\240\376\377\375" \ - "\210\377\377\377\5\377\376\377\374\377\375\377\376\377\343\361\320\212" \ - "\306@\202\214\306>\1\213\310\77\210\214\306>\10\215\306A\215\305>\214" \ - "\305@\260\327z\377\376\374\374\377\377\377\377\377\377\376\377\226\377" \ - "\377\377\1\332\332\332\210::<\2GGI\250\250\250\223\377\377\377\3\376" \ - "\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376\202\377" \ - "\377\377\1\376\376\376\204\377\377\377\2\250\250\252;;=\204::<\202;;" \ - "=\2EEG\331\331\331\220\377\377\377\1\316\316\316\205::<\1kkm\221\377" \ - "\377\377\5\222\222\224::<;;=::<;;=\202::<\5SSU\364\364\364\376\376\376" \ - "\377\377\377\376\376\376\216\377\377\377\2\376\376\376TTV\203::<\4;;" \ - "=99;lln\376\376\376\243\377\377\377\1TTV\204::<\5;;=\204\204\206\376" \ - "\376\376\377\377\377\376\376\376\212\377\377\377\1\234\234\236\202::" \ - "<\1;;=\202::<\1\234\234\234\215\377\377\377\1\376\376\376\202\377\377" \ - "\377\1\376\376\376\212\377\377\377\6\376\376\376\250\250\252FFH99;::" \ - "<;;=\205::<\1\316\316\316\221\377\377\377\1\234\234\234\203::<\3;;=:" \ - ":<\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305@\250\214\306" \ - ">\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216" \ - "\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214" \ - "\305@\343\361\316\215\377\377\377\3\377\376\377\376\377\375\376\377\377" \ - "\202\377\377\377\13\377\377\375\377\376\377\376\376\374\271\332\211\215" \ - "\306A\211\306;\216\306A\212\307>\213\307A\215\306A\212\307>\211\214\306" \ - ">\3\215\305>\214\306>\305\342\240\214\377\377\377\20\376\377\375\377" \ - "\377\377\377\377\375\377\377\377\371\370\364\233\316U\214\306>\214\305" \ - "@\215\306A\214\306>\214\305@\215\307=\214\306>\215\305@\215\304B\213" \ - "\310=\210\214\306>\3\215\305@\214\306>\213\305=\202\213\310\77\3\214" \ - "\306>\215\307\77\215\305@\210\214\306>\20\212\306@\212\307;\216\306\77" \ - "\215\307\77\212\306@\214\306<\215\305>\215\307\77\220\305\77\211\307" \ - ">\263\330{\377\376\377\377\377\375\376\377\377\377\377\377\376\376\376" \ - "\211\377\377\377\7\377\377\373\377\377\377\377\375\376\377\377\377\377" \ - "\377\375\257\330|\213\310\77\211\214\306>\6\215\306C\211\306=\214\305" \ - "@\214\306>\242\322e\377\377\375\212\377\377\377\7\376\377\377\377\377" \ - "\375\377\375\376\277\337\224\216\307B\212\307>\214\305@\210\214\306>" \ - "\2\214\305@\216\306\77\202\212\307>\4\332\360\302\376\376\374\376\376" \ - "\376\377\376\377\227\377\377\377\1\266\266\266\202::<\1;;=\202::<\2;" \ - ";=::<\202;;=\2kkm\346\346\350\202\377\377\377\1\376\376\376\207\377\377" \ - "\377\1\376\376\376\203\377\377\377\5\376\376\376\377\377\377\376\376" \ - "\376\377\377\377\376\376\376\202\377\377\377\3\376\376\376\377\377\377" \ - "\376\376\376\204\377\377\377\2\364\364\364yy{\203::<\2;;=99;\203::<\3" \ - "\265\265\267\377\377\377\376\376\376\217\377\377\377\1\316\316\316\205" \ - "::<\1kkm\222\377\377\377\1kkm\203::<\1;;=\202::<\5kkm\377\377\377\376" \ - "\376\376\377\377\377\376\376\376\212\377\377\377\5\376\376\376\377\377" \ - "\377\376\376\376\265\265\267;;=\204::<\2;;=\315\315\315\244\377\377\377" \ - "\11\234\234\234::<99;;;=::<;;=::<\347\347\347\376\376\376\213\377\377" \ - "\377\1\234\234\236\204::<\2;;=\233\233\233\217\377\377\377\1\376\376" \ - "\376\206\377\377\377\6\376\376\376\377\377\377\376\376\376\377\377\377" \ - "\265\265\265TTT\202::<\202;;=\203::<\3;;=::<\266\266\270\202\377\377" \ - "\377\1\376\376\376\217\377\377\377\1\234\234\234\204::<\4;;=\235\235" \ - "\237\377\377\377\376\376\376\224\377\377\377\1\376\376\376\203\377\377" \ - "\377\1\376\376\376\233\377\377\377\3\214\305@\214\306>\214\305@\250\214" \ - "\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \ - "\2\214\305@\343\361\316\215\377\377\377\202\377\377\375\16\377\377\377" \ - "\377\377\375\377\377\377\376\377\375\376\376\374\377\376\377\375\377" \ - "\376\241\322_\215\306A\212\306B\215\305>\215\307\77\214\306<\214\305" \ - "B\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\1\377" \ - "\376\377\202\377\377\375\15\376\377\377\377\375\376\340\361\317\214\306" \ - ">\212\307>\214\306>\215\307\77\214\306>\212\307<\215\307\77\215\305>" \ - "\216\306=\213\305=\210\214\306>\1\212\307>\202\214\305@\202\214\306>" \ - "\3\214\305@\215\306A\212\307>\210\214\306>\20\212\307>\213\304\77\214" \ - "\306>\211\310<\214\306>\216\306A\212\306@\215\305@\214\306>\223\313N" \ - "\367\372\363\376\377\377\377\377\377\377\376\377\376\377\373\377\376" \ - "\377\212\377\377\377\202\376\377\377\3\377\375\376\324\353\265\215\306" \ - "A\211\214\306>\7\215\305>\213\305=\215\307\77\215\306A\212\307>\351\363" \ - "\333\377\377\375\211\377\377\377\10\377\376\377\375\377\376\376\377\377" \ - "\377\376\377\370\373\362\233\314W\215\307\77\215\305<\210\214\306>\1" \ - "\215\307\77\202\214\306>\4\214\306<\225\310O\360\366\350\377\376\377" \ - "\221\377\377\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377" \ - "\1\266\266\266\202::<\4;;=99;::<;;=\202::<\4;;=::<\204\204\206\346\346" \ - "\350\207\377\377\377\1\376\376\376\206\377\377\377\202\376\376\376\202" \ - "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377" \ - "\377\3\251\251\251FFF99;\202::<\1""99;\202::<\5;;=::<\234\234\236\377" \ - "\377\377\376\376\376\220\377\377\377\1\316\316\316\205::<\1kkm\222\377" \ - "\377\377\11\363\363\363GGI99;::<99;;;=::<;;=\234\234\234\214\377\377" \ - "\377\1\376\376\376\203\377\377\377\1SSU\202::<\1;;=\202::<\1kkm\245\377" \ - "\377\377\5\362\362\362GGI;;=::<;;=\202::<\1\204\204\206\206\377\377\377" \ - "\1\376\376\376\205\377\377\377\1\234\234\236\203::<\3""99;::<\234\234" \ - "\234\223\377\377\377\1\376\376\376\203\377\377\377\3\331\331\331\222" \ - "\222\222SSU\203::<\2;;=::<\202;;=\4::<;;=::<\265\265\267\202\377\377" \ - "\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377\377\377\1\234" \ - "\234\234\205::<\1\234\234\236\203\377\377\377\1\376\376\376\223\377\377" \ - "\377\1\376\376\376\236\377\377\377\3\214\305@\214\306>\214\305@\250\214" \ - "\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325" \ - "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \ - "\2\214\305@\343\361\316\216\377\377\377\17\377\376\377\377\377\377\376" \ - "\376\376\377\376\377\377\377\375\376\377\377\375\377\376\377\377\377" \ - "\363\367\350\222\312K\214\305@\213\310\77\214\304\77\215\307\77\216\306" \ - "A\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\14\377" \ - "\376\377\376\377\375\376\377\377\377\376\377\376\377\377\376\377\375" \ - "\307\342\237\214\305@\214\306<\215\304D\214\306>\214\305D\202\212\307" \ - "<\2\212\307>\213\307A\210\214\306>\3\215\307\77\214\306>\215\307\77\202" \ - "\214\305@\213\214\306>\12\213\305;\215\306A\212\306@\214\306>\213\307" \ - "C\212\307>\215\305>\212\307>\215\305>\333\356\301\202\377\377\377\3\377" \ - "\377\375\377\377\377\377\376\377\211\377\377\377\10\376\377\375\377\377" \ - "\375\376\377\375\374\377\375\362\371\347\225\311M\215\307\77\215\305" \ - "<\210\214\306>\2\214\305@\216\306=\202\212\306@\2\305\342\237\377\375" \ - "\376\212\377\377\377\1\376\376\374\203\377\377\377\4\376\376\376\337" \ - "\363\316\215\306C\215\305<\211\214\306>\1\215\307\77\202\214\305@\4\214" \ - "\306<\253\324n\375\377\374\377\377\375\224\377\377\377\1\376\376\376" \ - "\204\377\377\377\2\301\301\301FFH\202::<\2;;=99;\202;;=\2::<;;=\202:" \ - ":<\2\204\204\206\316\316\320\207\377\377\377\1\376\376\376\203\377\377" \ - "\377\1\376\376\376\206\377\377\377\6\376\376\376\377\377\377\364\364" \ - "\364\265\265\267SSU::<\202;;=\202::<\5;;=::<;;=::<\204\204\204\223\377" \ - "\377\377\1\316\316\316\205::<\1kkm\223\377\377\377\11\315\315\315;;=" \ - "::<;;=::<;;=::<99;\302\302\302\216\377\377\377\5\301\301\303::<;;=::" \ - "<;;=\202::<\2\316\316\316\377\377\377\202\376\376\376\241\377\377\377" \ - "\14\376\376\376\377\377\377\234\234\234;;=::<;;=::<;;=::<\347\347\351" \ - "\377\377\377\376\376\376\211\377\377\377\1\234\234\236\203::<\3;;=::" \ - "<\234\234\236\216\377\377\377\202\376\376\376\1\377\377\377\202\316\316" \ - "\316\6\250\250\250\234\234\234jjjFFF;;=99;\202;;=\2::<;;=\202::<\5<<" \ - ">99;;;=::<\265\265\267\204\377\377\377\1\376\376\376\217\377\377\377" \ - "\1\234\234\234\204::<\2;;=\234\234\236\202\377\377\377\1\376\376\376" \ - "\223\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\234\377" \ - "\377\377\3\214\305@\214\306>\214\305@\250\214\306>\2\215\307\77\342\362" \ - "\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \ - "\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215" \ - "\377\377\377\202\377\376\377\16\377\377\375\376\377\377\377\377\377\377" \ - "\377\375\377\376\377\376\376\376\377\376\377\377\377\377\333\354\302" \ - "\212\307>\213\310\77\214\306<\213\310=\215\305@\211\214\306>\3\215\305" \ - ">\214\306>\305\342\240\214\377\377\377\1\377\376\377\202\376\377\377" \ - "\202\377\377\375\13\376\377\377\377\375\376\271\333\205\215\305>\214" \ - "\306>\212\307>\214\306>\215\306A\214\306>\212\306@\214\305@\210\214\306" \ - ">\3\214\305@\215\307\77\214\306>\202\212\307>\3\214\306>\215\307\77\215" \ - "\306A\210\214\306>\4\216\306A\211\306=\214\306<\216\306A\202\212\307" \ - ">\202\215\306A\10\322\352\270\377\377\375\376\376\374\377\377\377\376" \ - "\377\377\377\376\377\377\377\375\376\377\377\210\377\377\377\10\377\377" \ - "\375\377\377\377\377\376\377\374\376\373\250\325n\216\306\77\212\307" \ - ">\214\305B\210\214\306>\202\212\307>\6\214\305@\242\322d\376\376\374" \ - "\377\377\375\375\377\376\377\376\377\210\377\377\377\10\376\377\377\377" \ - "\377\375\377\375\376\377\377\375\375\376\377\376\377\375\270\333\207" \ - "\211\310<\210\214\306>\10\214\304=\216\307B\214\306>\212\307>\216\306" \ - "A\215\307\77\313\350\250\376\376\377\221\377\377\377\1\376\376\376\203" \ - "\377\377\377\1\376\376\376\204\377\377\377\7\332\332\332RRT;;=::<;;=" \ - "::<;;=\202::<\1;;=\203::<\3RRT\221\221\223\317\317\321\214\377\377\377" \ - "\11\376\376\376\377\377\377\364\364\364\301\301\301\204\204\206EEG;;" \ - "=99;;;=\204::<\1""99;\202::<\1\251\251\251\207\377\377\377\1\376\376" \ - "\376\214\377\377\377\1\316\316\316\205::<\1kkm\224\377\377\377\1\247" \ - "\247\247\203::<\5;;=::<;;=FFH\345\345\345\214\377\377\377\2\376\376\376" \ - "kkm\205::<\1SSU\202\377\377\377\1\376\376\376\244\377\377\377\2\363\363" \ - "\363FFH\204::<\2;;=\221\221\223\213\377\377\377\1\234\234\236\204::<" \ - "\4;;=SSUkkmlln\213kkm\5;;=::<;;=::<;;=\204::<\2;;=99;\202;;=\2::<;;=" \ - "\202::<\7;;=99;::\214\305@\250\214\306>\2\215" \ - "\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377" \ - "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \ - "\361\316\215\377\377\377\1\377\376\377\202\377\377\375\202\377\377\377" \ - "\202\377\376\377\11\377\377\375\377\377\377\376\377\377\377\376\377\276" \ - "\336\223\214\306<\213\310\77\214\304=\215\306A\211\214\306>\3\215\305" \ - ">\214\306>\305\342\240\214\377\377\377\20\377\377\375\376\377\375\376" \ - "\376\376\377\376\377\375\377\376\377\375\377\376\377\377\376\377\375" \ - "\270\333\207\217\305<\212\307>\214\305@\216\306\77\213\305=\214\305@" \ - "\216\306=\211\214\306>\2\215\306A\215\305@\202\216\306\77\3\215\305@" \ - "\214\305@\215\307\77\210\214\306>\13\213\305=\215\306A\215\305>\212\306" \ - "@\215\305>\215\306A\220\305A\323\352\266\376\377\375\377\376\377\377" \ - "\377\375\202\377\377\377\3\376\377\377\377\375\377\376\377\375\213\377" \ - "\377\377\5\316\347\256\212\307>\213\305;\216\306A\212\307<\210\214\306" \ - ">\10\212\307>\216\306\77\215\305>\350\364\336\377\376\377\376\376\374" \ - "\377\377\377\377\376\377\210\377\377\377\1\377\376\377\202\377\377\377" \ - "\5\377\376\377\376\377\375\377\376\377\370\373\360\225\311K\210\214\306" \ - ">\10\216\306=\214\305@\215\310<\212\307>\214\306>\214\305@\223\312J\356" \ - "\371\350\231\377\377\377\4\376\376\376\377\377\377\363\363\363xxz\202" \ - "::<\1""99;\202::<\1;;=\203::<\202;;=\203::<\4__a\205\205\205\234\234" \ - "\234\250\250\250\205\316\316\316\4\250\250\250\234\234\234xxx___\202" \ - "::<\3""99;;;=99;\203::<\1;;=\203::<\2FFH\265\265\265\205\377\377\377" \ - "\1\376\376\376\217\377\377\377\1\316\316\316\205::<\1kkm\225\377\377" \ - "\377\3xxx::<;;=\204::<\1```\213\377\377\377\4\376\376\376\317\317\317" \ - "::<;;=\204::<\1\266\266\270\203\377\377\377\1\376\376\376\241\377\377" \ - "\377\1\377\377\375\202\377\377\377\1\204\204\206\202::<\1;;=\202::<\2" \ - "GGI\363\363\363\212\377\377\377\1\234\234\236\203::<\1;;=\202::<\1;;" \ - "=\221::<\1;;=\207::<\1;;=\202::<\1;;=\202::<\2``b\346\346\350\210\377" \ - "\377\377\1\376\376\376\215\377\377\377\1\234\234\234\207::<\3;;=::<;" \ - ";=\221::<\1;;=\203::<\1;;=\202::<\1\316\316\320\231\377\377\377\3\214" \ - "\305@\214\306>\214\305@\250\214\306>\2\215\307\77\342\362\316\212\377" \ - "\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214" \ - "\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215\377\377\377" \ - "\7\377\377\375\376\377\375\377\377\377\377\376\377\376\376\374\376\377" \ - "\377\377\377\377\202\376\377\377\202\377\377\375\4\377\377\377\242\320" \ - "d\211\306=\215\305@\212\214\306>\3\215\305>\214\306>\305\342\240\214" \ - "\377\377\377\6\377\376\377\377\377\377\377\377\375\377\375\377\376\377" \ - "\372\375\376\377\202\377\377\377\10\376\377\377\304\343\240\215\305@" \ - "\214\306>\216\306A\215\307\77\212\307>\215\307\77\212\214\306>\3\215" \ - "\307\77\214\306>\214\305@\202\215\307\77\211\214\306>\12\215\306C\212" \ - "\307<\215\307\77\215\305@\213\310\77\215\306A\323\352\266\377\376\377" \ - "\377\377\377\376\377\377\204\377\377\377\2\377\377\375\377\376\377\210" \ - "\377\377\377\10\376\377\377\377\376\377\361\370\346\225\311K\212\307" \ - ">\215\306A\214\305@\215\305>\210\214\306>\3\214\305@\214\306>\307\341" \ - "\240\203\376\377\377\2\377\377\375\376\377\377\210\377\377\377\5\376" \ - "\377\377\377\376\372\376\377\375\376\376\376\377\377\377\202\377\376" \ - "\377\1\334\355\301\210\214\306>\10\215\306A\213\310\77\215\305@\214\306" \ - ">\214\306<\215\306A\214\306>\254\322o\232\377\377\377\6\376\376\376\377" \ - "\377\377\376\376\376\302\302\302FFH;;=\206::<\1;;=\202::<\202;;=\203" \ - "::<\1;;=\204::<\3;;=::<;;=\202::<\1;;=\202::<\1;;=\203::<\2;;=::<\202" \ - ";;=\2__a\332\332\332\226\377\377\377\3\316\316\316::<;;=\203::<\1kkm" \ - "\222\377\377\377\7\376\376\376\377\377\377\376\376\376\363\363\363__" \ - "a::<;;=\204::<\1\203\203\203\202\377\377\377\2\376\376\376\377\377\377" \ - "\202\376\376\376\205\377\377\377\1kkm\202::<\1;;=\202::<\5TTV\377\377" \ - "\377\376\376\376\377\377\377\376\376\376\245\377\377\377\2\347\347\347" \ - "99;\202::<\1;;=\202::<\1\235\235\237\206\377\377\377\1\376\376\376\202" \ - "\377\377\377\2\376\376\376\234\234\234\224::<\1;;=\202::<\3""99;::<;" \ - ";=\204::<\1;;=\204::<\3;;=GGI\250\250\252\230\377\377\377\2\234\234\236" \ - ";;=\232::<\10;;=99;;;=::<;;=::<:::\316\316\316\230\377\377\377\10\377" \ - "\376\377\212\306@\214\305@\213\310=\214\306<\215\306A\214\307;\215\306" \ - "A\240\214\306>\10\214\305@\212\307<\214\306<\214\305@\212\306@\342\360" \ - "\315\376\377\377\377\376\377\210\377\377\377\212\214\306>\4\216\306\77" \ - "\212\306B\214\306>\250\325n\202\377\376\377\210\377\377\377\1\377\376" \ - "\377\202\377\377\377\5\376\377\375\342\362\316\214\305B\215\305@\214" \ - "\306<\210\214\306>\202\212\307>\5\343\361\320\377\377\377\377\377\375" \ - "\376\377\377\377\376\377\223\377\377\377\6\377\376\377\377\377\375\371" \ - "\372\364\223\312J\212\306@\215\305@\210\214\306>\10\214\305@\215\305" \ - ">\212\307>\304\343\240\377\377\375\377\377\377\377\377\375\377\376\377" \ - "\220\377\377\377\11\376\377\377\377\377\377\333\355\303\226\310K\213" \ - "\310\77\214\306>\215\305@\215\306A\214\305@\203\214\306>\7\215\305>\215" \ - "\305@\214\305@\212\307>\215\305>\215\307\77\215\306A\202\214\306<\5\215" \ - "\306A\213\305=\215\305@\215\307\77\213\305;\202\215\305@\13\215\307\77" \ - "\213\310\77\214\305@\215\307\77\212\307>\215\305>\214\306>\212\306@\235" \ - "\315U\347\365\334\377\376\377\220\377\377\377\15\376\376\376\377\377" \ - "\375\377\377\377\244\317c\213\307A\214\306<\213\307A\215\305>\215\305" \ - "<\215\307\77\214\306<\215\307\77\214\305@\202\215\307\77\12\214\305@" \ - "\215\306A\215\305@\234\315W\367\375\363\377\376\377\376\377\377\377\377" \ - "\375\376\377\377\377\376\377\220\377\377\377\10\260\331{\215\307=\212" \ - "\307>\213\307A\214\306>\215\305@\215\307\77\215\305>\210\214\306>\3\314" \ - "\345\253\377\377\377\376\377\375\202\377\376\377\2\377\377\377\376\377" \ - "\377\222\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377" \ - "\377\3\364\364\364\220\220\220;;=\211::<\2;;=::<\202;;=\2::<;;=\202:" \ - ":<\4;;=::<;;=99;\203::<\2;;=99;\206::<\2GGI\247\247\251\203\377\377\377" \ - "\1\376\376\376\222\377\377\377\6\376\376\376\377\377\377\316\316\316" \ - ";;=99;;;=\202::<\2lln\376\376\376\202\377\377\377\1\376\376\376\221\377" \ - "\377\377\4\376\376\376\333\333\333FFH;;=\202::<\1;;=\202::<\1\265\265" \ - "\265\202\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376\377" \ - "\377\377\376\376\376\377\377\377\316\316\320\202::<\2;;=99;\202;;=\1" \ - "\264\264\266\202\377\377\377\1\376\376\376\244\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\205\205\207\204::<\3;;=FFH\363\363\363\206\377" \ - "\377\377\1\376\376\376\202\377\377\377\3\233\233\233::<;;=\220::<\3""9" \ - "9;;;=99;\202::<\1;;=\203::<\1;;=\204::<\7;;=::\215\307\77" \ - "\214\306>\215\306A\240\214\306>\7\214\306<\214\306>\216\306\77\214\306" \ - ">\214\305@\343\361\320\377\377\375\211\377\377\377\210\214\306>\10\213" \ - "\307A\212\306@\215\305@\212\307<\215\307\77\247\324o\375\377\376\376" \ - "\377\377\211\377\377\377\7\376\377\375\377\377\377\377\377\375\342\360" \ - "\315\214\305@\213\305=\215\307\77\210\214\306>\10\215\305>\215\307\77" \ - "\343\361\316\376\376\376\377\376\377\376\377\377\377\377\375\376\377" \ - "\372\220\377\377\377\10\376\377\377\377\376\377\377\377\375\377\376\374" \ - "\376\377\375\343\362\321\212\307>\214\307;\210\214\306>\4\215\307=\215" \ - "\304B\213\307A\305\342\240\203\377\377\377\1\376\377\377\222\377\377" \ - "\377\21\377\376\377\367\374\365\267\332\206\215\306A\212\306@\214\306" \ - "<\214\306>\215\306A\215\307\77\214\306>\214\305@\212\306B\212\306@\212" \ - "\307<\215\307\77\214\306>\214\305@\202\215\305@\5\214\305@\214\306>\214" \ - "\305@\212\307>\215\306A\202\214\305@\11\214\307;\214\306>\215\306A\214" \ - "\305@\215\305>\212\306@\222\311I\306\343\240\366\373\364\224\377\377" \ - "\377\6\303\342\237\217\304@\214\306<\214\306>\215\306C\212\306B\204\214" \ - "\305@\1\215\306A\202\214\305@\11\215\306A\214\306<\214\306>\341\361\314" \ - "\377\377\377\376\377\375\377\377\377\377\375\377\377\377\375\221\377" \ - "\377\377\10\370\373\364\224\307N\215\305@\215\305>\212\307<\215\306A" \ - "\212\307<\215\306A\210\214\306>\10\215\307=\346\364\332\376\377\375\376" \ - "\377\373\377\377\377\376\376\377\377\376\377\377\377\375\230\377\377" \ - "\377\5\346\346\350\204\204\206GGI::<;;=\202::<\5;;=::<;;=::<;;=\202:" \ - ":<\3;;=::<;;=\202::<\5;;=99;;;=::<;;=\207::<\3FFH\234\234\234\363\363" \ - "\363\203\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376\202" \ - "\377\377\377\4\316\316\316::<;;=99;\202;;=\1kkm\202\377\377\377\1\376" \ - "\376\376\220\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376" \ - "\266\266\26699;;;=::<\202;;=\3::\215\307\77\212\307>\216\306\77\241\214\306" \ - ">\1\215\306C\202\215\305@\5\212\306@\215\307=\343\361\320\377\377\377" \ - "\377\376\377\210\377\377\377\210\214\306>\10\215\305<\215\307\77\216" \ - "\306\77\214\306>\216\305C\252\324r\377\377\377\377\377\373\211\377\377" \ - "\377\7\375\377\376\377\377\377\377\375\376\343\361\316\215\307=\212\307" \ - ">\215\305>\210\214\306>\10\214\305@\215\305<\342\362\316\377\377\375" \ - "\377\376\377\375\377\374\376\376\377\376\377\377\222\377\377\377\1\375" \ - "\377\372\202\377\377\377\3\377\376\377\304\341\237\215\307\77\210\214" \ - "\306>\10\212\307;\215\307\77\213\305=\305\342\240\377\377\377\377\376" \ - "\374\377\377\375\376\377\377\221\377\377\377\22\377\376\377\377\377\375" \ - "\376\377\377\377\375\376\361\367\351\270\334\204\214\306>\215\307\77" \ - "\214\305@\212\306@\213\307A\212\306@\213\310\77\214\306>\215\304B\214" \ - "\306>\212\307<\214\306>\202\216\306A\6\214\306>\213\310\77\214\305@\215" \ - "\305<\215\305>\215\307=\202\213\310\77\10\215\306A\214\306>\215\306A" \ - "\222\311I\300\336\226\361\370\346\376\376\376\377\377\377\202\377\376" \ - "\377\1\376\377\373\217\377\377\377\10\377\377\375\347\365\333\214\307" \ - ";\211\305A\213\304\77\215\307\77\215\305<\213\310\77\202\214\306>\1\215" \ - "\307\77\203\214\306>\4\215\307\77\214\306>\215\306A\275\337\223\202\377" \ - "\377\377\5\377\376\377\377\377\377\376\377\375\377\376\377\376\377\377" \ - "\220\377\377\377\10\375\377\376\331\357\301\215\307\77\215\305>\216\305" \ - "C\211\306=\220\305A\211\307@\210\214\306>\10\214\305@\246\321e\377\377" \ - "\377\377\376\377\376\377\377\377\377\375\376\377\377\377\376\377\227" \ - "\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363\266\266\270" \ - "__a\207::<\202;;=\203::<\2;;=99;\202;;=\2""99;::<\202;;=\1::<\203;;=" \ - "\3^^^\250\250\250\363\363\363\203\377\377\377\1\376\376\376\202\377\377" \ - "\377\1\376\376\376\224\377\377\377\4\316\316\316999::<;;=\202::<\1ll" \ - "l\205\377\377\377\1\376\376\376\217\377\377\377\6\376\376\376\377\377" \ - "\377\376\376\376\204\204\204::<;;=\203::<\3:::TTT\363\363\363\206\377" \ - "\377\377\10\347\347\347;;;99;::<;;=::<:::\234\234\236\253\377\377\377" \ - "\3\376\376\376lln;;=\202::<\3;;=999SSS\202\377\377\377\1\376\376\376" \ - "\203\377\377\377\4\376\376\376\377\377\377\376\376\376\234\234\234\223" \ - "::<\1""99;\202::<\1;;=\203::<\5kkmxxz\235\235\237\301\301\301\346\346" \ - "\346\207\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\221" \ - "\377\377\377\1\376\376\376\202\377\377\377\3\235\235\235::<;;=\232::" \ - "<\2;;=99;\202::<\3;;=::<\316\316\316\230\377\377\377\10\373\377\376\216" \ - "\306A\214\306<\213\304A\212\306@\214\305@\214\304\77\215\307\77\240\214" \ - "\306>\6\214\306<\215\306A\215\305@\216\310@\217\304@\341\361\314\212" \ - "\377\377\377\210\214\306>\7\215\307\77\213\310\77\213\305=\215\307\77" \ - "\214\304\77\253\323r\374\377\373\211\377\377\377\1\377\376\377\203\377" \ - "\377\377\3\342\362\315\215\305@\215\307=\211\214\306>\10\214\306<\215" \ - "\304B\341\363\313\374\377\375\376\376\377\377\377\377\377\375\376\377" \ - "\377\375\221\377\377\377\7\376\377\375\376\376\377\377\377\377\375\377" \ - "\374\377\377\377\377\377\375\253\323p\210\214\306>\5\215\307\77\215\305" \ - ">\217\304@\305\342\237\376\377\375\202\377\377\377\1\377\377\375\220" \ - "\377\377\377\1\376\377\377\202\377\376\377\202\376\377\375\202\377\377" \ - "\377\5\360\370\351\311\347\247\245\320e\215\305>\212\307>\202\214\306" \ - ">\5\215\306A\212\307>\215\305@\214\306>\214\306<\202\214\306>\2\214\306" \ - "<\214\306>\202\216\306A\14\214\306>\215\306A\215\305<\214\306>\213\305" \ - "=\255\331x\323\353\267\366\374\362\377\377\377\377\377\375\377\377\377" \ - "\376\377\377\217\377\377\377\2\376\376\376\377\377\377\202\377\377\375" \ - "\11\244\317d\214\306>\213\307A\214\306>\214\305@\214\306>\215\306A\214" \ - "\306<\215\307\77\202\214\306>\202\214\305@\13\215\305<\215\305@\230\316" \ - "V\370\373\360\376\377\375\377\377\377\377\376\377\376\376\376\377\377" \ - "\375\377\376\377\376\377\377\220\377\377\377\10\376\376\376\377\376\377" \ - "\262\327x\214\306>\216\306A\215\307=\215\305<\215\306A\211\214\306>\6" \ - "\215\306C\307\341\240\376\377\373\376\377\377\376\377\375\376\376\374" \ - "\236\377\377\377\4\346\346\350\266\266\270\204\204\206SSU\202::<\1;;" \ - "=\202::<\1;;=\202::<\202;;=\3""99;::<;;=\203::<\4GGIxxz\247\247\247\347" \ - "\347\347\212\377\377\377\1\376\376\376\223\377\377\377\1\364\364\364" \ - "\205\316\316\316\1\332\332\332\203\377\377\377\202\376\376\376\221\377" \ - "\377\377\1\376\376\376\202\377\377\377\202\316\316\316\203\316\316\320" \ - "\3\316\316\316\317\317\317\346\346\346\206\377\377\377\5\346\346\346" \ - "\316\316\316\317\317\317\316\316\316\315\315\315\202\316\316\316\1\363" \ - "\363\363\250\377\377\377\1\376\376\376\203\377\377\377\3\346\346\346" \ - "\315\315\315\317\317\317\202\316\316\320\3\317\317\317\315\315\315\363" \ - "\363\363\202\377\377\377\202\376\376\376\204\377\377\377\3\346\346\346" \ - "\316\316\316\316\316\320\224\316\316\316\1\315\315\315\203\377\377\377" \ - "\1\376\376\376\215\377\377\377\1\376\376\376\225\377\377\377\2\346\346" \ - "\346\317\317\317\232\316\316\316\1\317\317\317\203\316\316\316\4\317" \ - "\317\317\315\315\315\316\316\316\363\363\363\231\377\377\377\3\340\361" \ - "\317\342\360\317\342\362\316\202\343\361\316\2\342\360\315\343\361\316" \ - "\240\342\361\320\10\342\362\316\342\361\320\343\363\317\341\360\317\342" \ - "\361\320\370\373\364\376\377\375\376\377\377\210\377\377\377\210\342" \ - "\361\320\7\341\360\317\342\362\316\343\361\316\342\360\314\342\361\320" \ - "\350\364\336\377\376\374\211\377\377\377\10\377\376\377\377\377\375\377" \ - "\377\377\377\377\375\370\373\362\341\360\321\340\357\316\342\362\316" \ - "\210\342\361\320\3\342\362\316\342\361\320\371\373\360\203\377\377\377" \ - "\202\377\376\377\220\377\377\377\4\377\377\375\376\376\376\377\376\377" \ - "\376\377\375\203\377\377\377\1\365\375\362\210\342\361\320\4\341\360" \ - "\321\342\361\322\343\363\317\360\367\345\224\377\377\377\7\376\377\377" \ - "\376\377\375\377\377\375\377\376\377\377\377\375\377\375\376\377\376" \ - "\377\202\377\377\377\30\376\376\377\364\370\351\333\354\277\277\337\224" \ - "\247\324k\224\313K\214\305@\214\306>\212\306@\214\306>\214\305B\215\306" \ - "C\215\307\77\212\306@\214\306>\215\307\77\241\321c\257\330|\304\342\242" \ - "\341\361\315\377\377\377\377\376\377\376\377\373\377\377\377\202\377" \ - "\377\375\1\377\376\377\203\377\377\377\1\376\377\377\212\377\377\377" \ - "\1\376\376\376\203\377\377\377\13\376\376\374\372\372\370\342\361\320" \ - "\343\361\316\342\362\316\341\360\317\342\361\320\341\360\317\342\362" \ - "\316\342\361\322\342\361\320\202\341\361\315\6\342\361\320\341\360\317" \ - "\343\361\315\343\361\320\356\371\350\377\376\377\203\377\377\377\1\376" \ - "\377\375\202\377\377\377\1\376\377\375\222\377\377\377\6\366\373\364" \ - "\342\361\320\342\362\316\342\360\317\341\362\316\343\361\320\210\342" \ - "\361\320\10\341\362\316\341\361\315\352\364\334\377\377\377\377\376\377" \ - "\377\377\377\376\377\377\376\377\375\222\377\377\377\202\376\376\376" \ - "\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377" \ - "\377\377\3\376\376\376\377\377\377\375\375\375\202\377\377\377\5\363" \ - "\363\363\316\316\316\264\264\264\235\235\235\233\233\233\202kkk\202k" \ - "km\3llnkkmyy{\202\234\234\236\6\316\316\320\346\346\346\377\377\377\376" \ - "\376\376\377\377\377\376\376\376\204\377\377\377\1\376\376\376\204\377" \ - "\377\377\1\376\376\376\240\377\377\377\1\376\376\376\231\377\377\377" \ - "\1\375\375\375\203\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \ - "\376\202\377\377\377\1\376\376\376\242\377\377\377\1\376\376\376\206" \ - "\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377\377\377\1" \ - "\376\376\376\202\377\377\377\202\376\376\376\225\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\202\377\377\377\3\376\376\376\377\377\377" \ - "\376\376\376\214\377\377\377\3\376\376\376\377\377\377\376\376\376\265" \ - "\377\377\377\1\375\375\375\234\377\377\377\7\376\377\377\377\376\377" \ - "\376\377\377\376\376\374\377\376\377\377\377\377\377\377\375\240\377" \ - "\377\377\1\377\377\375\202\377\377\377\5\377\376\377\376\376\376\377" \ - "\376\377\376\376\377\377\377\375\221\377\377\377\7\375\376\377\377\377" \ - "\377\377\376\377\377\377\375\376\377\377\377\377\373\377\376\377\210" \ - "\377\377\377\5\377\376\377\377\377\377\376\376\374\376\377\377\377\377" \ - "\377\202\377\377\375\1\376\377\377\210\377\377\377\6\376\377\377\375" \ - "\376\377\377\376\377\377\377\377\376\377\377\377\377\377\202\377\377" \ - "\375\224\377\377\377\202\377\376\377\2\374\377\377\377\376\377\210\377" \ - "\377\377\3\376\377\377\376\376\376\376\377\377\202\377\377\377\3\375" \ - "\377\376\377\377\377\377\376\377\220\377\377\377\202\377\376\377\2\376" \ - "\377\377\375\376\377\202\377\377\377\4\377\377\375\377\376\377\377\377" \ - "\377\377\377\375\202\376\377\377\7\377\377\377\377\376\377\377\377\377" \ - "\376\377\375\370\373\364\344\357\315\342\361\320\202\342\362\315\14\340" \ - "\357\316\345\360\316\376\377\373\376\376\376\377\377\377\377\375\376" \ - "\377\377\375\377\377\377\375\377\376\377\377\377\377\376\377\377\377" \ - "\375\202\376\377\375\5\376\377\377\377\377\377\377\377\375\376\376\376" \ - "\377\376\377\214\377\377\377\1\376\376\376\202\377\377\377\5\377\377" \ - "\375\376\375\377\377\377\377\376\376\377\377\377\375\204\377\377\377" \ - "\1\377\377\375\205\377\377\377\202\377\376\377\2\377\377\377\377\377" \ - "\375\202\377\377\377\202\376\377\377\222\377\377\377\5\377\377\375\377" \ - "\377\377\377\377\375\377\377\377\377\377\375\202\377\377\377\1\377\376" \ - "\372\212\377\377\377\1\377\375\377\202\377\377\377\3\377\376\377\377" \ - "\377\377\377\377\375\225\377\377\377\1\376\376\376\211\377\377\377\1" \ - "\376\376\376\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376" \ - "\376\206\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377\377" \ - "\377\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\5\376" \ - "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\223\377\377" \ - "\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377\3\376\376" \ - "\376\377\377\377\376\376\376\203\377\377\377\3\376\376\376\377\377\377" \ - "\376\376\376\203\377\377\377\1\376\376\376\205\377\377\377\1\376\376" \ - "\376\246\377\377\377\3\376\376\376\377\377\377\376\376\376\220\377\377" \ - "\377\1\376\376\376\246\377\377\377\1\376\376\376\225\377\377\377\1\376" \ - "\376\376\202\377\377\377\1\376\376\376\240\377\377\377\1\376\376\376" \ - "\230\377\377\377\6\377\377\375\377\377\377\377\376\377\376\377\375\374" \ - "\377\377\376\375\377\242\377\377\377\202\377\376\377\6\376\376\376\375" \ - "\376\377\377\377\377\377\377\375\377\377\377\376\377\375\220\377\377" \ - "\377\7\377\377\375\377\377\377\377\377\375\377\375\376\376\377\375\376" \ - "\377\377\376\376\376\212\377\377\377\4\377\376\377\377\377\375\377\377" \ - "\377\377\377\375\203\377\376\377\210\377\377\377\5\377\377\375\377\377" \ - "\377\377\375\376\377\376\377\377\377\375\202\377\377\377\1\376\377\377" \ - "\221\377\377\377\1\375\376\377\203\377\377\375\2\376\377\375\377\375" \ - "\376\211\377\377\377\204\377\376\377\4\377\377\377\376\377\375\377\377" \ - "\375\377\376\377\221\377\377\377\5\376\377\377\376\376\376\377\377\373" \ - "\376\376\377\376\377\377\202\377\377\377\2\377\376\377\377\377\375\202" \ - "\377\377\377\7\377\377\375\377\376\377\376\376\377\377\377\377\376\377" \ - "\377\376\377\375\376\377\377\202\377\377\377\203\376\377\377\2\377\377" \ - "\377\376\376\374\202\377\376\377\13\376\376\376\377\377\375\377\377\377" \ - "\377\375\376\376\377\377\377\377\377\376\376\377\377\376\377\376\376" \ - "\374\376\377\377\377\377\375\221\377\377\377\203\377\377\375\4\377\377" \ - "\377\377\377\375\377\376\377\376\376\376\210\377\377\377\1\377\377\373" \ - "\203\377\377\377\1\377\377\375\202\376\377\377\222\377\377\377\1\377" \ - "\377\375\202\377\376\377\3\377\377\377\377\376\377\377\376\374\202\376" \ - "\377\377\210\377\377\377\4\377\377\375\377\377\377\376\377\375\377\375" \ - "\377\202\376\377\377\1\377\376\375\227\377\377\377\1\376\376\376\207" \ - "\377\377\377\1\376\376\376\217\377\377\377\1\376\376\376\205\377\377" \ - "\377\1\376\376\376\204\377\377\377\1\376\376\376\233\377\377\377\1\376" \ - "\376\376\211\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376" \ - "\206\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376\262\377" \ - "\377\377\1\376\376\376\212\377\377\377\1\376\376\376\202\377\377\377" \ - "\1\376\376\376\202\377\377\377\1\376\376\376\225\377\377\377\1\376\376" \ - "\376\306\377\377\377\1\376\376\376\235\377\377\377\7\377\376\377\376" \ - "\377\377\377\377\377\377\377\375\376\375\377\377\377\375\377\376\377" \ - "\241\377\377\377\1\376\377\377\203\377\377\377\3\377\377\375\377\375" \ - "\376\377\376\377\221\377\377\377\202\376\377\377\5\377\377\377\377\377" \ - "\375\377\377\377\377\376\377\377\377\375\211\377\377\377\203\377\377" \ - "\375\202\377\377\377\202\376\377\377\1\377\377\375\212\377\377\377\202" \ - "\376\377\375\3\376\377\377\377\377\375\377\376\377\223\377\377\377\6" \ - "\377\377\375\377\376\377\374\377\377\377\377\377\377\376\377\376\377" \ - "\375\210\377\377\377\3\377\377\375\376\377\377\377\377\375\202\377\377" \ - "\377\1\377\377\375\223\377\377\377\4\376\376\376\377\377\375\376\376" \ - "\376\377\376\377\202\377\377\375\1\376\376\376\206\377\377\377\1\377" \ - "\377\375\215\377\377\377\1\377\377\375\202\377\377\377\5\376\377\377" \ - "\377\377\377\376\376\374\377\377\377\377\376\377\202\377\377\377\1\376" \ - "\376\376\221\377\377\377\7\376\377\375\377\375\377\377\377\377\376\377" \ - "\377\377\377\377\377\377\373\377\376\377\202\377\377\377\1\377\377\375" \ - "\202\377\377\377\1\377\377\375\204\377\377\377\6\376\376\377\377\377" \ - "\375\376\377\377\377\377\375\377\376\377\375\377\374\222\377\377\377" \ - "\3\376\377\375\377\377\377\376\377\375\203\376\377\377\1\377\376\377" \ - "\211\377\377\377\7\377\377\373\377\376\377\377\377\375\377\377\377\377" \ - "\376\377\376\376\376\376\377\377") - - diff --git a/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend b/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend deleted file mode 100644 index 5a82fc872..000000000 --- a/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend +++ /dev/null @@ -1,9 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI += "file://psplash-colors.h" - -SPLASH_IMAGES="file://psplash-poky-img.h;outsuffix=default" - -do_configure_append () { - cp -f ${WORKDIR}/psplash-colors.h ${S} -} diff --git a/meta-agl-profile-core/recipes-core/systemd/.appends.core b/meta-agl-profile-core/recipes-core/systemd/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend b/meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend deleted file mode 100644 index 6661eab6c..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend +++ /dev/null @@ -1,4 +0,0 @@ -do_install_append() { - # Remove ethernet script deployed by upstream unconditionally (SPEC-3221) - rm -rf ${D}${systemd_unitdir}/network/80-wired.network || true -} \ No newline at end of file diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch b/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch deleted file mode 100644 index feaff2736..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 1e6ffb3129340291027d2690631f62eb7d0e0a78 Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Tue, 11 Feb 2020 18:13:45 -0800 -Subject: [PATCH] network: add CAN Termination tristate option - -Upstream-Status: Submitted -Signed-off-by: Matt Ranostay ---- - src/libsystemd/sd-netlink/netlink-types.c | 1 + - src/network/networkd-can.c | 13 +++++++++++++ - src/network/networkd-network-gperf.gperf | 1 + - src/network/networkd-network.c | 1 + - src/network/networkd-network.h | 1 + - test/fuzz/fuzz-network-parser/directives.network | 1 + - 6 files changed, 18 insertions(+) - -diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c -index a55460f034..96e211dcf0 100644 ---- a/src/libsystemd/sd-netlink/netlink-types.c -+++ b/src/libsystemd/sd-netlink/netlink-types.c -@@ -316,6 +316,7 @@ static const NLType rtnl_link_info_data_can_types[] = { - [IFLA_CAN_BITTIMING] = { .size = sizeof(struct can_bittiming) }, - [IFLA_CAN_RESTART_MS] = { .type = NETLINK_TYPE_U32 }, - [IFLA_CAN_CTRLMODE] = { .size = sizeof(struct can_ctrlmode) }, -+ [IFLA_CAN_TERMINATION] = { .type = NETLINK_TYPE_U16 }, - }; - - static const NLType rtnl_link_info_data_macsec_types[] = { -diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c -index 5755df57bd..3abe8ae2ed 100644 ---- a/src/network/networkd-can.c -+++ b/src/network/networkd-can.c -@@ -9,6 +9,8 @@ - #include "networkd-manager.h" - #include "string-util.h" - -+#define CAN_TERMINATION_OHM_VALUE 120 -+ - static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { - int r; - -@@ -152,6 +154,17 @@ static int link_set_can(Link *link) { - return log_link_error_errno(link, r, "Could not append IFLA_CAN_CTRLMODE attribute: %m"); - } - -+ if (link->network->can_termination >= 0) { -+ -+ log_link_debug(link, "%sabling can-termination", link->network->can_termination ? "En" : "Dis"); -+ -+ r = sd_netlink_message_append_u16(m, IFLA_CAN_TERMINATION, -+ link->network->can_termination ? CAN_TERMINATION_OHM_VALUE : 0); -+ if (r < 0) -+ return log_link_error_errno(link, r, "Could not append IFLA_CAN_TERMINATION attribute: %m"); -+ -+ } -+ - r = sd_netlink_message_close_container(m); - if (r < 0) - return log_link_error_errno(link, r, "Failed to close netlink container: %m"); -diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf -index f7e68be181..b3df4f3960 100644 ---- a/src/network/networkd-network-gperf.gperf -+++ b/src/network/networkd-network-gperf.gperf -@@ -245,6 +245,7 @@ CAN.BitRate, config_parse_si_size, - CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point) - CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us) - CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling) -+CAN.Termination, config_parse_tristate, 0, offsetof(Network, can_termination) - TrafficControlQueueingDiscipline.Parent, config_parse_tc_qdiscs_parent, 0, 0 - TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_tc_network_emulator_delay, 0, 0 - TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_tc_network_emulator_delay, 0, 0 -diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c -index 6e443975f1..0ea5c05db7 100644 ---- a/src/network/networkd-network.c -+++ b/src/network/networkd-network.c -@@ -448,6 +448,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi - .keep_configuration = _KEEP_CONFIGURATION_INVALID, - - .can_triple_sampling = -1, -+ .can_termination = -1, - .ip_service_type = -1, - }; - -diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h -index aa74bb4ae7..6a1f094156 100644 ---- a/src/network/networkd-network.h -+++ b/src/network/networkd-network.h -@@ -193,6 +193,7 @@ struct Network { - unsigned can_sample_point; - usec_t can_restart_us; - int can_triple_sampling; -+ int can_termination; - - AddressFamily ip_forward; - bool ip_masquerade; -diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network -index 5bd80dece8..781269d960 100644 ---- a/test/fuzz/fuzz-network-parser/directives.network -+++ b/test/fuzz/fuzz-network-parser/directives.network -@@ -194,6 +194,7 @@ SamplePoint= - BitRate= - RestartSec= - TripleSampling= -+Termination= - [Address] - DuplicateAddressDetection= - AutoJoin= diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network b/meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network deleted file mode 100644 index ae5514bca..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network +++ /dev/null @@ -1,6 +0,0 @@ -[Match] -Name=can* - -[CAN] -BitRate=500K -RestartSec=0.1 diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf b/meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf deleted file mode 100644 index b774f9ebf..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf +++ /dev/null @@ -1,3 +0,0 @@ -[options] -# This will prevent e2fsck from stopping boot just because the clock is wrong -broken_system_clock = 1 diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network b/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network deleted file mode 100644 index 3559b0155..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network +++ /dev/null @@ -1,5 +0,0 @@ -[Match] -Name=eth* en* - -[Network] -DHCP=yes diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend b/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend deleted file mode 100644 index 96c4dc35c..000000000 --- a/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend +++ /dev/null @@ -1,34 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "\ - file://0002-network-add-CAN-Termination-tristate-option.patch \ - file://e2fsck.conf \ - file://canbus-can.network \ - ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','file://wired.network','',d)} \ -" - -# enable networkd/resolved support -PACKAGECONFIG_append_pn-systemd = " \ - ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','networkd resolved','',d)} \ -" - -do_install_append() { - # Install /etc/e2fsck.conf to avoid boot stuck by wrong clock time - install -m 644 -p -D ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/e2fsck.conf - - # Install canbus network script - install -m 0644 ${WORKDIR}/canbus-can.network ${D}${nonarch_base_libdir}/systemd/network/60-canbus-can.network - - if ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','true','false',d)}; then - # Install DHCP configuration for Ethernet adapters - install -m 644 ${WORKDIR}/wired.network ${D}${sysconfdir}/systemd/network - fi -} - -FILES_${PN} += "${sysconfdir}/e2fsck.conf " - -# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd -PACKAGECONFIG_remove = "timesyncd" - -# Enable systemd-coredump when agl-devel is set on -PACKAGECONFIG_append_agl-devel = " coredump" diff --git a/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb b/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb deleted file mode 100644 index 3fea2ed91..000000000 --- a/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "CMake module to ease development of apps" -DESCRIPTION = "This is a migration of former app-templates git submodule which let you \ -ease the development of apps and widget building." -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/cmake-apps-module" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -SECTION = "apps" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cmake-apps-module;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "7c03348d9c2de43684fa69c3c9e227b25daceaaa" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - -inherit cmake - -FILES_${PN} += " ${datadir}/*/Modules/CMakeAfbTemplates*" - -BBCLASSEXTEND = "native nativesdk" - diff --git a/meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend b/meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend deleted file mode 100644 index 2de1e6836..000000000 --- a/meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend +++ /dev/null @@ -1,9 +0,0 @@ -FILESEXTRAPATHS_append := ":${THISDIR}/files" - -SRC_URI_append_class-nativesdk = " \ - file://environment.d-cmake-agl.sh \ -" - -do_install_append_class-nativesdk() { - install -m 644 ${WORKDIR}/environment.d-cmake-agl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake-agl.sh -} diff --git a/meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh b/meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh deleted file mode 100644 index 64b6cf3c6..000000000 --- a/meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh +++ /dev/null @@ -1 +0,0 @@ -export OE_CMAKE_TOOLCHAIN_FILE="$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake" diff --git a/meta-agl-profile-core/recipes-devtools/gdb/.appends.core b/meta-agl-profile-core/recipes-devtools/gdb/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend b/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend deleted file mode 100644 index 7cba933af..000000000 --- a/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -PACKAGECONFIG_remove = "readline" diff --git a/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend b/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend deleted file mode 100644 index 43807bd12..000000000 --- a/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -EXTRA_OECONF += "--enable-threading" diff --git a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb b/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb deleted file mode 100644 index 1174ac4d7..000000000 --- a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb +++ /dev/null @@ -1,8 +0,0 @@ -require libafb-helpers_git.inc - -inherit cmake - -RDEPENDS_${PN}_append = " af-binder" - -ALLOW_EMPTY_${PN} = "1" - diff --git a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc b/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc deleted file mode 100644 index 6753225b4..000000000 --- a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc +++ /dev/null @@ -1,14 +0,0 @@ -SUMMARY = "AFB helpers library" -DESCRIPTION = "AFB helpers library to ease JSON object manipulation and binding interaction" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libafb-helpers;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "1d1c6cef6039effd4c045a76d30414b589336d0e" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - -DEPENDS_append = " af-binder jq" - diff --git a/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb b/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb deleted file mode 100644 index 0ee9c5e84..000000000 --- a/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "Controller library for an Application Framework" -DESCRIPTION = "Controller library to be used to easily create a binding for AGL App Framework" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libappcontroller;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "1bef31c8bbad27f4914484c5007b2e199fb073d4" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - -DEPENDS_append = " af-binder libafb-helpers lua" -RDEPENDS_${PN}_append = " af-binder lua" - -inherit cmake - -ALLOW_EMPTY_${PN} = "1" - diff --git a/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb b/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb deleted file mode 100644 index 4c0bda071..000000000 --- a/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "Low level CAN generator" -DESCRIPTION = "Generator used to customize low level CAN service with customs signals" -SECTION = "devel" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -inherit cmake pkgconfig -BBCLASSEXTEND = "nativesdk" -DEPENDS = " cmake-apps-module" - -SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/src/low-level-can-generator;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "0a3e354c3d81866e1a755367ab5592b3ced868bb" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - diff --git a/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend deleted file mode 100644 index 18621dbfe..000000000 --- a/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend +++ /dev/null @@ -1,4 +0,0 @@ -RDEPENDS_${PN} += "nativesdk-low-level-can-generator \ - nativesdk-cmake-apps-module \ - nativesdk-cmake-apps-module-doc \ -" diff --git a/meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb b/meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb deleted file mode 100644 index c360f2a72..000000000 --- a/meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb +++ /dev/null @@ -1,33 +0,0 @@ -SUMMARY = "Provides a set of tools for development for AGL DISTRO" -LICENSE = "MIT" - -inherit packagegroup - -RDEPENDS_${PN} = "\ - strace \ - ldd \ - less \ - vim \ - lsof \ - gdb \ - valgrind \ - perf \ - htop \ - powertop \ - screen \ - usbutils \ - rsync \ - tree \ - pstree \ - procps \ - jq \ - libxslt-bin \ - agl-service-network-tools \ - gcc-sanitizers \ - pciutils \ - pyagl \ - gcov \ - gcov-symlinks \ - gcovr \ - gcovr-wrapper \ - " diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb b/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb deleted file mode 100644 index ab7e8afa9..000000000 --- a/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "\ -AsyncSSH is a Python package which provides an asynchronous client and \ -server implementation of the SSHv2 protocol on top of the Python \ -asyncio framework." -HOMEPAGE = "https://github.com/ronf/asyncssh" -LICENSE = "EPL-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=d9fc0efef5228704e7f5b37f27192723" - -SRC_URI[sha256sum] = "44bda34c7123f00c3df95d24e2dc8d43c4d17b456fbb8c434ef4f4a7ebb5265e" - -inherit pypi setuptools3 - -RDEPENDS_${PN} += "${PYTHON_PN}-asyncio ${PYTHON_PN}-cryptography" - -BBCLASSEXTEND = "native" diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb b/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb deleted file mode 100644 index 5ff2d4ecf..000000000 --- a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "pytest-dependency manages dependencies of tests." -HOMEPAGE = "https://github.com/RKrahl/pytest-dependency" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://README.rst;md5=35b9938ae48d25e6b8306232e98463dd" - -SRC_URI[sha256sum] = "c2a892906192663f85030a6ab91304e508e546cddfe557d692d61ec57a1d946b" - -inherit pypi setuptools3 - -DEPENDS += "${PYTHON_PN}-pytest-native" - -BBCLASSEXTEND = "native" diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb b/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb deleted file mode 100644 index 5ed9b1d9d..000000000 --- a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "pytest-reverse is a pytest plugin to reverse test order" -HOMEPAGE = "https://github.com/adamchainz/pytest-reverse" -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE;md5=caf1f407ae86ecd57ab721dff94079b7" - -SRC_URI[sha256sum] = "40cbc47df8a262fed778e500f4d0b17d2d08ef8b9fbf899c0bab9488be192aac" - -inherit pypi setuptools3 - -DEPENDS += "${PYTHON_PN}-pytest-native" - -BBCLASSEXTEND = "native" diff --git a/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend b/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend deleted file mode 100644 index 1a6a98b7f..000000000 --- a/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -QEMU_TARGETS_class-target_aglegvirt = " aarch64 x86_64" diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts deleted file mode 100755 index 1d1a5a059..000000000 --- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# -# Copyright 2017 IoT.bzh. - -# Author: Ronan Le Martret -# - -# The following script will run all the scriptlets found in #SYSCONFDIR#/agl-postinsts. - -agl_pi_dir="#SYSCONFDIR#/agl-postinsts" - -POSTINST_LOGGING=1 -LOGFILE=/var/log/agl-postinstall.log - -[ -e $LOGFILE ] && mv ${LOGFILE} ${LOGFILE}.old.$(date +%F--%H%M.%S) - -append_log=">>$LOGFILE 2>&1" - -exec_postinst_scriptlets() { - for i in `ls $agl_pi_dir`; do - i=$agl_pi_dir/$i - echo "Running postinst $i..." - [ "$POSTINST_LOGGING" = "1" ] && eval echo "Running postinst $i..." $append_log - if [ -x $i ]; then - eval sh -c $i $append_log - if [ $? -eq 0 ]; then - rm $i - else - echo "ERROR: postinst $i failed." - [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i failed." $append_log - remove_agl_pi_dir=0 - fi - else - echo "ERROR: postinst $i do not exists or do not have execute permission." - [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i do not exists or do not have execute permission." $append_log - remove_agl_pi_dir=0 - fi - done -} - -remove_agl_pi_dir=1 -exec_postinst_scriptlets -systemctl daemon-reload - -# since all postinstalls executed successfully, remove the postinstalls directory -if [ $remove_agl_pi_dir = 1 ]; then - rm -rf $agl_pi_dir -fi diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service deleted file mode 100644 index 8f8667db6..000000000 --- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Run pending agl postinsts -DefaultDependencies=no -After=#SYSTEMD_SERVICE_AFTER# -Before=#SYSTEMD_SERVICE_BEFORE# -ConditionPathExists=#SYSCONFDIR#/agl-postinsts - -[Service] -Type=oneshot -StandardOutput=journal+console -ExecStart=#SBINDIR#/run-agl-postinsts -ExecStartPost=#BASE_BINDIR#/systemctl disable run-agl-postinsts.service -RemainAfterExit=No -TimeoutSec=0 - -[Install] -WantedBy=multi-user.target diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb deleted file mode 100644 index 38bc66df8..000000000 --- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb +++ /dev/null @@ -1,46 +0,0 @@ -SUMMARY = "Runs AGL postinstall scripts on first boot of the target device" -SECTION = "devel" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" - -SRC_URI = "file://run-agl-postinsts \ - file://run-agl-postinsts.service" - -S = "${WORKDIR}" - -inherit allarch systemd - -SYSTEMD_SERVICE_${PN} = "run-agl-postinsts.service" - -SYSTEMD_SERVICE_AFTER ?= "dbus.service cynagora.service" - -SYSTEMD_SERVICE_BEFORE ?= "systemd-user-sessions.service" - -do_configure() { - : -} - -do_compile () { - : -} - -do_install() { - install -d ${D}${sbindir} - install -m 0755 ${WORKDIR}/run-agl-postinsts ${D}${sbindir}/ - - install -d ${D}${systemd_unitdir}/system/ - install -m 0644 ${WORKDIR}/run-agl-postinsts.service ${D}${systemd_unitdir}/system/ - - sed -i -e 's:#SYSCONFDIR#:${sysconfdir}:g' \ - -e 's:#SBINDIR#:${sbindir}:g' \ - -e 's:#BASE_BINDIR#:${base_bindir}:g' \ - -e 's:#LOCALSTATEDIR#:${localstatedir}:g' \ - ${D}${sbindir}/run-agl-postinsts \ - ${D}${systemd_unitdir}/system/run-agl-postinsts.service - - sed -i -e 's:#SYSTEMD_SERVICE_AFTER#:${SYSTEMD_SERVICE_AFTER}:g' \ - -e 's:#SYSTEMD_SERVICE_BEFORE#:${SYSTEMD_SERVICE_BEFORE}:g' \ - ${D}${systemd_unitdir}/system/run-agl-postinsts.service -} - diff --git a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf b/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf deleted file mode 100644 index d706cc5f7..000000000 --- a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Unit] -After=ldconfig.service diff --git a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend b/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend deleted file mode 100644 index 4cc2edf86..000000000 --- a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend +++ /dev/null @@ -1,14 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://ldconfig-wait.conf" - -do_configure_append() { - if ! grep -q StandardOutput= ${WORKDIR}/run-postinsts.service; then - sed -i '/ExecStart=/iStandardOutput=journal+console' ${WORKDIR}/run-postinsts.service - fi -} - -do_install_append() { - install -d ${D}${sysconfdir}/systemd/system/run-postinsts.service.d - install -m 0644 ${WORKDIR}/ldconfig-wait.conf ${D}${sysconfdir}/systemd/system/run-postinsts.service.d -} diff --git a/meta-agl-profile-core/recipes-extended/gperf/.appends.core b/meta-agl-profile-core/recipes-extended/gperf/.appends.core deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend b/meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend deleted file mode 100644 index 2a590838b..000000000 --- a/meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -BBCLASSEXTEND += "nativesdk" diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch b/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch deleted file mode 100644 index dd811c81b..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch +++ /dev/null @@ -1,472 +0,0 @@ -From 9cb7cb85f59509ac445116e9458c502cf6cb74e6 Mon Sep 17 00:00:00 2001 -From: Christian Gromm -Date: Thu, 9 Nov 2017 13:20:23 +0100 -Subject: [PATCH 2/2] src: most: add auto conf feature - -This patch adds the auto configuration feature to the driver -sources. It is needed to have the driver configured automatically -upon start up w/o the need for userspace to set up sysfs. - -Signed-off-by: Christian Gromm ---- - driver/Makefile | 3 + - driver/default_conf.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++ - driver/include/mostcore.h | 64 ++++++++++++++++++ - driver/mostcore/core.c | 120 ++++++++++++++++++++++++++++------ - 4 files changed, 331 insertions(+), 18 deletions(-) - create mode 100644 driver/default_conf.c - -diff --git a/Makefile b/Makefile -index e77a4b6..6d74ebe 100644 ---- a/Makefile -+++ b/Makefile -@@ -6,6 +6,9 @@ obj-m := mostcore.o - mostcore-y := mostcore/core.o - CFLAGS_core.o := -I$(src)/include/ - -+obj-m += default_conf.o -+CFLAGL_default_conf.o := -I$(src)/include -+ - obj-m += aim_cdev.o - aim_cdev-y := aim-cdev/cdev.o - CFLAGS_cdev.o := -I$(src)/include/ -diff --git a/default_conf.c b/default_conf.c -new file mode 100644 -index 0000000..adb1786 ---- /dev/null -+++ b/default_conf.c -@@ -0,0 +1,162 @@ -+/* -+ * default_conf.c - Default configuration for the MOST channels. -+ * -+ * Copyright (C) 2017, Microchip Technology Germany II GmbH & Co. KG -+ * -+ * 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. -+ * -+ * This file is licensed under GPLv2. -+ */ -+ -+#include "include/mostcore.h" -+#include -+ -+static struct most_config_probe config_probes[] = { -+ -+ /* OS81118 Control */ -+ { -+ .ch_name = "ep8f", -+ .cfg = { -+ .direction = MOST_CH_RX, -+ .data_type = MOST_CH_CONTROL, -+ .num_buffers = 16, -+ .buffer_size = 64, -+ }, -+ .aim_name = "cdev", -+ .aim_param = "inic-usb-crx", -+ }, -+ { -+ .ch_name = "ep0f", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_CONTROL, -+ .num_buffers = 16, -+ .buffer_size = 64, -+ }, -+ .aim_name = "cdev", -+ .aim_param = "inic-usb-ctx", -+ }, -+ /* OS81118 Async */ -+ { -+ .ch_name = "ep8e", -+ .cfg = { -+ .direction = MOST_CH_RX, -+ .data_type = MOST_CH_ASYNC, -+ .num_buffers = 20, -+ .buffer_size = 1522, -+ }, -+ .aim_name = "networking", -+ .aim_param = "inic-usb-arx", -+ }, -+ { -+ .ch_name = "ep0e", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_ASYNC, -+ .num_buffers = 20, -+ .buffer_size = 1522, -+ }, -+ .aim_name = "networking", -+ .aim_param = "inic-usb-atx", -+ }, -+ /* OS81210 Control */ -+ { -+ .ch_name = "ep87", -+ .cfg = { -+ .direction = MOST_CH_RX, -+ .data_type = MOST_CH_CONTROL, -+ .num_buffers = 16, -+ .buffer_size = 64, -+ }, -+ .aim_name = "cdev", -+ .aim_param = "inic-usb-crx", -+ }, -+ { -+ .ch_name = "ep07", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_CONTROL, -+ .num_buffers = 16, -+ .buffer_size = 64, -+ }, -+ .aim_name = "cdev", -+ .aim_param = "inic-usb-ctx", -+ }, -+ /* OS81210 Async */ -+ { -+ .ch_name = "ep86", -+ .cfg = { -+ .direction = MOST_CH_RX, -+ .data_type = MOST_CH_ASYNC, -+ .num_buffers = 20, -+ .buffer_size = 1522, -+ }, -+ .aim_name = "networking", -+ .aim_param = "inic-usb-arx", -+ }, -+ { -+ .ch_name = "ep06", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_ASYNC, -+ .num_buffers = 20, -+ .buffer_size = 1522, -+ }, -+ .aim_name = "networking", -+ .aim_param = "inic-usb-atx", -+ }, -+ /* Streaming channels (common for all INICs) */ -+ { -+ .ch_name = "ep01", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_SYNC, -+ .num_buffers = 8, -+ .buffer_size = 2 * 12 * 42, -+ .subbuffer_size = 12, -+ .packets_per_xact = 42, -+ }, -+ .aim_name = "sound", -+ .aim_param = "ep01-6ch.6x16", -+ }, -+ { -+ .ch_name = "ep02", -+ .cfg = { -+ .direction = MOST_CH_TX, -+ .data_type = MOST_CH_ISOC, -+ .num_buffers = 8, -+ .buffer_size = 40 * 188, -+ .subbuffer_size = 188, -+ .packets_per_xact = 2, -+ }, -+ .aim_name = "cdev", -+ .aim_param = "inic-usb-itx1", -+ }, -+ -+ /* sentinel */ -+ {} -+}; -+ -+static struct most_config_set config_set = { -+ .probes = config_probes -+}; -+ -+static int __init mod_init(void) -+{ -+ most_register_config_set(&config_set); -+ return 0; -+} -+ -+static void __exit mod_exit(void) -+{ -+ most_deregister_config_set(&config_set); -+} -+ -+module_init(mod_init); -+module_exit(mod_exit); -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Andrey Shvetsov "); -+MODULE_DESCRIPTION("Default configuration for the MOST channels"); -diff --git a/include/mostcore.h b/include/mostcore.h -index dc87121..3c00efb 100644 ---- a/include/mostcore.h -+++ b/include/mostcore.h -@@ -145,6 +145,39 @@ struct most_channel_config { - u16 dbr_size; - }; - -+/** -+ * struct most_config_probe - matching rule, channel configuration and -+ * the optional AIM name used for the automatic configuration and linking -+ * of the channel -+ * @dev_name: optional matching device id -+ * ("usb_device 1-1:1.0," "dim2-12345678", etc.) -+ * @ch_name: matching channel name ("ep8f", "ca2", etc.) -+ * @cfg: configuration that will be applied for the found channel -+ * @aim_name: optional name of the AIM that will be linked to the channel -+ * ("cdev", "networking", "v4l", "sound") -+ * @aim_param: AIM dependent parameter (it is the character device name -+ * for the cdev AIM, PCM format for the audio AIM, etc.) -+ */ -+struct most_config_probe { -+ const char *dev_name; -+ const char *ch_name; -+ struct most_channel_config cfg; -+ const char *aim_name; -+ const char *aim_param; -+}; -+ -+/** -+ * struct most_config_set - the configuration set containing -+ * several automatic configurations for the different channels -+ * @probes: list of the matching rules and the configurations, -+ * that must be ended with the empty structure -+ * @list: list head used by the MostCore -+ */ -+struct most_config_set { -+ const struct most_config_probe *probes; -+ struct list_head list; -+}; -+ - /* - * struct mbo - MOST Buffer Object. - * @context: context for core completion handler -@@ -285,6 +318,37 @@ struct most_aim { - }; - - /** -+ * most_register_config_set - registers the configuration set -+ * -+ * @cfg_set: configuration set to be registered for the future probes -+ * -+ * The function registers the given configuration set. -+ * -+ * It is possible to register or deregister several configuration sets -+ * independently. Different configuration sets may contain the -+ * overlapped matching rules but later registered configuration set has -+ * the higher priority over the prior registered set. -+ * -+ * The only the first matched configuration is applied for each -+ * channel. -+ * -+ * The configuration for the channel is applied at the time of -+ * registration of the parent most_interface. -+ */ -+void most_register_config_set(struct most_config_set *cfg_set); -+ -+/** -+ * most_deregister_config_set - deregisters the prior registered -+ * configuration set -+ * -+ * @cfg_set: configuration set to be deregistered -+ * -+ * The calling of this function does not change the current -+ * configuration of the channels. -+ */ -+void most_deregister_config_set(struct most_config_set *cfg_set); -+ -+/** - * most_register_interface - Registers instance of the interface. - * @iface: Pointer to the interface instance description. - * -diff --git a/mostcore/core.c b/mostcore/core.c -index 9e0a352..6035cf0 100644 ---- a/mostcore/core.c -+++ b/mostcore/core.c -@@ -36,6 +36,8 @@ static struct class *most_class; - static struct device *core_dev; - static struct ida mdev_id; - static int dummy_num_buffers; -+static struct list_head config_probes; -+struct mutex config_probes_mt; /* config_probes */ - - struct most_c_aim_obj { - struct most_aim *ptr; -@@ -918,6 +920,30 @@ most_c_obj *get_channel_by_name(char *mdev, char *mdev_ch) - return c; - } - -+static int link_channel_to_aim(struct most_c_obj *c, struct most_aim *aim, -+ char *aim_param) -+{ -+ int ret; -+ struct most_aim **aim_ptr; -+ -+ if (!c->aim0.ptr) -+ aim_ptr = &c->aim0.ptr; -+ else if (!c->aim1.ptr) -+ aim_ptr = &c->aim1.ptr; -+ else -+ return -ENOSPC; -+ -+ *aim_ptr = aim; -+ ret = aim->probe_channel(c->iface, c->channel_id, -+ &c->cfg, &c->kobj, aim_param); -+ if (ret) { -+ *aim_ptr = NULL; -+ return ret; -+ } -+ -+ return 0; -+} -+ - /** - * add_link_store - store() function for add_link attribute - * @aim_obj: pointer to AIM object -@@ -946,45 +972,33 @@ static ssize_t add_link_store(struct most_aim_obj *aim_obj, - size_t len) - { - struct most_c_obj *c; -- struct most_aim **aim_ptr; - char buffer[STRING_SIZE]; - char *mdev; - char *mdev_ch; -- char *mdev_devnod; -+ char *aim_param; - char devnod_buf[STRING_SIZE]; - int ret; - size_t max_len = min_t(size_t, len + 1, STRING_SIZE); - - strlcpy(buffer, buf, max_len); - -- ret = split_string(buffer, &mdev, &mdev_ch, &mdev_devnod); -+ ret = split_string(buffer, &mdev, &mdev_ch, &aim_param); - if (ret) - return ret; - -- if (!mdev_devnod || *mdev_devnod == 0) { -+ if (!aim_param || *aim_param == 0) { - snprintf(devnod_buf, sizeof(devnod_buf), "%s-%s", mdev, - mdev_ch); -- mdev_devnod = devnod_buf; -+ aim_param = devnod_buf; - } - - c = get_channel_by_name(mdev, mdev_ch); - if (IS_ERR(c)) - return -ENODEV; - -- if (!c->aim0.ptr) -- aim_ptr = &c->aim0.ptr; -- else if (!c->aim1.ptr) -- aim_ptr = &c->aim1.ptr; -- else -- return -ENOSPC; -- -- *aim_ptr = aim_obj->driver; -- ret = aim_obj->driver->probe_channel(c->iface, c->channel_id, -- &c->cfg, &c->kobj, mdev_devnod); -- if (ret) { -- *aim_ptr = NULL; -+ ret = link_channel_to_aim(c, aim_obj->driver, aim_param); -+ if (ret) - return ret; -- } - - return len; - } -@@ -1679,6 +1693,73 @@ int most_deregister_aim(struct most_aim *aim) - } - EXPORT_SYMBOL_GPL(most_deregister_aim); - -+void most_register_config_set(struct most_config_set *cfg_set) -+{ -+ mutex_lock(&config_probes_mt); -+ list_add(&cfg_set->list, &config_probes); -+ mutex_unlock(&config_probes_mt); -+} -+EXPORT_SYMBOL(most_register_config_set); -+ -+void most_deregister_config_set(struct most_config_set *cfg_set) -+{ -+ mutex_lock(&config_probes_mt); -+ list_del(&cfg_set->list); -+ mutex_unlock(&config_probes_mt); -+} -+EXPORT_SYMBOL(most_deregister_config_set); -+ -+static int probe_aim(struct most_c_obj *c, -+ const char *aim_name, const char *aim_param) -+{ -+ struct most_aim_obj *aim_obj; -+ char buf[STRING_SIZE]; -+ -+ list_for_each_entry(aim_obj, &aim_list, list) { -+ if (!strcmp(aim_obj->driver->name, aim_name)) { -+ strlcpy(buf, aim_param ? aim_param : "", sizeof(buf)); -+ return link_channel_to_aim(c, aim_obj->driver, buf); -+ } -+ } -+ return 0; -+} -+ -+static bool probe_config_set(struct most_c_obj *c, -+ const char *dev_name, const char *ch_name, -+ const struct most_config_probe *p) -+{ -+ int err; -+ -+ for (; p->ch_name; p++) { -+ if ((p->dev_name && strcmp(dev_name, p->dev_name)) || -+ strcmp(ch_name, p->ch_name)) -+ continue; -+ -+ c->cfg = p->cfg; -+ if (p->aim_name) { -+ err = probe_aim(c, p->aim_name, p->aim_param); -+ if (err) -+ pr_err("failed to autolink %s to %s: %d\n", -+ ch_name, p->aim_name, err); -+ } -+ return true; -+ } -+ return false; -+} -+ -+static void find_configuration(struct most_c_obj *c, const char *dev_name, -+ const char *ch_name) -+{ -+ struct most_config_set *plist; -+ -+ mutex_lock(&config_probes_mt); -+ list_for_each_entry(plist, &config_probes, list) { -+ if (probe_config_set(c, dev_name, ch_name, plist->probes)) -+ break; -+ } -+ mutex_unlock(&config_probes_mt); -+} -+ - /** - * most_register_interface - registers an interface with core - * @iface: pointer to the instance of the interface description. -@@ -1777,6 +1858,7 @@ struct kobject *most_register_interface(struct most_interface *iface) - mutex_init(&c->start_mutex); - mutex_init(&c->nq_mutex); - list_add_tail(&c->list, &inst->channel_list); -+ find_configuration(c, iface->description, channel_name); - } - pr_info("registered new MOST device mdev%d (%s)\n", - inst->dev_id, iface->description); -@@ -1880,6 +1962,8 @@ static int __init most_init(void) - pr_info("init()\n"); - INIT_LIST_HEAD(&instance_list); - INIT_LIST_HEAD(&aim_list); -+ INIT_LIST_HEAD(&config_probes); -+ mutex_init(&config_probes_mt); - ida_init(&mdev_id); - - err = bus_register(&most_bus); --- -2.7.4 - diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch b/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch deleted file mode 100644 index 4703844a1..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch +++ /dev/null @@ -1,26 +0,0 @@ -From b269994be937cbb31c0d73ecc899ca8a545a6a4a Mon Sep 17 00:00:00 2001 -From: Christian Gromm -Date: Mon, 4 Sep 2017 11:09:17 +0200 -Subject: [PATCH 3/5] core: remove kernel log for MBO status - -Signed-off-by: Christian Gromm ---- - driver/mostcore/core.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/mostcore/core.c b/mostcore/core.c -index 931efb9..595becc 100644 ---- a/mostcore/core.c -+++ b/mostcore/core.c -@@ -1348,8 +1348,6 @@ static void most_write_completion(struct mbo *mbo) - BUG_ON((!mbo) || (!mbo->context)); - - c = mbo->context; -- if (mbo->status == MBO_E_INVAL) -- pr_info("WARN: Tx MBO status: invalid\n"); - if (unlikely(c->is_poisoned || (mbo->status == MBO_E_CLOSE))) - trash_mbo(mbo); - else --- -2.7.4 - diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch b/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch deleted file mode 100644 index 010d4b0d0..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch +++ /dev/null @@ -1,25 +0,0 @@ -From a5fd2ae8d4a3b2a8f7a33a4ea469ea7ee0d946ef Mon Sep 17 00:00:00 2001 -From: Christian Gromm -Date: Mon, 4 Sep 2017 15:36:38 +0200 -Subject: [PATCH 4/5] most: video: set device_caps - -Signed-off-by: Christian Gromm ---- - driver/aim-v4l2/video.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/aim-v4l2/video.c b/aim-v4l2/video.c -index e074841..6405a03 100644 ---- a/aim-v4l2/video.c -+++ b/aim-v4l2/video.c -@@ -263,6 +263,7 @@ static int vidioc_querycap(struct file *file, void *priv, - snprintf(cap->bus_info, sizeof(cap->bus_info), - "%s", mdev->iface->description); - -+ cap->device_caps = - cap->capabilities = - V4L2_CAP_READWRITE | - V4L2_CAP_TUNER | --- -2.7.4 - diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch b/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch deleted file mode 100644 index ebaee9e14..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 7518453386ad3e82008186a6c9ca86ed8c136801 Mon Sep 17 00:00:00 2001 -From: Christian Gromm -Date: Mon, 4 Sep 2017 16:08:38 +0200 -Subject: [PATCH 5/5] most: video: set V4L2_CAP_DEVICE_CAPS flag - -Signed-off-by: Christian Gromm ---- - driver/aim-v4l2/video.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/aim-v4l2/video.c b/aim-v4l2/video.c -index 6405a03..db75d4d 100644 ---- a/aim-v4l2/video.c -+++ b/aim-v4l2/video.c -@@ -265,6 +265,7 @@ static int vidioc_querycap(struct file *file, void *priv, - - cap->device_caps = - cap->capabilities = -+ V4L2_CAP_DEVICE_CAPS | - V4L2_CAP_READWRITE | - V4L2_CAP_TUNER | - V4L2_CAP_VIDEO_CAPTURE; --- -2.7.4 - diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch b/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch deleted file mode 100644 index 59c6ae671..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 63bcd9b421ae7927948bffec9566db47f40ea290 Mon Sep 17 00:00:00 2001 -From: Andrey Shvetsov -Date: Tue, 30 Jan 2018 17:34:09 +0100 -Subject: [PATCH] staging: most: dim2: fix startup sequence - -Platform specific initializations (pdata->init) must be done before DIM2 -IP module startup (dim_startup). - -Signed-off-by: Andrey Shvetsov ---- - hdm-dim2/dim2_hdm.c | 90 +++++++++++++++++++++++++++++++++++++++--------------------------------------------------- - 1 file changed, 39 insertions(+), 51 deletions(-) - -diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c -index 893b8e4..e4629a5 100644 ---- a/hdm-dim2/dim2_hdm.c -+++ b/hdm-dim2/dim2_hdm.c -@@ -155,38 +155,6 @@ void dimcb_on_error(u8 error_id, const char *error_message) - } - - /** -- * startup_dim - initialize the dim2 interface -- * @pdev: platform device -- */ --static int startup_dim(struct platform_device *pdev) --{ -- struct dim2_hdm *dev = platform_get_drvdata(pdev); -- struct dim2_platform_data *pdata = pdev->dev.platform_data; -- u8 hal_ret; -- int ret; -- -- if (!pdata) { -- pr_err("missing platform data\n"); -- return -EINVAL; -- } -- -- ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0; -- if (ret) -- return ret; -- -- pr_info("sync: num of frames per sub-buffer: %u\n", fcnt); -- hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt); -- if (hal_ret != DIM_NO_ERROR) { -- pr_err("dim_startup failed: %d\n", hal_ret); -- if (pdata && pdata->destroy) -- pdata->destroy(pdata); -- return -ENODEV; -- } -- -- return 0; --} -- --/** - * try_start_dim_transfer - try to transfer a buffer on a channel - * @hdm_ch: channel specific data - * -@@ -727,10 +695,12 @@ static void dma_free(struct mbo *mbo, u32 size) - */ - static int dim2_probe(struct platform_device *pdev) - { -+ struct dim2_platform_data *pdata = pdev->dev.platform_data; - struct dim2_hdm *dev; - struct resource *res; - int ret, i; - struct kobject *kobj; -+ u8 hal_ret; - int irq; - - dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); -@@ -745,38 +715,59 @@ static int dim2_probe(struct platform_device *pdev) - if (IS_ERR(dev->io_base)) - return PTR_ERR(dev->io_base); - -+ if (!pdata) { -+ dev_err(&pdev->dev, "missing platform data\n"); -+ return -EINVAL; -+ } -+ -+ ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0; -+ if (ret) -+ return ret; -+ -+ dev_info(&pdev->dev, "sync: num of frames per sub-buffer: %u\n", fcnt); -+ hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt); -+ if (hal_ret != DIM_NO_ERROR) { -+ dev_err(&pdev->dev, "dim_startup failed: %d\n", hal_ret); -+ ret = -ENODEV; -+ goto err_bsp_destroy; -+ } -+ - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - dev_err(&pdev->dev, "failed to get ahb0_int irq: %d\n", irq); -- return irq; -+ ret = irq; -+ goto err_shutdown_dim; - } - - ret = devm_request_irq(&pdev->dev, irq, dim2_ahb_isr, 0, - "dim2_ahb0_int", dev); - if (ret) { - dev_err(&pdev->dev, "failed to request ahb0_int irq %d\n", irq); -- return ret; -+ goto err_shutdown_dim; - } - - irq = platform_get_irq(pdev, 1); - if (irq < 0) { - dev_err(&pdev->dev, "failed to get mlb_int irq: %d\n", irq); -- return irq; -+ ret = irq; -+ goto err_shutdown_dim; - } - - ret = devm_request_irq(&pdev->dev, irq, dim2_mlb_isr, 0, - "dim2_mlb_int", dev); - if (ret) { - dev_err(&pdev->dev, "failed to request mlb_int irq %d\n", irq); -- return ret; -+ goto err_shutdown_dim; - } - - init_waitqueue_head(&dev->netinfo_waitq); - dev->deliver_netinfo = 0; -- dev->netinfo_task = kthread_run(&deliver_netinfo_thread, (void *)dev, -+ dev->netinfo_task = kthread_run(&deliver_netinfo_thread, dev, - "dim2_netinfo"); -- if (IS_ERR(dev->netinfo_task)) -- return PTR_ERR(dev->netinfo_task); -+ if (IS_ERR(dev->netinfo_task)) { -+ ret = PTR_ERR(dev->netinfo_task); -+ goto err_shutdown_dim; -+ } - - for (i = 0; i < DMA_CHANNELS; i++) { - struct most_channel_capability *cap = dev->capabilities + i; -@@ -833,20 +824,17 @@ static int dim2_probe(struct platform_device *pdev) - if (ret) - goto err_unreg_iface; - -- ret = startup_dim(pdev); -- if (ret) { -- dev_err(&pdev->dev, "failed to initialize DIM2\n"); -- goto err_destroy_bus; -- } -- - return 0; - --err_destroy_bus: -- dim2_sysfs_destroy(&dev->bus); - err_unreg_iface: - most_deregister_interface(&dev->most_iface); - err_stop_thread: - kthread_stop(dev->netinfo_task); -+err_shutdown_dim: -+ dim_shutdown(); -+err_bsp_destroy: -+ if (pdata && pdata->destroy) -+ pdata->destroy(pdata); - - return ret; - } -@@ -863,6 +851,10 @@ static int dim2_remove(struct platform_device *pdev) - struct dim2_platform_data *pdata = pdev->dev.platform_data; - unsigned long flags; - -+ dim2_sysfs_destroy(&dev->bus); -+ most_deregister_interface(&dev->most_iface); -+ kthread_stop(dev->netinfo_task); -+ - spin_lock_irqsave(&dim_lock, flags); - dim_shutdown(); - spin_unlock_irqrestore(&dim_lock, flags); -@@ -870,10 +862,6 @@ static int dim2_remove(struct platform_device *pdev) - if (pdata && pdata->destroy) - pdata->destroy(pdata); - -- dim2_sysfs_destroy(&dev->bus); -- most_deregister_interface(&dev->most_iface); -- kthread_stop(dev->netinfo_task); -- - /* - * break link to local platform_device_id struct - * to prevent crash by unload platform device module --- -libgit2 0.26.0 diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch b/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch deleted file mode 100644 index 679fab79c..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch +++ /dev/null @@ -1,378 +0,0 @@ -From 8e16207392cd715ea88f6780981a3d55ab005588 Mon Sep 17 00:00:00 2001 -From: Andrey Shvetsov -Date: Mon, 12 Feb 2018 12:23:37 +0100 -Subject: [PATCH] staging: most: dim2: use device tree - -Current dim2 driver expects the existence of a platform driver that -implements the platform specific initialization and delivery of the irq -numbers. - -This patch integrates the device tree activity and platform specific -code into the driver. - -Signed-off-by: Andrey Shvetsov ---- - hdm-dim2/dim2_hdm.c | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------- - hdm-dim2/dim2_hdm.h | 28 ---------------------------- - hdm-dim2/platform/dim2_arwen_mlb3.c | 165 --------------------------------------------------------------------------------------------------------------------------------------------------------------------- - hdm-dim2/platform/dim2_arwen_mlb6.c | 169 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - hdm-dim2/platform/dim2_h2_dt.c | 227 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - hdm-dim2/platform/dim2_mx6q.c | 192 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - hdm-dim2/platform/dim2_mx6q_dt.c | 224 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 7 files changed, 193 insertions(+), 1034 deletions(-) - delete mode 100644 hdm-dim2/dim2_hdm.h - delete mode 100644 hdm-dim2/platform/dim2_arwen_mlb3.c - delete mode 100644 hdm-dim2/platform/dim2_arwen_mlb6.c - delete mode 100644 hdm-dim2/platform/dim2_h2_dt.c - delete mode 100644 hdm-dim2/platform/dim2_mx6q.c - delete mode 100644 hdm-dim2/platform/dim2_mx6q_dt.c - -diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c -index e4629a5..2dba917 100644 ---- a/hdm-dim2/dim2_hdm.c -+++ b/hdm-dim2/dim2_hdm.c -@@ -14,6 +14,7 @@ - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - - #include -+#include - #include - #include - #include -@@ -21,13 +22,13 @@ - #include - #include - #include -+#include - #include - #include - #include - - #include - #include "dim2_hal.h" --#include "dim2_hdm.h" - #include "dim2_errors.h" - #include "dim2_sysfs.h" - -@@ -93,6 +94,9 @@ struct dim2_hdm { - struct most_interface most_iface; - char name[16 + sizeof "dim2-"]; - void __iomem *io_base; -+ u8 clk_speed; -+ struct clk *clk; -+ struct clk *clk_pll; - struct task_struct *netinfo_task; - wait_queue_head_t netinfo_waitq; - int deliver_netinfo; -@@ -102,6 +106,12 @@ struct dim2_hdm { - struct medialb_bus bus; - void (*on_netinfo)(struct most_interface *, - unsigned char, unsigned char *); -+ void (*disable_platform)(struct platform_device *); -+}; -+ -+struct dim2_platform_data { -+ int (*enable)(struct platform_device *); -+ void (*disable)(struct platform_device *); - }; - - #define iface_to_hdm(iface) container_of(iface, struct dim2_hdm, most_iface) -@@ -686,6 +696,8 @@ static void dma_free(struct mbo *mbo, u32 size) - dma_free_coherent(NULL, size, mbo->virt_address, mbo->bus_address); - } - -+static const struct of_device_id dim2_of_match[]; -+ - /* - * dim2_probe - dim2 probe handler - * @pdev: platform device structure -@@ -695,7 +707,7 @@ static void dma_free(struct mbo *mbo, u32 size) - */ - static int dim2_probe(struct platform_device *pdev) - { -- struct dim2_platform_data *pdata = pdev->dev.platform_data; -+ const struct dim2_platform_data *pdata; - struct dim2_hdm *dev; - struct resource *res; - int ret, i; -@@ -703,6 +715,8 @@ static int dim2_probe(struct platform_device *pdev) - u8 hal_ret; - int irq; - -+ enum { MLB_INT_IDX, AHB0_INT_IDX }; -+ - dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); - if (!dev) - return -ENOMEM; -@@ -710,29 +724,30 @@ static int dim2_probe(struct platform_device *pdev) - dev->atx_idx = -1; - - platform_set_drvdata(pdev, dev); -+ -+ dev->clk_speed = CLK_4096FS; -+ - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - dev->io_base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(dev->io_base)) - return PTR_ERR(dev->io_base); - -- if (!pdata) { -- dev_err(&pdev->dev, "missing platform data\n"); -- return -EINVAL; -- } -- -- ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0; -+ pdata = of_match_node(dim2_of_match, pdev->dev.of_node)->data; -+ ret = pdata && pdata->enable ? pdata->enable(pdev) : 0; - if (ret) - return ret; - -+ dev->disable_platform = pdata ? pdata->disable : 0; -+ - dev_info(&pdev->dev, "sync: num of frames per sub-buffer: %u\n", fcnt); -- hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt); -+ hal_ret = dim_startup(dev->io_base, dev->clk_speed, fcnt); - if (hal_ret != DIM_NO_ERROR) { - dev_err(&pdev->dev, "dim_startup failed: %d\n", hal_ret); - ret = -ENODEV; -- goto err_bsp_destroy; -+ goto err_disable_platform; - } - -- irq = platform_get_irq(pdev, 0); -+ irq = platform_get_irq(pdev, AHB0_INT_IDX); - if (irq < 0) { - dev_err(&pdev->dev, "failed to get ahb0_int irq: %d\n", irq); - ret = irq; -@@ -746,7 +761,7 @@ static int dim2_probe(struct platform_device *pdev) - goto err_shutdown_dim; - } - -- irq = platform_get_irq(pdev, 1); -+ irq = platform_get_irq(pdev, MLB_INT_IDX); - if (irq < 0) { - dev_err(&pdev->dev, "failed to get mlb_int irq: %d\n", irq); - ret = irq; -@@ -832,9 +847,9 @@ static int dim2_probe(struct platform_device *pdev) - kthread_stop(dev->netinfo_task); - err_shutdown_dim: - dim_shutdown(); --err_bsp_destroy: -- if (pdata && pdata->destroy) -- pdata->destroy(pdata); -+err_disable_platform: -+ if (dev->disable_platform) -+ dev->disable_platform(pdev); - - return ret; - } -@@ -848,7 +863,6 @@ static int dim2_probe(struct platform_device *pdev) - static int dim2_remove(struct platform_device *pdev) - { - struct dim2_hdm *dev = platform_get_drvdata(pdev); -- struct dim2_platform_data *pdata = pdev->dev.platform_data; - unsigned long flags; - - dim2_sysfs_destroy(&dev->bus); -@@ -859,37 +873,187 @@ static int dim2_remove(struct platform_device *pdev) - dim_shutdown(); - spin_unlock_irqrestore(&dim_lock, flags); - -- if (pdata && pdata->destroy) -- pdata->destroy(pdata); -+ if (dev->disable_platform) -+ dev->disable_platform(pdev); -+ -+ return 0; -+} -+ -+/* platform specific functions [[ */ -+ -+static int fsl_mx6_enable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ int ret; -+ -+ dev->clk = devm_clk_get(&pdev->dev, "mlb"); -+ if (IS_ERR_OR_NULL(dev->clk)) { -+ dev_err(&pdev->dev, "unable to get mlb clock\n"); -+ return -EFAULT; -+ } -+ -+ ret = clk_prepare_enable(dev->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed"); -+ return ret; -+ } -+ -+ if (dev->clk_speed >= CLK_2048FS) { -+ /* enable pll */ -+ dev->clk_pll = devm_clk_get(&pdev->dev, "pll8_mlb"); -+ if (IS_ERR_OR_NULL(dev->clk_pll)) { -+ dev_err(&pdev->dev, "unable to get mlb pll clock\n"); -+ clk_disable_unprepare(dev->clk); -+ return -EFAULT; -+ } -+ -+ writel(0x888, dev->io_base + 0x38); -+ clk_prepare_enable(dev->clk_pll); -+ } -+ -+ return 0; -+} -+ -+static void fsl_mx6_disable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ -+ if (dev->clk_speed >= CLK_2048FS) -+ clk_disable_unprepare(dev->clk_pll); -+ -+ clk_disable_unprepare(dev->clk); -+} -+ -+static int rcar_h2_enable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ int ret; -+ -+ dev->clk = devm_clk_get(&pdev->dev, NULL); -+ if (IS_ERR(dev->clk)) { -+ dev_err(&pdev->dev, "cannot get clock\n"); -+ return PTR_ERR(dev->clk); -+ } -+ -+ ret = clk_prepare_enable(dev->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed"); -+ return ret; -+ } -+ -+ if (dev->clk_speed >= CLK_2048FS) { -+ /* enable MLP pll and LVDS drivers */ -+ writel(0x03, dev->io_base + 0x600); -+ /* set bias */ -+ writel(0x888, dev->io_base + 0x38); -+ } else { -+ /* PLL */ -+ writel(0x04, dev->io_base + 0x600); -+ } -+ - -- /* -- * break link to local platform_device_id struct -- * to prevent crash by unload platform device module -- */ -- pdev->id_entry = NULL; -+ /* BBCR = 0b11 */ -+ writel(0x03, dev->io_base + 0x500); -+ writel(0x0002FF02, dev->io_base + 0x508); - - return 0; - } - --static const struct platform_device_id dim2_id[] = { -- { "medialb_dim2" }, -- { }, /* Terminating entry */ -+static void rcar_h2_disable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ -+ clk_disable_unprepare(dev->clk); -+ -+ /* disable PLLs and LVDS drivers */ -+ writel(0x0, dev->io_base + 0x600); -+} -+ -+static int rcar_m3_enable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ u32 enable_512fs = dev->clk_speed == CLK_512FS; -+ int ret; -+ -+ dev->clk = devm_clk_get(&pdev->dev, NULL); -+ if (IS_ERR(dev->clk)) { -+ dev_err(&pdev->dev, "cannot get clock\n"); -+ return PTR_ERR(dev->clk); -+ } -+ -+ ret = clk_prepare_enable(dev->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed"); -+ return ret; -+ } -+ -+ /* PLL */ -+ writel(0x04, dev->io_base + 0x600); -+ -+ writel(enable_512fs, dev->io_base + 0x604); -+ -+ /* BBCR = 0b11 */ -+ writel(0x03, dev->io_base + 0x500); -+ writel(0x0002FF02, dev->io_base + 0x508); -+ -+ return 0; -+} -+ -+static void rcar_m3_disable(struct platform_device *pdev) -+{ -+ struct dim2_hdm *dev = platform_get_drvdata(pdev); -+ -+ clk_disable_unprepare(dev->clk); -+ -+ /* disable PLLs and LVDS drivers */ -+ writel(0x0, dev->io_base + 0x600); -+} -+ -+/* ]] platform specific functions */ -+ -+enum dim2_platforms { FSL_MX6, RCAR_H2, RCAR_M3 }; -+ -+static struct dim2_platform_data plat_data[] = { -+ [FSL_MX6] = { .enable = fsl_mx6_enable, .disable = fsl_mx6_disable }, -+ [RCAR_H2] = { .enable = rcar_h2_enable, .disable = rcar_h2_disable }, -+ [RCAR_M3] = { .enable = rcar_m3_enable, .disable = rcar_m3_disable }, -+}; -+ -+static const struct of_device_id dim2_of_match[] = { -+ { -+ .compatible = "fsl,imx6q-mlb150", -+ .data = plat_data + FSL_MX6 -+ }, -+ { -+ .compatible = "renesas,mlp", -+ .data = plat_data + RCAR_H2 -+ }, -+ { -+ .compatible = "rcar,medialb-dim2", -+ .data = plat_data + RCAR_M3 -+ }, -+ { -+ .compatible = "xlnx,axi4-os62420_3pin-1.00.a", -+ }, -+ { -+ .compatible = "xlnx,axi4-os62420_6pin-1.00.a", -+ }, -+ {}, - }; - --MODULE_DEVICE_TABLE(platform, dim2_id); -+MODULE_DEVICE_TABLE(of, dim2_of_match); - - static struct platform_driver dim2_driver = { - .probe = dim2_probe, - .remove = dim2_remove, -- .id_table = dim2_id, - .driver = { - .name = "hdm_dim2", -+ .of_match_table = dim2_of_match, - }, - }; - - module_platform_driver(dim2_driver); - --MODULE_AUTHOR("Jain Roy Ambi "); - MODULE_AUTHOR("Andrey Shvetsov "); - MODULE_DESCRIPTION("MediaLB DIM2 Hardware Dependent Module"); - MODULE_LICENSE("GPL"); -libgit2 0.26.0 diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch b/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch deleted file mode 100644 index 1b01fb156..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 839ad403a2d8081a6c15f6fc2836b01919338f3c Mon Sep 17 00:00:00 2001 -From: Andrey Shvetsov -Date: Mon, 12 Feb 2018 12:24:37 +0100 -Subject: [PATCH] staging: most: dim2: read clock speed from the device tree - -This implements reading of the clock speed parameter from the device -tree. - -Signed-off-by: Andrey Shvetsov ---- - Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - hdm-dim2/dim2_hdm.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 113 insertions(+), 1 deletion(-) - create mode 100644 Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt - -diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c -index 2dba917..05e1896 100644 ---- a/hdm-dim2/dim2_hdm.c -+++ b/hdm-dim2/dim2_hdm.c -@@ -698,6 +698,42 @@ static void dma_free(struct mbo *mbo, u32 size) - - static const struct of_device_id dim2_of_match[]; - -+static struct { -+ const char *clock_speed; -+ u8 clk_speed; -+} clk_mt[] = { -+ { "256fs", CLK_256FS }, -+ { "512fs", CLK_512FS }, -+ { "1024fs", CLK_1024FS }, -+ { "2048fs", CLK_2048FS }, -+ { "3072fs", CLK_3072FS }, -+ { "4096fs", CLK_4096FS }, -+ { "6144fs", CLK_6144FS }, -+ { "8192fs", CLK_8192FS }, -+}; -+ -+/** -+ * get_dim2_clk_speed - converts string to DIM2 clock speed value -+ * -+ * @clock_speed: string in the format "{NUMBER}fs" -+ * @val: pointer to get one of the CLK_{NUMBER}FS values -+ * -+ * By success stores one of the CLK_{NUMBER}FS in the *val and returns 0, -+ * otherwise returns -EINVAL. -+ */ -+static int get_dim2_clk_speed(const char *clock_speed, u8 *val) -+{ -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(clk_mt); i++) { -+ if (!strcmp(clock_speed, clk_mt[i].clock_speed)) { -+ *val = clk_mt[i].clk_speed; -+ return 0; -+ } -+ } -+ return -EINVAL; -+} -+ - /* - * dim2_probe - dim2 probe handler - * @pdev: platform device structure -@@ -708,6 +744,7 @@ static const struct of_device_id dim2_of_match[]; - static int dim2_probe(struct platform_device *pdev) - { - const struct dim2_platform_data *pdata; -+ const char *clock_speed; - struct dim2_hdm *dev; - struct resource *res; - int ret, i; -@@ -725,7 +762,18 @@ static int dim2_probe(struct platform_device *pdev) - - platform_set_drvdata(pdev, dev); - -- dev->clk_speed = CLK_4096FS; -+ ret = of_property_read_string(pdev->dev.of_node, -+ "microchip,clock-speed", &clock_speed); -+ if (ret) { -+ dev_err(&pdev->dev, "missing dt property clock-speed\n"); -+ return ret; -+ } -+ -+ ret = get_dim2_clk_speed(clock_speed, &dev->clk_speed); -+ if (ret) { -+ dev_err(&pdev->dev, "bad dt property clock-speed\n"); -+ return ret; -+ } - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - dev->io_base = devm_ioremap_resource(&pdev->dev, res); --- -libgit2 0.26.0 diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch b/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch deleted file mode 100644 index 08cd6f99d..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 756f2f1f90524c2620ed7951e436d13bdb929a6b Mon Sep 17 00:00:00 2001 -From: Andrey Shvetsov -Date: Mon, 12 Feb 2018 12:25:37 +0100 -Subject: [PATCH] staging: most: dim2: use device for coherent memory allocation - -On several modern architectures the allocation of coherent memory needs -a device that has the dma_ops properly set. This patch enables use of -the DIM2 platform device for the allocation process. - -Signed-off-by: Andrey Shvetsov ---- - hdm-dim2/dim2_hdm.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c -index 05e1896..1847091 100644 ---- a/hdm-dim2/dim2_hdm.c -+++ b/hdm-dim2/dim2_hdm.c -@@ -688,12 +688,16 @@ static int poison_channel(struct most_interface *most_iface, int ch_idx) - - static void *dma_alloc(struct mbo *mbo, u32 size) - { -- return dma_alloc_coherent(NULL, size, &mbo->bus_address, GFP_KERNEL); -+ struct device *dev = mbo->ifp->dev; -+ -+ return dma_alloc_coherent(dev, size, &mbo->bus_address, GFP_KERNEL); - } - - static void dma_free(struct mbo *mbo, u32 size) - { -- dma_free_coherent(NULL, size, mbo->virt_address, mbo->bus_address); -+ struct device *dev = mbo->ifp->dev; -+ -+ dma_free_coherent(dev, size, mbo->virt_address, mbo->bus_address); - } - - static const struct of_device_id dim2_of_match[]; -@@ -875,6 +879,7 @@ static int dim2_probe(struct platform_device *pdev) - dev->most_iface.poison_channel = poison_channel; - dev->most_iface.request_netinfo = request_netinfo; - dev->most_iface.extra_attrs = DBR_ATTRS; -+ dev->most_iface.dev = &pdev->dev; - - kobj = most_register_interface(&dev->most_iface); - if (IS_ERR(kobj)) { --- -libgit2 0.26.0 diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch b/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch deleted file mode 100644 index ff21b2130..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 8eaec876f732c7e4b238ada5f9304c6da2380eb1 Mon Sep 17 00:00:00 2001 -From: Andrey Shvetsov -Date: Fri, 8 Feb 2019 22:44:32 +0000 -Subject: [PATCH] backport: usb: setup_timer - ---- - driver/hdm-usb/hdm_usb.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/hdm-usb/hdm_usb.c b/hdm-usb/hdm_usb.c -index 5b0af88..9896835 100644 ---- a/hdm-usb/hdm_usb.c -+++ b/hdm-usb/hdm_usb.c -@@ -760,9 +760,9 @@ static void hdm_request_netinfo(struct most_interface *iface, int channel, - * The handler runs in interrupt context. That's why we need to defer the - * tasks to a work queue. - */ --static void link_stat_timer_handler(unsigned long data) -+static void link_stat_timer_handler(struct timer_list *t) - { -- struct most_dev *mdev = (struct most_dev *)data; -+ struct most_dev *mdev = from_timer(mdev, t, link_stat_timer); - - schedule_work(&mdev->poll_work_obj); - mdev->link_stat_timer.expires = jiffies + (2 * HZ); -@@ -1154,8 +1154,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id) - num_endpoints = usb_iface_desc->desc.bNumEndpoints; - mutex_init(&mdev->io_mutex); - INIT_WORK(&mdev->poll_work_obj, wq_netinfo); -- setup_timer(&mdev->link_stat_timer, link_stat_timer_handler, -- (unsigned long)mdev); -+ timer_setup(&mdev->link_stat_timer, link_stat_timer_handler, 0); - - mdev->usb_device = usb_dev; - mdev->link_stat_timer.expires = jiffies + (2 * HZ); diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch b/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch deleted file mode 100644 index d4383c4f6..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch +++ /dev/null @@ -1,30 +0,0 @@ -Handle snd_pcm_lib_mmap_vmalloc removal in 4.19 - -Add .mmap field back to pcm_ops for kernels older than 4.19. - -Upstream-Status: Inappropriate - -Signed-off-by: Scott Murray - -diff --git a/aim-sound/sound.c b/aim-sound/sound.c -index 4b3329b..c0a26be 100644 ---- a/aim-sound/sound.c -+++ b/aim-sound/sound.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -463,6 +464,9 @@ static const struct snd_pcm_ops pcm_ops = { - .trigger = pcm_trigger, - .pointer = pcm_pointer, - .page = snd_pcm_lib_get_vmalloc_page, -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0) -+ .mmap = snd_pcm_lib_mmap_vmalloc, -+#endif - }; - - static int split_arg_list(char *buf, char **card_name, u16 *ch_num, diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch b/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch deleted file mode 100644 index 02eca27d2..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 877d7475413bb787deb07aa83bafac03efa399fa Mon Sep 17 00:00:00 2001 -From: Paul Barker -Date: Mon, 24 Feb 2020 14:58:52 +0000 -Subject: [PATCH] Fix build with 5.4 kernel - -Signed-off-by: Paul Barker ---- - driver/Makefile | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 281241d..609e692 100644 ---- a/Makefile -+++ b/Makefile -@@ -5,6 +5,7 @@ SRC := $(shell pwd) - obj-m := mostcore.o - mostcore-y := mostcore/core.o - CFLAGS_core.o := -I$(src)/include/ -+CFLAGS_mostcore/core.o := -I$(src)/include/ - - obj-m += default_conf.o - CFLAGL_default_conf.o := -I$(src)/include -@@ -12,33 +13,41 @@ CFLAGL_default_conf.o := -I$(src)/include - obj-m += aim_cdev.o - aim_cdev-y := aim-cdev/cdev.o - CFLAGS_cdev.o := -I$(src)/include/ -+CFLAGS_aim-cdev/cdev.o := -I$(src)/include/ - - obj-m += aim_network.o - aim_network-y := aim-network/networking.o - CFLAGS_networking.o := -I$(src)/include/ -+CFLAGS_aim-network/networking.o := -I$(src)/include/ - - obj-m += aim_sound.o - aim_sound-y := aim-sound/sound.o - CFLAGS_sound.o := -I$(src)/include/ -+CFLAGS_aim-sound/sound.o := -I$(src)/include/ - - obj-m += aim_v4l2.o - aim_v4l2-y := aim-v4l2/video.o - CFLAGS_video.o := -Idrivers/media/video -I$(src)/include/ -+CFLAGS_aim-v4l2/video.o := -Idrivers/media/video -I$(src)/include/ - - obj-m += hdm_i2c.o - hdm_i2c-y := hdm-i2c/hdm_i2c.o - CFLAGS_hdm_i2c.o := -I$(src)/include/ -+CFLAGS_hdm-i2c/hdm_i2c.o := -I$(src)/include/ - - ifdef CONFIG_OF - obj-m += hdm_dim2.o - hdm_dim2-y := hdm-dim2/dim2_hdm.o hdm-dim2/dim2_hal.o hdm-dim2/dim2_sysfs.o - CFLAGS_dim2_hdm.o := -I$(src)/include/ -+CFLAGS_hdm-dim2/dim2_hdm.o := -I$(src)/include/ -+CFLAGS_hdm-dim2/dim2_hal.o := -I$(src)/include/ -+CFLAGS_hdm-dim2/dim2_sysfs.o := -I$(src)/include/ - endif - - obj-m += hdm_usb.o - hdm_usb-y := hdm-usb/hdm_usb.o - CFLAGS_hdm_usb.o := -I$(src)/include/ -- -+CFLAGS_hdm-usb/hdm_usb.o := -I$(src)/include/ - - all: - $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules --- -2.20.1 - diff --git a/meta-agl-profile-core/recipes-kernel/most/most.bb b/meta-agl-profile-core/recipes-kernel/most/most.bb deleted file mode 100644 index 48959a6ee..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/most.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Build MOST driver" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" - -inherit module - -PV = "0.1" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/most;protocol=https;branch=${AGL_BRANCH}" - -S = "${WORKDIR}/git/driver" -SRCREV = "e4dbbaf9e7652efaed0df3e0aab4464f5f228573" - -KERNEL_MODULE_AUTOLOAD += "aim_cdev aim_sound aim_network aim_v4l2 hdm_i2c hdm_dim2 hdm_usb mostcore" diff --git a/meta-agl-profile-core/recipes-kernel/most/most.bbappend b/meta-agl-profile-core/recipes-kernel/most/most.bbappend deleted file mode 100644 index ad422eb57..000000000 --- a/meta-agl-profile-core/recipes-kernel/most/most.bbappend +++ /dev/null @@ -1,15 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI_append = " \ - file://0002-src-most-add-auto-conf-feature.patch \ - file://0003-core-remove-kernel-log-for-MBO-status.patch \ - file://0004-most-video-set-device_caps.patch \ - file://0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch \ - file://0006-dim2-fix-startup-sequence.patch \ - file://0007-dim2-use-device-tree.patch \ - file://0008-dim2-read-clock-speed-from-the-device-tree.patch \ - file://0009-dim2-use-device-for-coherent-memory-allocation.patch \ - file://0010-backport-usb-setup-timer.patch \ - file://0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch \ - file://0012-Fix-build-with-5.4-kernel.patch \ -" diff --git a/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch b/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch deleted file mode 100644 index 51896e8db..000000000 --- a/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 530a31e3eb24b2f1ed7b30859ed62a2d1b24bd91 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20M=C3=BCller?= -Date: Tue, 7 Feb 2017 11:51:58 +0100 -Subject: [PATCH] add a configure option to disable build of man-pages -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream-Status: Pending - -Signed-off-by: Andreas Müller ---- - configure.ac | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 8316c67..099fc0c 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -67,6 +67,8 @@ AC_ARG_ENABLE([largefile], - [AS_HELP_STRING([--disable-largefile],[disable LFS (large file support)])]) - AC_ARG_ENABLE([util], - [AS_HELP_STRING([--disable-util],[disable build of command-line utilities])]) -+AC_ARG_ENABLE([man], -+ [AS_HELP_STRING([--disable-man],[disable build of man-pages])]) - AC_ARG_ENABLE([bi], - [AS_HELP_STRING([--enable-bi=ARCH],[enable -mARCH for bi-arch compilation])]) - AC_ARG_ENABLE([ub], -@@ -395,7 +397,7 @@ AM_CONDITIONAL([ADD_PLATFORM_POSIX],[test "$X_PLATFORM" = "posix"]) - AM_CONDITIONAL([ADD_PLATFORM_WIN32],[test "$X_PLATFORM" = "win32"]) - - AM_CONDITIONAL([ADD_UTIL],[test "$enable_util" != "no"]) --AM_CONDITIONAL([ADD_MANS],[test "$X_PLATFORM" != "win32"]) -+AM_CONDITIONAL([ADD_MANS],[test "$enable_man" != "no"]) - - ############################################################################### - # declare common substitutions --- -2.9.3 - diff --git a/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb b/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb deleted file mode 100644 index dd1b34747..000000000 --- a/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "The MP4v2 library provides an API to create and modify mp4 files" -HOMEPAGE = "https://github.com/sergiomb2/libmp4v2/wiki" -LICENSE = "MPLv1.1" -LIC_FILES_CHKSUM = "file://COPYING;md5=eb3014b036b6d2151d944aef6a84c36f" - -inherit autotools-brokensep pkgconfig - -SRC_URI = " \ - git://github.com/sergiomb2/${BPN}.git \ - file://0001-add-a-configure-option-to-disable-build-of-man-pages.patch \ -" -SRCREV = "855e9674232808ff3be7191b697dfb56917db21f" -S = "${WORKDIR}/git" -PV = "2.1.0+git${SRCPV}" - - -SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}" -EXTRA_OECONF = "--disable-man" diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl deleted file mode 100644 index e69de29bb..000000000 diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch deleted file mode 100644 index 15d4b3f0e..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 5bc5b8c5dad3edec6736fd7e7ce61250c4ce3725 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Wed, 12 Jul 2017 17:13:19 -0700 -Subject: [PATCH] Define comparison_fn_t for non-glibc systems - -lightmediascanner.c:324:12: error: 'comparison_fn_t' undeclared (first use in this function) - (comparison_fn_t)_plugin_sort); - ^~~~~~~~~~~~~~~ - -Signed-off-by: Khem Raj ---- - src/lib/lightmediascanner.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/lib/lightmediascanner.c b/src/lib/lightmediascanner.c -index 344b247..b866883 100644 ---- a/src/lib/lightmediascanner.c -+++ b/src/lib/lightmediascanner.c -@@ -37,6 +37,11 @@ - #define DEFAULT_SLAVE_TIMEOUT 1000 - #define DEFAULT_COMMIT_INTERVAL 100 - -+#if !defined(__GLIBC__) -+typedef int (*__compar_fn_t) (const void*, const void*); -+typedef __compar_fn_t comparison_fn_t; -+#endif -+ - #ifdef HAVE_MAGIC_H - static magic_t _magic_handle; - --- -2.13.2 - diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch deleted file mode 100644 index 5abb980b8..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 5a618b444e424483c3a9d34dd9b196796cac8e3f Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Mon, 22 Jul 2019 13:29:52 -0700 -Subject: [PATCH] switch from G_BUS_TYPE_SESSION to G_BUS_TYPE_SYSTEM - -Signed-off-by: Matt Ranostay ---- - src/bin/lightmediascannerctl.c | 4 ++-- - src/bin/lightmediascannerd.c | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/bin/lightmediascannerctl.c b/src/bin/lightmediascannerctl.c -index 5764bc0..1d4d844 100644 ---- a/src/bin/lightmediascannerctl.c -+++ b/src/bin/lightmediascannerctl.c -@@ -11,7 +11,7 @@ start_service_by_name(void) - GVariant *var; - GDBusConnection *conn; - -- conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); -+ conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (error) { - fprintf(stderr, "Could not get session bus connection: %s\n", - error->message); -@@ -526,7 +526,7 @@ main(int argc, char *argv[]) - - app.timer = NULL; - app.loop = g_main_loop_new(NULL, FALSE); -- app.proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION, -+ app.proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.lightmediascanner", -diff --git a/src/bin/lightmediascannerd.c b/src/bin/lightmediascannerd.c -index 319db42..6db81cc 100644 ---- a/src/bin/lightmediascannerd.c -+++ b/src/bin/lightmediascannerd.c -@@ -1721,7 +1721,7 @@ main(int argc, char *argv[]) - introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL); - g_assert(introspection_xml != NULL); - -- id = g_bus_own_name(G_BUS_TYPE_SESSION, "org.lightmediascanner", -+ id = g_bus_own_name(G_BUS_TYPE_SYSTEM, "org.lightmediascanner", - G_BUS_NAME_OWNER_FLAGS_NONE, - NULL, on_name_acquired, NULL, NULL, NULL); - --- -2.20.1 - diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf deleted file mode 100644 index 8a9e35b09..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch deleted file mode 100644 index 9528bec79..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/plugins/Makefile.am 2015-10-25 16:12:29.331415823 +0000 -+++ b/src/plugins/Makefile.am 2015-10-25 16:14:37.593415808 +0000 -@@ -93,7 +93,7 @@ - id3_id3_la_SOURCES = id3/id3.c id3/id3v1_genres.c - id3_id3_la_LIBADD = $(PLUGINS_LIBADD) - --id3/id3v1_genres.c: $(srcdir)/id3/id3v1_genres.def $(srcdir)/id3/id3v1_genres_gen.awk -+$(srcdir)/id3/id3v1_genres.c: $(srcdir)/id3/id3v1_genres.def $(srcdir)/id3/id3v1_genres_gen.awk - $(AWK) -f $(srcdir)/id3/id3v1_genres_gen.awk $(srcdir)/id3/id3v1_genres.def > $@ - - EXTRA_DIST += id3/id3v1_genres.def id3/id3v1_genres_gen.awk diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service deleted file mode 100644 index 63b48ebf9..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=Lightmediascanner (LMS) -After=run-agl-postinsts.service systemd-remount-fs.service systemd-tmpfiles-setup.service tmp.mount -ConditionPathIsReadWrite=/var/volatile/tmp - -[Service] -Type=dbus -Restart=on-failure -RestartSec=0 -BusName=org.lightmediascanner -SmackProcessLabel=User::App::agl-service-mediascanner -ExecStart=/usr/bin/lightmediascannerd --startup-scan --db-path=/var/volatile/tmp/lightmediascannerd.db --directory=/media - -[Install] -WantedBy=multi-user.target -Alias=dbus-org.lightmediascanner.service diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch deleted file mode 100644 index 6a0b8ff93..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 3e66b97221440b17a184feb48692dce7e0561cac Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Wed, 8 Mar 2017 16:30:01 -0800 -Subject: [PATCH] plugin: ogg: fix chucksize issue - -There are some OGG files that have metadata chucks that go over the -hardcoded 10 * 4096 size due to album art. This patchset just parses -each chuck and continues till it runs out of valid chunks. - -Signed-off-by: Matt Ranostay ---- - src/plugins/ogg/ogg.c | 11 ++--------- - 1 file changed, 2 insertions(+), 9 deletions(-) - -diff --git a/src/plugins/ogg/ogg.c b/src/plugins/ogg/ogg.c -index 1c0818e..c94dc38 100644 ---- a/src/plugins/ogg/ogg.c -+++ b/src/plugins/ogg/ogg.c -@@ -47,8 +47,6 @@ - int CHUNKSIZE = 4096; - #endif - --#define MAX_CHUNKS_PER_PAGE 10 -- - struct stream { - struct lms_stream base; - int serial; -@@ -122,10 +120,8 @@ _set_lms_info(struct lms_string_size *info, const char *tag) - - static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page) - { -- int i; -- -- for (i = 0; i < MAX_CHUNKS_PER_PAGE && ogg_sync_pageout(osync, page) != 1; -- i++) { -+ while(ogg_sync_pageout(osync, page) != 1) -+ { - lms_ogg_buffer_t buffer = lms_get_ogg_sync_buffer(osync, CHUNKSIZE); - int bytes = fread(buffer, 1, CHUNKSIZE, fp); - -@@ -136,9 +132,6 @@ static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page) - ogg_sync_wrote(osync, bytes); - } - -- if (i > MAX_CHUNKS_PER_PAGE) -- return false; -- - return true; - } - --- -2.7.4 - diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend deleted file mode 100644 index b47b2796c..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend +++ /dev/null @@ -1,42 +0,0 @@ -# Disable everything but the roygalty-free formats -PACKAGECONFIG = "ogg flac wave m3u pls jpeg png" - -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI += "file://lightmediascanner.service \ - file://plugin-ogg-fix-chucksize-issue.patch \ - file://0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch \ - file://dbus-lightmediascanner.conf \ - " - -CFLAGS_append = " -D_FILE_OFFSET_BITS=64" - -inherit systemd - -SYSTEMD_PACKAGES = "${PN}" -SYSTEMD_SERVICE_${PN} = "lightmediascanner.service" -SYSTEMD_AUTO_ENABLE_${PN} = "enable" - -do_install_append() { - # Install LMS systemd service - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - install -d ${D}${systemd_system_unitdir} - install -m 644 -p -D ${WORKDIR}/lightmediascanner.service ${D}${systemd_system_unitdir}/lightmediascanner.service - fi - - install -d ${D}/etc/dbus-1/system.d - install -m 0644 ${WORKDIR}/dbus-lightmediascanner.conf ${D}/etc/dbus-1/system.d/org.lightmediascanner.conf -} - -FILES_${PN} += " \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/lightmediascanner.service', '', d)} \ - " - -EXTRA_OECONF = "--enable-static --with-dbus-services=${datadir}/dbus-1/system-services" -PACKAGECONFIG[mp4] = "--enable-mp4,--disable-mp4,libmp4v2" - -# add support MP3 because of the format of music files for AGL CES/ALS2017 Demo -PACKAGECONFIG_append = " id3 mp4" - -# add required character sets for id3 tag scanning -RDEPENDS_${PN}_append = " glibc-gconv-utf-16 glibc-gconv-iso8859-1" diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb deleted file mode 100644 index f2158760f..000000000 --- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb +++ /dev/null @@ -1,63 +0,0 @@ -SUMMARY = "Lightweight media scanner" -DESCRIPTION = "Lightweight media scanner meant to be used in not-so-powerful devices, like embedded systems or old machines." -SECTION = "libs/multimedia" - -LICENSE = "LGPLv2.1+" -LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ - file://src/lib/lightmediascanner.c;endline=21;md5=6d8889bccb4c6c27e8b786342a3eb267" - -DEPENDS = "file gawk glib-2.0 sqlite3" - -PV = "0.5.1+git${SRCPV}" -SRCREV = "adfddb3486276a5ed2f5008c9e43a811e1271cc9" -SRC_URI = "git://github.com/profusion/lightmediascanner.git \ - file://id3-plugin-support-out-of-tree-build.patch \ - file://0001-Define-comparison_fn_t-for-non-glibc-systems.patch \ - " - -S = "${WORKDIR}/git" - -inherit autotools pkgconfig - -EXTRA_OECONF = "--enable-static --disable-mp4" - -PACKAGECONFIG ??= "ogg flac wave id3 m3u pls asf rm jpeg png" -PACKAGECONFIG[generic] = "--enable-generic,--disable-generic,libav" -PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg libvorbis libtheora" -PACKAGECONFIG[flac] = "--enable-flac,--disable-flac,flac" -PACKAGECONFIG[wave] = "--enable-wave,--disable-wave" -PACKAGECONFIG[id3] = "--enable-id3,--disable-id3" -PACKAGECONFIG[m3u] = "--enable-m3u,--disable-m3u" -PACKAGECONFIG[pls] = "--enable-pls,--disable-pls" -PACKAGECONFIG[asf] = "--enable-asf,--disable-asf" -PACKAGECONFIG[rm] = "--enable-rm,--disable-rm" -PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg" -PACKAGECONFIG[png] = "--enable-png,--disable-png" - -do_install_append() { - # Install "test" binary for corresponding package - install -d ${D}/${bindir} - install -m 755 ${B}/src/bin/.libs/test ${D}/${bindir}/test-lms - # Remove .la files for loadable modules - rm -f ${D}/${libdir}/${PN}/plugins/*.la -} - -FILES_${PN} += "${datadir}/dbus-1" -FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug" - -PACKAGES_prepend = "${PN}-test " -FILES_${PN}-test_prepend = "${bindir}/test-lms " - -PACKAGES += "${PN}-meta" -ALLOW_EMPTY_${PN}-meta = "1" - -PACKAGES_DYNAMIC = "${PN}-plugin-*" - -python populate_packages_prepend () { - lms_libdir = d.expand('${libdir}/${PN}') - pkgs = [] - - pkgs += do_split_packages(d, oe.path.join(lms_libdir, "plugins"), '^(.*)\.so$', d.expand('${PN}-plugin-%s'), 'LightMediaScanner plugin for %s', prepend=True, extra_depends=d.expand('${PN}')) - metapkg = d.getVar('PN') + '-meta' - d.setVar('RDEPENDS_' + metapkg, ' '.join(pkgs)) -} diff --git a/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf b/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf deleted file mode 100644 index a7486d055..000000000 --- a/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend b/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend deleted file mode 100644 index 40a3b46a0..000000000 --- a/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend +++ /dev/null @@ -1,11 +0,0 @@ -inherit gobject-introspection - -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" -SRC_URI_append = "file://org.freedesktop.GeoClue2.Client.conf" - -PACKAGECONFIG = "nmea lib" - -do_install_append() { - install -d ${D}/etc/dbus-1/system.d - install -m 0644 ${WORKDIR}/org.freedesktop.GeoClue2.Client.conf ${D}/etc/dbus-1/system.d/org.freedesktop.GeoClue2.Client.conf -} diff --git a/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend b/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend deleted file mode 100644 index da434e08e..000000000 --- a/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend +++ /dev/null @@ -1,16 +0,0 @@ -SYSTEMD_SERVICE_${PN} += " gpsdctl@.service" - -RPROVIDES_${PN}-conf += "virtual/gpsd-conf" - -do_install_append() { - # use the systemd compatible gpsd.rules - install -d ${D}/${sysconfdir}/udev/rules.d - install -m 0644 ${S}/gpsd.rules ${D}/${sysconfdir}/udev/rules.d/60-gpsd.rules - - #support for systemd - install -d ${D}${systemd_unitdir}/system/ - install -m 0644 ${S}/systemd/gpsdctl@.service ${D}${systemd_unitdir}/system - - #autoprobe usb gps devices - echo 'USBAUTO="true"' >> ${D}${sysconfdir}/default/gpsd.default -} diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb deleted file mode 100644 index 84cdbcf31..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "An AGL small image just capable of allowing a device to boot." - -require agl-image-boot.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - packagegroup-agl-image-boot \ - " diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc deleted file mode 100644 index 825393978..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc +++ /dev/null @@ -1,10 +0,0 @@ -IMAGE_LINGUAS = " " - -inherit core-image - -IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}" - -IMAGE_ROOTFS_SIZE ?= "8192" - -# Allow extra IMAGE_FSTYPES to be added by boards configs -IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}" diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb deleted file mode 100644 index 8c5aae1bf..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Cross SDK of Full AGL Distribution for core profile" - -DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \ -It includes the full meta-toolchain, plus developement headers and libraries \ -to form a standalone cross SDK." - -require agl-image-minimal.bb - -LICENSE = "MIT" - -require agl-image-minimal-crosssdk.inc - -inherit populate_sdk - -# Task do_populate_sdk and do_rootfs can't be exec simultaneously. -# Both exec "createrepo" on the same directory, and so one of them -# can failed (randomly). -addtask do_populate_sdk after do_rootfs diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc deleted file mode 100644 index 71812943c..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc +++ /dev/null @@ -1,18 +0,0 @@ -IMAGE_FEATURES_append = " dev-pkgs" -IMAGE_INSTALL_append = " kernel-dev kernel-devsrc" - -# Always include the test widgets -IMAGE_FEATURES_append = " agl-test-wgt" - -# Required dependencies for app and test builds -TOOLCHAIN_HOST_TASK += " \ - nativesdk-lua \ - " - -# Required dependencies for app and test builds -TOOLCHAIN_TARGET_TASK += " \ - lua-dev \ - lua-staticdev \ - libafb-helpers-staticdev \ - libappcontroller-staticdev \ - " diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb deleted file mode 100644 index b162f2904..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb +++ /dev/null @@ -1,12 +0,0 @@ -SUMMARY = "An AGL small image just capable of allowing a device to boot and run tests." - -DESCRIPTION = "A minimal set of AGL Distribution. This image also has additional \ -packages (e.g. commandline tools) for Quality Assurance(QA)." - -require agl-image-minimal.bb - -LICENSE = "MIT" - -IMAGE_INSTALL_append = " \ - packagegroup-ivi-common-test \ - " diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb deleted file mode 100644 index 1fd213d0f..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "An AGL small image just capable of allowing a device to boot." - -require agl-image-minimal.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - packagegroup-agl-image-minimal \ - " diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc deleted file mode 100644 index 825393978..000000000 --- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc +++ /dev/null @@ -1,10 +0,0 @@ -IMAGE_LINGUAS = " " - -inherit core-image - -IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}" - -IMAGE_ROOTFS_SIZE ?= "8192" - -# Allow extra IMAGE_FSTYPES to be added by boards configs -IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}" diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb deleted file mode 100644 index 1633feddc..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (C) 2007 OpenedHand Ltd. -# -# derived from oe-core: meta/recipes-core/packagegroups/packagegroup-core-boot.bb - -SUMMARY = "Minimal boot requirements" -DESCRIPTION = "The minimal set of packages required to boot the system" -LICENSE = "MIT" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -inherit packagegroup - -# -# Set by the machine configuration with packages essential for device bootup -# -MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "" -MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= "" - -# Distro can override the following VIRTUAL-RUNTIME providers: -VIRTUAL-RUNTIME_dev_manager ?= "udev" -VIRTUAL-RUNTIME_login_manager ?= "busybox" -VIRTUAL-RUNTIME_init_manager ?= "sysvinit" -VIRTUAL-RUNTIME_initscripts ?= "initscripts" -VIRTUAL-RUNTIME_keymaps ?= "keymaps" - -SYSVINIT_SCRIPTS = "${@bb.utils.contains('MACHINE_FEATURES', 'rtc', 'busybox-hwclock', '', d)} \ - modutils-initscripts \ - init-ifupdown \ - ${VIRTUAL-RUNTIME_initscripts} \ - " - -RDEPENDS_${PN} = "\ - base-files \ - base-passwd \ - busybox \ - rng-tools \ - run-agl-postinsts \ - ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "${SYSVINIT_SCRIPTS}", "", d)} \ - ${@bb.utils.contains("MACHINE_FEATURES", "keyboard", "${VIRTUAL-RUNTIME_keymaps}", "", d)} \ - netbase \ - ${VIRTUAL-RUNTIME_login_manager} \ - ${VIRTUAL-RUNTIME_init_manager} \ - ${VIRTUAL-RUNTIME_dev_manager} \ - ${VIRTUAL-RUNTIME_update-alternatives} \ - ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}" - -RRECOMMENDS_${PN} = "\ - tzdata \ - ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}" - diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb deleted file mode 100644 index e209c59ca..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb +++ /dev/null @@ -1,19 +0,0 @@ -DESCRIPTION = "The minimal set of packages for Connectivity Subsystem" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-core-connectivity \ - " - -ALLOW_EMPTY_${PN} = "1" - -PKGGROUP_ZEROCONF = "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'packagegroup-base-zeroconf', '', d)}" - -RDEPENDS_${PN} += "\ - dhcp-server \ - ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client connman-tests \ - connman-tools connman-ncurses connman-plugin-session-policy-local','',d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${PKGGROUP_ZEROCONF}', '', d)} \ - " diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb deleted file mode 100644 index aef732838..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb +++ /dev/null @@ -1,14 +0,0 @@ -SUMMARY = "The packages of middlewares for AGL IVI profile" -DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-core-os-commonlibs \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - " diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb deleted file mode 100644 index 0ae5c77a3..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb +++ /dev/null @@ -1,14 +0,0 @@ -SUMMARY = "The packages of middlewares for AGL IVI profile" -DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-core-security \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - " diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb deleted file mode 100644 index 2fd31d148..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "The minimal set of packages for AGL core Connectivity Subsystem" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-core-services \ - " - -RDEPENDS_${PN} += "\ - agl-service-data-persistence \ - agl-service-network \ - agl-service-platform-info \ - " diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb deleted file mode 100644 index afa04e7a1..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb +++ /dev/null @@ -1,18 +0,0 @@ -DESCRIPTION = "The minimal set of packages required by AGL" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-image-boot \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-core-boot \ - packagegroup-machine-base \ - " - -RDEPENDS_${PN} += "\ - " diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb deleted file mode 100644 index 284c961b1..000000000 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb +++ /dev/null @@ -1,26 +0,0 @@ -DESCRIPTION = "The minimal set of packages required by AGL" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-image-minimal \ - profile-agl-minimal \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-core-boot \ - packagegroup-machine-base \ - " - - -RDEPENDS_${PN} += "\ - packagegroup-agl-core-connectivity \ - packagegroup-agl-core-os-commonlibs \ - packagegroup-agl-core-services \ - packagegroup-agl-core-security \ - " - -RDEPENDS_profile-agl-minimal = "${PN}" diff --git a/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend b/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend deleted file mode 100644 index fc24cea15..000000000 --- a/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -# Cannot just append to PACKAGECONFIG, as nghttp2's dependencies do not build -# for native/nativesdk, and appending class-target does not work because of -# the weak definition of PACKAGECONFIG in the recipe, so need to copy the -# definition to add nghttp2... -PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls libidn proxy threaded-resolver verbose zlib nghttp2" diff --git a/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend b/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend deleted file mode 100644 index 06651fc11..000000000 --- a/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -EXTRA_OECONF_append_class-native = " --disable-tls-check" diff --git a/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend b/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend deleted file mode 100644 index 8656abf09..000000000 --- a/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend +++ /dev/null @@ -1 +0,0 @@ -PACKAGECONFIG ?= "jpeg png v4l libv4l gstreamer" diff --git a/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules b/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules deleted file mode 100644 index 996e43439..000000000 --- a/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules +++ /dev/null @@ -1,5 +0,0 @@ -# UDISKS_FILESYSTEM_SHARED -# ==1: mount filesystem to a shared directory (/media/VolumeName) -# ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) -# See udisks(8) -ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1" diff --git a/meta-agl-profile-core/recipes-support/udisks/files/automount.service b/meta-agl-profile-core/recipes-support/udisks/files/automount.service deleted file mode 100644 index b16515196..000000000 --- a/meta-agl-profile-core/recipes-support/udisks/files/automount.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Automount Disk Manager -After=udisks2.service - -[Service] -ExecStart=/usr/libexec/automount.sh - -[Install] -WantedBy=multi-user.target diff --git a/meta-agl-profile-core/recipes-support/udisks/files/automount.sh b/meta-agl-profile-core/recipes-support/udisks/files/automount.sh deleted file mode 100644 index 236791910..000000000 --- a/meta-agl-profile-core/recipes-support/udisks/files/automount.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh - -MOUNT_OPTIONS_DEFAULT="ro,noexec" -MOUNT_OPTIONS_VFAT="umask=0022" -MOUNT_OPTIONS_EXT="" -MOUNT_OPTIONS_NTFS="" -MOUNT_OPTIONS_ISO9660="" - -VERBOSE=false - -# Source a configuration file that can override mount options if exists -[ -f /etc/automount.conf ] && . /etc/automount.conf - -mount_device() { - MOUNT_OPTIONS="" - FSTYPE="$( udevadm info "${1}" "${2}" | awk -v FS== '/ID_FS_TYPE/ {print $2}' )" - DEVNAME="$( udevadm info "${1}" "${2}" | awk -v FS== '/DEVNAME/ {print $2}' )" - case $FSTYPE in - vfat) - MOUNT_OPTIONS="${MOUNT_OPTIONS_VFAT}" - ;; - ext[2-4]) - MOUNT_OPTIONS="${MOUNT_OPTIONS_EXT}" - ;; - ntfs) - MOUNT_OPTIONS="${MOUNT_OPTIONS_NTFS}" - ;; - iso9660) - MOUNT_OPTIONS="${MOUNT_OPTIONS_ISO9660}" - ;; - "") - if $VERBOSE; then - echo "[INFO][${DEVNAME}] Not a partition with a filesystem!" - fi - return - ;; - *) - echo "[WARNING][${DEVNAME}] The filesystem '${FSTYPE}' is not supported!" - return - ;; - esac - - if [ -n "${MOUNT_OPTIONS_DEFAULT}" ]; then - if [ -z "${MOUNT_OPTIONS}" ]; then - MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT}" - else - MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT},${MOUNT_OPTIONS}" - fi - fi - if $VERBOSE; then - echo "[INFO][${DEVNAME}] Mounting a ${FSTYPE}'s filesystem with options: ${MOUNT_OPTIONS}" - fi - - if command -v udisksctl > /dev/null 2>&1; then - if [ -n "${MOUNT_OPTIONS}" ]; then - MOUNT_OPTIONS="-o ${MOUNT_OPTIONS}" - fi - udisksctl mount -t "${FSTYPE}" -b "${DEVNAME}" ${MOUNT_OPTIONS} - elif command -v udisks >/dev/null 2>&1; then - if [ -n "${MOUNT_OPTIONS}" ]; then - MOUNT_OPTIONS="--mount-options ${MOUNT_OPTIONS}" - fi - udisks --mount-fstype "${FSTYPE}" --mount "${DEVNAME}" ${MOUNT_OPTIONS} - else - echo "[ERROR] Unable to find binary for mounting ${DEVNAME}" >&2 - return - fi - if [ "$?" -ne "0" ]; then - echo "[ERROR] Failed to mount the device ${DEVNAME} of type ${FSTYPE} with options ${MOUNT_OPTIONS}" >&2 - fi -} - -# At startup, remove empty directories that may exists -rmdir /media/* > /dev/null 2>&1 - -# Mount already plugged devices -for DEVICE in $( lsblk -dn | cut -d' ' -f1 ); do - REMOVABLE=$( cat "/sys/block/${DEVICE}/removable" ) - if [ "${REMOVABLE}" -eq "1" ]; then - for PART in "/dev/${DEVICE}"*; do - mount_device -n "${PART}" - done - fi -done - -# Wait for plug events and mount devices -stdbuf -oL -- udevadm monitor --udev -s block | -while read -r -- _ _ EVENT DEVPATH _ -do - if [ "${EVENT}" = "add" ]; then - mount_device -p "/sys/${DEVPATH}" - fi -done diff --git a/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend b/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend deleted file mode 100644 index 34756f480..000000000 --- a/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend +++ /dev/null @@ -1,26 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI += "file://automount.service \ - file://automount.sh \ - file://99-udisks2.rules \ -" - -SYSTEMD_AUTO_ENABLE = "enable" -SYSTEMD_SERVICE_${PN} += "automount.service" - -do_install_append () { - sed -i 's/^WantedBy=.*/WantedBy=multi-user.target/' ${D}${systemd_unitdir}/system/udisks2.service - - install -d ${D}${base_libdir}/systemd/system - install -m 0644 ${WORKDIR}/automount.service ${D}${systemd_unitdir}/system - - install -d ${D}${libexecdir} - install -m 0755 ${WORKDIR}/automount.sh ${D}${libexecdir}/automount.sh - - install -d ${D}${sysconfdir}/udev/rules.d - install -m 0644 ${WORKDIR}/99-udisks2.rules ${D}${sysconfdir}/udev/rules.d -} - -FILES_${PN} += "${base_libdir}/systemd/system/automount.service \ - ${libexecdir}/automount.sh \ -" diff --git a/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb b/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb deleted file mode 100644 index 5246abb00..000000000 --- a/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb +++ /dev/null @@ -1,25 +0,0 @@ -SUMMARY = "Binding embedding test framework to test others binding" -DESCRIPTION = "This make testing binding running with Application Framework binder \ -easier by simply test verb return as well as event reception." -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/app-afb-test" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -SECTION = "apps" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/app-afb-test;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -DEPENDS += "lua libafb-helpers libappcontroller" -RDEPENDS_${PN} += "lua bash jq" -RDEPENDS_${PN}-ptest += "af-binder" - -PV = "${AGLVERSION}" -S = "${WORKDIR}/git" - -inherit cmake aglwgt pkgconfig ptest - -do_install_append() { - install -d ${D}${bindir} - install -m 775 ${S}/afm-test.target.sh ${D}${bindir}/afm-test -} - diff --git a/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest b/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest deleted file mode 100644 index 883939a83..000000000 --- a/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -afm-test /usr/AGL/apps/testwgt/aftest-test.wgt diff --git a/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb b/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb deleted file mode 100644 index 7803d74ed..000000000 --- a/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb +++ /dev/null @@ -1,24 +0,0 @@ -SUMMARY = "Async IO testing utility" -DESCRIPTION = "aio-stress will open or create each file on the command line, and start a series of aio to it.\ -aio is done in a rotating loop. first file1 gets 8 requests, then file2, then file3 etc.\ -As each file finishes writing, it is switched to reads io buffers are aligned in case you want to do raw io" -HOMEPAGE = "https://oss.oracle.com/~mason/aio-stress/" -LICENSE = "GPLv2" - -S="${WORKDIR}" - -LIC_FILES_CHKSUM = "file://${S}/aio-stress.c;md5=ccb5d196a3736bbd835d582a4e2329c3" - -SRC_URI = "https://oss.oracle.com/~mason/aio-stress/aio-stress.c" -SRC_URI[md5sum] = "ccb5d196a3736bbd835d582a4e2329c3" -SRC_URI[sha256sum] = "3f4cffcc946fb717fff9d8fe932c7c2ee606efff198408d9fbe16955151445f7" - -do_compile () { - ${CC} -Wall -Wshadow -o aio-stress -lpthread -laio aio-stress.c -} - -do_install () { - install -d ${D}${bindir} - install -m 0755 aio-stress ${D}${bindir} -} - diff --git a/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb b/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb deleted file mode 100644 index 28bf858a0..000000000 --- a/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Kernel test scripts" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "e2472c7b1d061aef8bb05a4d7940fd8159c4a329" - -inherit allarch - -S = "${WORKDIR}/git/${PN}-${PV}" - -do_install () { - for subdir in arch_timer cmt common scifab sdhi.0; do - install -d -m 0755 ${D}/${datadir}/${PN}/$subdir - install -m 0755 -t ${D}/${datadir}/${PN}/$subdir ${S}/$subdir/* - done -} - diff --git a/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb b/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb deleted file mode 100644 index 08b0425c0..000000000 --- a/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb +++ /dev/null @@ -1,20 +0,0 @@ -DESCRIPTION = "Benchmark tool that generates a workload resembling common web application server workloads" -HOMEPAGE = "http://ebizzy.sourceforge.net/" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=eb723b61539feef013de476e68b5c50a" - -SRC_URI = "http://downloads.sourceforge.net/project/ebizzy/ebizzy/${PV}/ebizzy-${PV}.tar.gz" -SRC_URI[md5sum] = "af038bc506066bb3d28db08aba62bc38" -SRC_URI[sha256sum] = "77286029d6348f3d9b3f04eae1feadb5ad1ad07b9f688f4d9f002960862467f2" - -INSANE_SKIP_${PN} = "ldflags" - -do_compile () { - ${CC} -Wall -Wshadow -lpthread -o ebizzy ebizzy.c -} - -do_install () { - install -d ${D}${bindir} - install -m 0755 ebizzy ${D}${bindir} -} - diff --git a/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb b/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb deleted file mode 100644 index 66db133e3..000000000 --- a/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Flexible File System Benchmark" -HOMEPAGE = "https://sourceforge.net/projects/ffsb/" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=fd5d9bcabd8ed5a54a01ce8d183d592a" - -SRC_URI = "http://downloads.sourceforge.net/project/ffsb/ffsb/ffsb-${PV}/ffsb-${PV}.tar.bz2" -SRC_URI[md5sum] = "cabfc1021c2ec6c6b168fefc84210891" -SRC_URI[sha256sum] = "e5867692aae8c9bfbcdc774599022289c4d89c1d90f4dd7101fb9865ac773c71" - -inherit autotools - -# extra args to configure -EXTRA_OECONF = "" - diff --git a/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend b/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend deleted file mode 100644 index e8ce1ab78..000000000 --- a/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend +++ /dev/null @@ -1,18 +0,0 @@ -do_install_append() { - install -m 755 -d ${D}/${datadir}/fontconfig-test - install -m 755 ${S}/test/run-test.sh ${D}/${datadir}/fontconfig-test/ - - sed -i -e "s#^FCLIST=\.\./fc-list/fc-list#FCLIST=/usr/bin/fc-list#g" -e "s#^FCCACHE=\.\./fc-cache/fc-cache#FCCACHE=/usr/bin/fc-cache#g" ${D}/${datadir}/fontconfig-test/run-test.sh - - install -m 644 ${B}/test/out.expected ${D}/${datadir}/fontconfig-test/ - for x in 4x6.pcf 8x16.pcf fonts.conf.in; do - install -m 644 ${S}/test/$x ${D}/${datadir}/fontconfig-test/ - done -} - -PACKAGES =+ "fontconfig-test" - -DEBIAN_NOAUTONAME_fontconfig-test = "1" -FILES_fontconfig-test = "${datadir}/fontconfig-test/*" - - diff --git a/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch b/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch deleted file mode 100644 index 4d0d09aea..000000000 --- a/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff -ur ft2demos-2.9.1.orig/Makefile ft2demos-2.9.1/Makefile ---- ft2demos-2.9.1.orig/Makefile 2018-04-22 05:41:50.000000000 -0400 -+++ ft2demos-2.9.1/Makefile 2019-02-18 23:28:59.794678736 -0500 -@@ -163,7 +163,8 @@ - - ifeq ($(PLATFORM),unix) - CC = $(CCraw) -- LINK_CMD = $(subst /,$(SEP),$(OBJ_BUILD)/libtool) \ -+ LIBTOOL = $(OBJ_BUILD)/libtool -+ LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \ - --mode=link $(CC) \ - $(subst /,$(COMPILER_SEP),$(LDFLAGS)) - LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) $(LIB_CLOCK_GETTIME) -@@ -289,12 +290,12 @@ - ttdebug - - # Comment out the next line if you don't have a graphics subsystem. -- EXES += ftdiff \ -- ftgamma \ -- ftgrid \ -- ftmulti \ -- ftstring \ -- ftview -+ # EXES += ftdiff \ -+ # ftgamma \ -+ # ftgrid \ -+ # ftmulti \ -+ # ftstring \ -+ # ftview - - # ftvalid requires ftgxval.c and ftotval.c - # diff --git a/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch b/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch deleted file mode 100644 index 7803ad7e0..000000000 --- a/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8c4f135619de929f9348b830a07a46a0c2c38e51 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= -Date: Fri, 7 Oct 2016 15:26:20 +0200 -Subject: [PATCH] Do not hardcode libtool path -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -It is already known and imported through config.mk. - -Signed-off-by: Jan-Simon Möller ---- - Makefile | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/Makefile b/Makefile -index a5d34bd..254aad4 100644 ---- a/Makefile -+++ b/Makefile -@@ -153,7 +153,6 @@ else - - ifeq ($(PLATFORM),unix) - CC = $(CCraw) -- LIBTOOL = $(OBJ_BUILD)/libtool - LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \ - --mode=link $(CC) \ - $(subst /,$(COMPILER_SEP),$(LDFLAGS)) --- -2.1.4 - diff --git a/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend b/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend deleted file mode 100644 index 6aa1eabc2..000000000 --- a/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend +++ /dev/null @@ -1,34 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI =+ "${SOURCEFORGE_MIRROR}/freetype/freetype-demos/${PV}/ft2demos-${PV}.tar.gz;name=ft2demos \ - file://0001-Makefile-dont-build-gfx-demos.patch;patchdir=../ft2demos-${PV} \ - file://0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch;patchdir=../ft2demos-${PV} \ - " -SRC_URI[ft2demos.md5sum] = "c376adf4782bac9b9ac8e427884752d2" -SRC_URI[ft2demos.sha256sum] = "5e9e94a2db9d1a945293a1644a502f6664a2173a454d4a55b19695e2e2f4a0bc" - -PACKAGES =+ "${PN}-demos" - -B = "${S}" - -do_compile_append () { - oe_runmake -C ${WORKDIR}/ft2demos-${PV} TOP_DIR=${WORKDIR}/${BPN}-${PV}/ -} - -do_install_append () { - install -d -m 0755 ${D}/${bindir} - for x in ftbench ftdump ftlint ftvalid ttdebug; do - install -m 0755 ${WORKDIR}/ft2demos-${PV}/bin/.libs/$x ${D}/${bindir} - done -} - -FILES_${PN}-demos = "\ - ${bindir}/ftbench \ - ${bindir}/ftdump \ - ${bindir}/ftlint \ - ${bindir}/ftvalid \ - ${bindir}/ttdebug \ -" - -# enable pixmap/libpng support to allow color emojis -PACKAGECONFIG_append = " pixmap" diff --git a/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch b/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch deleted file mode 100644 index e834becf3..000000000 --- a/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -urN fsfuzzer-0.7.orig/fstest.c fsfuzzer-0.7/fstest.c ---- fsfuzzer-0.7.orig/fstest.c 2009-01-25 14:50:06.000000000 +0000 -+++ fsfuzzer-0.7/fstest.c 2016-06-16 17:49:27.264565819 +0000 -@@ -35,6 +35,7 @@ - #include - #include - #include -+#include - - #define LOGGIT 1 - #define CHECK_XATTR 1 diff --git a/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb b/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb deleted file mode 100644 index d2ddb59b1..000000000 --- a/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "The fsfuzzer is a filesystem fuzzer tool that does stress tests of various filesystems in a reproducible and logged way." -DESCRIPTION = "This tool creates initial (valid) filesystem images and then manipulates their binary format and structure for detecting flaws/bugs/design problems in the parsing/handling code for that particular filesystem. The program expects that you have a /media directory. It uses that one for mounting test images in." -HOMEPAGE = "https://www.ee.oulu.fi/research/ouspg/fsfuzzer" - -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" - -SRC_URI = "http://people.redhat.com/sgrubb/files/fsfuzzer-${PV}.tar.gz \ - file://0001-fix_missing_header_sys_stat.patch \ - " -SRC_URI[md5sum] = "d69ac4b67aaba52a889c9188eb456c15" -SRC_URI[sha256sum] = "094aa17c4f66c525a04e5db5ad444b4a561b6f8e310d0bd70b9ca421cdf0a434" - -inherit autotools - -# Specify any options you want to pass to the configure script using EXTRA_OECONF: -EXTRA_OECONF = "" - diff --git a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper b/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper deleted file mode 100644 index 12580237d..000000000 --- a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper +++ /dev/null @@ -1,320 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2020 Konsulko Group -# -# 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. - -# -# gcovr wrapper for generating coverage reports against AGL bindings -# on target. With a given binding name or coverage widget file, the -# coverage version will be installed, and the pyagl tests for the -# binding run before generating a report with gcovr. The afm-test -# test widget or a user-supplied command may be run instead of the -# pyagl tests, see usage below, or run with "--help". -# - -usage() { - cat <<-EOF - Usage: - $(basename $0) [options] - - Options: - -h, --help - Print this help and exit - - -k, --keep - Do not remove temporary files/directories - - -o, --gcovr-options - Additional gcovr options, multiple options should be quoted - - -w, --workdir - gcov/gcovr temporary working directory, defaults to /tmp/gcov - The directory will be removed after running without --keep if it - is empty, use caution if specifying existing system directories! - - --pyagl - Run pyagl tests for binding, enabled by default - - --afm-test - Run afm-test test widget tests for binding. - If specified, disables pyagl tests; note that the last argument in - the command-line will take precedence. - - -c, --command - Test command to use in place of pyagl or afm-test, should be quote - If specified, disables pyagl and afm-test tests. - - EOF -} - -# Helper to validate widget install dir -check_wgt_install() { - if [ ! \( -d $1 -o -f $1/config.xml \) ]; then - echo "ERROR: No widget install at $1" - exit 1 - elif [ ! -d $1/src ]; then - echo "ERROR: No source in $1/src" - exit 1 - fi -} - -# Helper to run gcovr inside mount namespace environment -gcovr_runner() { - wgt_install_dir=/var/local/lib/afm/applications/$1 - check_wgt_install ${wgt_install_dir} - - if [ ! -d $workdir/$1 ]; then - echo "ERROR: No coverage data in $workdir/$1" - exit 1 - fi - - # Get original source path - gcno=$(cd $workdir/$1 && find -name '*.gcno' | head -n 1 | cut -d/ -f2-) - if [ -z "$gcno" ]; then - echo "ERROR: no gcno file found in $workdir/$1" - exit 1 - fi - srcfile=$(strings $workdir/$1/${gcno} | grep "$(basename ${gcno%.gcno})$" | uniq) - srcdir=$(echo $srcfile | sed "s|/${gcno%%/*}/.*$||") - - # Set up mounts for chroot to run gcovr in - # NOTE: We do not unmount these later, as we assume we are in a - # private mount namespace and they will go away on exit from - # it. - echo "Setting up mounts" - tmpdir=$(mktemp -d) - echo $tmpdir > $workdir/.runner_tmpdir - mkdir -p $tmpdir/{lower,upper,work,merged} - # NOTE: Could potentially use rbind here, but explicitly mounting - # just what we need seems safer - mount --bind / $tmpdir/lower - mount -t overlay -o lowerdir=$tmpdir/lower,upperdir=$tmpdir/upper,workdir=$tmpdir/work overlay $tmpdir/merged - mount --bind /proc $tmpdir/merged/proc - mount --bind /sys $tmpdir/merged/sys - mount --bind /dev $tmpdir/merged/dev - mount --bind /tmp $tmpdir/merged/tmp - # Bind in the data files - # NOTE: $workdir is bound instead of specifically just $workdir/$1, - # so that e.g. html output to another directory in /tmp will - # work as expected. A determined user may be able to shoot - # themselves in the foot, but for now the trade off seems - # acceptable. - mkdir -p $tmpdir/merged/$workdir - mount --bind $workdir $tmpdir/merged/$workdir - # Bind the source files to their expected location - mkdir -p $tmpdir/merged/$srcdir - mount --bind ${wgt_install_dir}/src $tmpdir/merged/$srcdir - - echo "Entering chroot" - echo - exec chroot $tmpdir/merged \ - /usr/bin/gcovr -r $srcdir --object-directory $workdir/$1 --gcov-filter-source-errors -s ${GCOV_RUNNER_GCOVR_OPTIONS} -} - -# Helper to clean up after runner -gcovr_runner_cleanup() { - rm -rf $workdir/$1 - if [ -f $workdir/.runner_tmpdir ]; then - tmpdir=$(cat $workdir/.runner_tmpdir) - rm -rf $tmpdir - rm -f $workdir/.runner_tmpdir - fi - if [ "$workdir" != "/tmp" ]; then - rmdir $workdir 2>/dev/null || true - fi -} - -# Parse arguments -OPTS=$(getopt -o +hko:pw:c: --longoptions gcovr-runner,afm-test,command:,help,keep,gcovr-options:,pyagl,workdir: -n "$(basename $0)" -- "$@") -if [ $? -ne 0 ]; then - exit 1 -fi -eval set -- "$OPTS" - -runner=false -keep=false -wgt="" -cmd="" -options="" -afmtest=false -pyagl=true -workdir="/tmp/gcov" - -while true; do - case "$1" in - --gcovr-runner) runner=true; shift;; - --afm-test) afmtest=true; pyagl=false; shift;; - -c|--command) cmd="$2"; shift; shift;; - -h|--help) usage; exit 0;; - -k|--keep) keep=true; shift;; - -o|--gcovr-options) options="$2"; shift; shift;; - -p|--pyagl) pyagl=true; afmtest=false; shift;; - -w|--workdir) workdir="$2"; shift; shift;; - --) shift; break;; - *) break;; - esac -done - -# Encode the assumption that a specified command means it runs instead -# of any other tests. -if [ -s "$cmd" ]; then - pyagl=false - afmtest=false -fi - -if [ $# -ne 1 ]; then - # Always expect widget name as single non-option argument - usage - exit 1 -fi - -# Rationalize workdir just in case -workdir=$(realpath "$workdir") - -if [ "$runner" = "true" ]; then - if [ "${GCOV_RUNNER_READY}" != "true" ]; then - echo "ERROR: gcovr environment not ready!" - exit 1 - fi - gcovr_runner $1 - # If we get here, it'd be an error, so return 1 - exit 1 -fi - -binding=$1 -if [ "${1%.wgt}" != "$1" ]; then - # User has specified path to a widget file - wgt=$(realpath $1) - binding=$(basename "${1%-coverage.wgt}") -else - wgt=/usr/AGL/apps/coverage/${binding}-coverage.wgt -fi -if [ ! -f $wgt ]; then - echo "ERROR: No widget $wgt" - exit 1 -elif [ "$afmtest" = "true" -a ! -f /usr/AGL/apps/test/${binding}-test.wgt ]; then - echo "ERROR: No test widget for $binding" - exit 1 -fi - -# Determine starting systemd unit name -service=$(systemctl --all |grep afm-service-$binding |sed 's/^[ *] \([^ ]*\).*/\1/') -if [ -z "$service" ]; then - echo "ERROR: Could not determine systemd service unit for $binding" - exit 1 -fi - -# Install coverage widget -echo "Removing $binding widget" -systemctl stop $service -afm-util remove $binding -echo -echo "Installing $binding coverage widget" -afm-util install $wgt -echo - -wgt_install_dir=/var/local/lib/afm/applications/$binding -check_wgt_install ${wgt_install_dir} -gcov_src=${wgt_install_dir}/coverage -if [ ! -d ${gcov_src} ]; then - echo "ERROR: No coverage information in ${gcov_src}" - exit 1 -elif [ ! -f ${gcov_src}/gcov.env ]; then - echo "ERROR: No gcov environment file at ${gcov_src}/gcov.env" - exit 1 -fi - -# -# NOTE: In theory, the coverage data collection could be done inside -# the mount namespace / chroot, but the potential for issues -# when doing that seems higher than just running gcovr there, -# so a conservative approach is taken. -# - -# Set up things for the binary to write out gcda data files -# -# Having the matching build directory hierarchy in place and -# writeable by the target binary before any restart and testing is -# key to things working. -# -# As well, the environment file with the GCOV_PREFIX and -# GCOV_PREFIX_STRIP values needs to be present before running so the -# gcda files will get written into the relocated build hierarchy. -# -echo "Installing coverage information for $binding" -mkdir -p $workdir -rm -rf $workdir/$binding -cp -dr ${gcov_src} $workdir/$binding -chsmack -r -a System::Log $workdir -chmod -R go+w $workdir - -# Install the gcov environment file -mkdir -p /etc/afm/widget.env.d/$binding -if [ "${workdir}" = "/tmp/gcov" ]; then - cp ${gcov_src}/gcov.env /etc/afm/widget.env.d/$binding/gcov -else - # Update GCOV_PREFIX to point into workdir - sed "s|^GCOV_PREFIX=.*|GCOV_PREFIX=${workdir}/$binding|" ${gcov_src}/gcov.env > /etc/afm/widget.env.d/$binding/gcov -fi -chsmack -r -a _ /etc/afm/widget.env.d/$binding - -# Determine new systemd unit name (version may now be different) -service=$(systemctl --all |grep afm-service-$binding |sed 's/^[ *] \([^ ]*\).*/\1/') -if [ -z "$service" ]; then - echo "ERROR: Could not determine systemd service unit for $binding" - exit 1 -fi - -# Restart the binding -systemctl start $service -echo - -# Run tests or given command -if [ -n "$cmd" ]; then - echo "Running command: $cmd" - export AGL_AVAILABLE_INTERFACES=${AGL_AVAILABLE_INTERFACES:-ethernet} - eval $cmd -elif [ "$pyagl" = "true" ]; then - echo "Running $binding pyagl tests" - export AGL_AVAILABLE_INTERFACES=${AGL_AVAILABLE_INTERFACES:-ethernet} - pytest -k "${binding#agl-service-} and not hwrequired" /usr/lib/python3.?/site-packages/pyagl -else - echo "Running $binding test widget" - # NOTE: su to agl-driver is required here to avoid fallout from - # the "afm-util run" in afm-test seemingly triggering the - # start of other per-user bindings for the root user. - su -l -c "/usr/bin/afm-test /usr/AGL/apps/test/${binding}-test.wgt" agl-driver -fi - -# Restart again to trigger data file writing -systemctl restart $service -echo - -# Run ourselves in gcovr runner mode inside a private mount namespace -export GCOV_RUNNER_READY=true -# NOTE: Passing gcovr options in the environment to avoid quoting hassles -export GCOV_RUNNER_GCOVR_OPTIONS="$options" -runner_options="--workdir ${workdir}" -unshare -m $0 --gcovr-runner ${runner_options} $binding -rc=$? - -if [ "$keep" != "true" ]; then - # Clean up after ourselves - gcovr_runner_cleanup $1 - rm -f /etc/afm/widget.env.d/$1/gcov - rmdir /etc/afm/widget.env.d/$1 2>/dev/null || true -fi - -exit $rc - diff --git a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb b/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb deleted file mode 100644 index 2ff39b211..000000000 --- a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "AGL gcovr wrapper" -DESCRIPTION = "This wrapper script enables running gcovr against a \ -AGL binding to generate a coverage report of running pyagl tests, \ -the afm-test test widget, or a user-supplied command." - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI += "file://gcovr-wrapper" - -inherit allarch - -do_install() { - install -D -m 0755 ${WORKDIR}/gcovr-wrapper ${D}${bindir}/gcovr-wrapper -} - -RDEPENDS_${PN} = "bash gcovr" diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch b/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch deleted file mode 100644 index be1dcf829..000000000 --- a/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch +++ /dev/null @@ -1,68 +0,0 @@ -Add option to filter gcov source errors - -Add "--gcov-filter-source-errors" to apply filters to the source -files in the errors from gcov. If all source files in the errors -are filtered, then the error is ignored so that the file will be -processed. This enables the usecase of running on a target where -only the source tree for a binary is available, but not all of the -external source headers are. - -Upstream-Status: pending - -Signed-off-by: Scott Murray - -diff --git a/gcovr/configuration.py b/gcovr/configuration.py -index 1356097..083532c 100644 ---- a/gcovr/configuration.py -+++ b/gcovr/configuration.py -@@ -915,6 +915,14 @@ GCOVR_CONFIG_OPTIONS = [ - "Default: {default!s}.", - action="store_true", - ), -+ GcovrConfigOption( -+ "gcov_filter_source_errors", ['--gcov-filter-source-errors'], -+ group="gcov_options", -+ help="Apply filters to missing source file errors in GCOV files " -+ "instead of exiting with an error. " -+ "Default: {default!s}.", -+ action="store_true", -+ ), - GcovrConfigOption( - "objdir", ['--object-directory'], - group="gcov_options", -diff --git a/gcovr/gcov.py b/gcovr/gcov.py -index de79215..171d68d 100644 ---- a/gcovr/gcov.py -+++ b/gcovr/gcov.py -@@ -667,11 +667,27 @@ def run_gcov_and_process_files( - chdir=chdir, - tempdir=tempdir) - -+ skip = False - if source_re.search(err): -- # gcov tossed errors: try the next potential_wd -- error(err) -- done = False -- else: -+ ignore = False -+ if options.gcov_filter_source_errors: -+ # Check if errors are all from source that is filtered -+ ignore = True -+ for line in err.splitlines(): -+ src_fname = line.split()[-1] -+ filtered, excluded = apply_filter_include_exclude( -+ src_fname, options.filter, options.exclude) -+ if not (filtered or excluded): -+ ignore = False -+ break -+ -+ if not ignore: -+ # gcov tossed errors: try the next potential_wd -+ error(err) -+ skip = True -+ -+ done = False -+ if not skip: - # Process *.gcov files - for fname in active_gcov_files: - process_gcov_data(fname, covdata, abs_filename, options) diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend b/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend deleted file mode 100644 index 699aea214..000000000 --- a/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -# Add not yet upstreamed patch that enables on target gcov usage -SRC_URI += "file://0001-add-gcov-filter-source-errors-option.patch" diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb b/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb deleted file mode 100644 index 6da04cc53..000000000 --- a/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "Generate GCC code coverage reports" -DESCRIPTION = "Gcovr provides a utility for managing the use of the GNU gcov \ -utility and generating summarized code coverage results." -HOMEPAGE = "https://gcovr.com" -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=221e634a1ceafe02ef74462cbff2fb16" - -PV = "4.2+git${SRCPV}" -SRC_URI = "git://github.com/gcovr/gcovr.git;protocol=https" -SRCREV = "1bc72e3bb59b9296e962b350691732ddafbd3195" - -S = "${WORKDIR}/git" - -inherit setuptools3 - -RDEPENDS_${PN} += " \ - python3-compression \ - python3-core \ - python3-crypt \ - python3-datetime \ - python3-difflib \ - python3-io \ - python3-jinja2 \ - python3-json \ - python3-lxml \ - python3-multiprocessing \ - python3-pygments \ - python3-pytest \ - python3-shell \ - python3-threading \ - python3-typing \ -" diff --git a/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend b/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend deleted file mode 100644 index 403aedd4c..000000000 --- a/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Update glmark2 -SRCREV = "784aca755a469b144acf3cae180b6e613b7b057a" -# Already in newer version -SRC_URI_remove = "file://python3.patch" - -PACKAGECONFIG = "wayland-gles2" -PACKAGECONFIG[wayland-gles2] = ",,virtual/egl virtual/libgles2 wayland wayland-native" diff --git a/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb b/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb deleted file mode 100644 index f890e23a4..000000000 --- a/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb +++ /dev/null @@ -1,27 +0,0 @@ -DESCRIPTION = "Himeno Benchmark" -LICENSE = "LGPL-2.0" -URL = "http://accc.riken.jp/en/supercom/himenobmt/" - -SRC_URI = "http://accc.riken.jp/en/wp-content/uploads/sites/2/2015/07/himenobmt.c.zip" -SRC_URI[md5sum] = "8d8e837dfc3e00a3b322eb4ae3edd551" -SRC_URI[sha256sum] = "8780bfbdacb0d4dcab2931e65cadd69411731e3f2afcc1231d0743a036298077" - -LIC_FILES_CHKSUM = "file://himenoBMT.c;md5=8e8771ddc01c6d1a795e088e2d6dee78" - -# Upstream ZIP file contains an LZH archive, thus a 2 steps "unpack" is required. -# The LZH archive is unpacked after native tools dependency resolution, -# thus. after "configure" task in our case: - -DEPENDS = "p7zip-native" - -do_configure_append() { - 7z x -y -o${S} ${WORKDIR}/himenobmt.c.lzh - cd ${S} - sed -i -e 's/CC= gcc/#CC= gcc/' Makefile - sed -i -e 's/CFLAGS = /#CFLAGS = /' Makefile -} - -do_install () { - install -d ${D}${bindir} - install -m 0755 bmt ${D}${bindir} -} diff --git a/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch b/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch deleted file mode 100644 index c882739ba..000000000 --- a/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- interbench.c.orig 2009-10-30 23:14:59.000000000 -0500 -+++ interbench.c 2012-07-10 19:06:00.000000000 -0500 -@@ -71,6 +71,7 @@ struct user_data { - char datestamp[13]; - FILE *logfile; - } ud = { -+ .ram = 0, - .duration = 30, - .cpu_load = 4, - .log = 1, -@@ -652,6 +653,8 @@ void emulate_write(struct thread *th) - terminal_error("fopen"); - if (stat(name, &statbuf) == -1) - terminal_fileopen_error(fp, "stat"); -+ if (statbuf.st_blksize < MIN_BLK_SIZE) -+ statbuf.st_blksize = MIN_BLK_SIZE; - for (i = 0 ; i < mem; i++) { - if (fwrite(buf, statbuf.st_blksize, 1, fp) != 1) - terminal_fileopen_error(fp, "fwrite"); -@@ -1136,14 +1139,17 @@ void get_ram(void) - if(!(meminfo = fopen("/proc/meminfo", "r"))) - terminal_error("fopen"); - -- ud.ram = ud.swap = 0; -- while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) ) -- fgets(aux,sizeof(aux),meminfo); -+ if (!ud.ram) -+ { -+ while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) ) -+ fgets(aux,sizeof(aux),meminfo); -+ } -+ ud.swap = 0; - while( !feof(meminfo) && !fscanf(meminfo, "SwapTotal: %lu kB", &ud.swap) ) - fgets(aux,sizeof(aux),meminfo); - if (fclose(meminfo) == -1) - terminal_error("fclose"); -- -+ - if( !ud.ram || !ud.swap ) { - unsigned long i; - fprintf(stderr, "\nCould not get memory or swap size. "); -@@ -1399,6 +1405,7 @@ void usage(void) - fprintf(stderr, "\t[-h]\n\n"); - fprintf(stderr, " -l\tUse loops per sec (default: use saved benchmark)\n"); - fprintf(stderr, " -L\tUse cpu load of with burn load (default: 4)\n"); -+ fprintf(stderr, " -M\tForce RAM size to . Useful when disk is smaller than RAM.\n"); - fprintf(stderr, " -t\tSeconds to run each benchmark (default: 30)\n"); - fprintf(stderr, " -B\tNice the benchmarked thread to (default: 0)\n"); - fprintf(stderr, " -N\tNice the load thread to (default: 0)\n"); -@@ -1482,7 +1489,7 @@ int main(int argc, char **argv) - terminal_error("signal"); - #endif - -- while ((q = getopt(argc, argv, "hl:L:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) { -+ while ((q = getopt(argc, argv, "hl:L:M:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) { - switch (q) { - case 'h': - usage(); -@@ -1496,6 +1503,9 @@ int main(int argc, char **argv) - case 'L': - ud.cpu_load = atoi(optarg); - break; -+ case 'M': -+ ud.ram = atoi(optarg); -+ break; - case 'B': - ud.bench_nice = atoi(optarg); - break; diff --git a/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb b/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb deleted file mode 100644 index 3e6490374..000000000 --- a/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb +++ /dev/null @@ -1,31 +0,0 @@ -DESCRIPTION = "The Linux interactivity benchmark" -HOMEPAGE = "http://users.tpg.com.au/ckolivas/interbench/" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833" -SRC_URI = "http://ck.kolivas.org/apps/interbench/interbench-${PV}.tar.bz2" - -SRC_URI += "file://interbench.c.patch;striplevel=0" - -inherit autotools - -INSANE_SKIP_${PN} = "ldflags" - -B = "${S}" -EXTRA_OEMAKE = "CC='${CC}'" - -# upstream tarball contains x86_64 binaries, we need a clean source tree -do_compile() { - oe_runmake clean - oe_runmake -} - -do_install() { - install -d ${D}${bindir} ${D}${datadir}/doc/${PN}/ ${D}${mandir}/man8/ - install -m 0755 ${B}/interbench ${D}${bindir} - install -m 0644 ${S}/readme* ${D}${datadir}/doc/${PN}/ - install -m 0644 ${S}/interbench.8 ${D}${mandir}/man8/ -} - -SRC_URI[md5sum] = "832254d7fd1255c548ebea7b97f01015" -SRC_URI[sha256sum] = "89d438b28aef22d26e79812762a57a9f9344a8dd8826edebfe60dad48ee1c784" - diff --git a/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb b/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb deleted file mode 100644 index a8b93716a..000000000 --- a/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb +++ /dev/null @@ -1,24 +0,0 @@ -SUMMARY = "ipv6connect test" -HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/0.12.369.B/client/tests/ipv6connect" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${S}/${PN}/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "b355b7e1f43a19938895964f314484ffd8a39542" - -inherit autotools - -INSANE_SKIP_${PN} = "ldflags" - -B = "${WORKDIR}/git/ipv6connect" -S = "${WORKDIR}/git" - -# configure script is not delivered, only a makefile. -do_configure() { - : -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 ${B}/ipv6connect ${D}${bindir} -} diff --git a/meta-agl-profile-core/recipes-test/linpack/linpack.bb b/meta-agl-profile-core/recipes-test/linpack/linpack.bb deleted file mode 100644 index 84bed0ff6..000000000 --- a/meta-agl-profile-core/recipes-test/linpack/linpack.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "Linpack benchmark" -LICENSE = "BSD" -LIC_FILES_CHKSUM = "file://${S}/${PN}/linpack.c;md5=076f1fd8d313056103f98d4253862eae" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "920cae73a918d1f516113b0ae967be3ecaba86ef" - -DEPENDS += "rsync-native" - -inherit autotools - -S = "${WORKDIR}/git" - -# configure script is not delivered, only a makefile. -do_configure() { - mkdir -p ${B} - rsync -a ${S}/${PN}/* ${B} -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 ${B}/linpack ${D}${bindir} -} diff --git a/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb b/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb deleted file mode 100644 index 01b3cfce5..000000000 --- a/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "linus_stress test" -HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/tests/linus_stress" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${S}/linus_stress/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "87cdfd4626c0cb47fc22f328867e49d6268df85c" - -inherit autotools -INSANE_SKIP_${PN} = "ldflags" - -B = "${WORKDIR}/git/linus_stress" -S = "${WORKDIR}/git" - -# configure script is not delivered, only a makefile. -do_configure() { - : -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 ${B}/linus_stress ${D}${bindir} -} diff --git a/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb b/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb deleted file mode 100644 index 48301078e..000000000 --- a/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb +++ /dev/null @@ -1,59 +0,0 @@ -SUMMARY = "Utilities for testing of AGL" -DESCRIPTION = "A set of common packages required by testing AGL for Quality Assurance" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-test \ - packagegroup-agl-test-ltp \ - packagegroup-ivi-common-test \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - bc \ - dbench \ - ebizzy \ - evtest \ - ffsb \ - glmark2 \ - interbench \ - iozone3 \ - iperf3 \ - ipv6connect \ - linpack \ - linus-stress \ - lmbench \ - nbench-byte \ - nmap \ - rt-tests \ - stress \ - " -# to be added, but needs LICENSE_FLAGS_WHITELIST="non-commercial" -# netperf - -# FTBS, SPEC-316 -# himeno -# FTBS, SPEC-1384 -# trinity - -# packagegroup-agl-test-ltp \ -# ltp \ -# - -# Packages for shell commands which are required by LTP -# readelf, logrotate, vsftpd, crontab, sar, arp, ftp, -# host, rcp, rlogin, rsh, tcpdump, expect, iptables, dnsmasq, -# pgrep -RDEPENDS_packagegroup-agl-test-ltp += " \ - initscripts-functions bind-utils binutils \ - cronie dnsmasq expect inetutils-ftp inetutils-rsh \ - iptables logrotate net-tools sysstat tcpdump vsftpd \ - " - -RDEPENDS_packagegroup-ivi-common-test = " \ - packagegroup-agl-test \ - " diff --git a/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb b/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb deleted file mode 100644 index 821a1de7a..000000000 --- a/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb +++ /dev/null @@ -1,33 +0,0 @@ -SUMMARY = "Python bindings and tests for Automotive Grade Linux services" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/pyagl" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/pyagl;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "dcc2f91e5ab3b70202e78ec7164a8e9d7501d70c" -PV = "${AGL_BRANCH}+git${SRCPV}" - -S = "${WORKDIR}/git" - -inherit setuptools3 - -do_install_append() { - install -D -m 0755 ${S}/pyagl/scripts/pyagl ${D}${bindir}/pyagl -} - -RDEPENDS_${PN} += " \ - python3-asyncio \ - python3-asyncssh \ - python3-core \ - python3-json \ - python3-logging \ - python3-math \ - python3-parse \ - python3-pprint \ - python3-pytest \ - python3-pytest-asyncio \ - python3-pytest-dependency \ - python3-pytest-reverse \ - python3-typing \ - python3-websockets \ -" diff --git a/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb b/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb deleted file mode 100644 index f0f09a855..000000000 --- a/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb +++ /dev/null @@ -1,42 +0,0 @@ -SUMMARY = "a Linux System call fuzz teste." -DESCRIPTION = "Trinity, a Linux System call fuzz tester." -HOMEPAGE = "http://codemonkey.org.uk/projects/trinity/" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=96094d47cfbd2cc45eb46ce0fc423c04" - -COMPATIBLE_HOST = "(x86_64|arm|aarch64).*-linux" - -PV = "1.5" -SRCREV = "edc2e693e298e0372010a361354c4a79a3cd93f3" -SRC_URI = "git://github.com/kernelslacker/trinity.git;protocol=https;nobranch=1 \ - " - -S = "${WORKDIR}/git" - -inherit useradd - -USERADD_PACKAGES = "${PN}" -USERADD_PARAM_${PN} = "--system --create-home --shell /bin/sh ${PN} " - -do_configure () { - ./configure.sh -} - -# workaround random build failures -do_compile () { - ${MAKE} -} - -do_install () { - oe_runmake install DESTDIR=${D}/usr - install -o ${PN} -d -m 0755 ${D}/${datadir}/${PN} - install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-parallel.sh ${D}/${datadir}/${PN} - install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-sequentially.sh ${D}/${datadir}/${PN} - install -o ${PN} -m 0755 ${S}/scripts/test-multi.sh ${D}/${datadir}/${PN} - install -o ${PN} -m 0755 ${S}/scripts/test-vm.sh ${D}/${datadir}/${PN} -} - -PACKAGES =+ "${PN}-example" - -FILES_${PN} = "${bindir}/trinity" -FILES_${PN}-example = "${datadir}/${PN}" diff --git a/meta-agl-profile-graphical-html5/conf/layer.conf b/meta-agl-profile-graphical-html5/conf/layer.conf deleted file mode 100644 index d499dd173..000000000 --- a/meta-agl-profile-graphical-html5/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH .= ":${LAYERDIR}" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "html5-framework" -BBFILE_PATTERN_html5-framework = "^${LAYERDIR}/" -BBFILE_PRIORITY_html5-framework = "80" - -LAYERSERIES_COMPAT_html5-framework = "dunfell" diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend deleted file mode 100644 index 2c5201aa8..000000000 --- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend +++ /dev/null @@ -1,12 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI_remove = " \ - file://hdmi-a-1-270.cfg \ - file://hdmi-a-1-90.cfg \ - file://virtual.cfg \ -" - -SRC_URI += " \ - file://hdmi-a-1-180.cfg \ - file://virtual-landscape.cfg \ -" diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg b/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg deleted file mode 100644 index 59e2c2db8..000000000 --- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg +++ /dev/null @@ -1,4 +0,0 @@ -# A display is connected to HDMI-A-1 -[output] -name=HDMI-A-1 -transform=0 diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg b/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg deleted file mode 100644 index d69253639..000000000 --- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[output] -name=Virtual-1 -mode=1920x1080 diff --git a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb deleted file mode 100644 index 0ec6829ed..000000000 --- a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb +++ /dev/null @@ -1,10 +0,0 @@ -SUMMARY = "An image containing all packages required to run web applications" - -require agl-image-graphical-html5.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - packagegroup-agl-profile-graphical-html5 \ - " - diff --git a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc b/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc deleted file mode 100644 index e943b9903..000000000 --- a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc +++ /dev/null @@ -1,9 +0,0 @@ -require recipes-platform/images/agl-image-minimal.inc - -IMAGE_FEATURES += "splash" - -IMAGE_FEATURES += "${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'ssh-server-dropbear' , '', d)}" - -inherit features_check - -REQUIRED_DISTRO_FEATURES = "wayland" diff --git a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb deleted file mode 100644 index cc9ed3d64..000000000 --- a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "AGL web runtime packages" -DESCRIPTION = "Specific packages for the AGL web runtime (minus profile-graphical)" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-appfw-html5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -# add packages for WAM -RDEPENDS_${PN} += " \ - chromium-browser-service \ - wam \ - " diff --git a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb deleted file mode 100644 index 202750140..000000000 --- a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "AGL web runtime profile" -DESCRIPTION = "The full set of packages required for AGL web runtime" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-graphical-html5 \ - profile-graphical-html5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-profile-graphical \ - packagegroup-agl-appfw-html5 \ -" - -RDEPENDS_${PN} += "\ - agl-login-manager \ - " - -RDEPENDS_profile-graphical-html5 = "${PN}" diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb deleted file mode 100644 index 90242d792..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "Chromium browser widget" -DESCRIPTION = "Wgt packaging for running chromium installed browser" -HOMEPAGE = "https://webosose.org" -SECTION = "apps" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/chromium;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -#build-time dependencies -DEPENDS += "af-binder af-main-native chromium68" - -inherit cmake aglwgt - -RDEPENDS_${PN} += "chromium68-browser" diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch deleted file mode 100644 index 485766b02..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch +++ /dev/null @@ -1,40 +0,0 @@ -Upstream-Status: Inappropriate [embedder specific] - -The patch below makes the V8 binaries run during the build be invoked through -QEMU, as they are built for the target. - -Signed-off-by: Raphael Kubo da Costa -Signed-off-by: Maksim Sisov - -Index: git/src/tools/v8_context_snapshot/BUILD.gn -=================================================================== ---- git.orig/src/tools/v8_context_snapshot/BUILD.gn -+++ git/src/tools/v8_context_snapshot/BUILD.gn -@@ -62,6 +62,7 @@ if (use_v8_context_snapshot) { - output_path = rebase_path(output_file, root_build_dir) - - args = [ -+ "./v8-qemu-wrapper.sh", - "./" + rebase_path( - get_label_info( - ":v8_context_snapshot_generator($v8_snapshot_toolchain)", -Index: git/src/v8/BUILD.gn -=================================================================== ---- git.orig/src/v8/BUILD.gn -+++ git/src/v8/BUILD.gn -@@ -900,6 +900,7 @@ action("run_torque") { - } - - args = [ -+ "./v8-qemu-wrapper.sh", - "./" + rebase_path(get_label_info(":torque($v8_torque_toolchain)", - "root_out_dir") + "/torque", - root_build_dir), -@@ -977,6 +978,7 @@ template("run_mksnapshot") { - data = [] - - args = [ -+ "./v8-qemu-wrapper.sh", - "./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)", - "root_out_dir") + "/mksnapshot", - root_build_dir), diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb deleted file mode 100644 index 4f545c145..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb +++ /dev/null @@ -1,404 +0,0 @@ -# Copyright (c) 2018 LG Electronics, Inc. - -SUMMARY = "Chromium webruntime for webOS" -AUTHOR = "Lokesh Kumar Goel " -SECTION = "webos/apps" -LICENSE = "Apache-2.0 & BSD-3-Clause & LGPL-2.0 & LGPL-2.1" -LIC_FILES_CHKSUM = "\ - file://src/LICENSE;md5=0fca02217a5d49a14dfe2d11837bb34d \ - file://src/third_party/blink/renderer/core/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \ - file://src/third_party/blink/renderer/core/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \ -" - -require gn-utils.inc - -inherit gettext qemu pythonnative - -DEPENDS = "virtual/gettext wayland wayland-native pixman freetype glib-2.0 fontconfig openssl pango cairo icu libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf nss nss-native nspr nspr-native bison-native qemu-native" - -PROVIDES = "${BROWSER_APPLICATION}" - -SRC_URI = "\ - git://github.com/igalia/${BPN};branch=WIP@39.agl.compositor;protocol=https;rev=${SRCREV_chromium68};name=chromium68 \ - git://github.com/webosose/v8;destsuffix=git/src/v8;rev=${SRCREV_v8};name=v8 \ - file://v8-qemu-wrapper.patch \ -" -SRCREV_chromium68 = "61e96d1ee5dfc2461697457d287bf922d8a03d9a" -SRCREV_v8 = "1e3af71f1ff3735e8a5b639c48dfca63a7b8a647" - -# 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" - -S = "${WORKDIR}/git" - -SRC_DIR = "${S}/src" -OUT_DIR = "${WORKDIR}/build" -BUILD_TYPE = "Release" - -B = "${OUT_DIR}/${BUILD_TYPE}" - -WEBRUNTIME_BUILD_TARGET = "webos:weboswebruntime" -BROWSER_APP_BUILD_TARGET = "chrome" -BROWSER_APPLICATION = "chromium68-browser" -BROWSER_APPLICATION_DIR = "/opt/chromium68" - -TARGET = "${WEBRUNTIME_BUILD_TARGET} ${BROWSER_APP_BUILD_TARGET}" - -# Skip do_install_append of webos_system_bus. It is not compatible with this component. -WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" - -PACKAGECONFIG ?= "jumbo use-upstream-wayland" - -# Options to enable debug-webcore build. -# Add the following line to local.conf (or local.dev.inc) to enable them: -# PACKAGECONFIG_append_pn-chromium68 = " debug-webcore" -# Other debug options are controlled by sections later in this file -PACKAGECONFIG[debug-webcore] = "remove_webcore_debug_symbols=false,remove_webcore_debug_symbols=true" - -# 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[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace" - -# Chromium can use v4l2 device for hardware accelerated video decoding on such boards as Renesas R-car M3, for example. -# In case of R-car m3, additional patches are required for gstreamer and v4l2apps. -# See https://github.com/igel-oss/meta-browser-hwdecode/tree/igalia-chromium71. -PACKAGECONFIG[use-linux-v4l2] = "use_v4l2_codec=true use_v4lplugin=true use_linux_v4l2_only=true" - -PACKAGECONFIG[use-upstream-wayland] = " \ - ozone_platform_wayland_external=false ozone_platform_wayland=true \ - use_system_minigbm=true, \ - ozone_platform_wayland_external=true ozone_platform_wayland=false \ -" - -GN_ARGS = "\ - enable_memorymanager_webapi=false\ - ffmpeg_branding=\"Chrome\"\ - host_os=\"linux\"\ - ozone_auto_platforms=false\ - proprietary_codecs=true\ - target_os=\"linux\"\ - treat_warnings_as_errors=false\ - is_agl=true\ - use_cbe=true\ - is_chrome_cbe=true\ - use_cups=false\ - use_custom_libcxx=false\ - use_kerberos=false\ - use_neva_media=false\ - use_ozone=true\ - use_xkbcommon=true\ - use_pmlog=false\ - use_system_debugger_abort=true\ - use_webos_gpu_info_collector=false\ - ${PACKAGECONFIG_CONFARGS}\ -" - -# From Chromium's BUILDCONFIG.gn: -# Set to enable the official build level of optimization. This has nothing -# to do with branding, but enables an additional level of optimization above -# release (!is_debug). This might be better expressed as a tri-state -# (debug, release, official) but for historical reasons there are two -# separate flags. -# See also: https://groups.google.com/a/chromium.org/d/msg/chromium-dev/hkcb6AOX5gE/PPT1ukWoBwAJ -GN_ARGS += "is_debug=false is_official_build=true" - -# is_cfi default value is true for x86-64 builds with is_official_build=true. -# As of M63, we explicitly need to set it to false, otherwise we fail the -# following assertion in //build/config/sanitizers/sanitizers.gni: -# assert(!is_cfi || is_clang, -# "is_cfi requires setting is_clang = true in 'gn args'") -GN_ARGS += "is_cfi=false" - -# By default, passing is_official_build=true to GN causes its symbol_level -# variable to be set to "2". This means the compiler will be passed "-g2" and -# we will end up with a very large chrome binary (around 5Gb as of M58) -# regardless of whether DEBUG_BUILD has been set or not. In addition, binutils, -# file and other utilities are unable to read a 32-bit binary this size, which -# causes it not to be stripped. -# The solution is two-fold: -# 1. Make sure -g is not passed on 32-bit architectures via DEBUG_FLAGS. -g is -# the same as -g2. -g1 generates an 800MB binary, which is a lot more -# manageable. -# 2. Explicitly pass symbol_level=0 to GN. This causes -g0 to be passed -# instead, so that if DEBUG_BUILD is not set GN will not create a huge debug -# binary anyway. Since our compiler flags are passed after GN's, -g0 does -# not cause any issues if DEBUG_BUILD is set, as -g1 will be passed later. -DEBUG_FLAGS_remove_arm = "-g" -DEBUG_FLAGS_append_arm = "-g1" -DEBUG_FLAGS_remove_x86 = "-g" -DEBUG_FLAGS_append_x86 = "-g1" -GN_ARGS += "symbol_level=0" - -# We do not want to use Chromium's own Debian-based sysroots, it is easier to -# just let Chromium's build system assume we are not using a sysroot at all and -# let Yocto handle everything. -GN_ARGS += "use_sysroot=false" - -# Toolchains we will use for the build. We need to point to the toolchain file -# we've created, set the right target architecture and make sure we are not -# using Chromium's toolchain (bundled clang, bundled binutils etc). -GN_ARGS += "\ - custom_toolchain=\"//build/toolchain/yocto:yocto_target\" \ - gold_path=\"\" \ - host_toolchain=\"//build/toolchain/yocto:yocto_native\" \ - is_clang=${@is_default_cc_clang(d)} \ - clang_base_path=\"${@clang_install_path(d)}\" \ - clang_use_chrome_plugins=false \ - linux_use_bundled_binutils=false \ - target_cpu=\"${@gn_target_arch_name(d)}\" \ - v8_snapshot_toolchain=\"//build/toolchain/yocto:yocto_target\" \ -" - -# ARM builds need special additional flags (see ${S}/build/config/arm.gni). -# If we do not pass |arm_arch| and friends to GN, it will deduce a value that -# will then conflict with TUNE_CCARGS and CC. -# Note that as of M61 in some corner cases parts of the build system disable -# the "compiler_arm_fpu" GN config, whereas -mfpu is always passed via ${CC}. -# We might want to rework that if there are issues in the future. -def get_compiler_flag(params, param_name, d): - """Given a sequence of compiler arguments in |params|, returns the value of - an option |param_name| or an empty string if the option is not present.""" - for param in params: - if param.startswith(param_name): - return param.split('=')[1] - return '' - -ARM_FLOAT_ABI = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d)}" -ARM_FPU = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mfpu', d)}" -ARM_TUNE = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mcpu', d)}" -ARM_VERSION_aarch64 = "8" -ARM_VERSION_armv7a = "7" -ARM_VERSION_armv7ve = "7" -ARM_VERSION_armv6 = "6" - -# GN computes and defaults to it automatically where needed -# forcing it from cmdline breaks build on places where it ends up -# overriding what GN wants -TUNE_CCARGS_remove = "-mthumb" - -GN_ARGS_append_arm = " \ - arm_float_abi=\"${ARM_FLOAT_ABI}\" \ - arm_fpu=\"${ARM_FPU}\" \ - arm_tune=\"${ARM_TUNE}\" \ - arm_version=${ARM_VERSION} \ -" -# 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"' -# 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' - -# Disable glibc shims on musl -# tcmalloc does not play well with musl as of M62 (and possibly earlier). -# https://github.com/gperftools/gperftools/issues/693 -GN_ARGS_append_libc-musl = ' use_allocator_shim=false' - -# V8's JIT infrastructure requires binaries such as mksnapshot and -# mkpeephole to be run in the host during the build. However, these -# binaries must have the same bit-width as the target (e.g. a x86_64 -# host targeting ARMv6 needs to produce a 32-bit binary). Instead of -# depending on a third Yocto toolchain, we just build those binaries -# for the target and run them on the host with QEMU. -python do_create_v8_qemu_wrapper () { - """Creates a small wrapper that invokes QEMU to run some target V8 binaries - on the host.""" - qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'), - d.expand('${STAGING_DIR_HOST}${base_libdir}')] - qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST', True), - qemu_libdirs) - wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh') - with open(wrapper_path, 'w') as wrapper_file: - wrapper_file.write("""#!/bin/sh - -# This file has been generated automatically. -# It invokes QEMU to run binaries built for the target in the host during the -# build process. - -%s "$@" -""" % qemu_cmd) - os.chmod(wrapper_path, 0o755) -} -do_create_v8_qemu_wrapper[dirs] = "${B}" -addtask create_v8_qemu_wrapper after do_patch before do_configure - -python do_write_toolchain_file () { - """Writes a BUILD.gn file for Yocto detailing its toolchains.""" - toolchain_dir = d.expand("${S}/src/build/toolchain/yocto") - bb.utils.mkdirhier(toolchain_dir) - toolchain_file = os.path.join(toolchain_dir, "BUILD.gn") - write_toolchain_file(d, toolchain_file) -} -addtask write_toolchain_file after do_patch before do_configure - -# More options to speed up the build -GN_ARGS += "\ - enable_nacl=false\ - disable_ftp_support=true\ - enable_print_preview=false\ - enable_remoting=false\ - use_glib=true\ - use_gnome_keyring=false\ - use_pulseaudio=false\ -" - -# Respect ld-is-gold in DISTRO_FEATURES when enabling gold -# Similar patch applied in meta-browser -# http://patchwork.openembedded.org/patch/77755/ -EXTRA_OEGN_GOLD = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'use_gold=true', 'use_gold=false', d)}" -GN_ARGS += "${EXTRA_OEGN_GOLD}" - -# 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 = "(.*)" - -#CHROMIUM_PLUGINS_PATH = "${libdir}" -CBE_DATA_PATH = "${libdir}/cbe" -CBE_DATA_LOCALES_PATH = "${CBE_DATA_PATH}/locales" - -# The text relocations are intentional -- see comments in [GF-52468] -# TODO: check if we need INSANE_SKIP on ldflags -INSANE_SKIP_${PN} = "textrel ldflags" - - -do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+" -do_compile() { - if [ ! -f ${OUT_DIR}/${BUILD_TYPE}/build.ninja ]; then - do_configure - fi - - export PATH="${S}/depot_tools:$PATH" - ${S}/depot_tools/ninja -v -C ${OUT_DIR}/${BUILD_TYPE} ${TARGET} -} - -do_configure() { - configure_env -} - -configure_env() { - 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 ${SRC_DIR} - gn gen ${OUT_DIR}/${BUILD_TYPE} --args="${GN_ARGS}" -} - -WINDOW_SIZE ?= "1920,1080" - -configure_browser_settings() { - USER_AGENT="Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/${CHROMIUM_VERSION} Safari/537.31" - echo "${USER_AGENT}" > ${D_DIR}/user_agent_conf - #We can replace below WINDOW_SIZE values from build configuration if available - #echo "${WINDOW_SIZE}" > ${D_DIR}/window_size_conf -} - -install_chromium_browser() { - D_DIR=${D}${BROWSER_APPLICATION_DIR} - install -d ${D_DIR} - - # Install browser files - if [ -e "${SRC_DIR}/webos/install" ]; then - cd ${OUT_DIR}/${BUILD_TYPE} - xargs --arg-file=${SRC_DIR}/webos/install/default_browser/binary.list cp -R --no-dereference --preserve=mode,links -v --target-directory=${D_DIR} - cd ${SRC_DIR} - xargs --arg-file=${SRC_DIR}/webos/install/default_browser/runtime.list cp -R --no-dereference --preserve=mode,links -v --target-directory=${D_DIR} - fi - - # AGL does not have PMLOG - sed -i.bak s/PmLogCtl.*// ${D_DIR}/run_webbrowser - - # To execute chromium in JAILER, Security Part needs permissions change - # run_webbrowser: Script file for launching chromium - chmod -v 755 ${D_DIR}/chrome - chmod -v 755 ${D_DIR}/kill_webbrowser - chmod -v 755 ${D_DIR}/run_webbrowser - - configure_browser_settings -} - -install_webruntime() { - install -d ${D}${libdir} - install -d ${D}${includedir}/${BPN} - install -d ${D}${CBE_DATA_PATH} - install -d ${D}${CBE_DATA_LOCALES_PATH} - - # Install webos webview files - if [ -e "${SRC_DIR}/webos/install" ]; then - cd ${SRC_DIR} - xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/staging_inc.list cp --parents --target-directory=${D}${includedir}/${BPN} - - cd ${OUT_DIR}/${BUILD_TYPE} - - cp libcbe.so ${D}${libdir}/ - if [ "${WEBOS_LTTNG_ENABLED}" = "1" ]; then - # use bindir if building non-cbe - cp libchromium_lttng_provider.so ${D}${libdir}/ - fi - xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/binary.list cp --parents --target-directory=${D}${CBE_DATA_PATH} - cat ${SRC_DIR}/webos/install/weboswebruntime/data_locales.list | xargs -I{} install -m 755 -p {} ${D}${CBE_DATA_LOCALES_PATH} - fi - - # move this to separate mksnapshot-cross recipe once we figure out how to build just cross mksnapshot from chromium repository - install -d ${D}${bindir_cross} - gzip -c ${OUT_DIR}/${BUILD_TYPE}/${MKSNAPSHOT_PATH}mksnapshot > ${D}${bindir_cross}/${HOST_SYS}-mksnapshot.gz -} - -do_install() { - install_webruntime - install_chromium_browser -} - -WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION = " \ - ${webos_sysbus_prvservicesdir}/${BROWSER_APPLICATION}.service \ - ${webos_sysbus_pubservicesdir}/${BROWSER_APPLICATION}.service \ - ${webos_sysbus_prvrolesdir}/${BROWSER_APPLICATION}.json \ - ${webos_sysbus_pubrolesdir}/${BROWSER_APPLICATION}.json \ -" - -SYSROOT_DIRS_append = " ${bindir_cross}" - -PACKAGES_prepend = " \ - ${PN}-cross-mksnapshot \ - ${BROWSER_APPLICATION} \ -" - -FILES_${BROWSER_APPLICATION} += " \ - ${BROWSER_APPLICATION_DIR} \ - ${WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION} \ -" - -RDEPENDS_${BROWSER_APPLICATION} += "${PN}" - -VIRTUAL-RUNTIME_gpu-libs ?= "" -RDEPENDS_${PN} += "${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_${BROWSER_APPLICATION} += "libdir ldflags textrel" - -FILES_${PN} = " \ - ${libdir}/*.so \ - ${CBE_DATA_PATH}/* \ - ${libdir}/${BPN}/*.so \ - ${WEBOS_SYSTEM_BUS_DIRS} \ -" - -FILES_${PN}-dev = " \ - ${includedir} \ -" - -FILES_${PN}-cross-mksnapshot = "${bindir_cross}/${HOST_SYS}-mksnapshot.gz" diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc b/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc deleted file mode 100644 index 0fd55a638..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc +++ /dev/null @@ -1,157 +0,0 @@ -# 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. - -# GN host architecture helpers. -# -# BUILD_ARCH's value corresponds to what uname returns as the machine name. -# The mapping in gn_host_arch_name() tries to match several possible values -# returned by the Linux kernel in uname(2) into the corresponding values GN -# understands. -def gn_host_arch_name(d): - """Returns a GN architecture name corresponding to the build host's machine - architecture.""" - import re - arch_translations = { - r'aarch64.*': 'arm64', - r'arm.*': 'arm', - r'i[3456]86$': 'x86', - r'x86_64$': 'x64', - } - build_arch = d.getVar("BUILD_ARCH") - for arch_regexp, gn_arch_name in arch_translations.items(): - if re.match(arch_regexp, build_arch): - return gn_arch_name - bb.fatal('Unsuported BUILD_ARCH value: "%s"' % build_arch) - -# GN target architecture helpers. -# -# Determining the target architecture is more difficult, as there are many -# different values we can use on the Yocto side (e.g. TUNE_ARCH, TARGET_ARCH, -# MACHINEOVERRIDES etc). What we do is define the mapping with regular, -# non-Python variables with overrides that are generic enough (i.e. "x86" -# instead of "i586") and then use gn_target_arch_name() to return the right -# value with some validation. -GN_TARGET_ARCH_NAME_aarch64 = "arm64" -GN_TARGET_ARCH_NAME_arm = "arm" -GN_TARGET_ARCH_NAME_x86 = "x86" -GN_TARGET_ARCH_NAME_x86-64 = "x64" - -BUILD_CC_toolchain-clang = "clang" -BUILD_CXX_toolchain-clang = "clang++" -BUILD_LD_toolchain-clang = "clang" - -# knob for clang, when using meta-clang to provide clang and case where -# clang happens to be default compiler for OE we should let it use clang -def is_default_cc_clang(d): - """Return true if clang is default cross compiler.""" - toolchain = d.getVar("TOOLCHAIN") - overrides = d.getVar("OVERRIDES") - if toolchain == "clang" and "toolchain-clang" in overrides.split(":"): - return "true" - return "false" - -def clang_install_path(d): - """Return clang compiler install path.""" - return d.getVar("STAGING_BINDIR_NATIVE") - -def gn_target_arch_name(d): - """Returns a GN architecture name corresponding to the target machine's - architecture.""" - name = d.getVar("GN_TARGET_ARCH_NAME") - if name is None: - bb.fatal('Unsupported target architecture. A valid override for the ' - 'GN_TARGET_ARCH_NAME variable could not be found.') - return name - -def write_toolchain_file(d, file_path): - """Creates a complete GN toolchain file in |file_path|.""" - import string - gcc_toolchain_tmpl = string.Template( - 'gcc_toolchain("${toolchain_name}") {\n' - ' cc = "${cc}"\n' - ' cxx = "${cxx}"\n' - ' ar = "${ar}"\n' - ' ld = cxx # GN expects a compiler, not a linker.\n' - ' nm = "${nm}"\n' - ' readelf = "${readelf}"\n' - ' extra_cflags = "${extra_cflags}"\n' - ' extra_cppflags = "${extra_cppflags}"\n' - ' extra_cxxflags = "${extra_cxxflags}"\n' - ' extra_ldflags = "${extra_ldflags}"\n' - ' toolchain_args = {\n' - ' current_cpu = "${current_cpu}"\n' - ' current_os = "linux"\n' - ' is_clang = false\n' - ' }\n' - '}\n' - ) - clang_toolchain_tmpl = string.Template( - 'clang_toolchain("clang_${toolchain_name}") {\n' - ' extra_cflags = "${extra_cflags}"\n' - ' extra_cppflags = "${extra_cppflags}"\n' - ' extra_cxxflags = "${extra_cxxflags}"\n' - ' extra_ldflags = "${extra_ldflags}"\n' - ' toolchain_args = {\n' - ' current_cpu = "${current_cpu}"\n' - ' current_os = "linux"\n' - ' is_clang = true\n' - ' use_gold = true\n' - ' }\n' - '}\n' - ) - - native_toolchain = { - 'toolchain_name': 'yocto_native', - 'current_cpu': gn_host_arch_name(d), - 'cc': d.expand('${BUILD_CC}'), - 'cxx': d.expand('${BUILD_CXX}'), - 'ar': d.expand('${BUILD_AR}'), - 'nm': d.expand('${BUILD_NM}'), - 'readelf': d.expand('${BUILD_PREFIX}readelf'), - 'extra_cflags': d.expand('${BUILD_CFLAGS}'), - 'extra_cppflags': d.expand('${BUILD_CPPFLAGS}'), - 'extra_cxxflags': d.expand('${BUILD_CXXFLAGS}'), - 'extra_ldflags': d.expand('${BUILD_LDFLAGS}'), - } - target_toolchain = { - 'toolchain_name': 'yocto_target', - 'current_cpu': gn_target_arch_name(d), - 'cc': d.expand('${CC}'), - 'cxx': d.expand('${CXX}'), - 'ar': d.expand('${AR}'), - 'nm': d.expand('${NM}'), - 'readelf': d.expand('${TARGET_PREFIX}readelf'), - 'extra_cflags': d.expand('${TARGET_CFLAGS}'), - 'extra_cppflags': d.expand('${TARGET_CPPFLAGS}'), - 'extra_cxxflags': d.expand('${TARGET_CXXFLAGS}'), - 'extra_ldflags': d.expand('${TARGET_LDFLAGS}'), - 'strip': '', - } - - with open(file_path, 'w') as toolchain_file: - toolchain_file.write( - '# This file has been generated automatically.\n' - '\n' - 'import("//build/config/sysroot.gni")\n' - 'import("//build/toolchain/gcc_toolchain.gni")\n' - '\n' - ) - toolchain_file.write(gcc_toolchain_tmpl.substitute(native_toolchain)) - toolchain_file.write(gcc_toolchain_tmpl.substitute(target_toolchain)) - toolchain_file.write(clang_toolchain_tmpl.substitute(native_toolchain)) - toolchain_file.write(clang_toolchain_tmpl.substitute(target_toolchain)) diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env deleted file mode 100644 index c8ddc5173..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env +++ /dev/null @@ -1,202 +0,0 @@ -##### AGL: not set in WebAppMgr@.service -#XDG_SESSION_ID="c2" - -##### AGL: set by WebAppMgr@.service (depends on user) -#XDG_RUNTIME_DIR="/run/user/%i" - -# Set wam executable file path -HOOK_SEGV=NO -WAM_EXE_PATH="/usr/bin/WebAppMgr" - -# Set wam name for user-agent -WAM_NAME="WebAppManager" - -# Only allow UTF8 encoding for luna-service messages. -LS_ENABLE_UTF8=1 - -# Set effective userid and groupid -#WAM_UID="wam" -#WAM_GID="compositor" - -# Set location of error page (will follow localization rules based on this path) -#WAM_ERROR_PAGE="file:///usr/share/localization/wam/loaderror.html" - -# suspending javascript execution delay for page visibility -WAM_SUSPEND_DELAY_IN_MS=250 - -#if [ -e "etc/wam/make_shm.sh" ] ; then -# /etc/wam/make_shm.sh -#fi - -# Set user data directory for WebAppMgr -##### AGL: set by WebAppMgr@.service (depends on user) -#WAM_DATA_PATH="/home/%i/wamdata" - -# ensure that wam data directories exist -#mkdir -p ${WAM_DATA_PATH} - -# set directories permission -#chown ${WAM_UID}:${WAM_GID} ${WAM_DATA_PATH} - -# setup 50 Mb maximum for ApplicationCache -WAM_APPCACHE_MAXSIZE=52428800 - -# setup 10 Mb maximum for ApplicationCache per domain -WAM_APPCACHE_DOMAINLIMIT=10485760 - -# setup 50 Mb maximum for DiskCache -WAM_DISKCACHE_MAXSIZE=52428800 - -# setup 256 Kb maximum for resource buffer allocation -WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE=262144 - -# setup 1 Mb for resource buffer -WAM_RESOURCE_BUFFER_SIZE=1048576 - -# setup 200 seconds for watchdog timeout of render process -WATCHDOG_RENDER_TIMEOUT=200 - -# setup nubmer of raster threads to 1 -BLINK_NUM_RASTER_THREADS=2 - -# use default tile width if not sed by recipe -#if [ "$BLINK_NUM_RASTER_THREADS" = "WEBOS${BLINK_NUM_RASTER_THREADS#WEBOS}" ]; then -BLINK_NUM_RASTER_THREADS=1 -#fi - -# setup 6 Mb maximum for the program GPU cache -GPU_PROGRAM_CACHE_SIZE=6144 - -# disable using enyo system app specfic optimization -# currently used optimizations : inline caching off -#USE_SYSTEM_APP_OPTIMIZATION="0" - -# Set location of NaCl modules -#CHROMIUM_PATH="/usr/palm/applications/com.lge.app.chromium" -#NACL_PLUGIN=${CHROMIUM_PATH}"/libppGoogleNaClPluginChrome.so" -#NACL_IRT_LIBRARY=${CHROMIUM_PATH}"/nacl_irt_arm.nexe" -#NACL_HELPER=${CHROMIUM_PATH}"/nacl_helper" -#NACL_HELPER_BOOTSTRAP=${CHROMIUM_PATH}"/nacl_helper_bootstrap" - -# Set location of NPAPI plugins for all Apps including default Apps -# This is for the flash plugin of Signage, webOS TV doesn't use it. -#PRIVILEGED_PLUGIN_PATH="" - -# Set location of NPAPI plugins for NetCast Apps -# NetCast Apps should access only the plugins in this path -#NETCAST_PLUGIN_PATH="/usr/lib/BrowserPlugins" - -# Set location of NPAPI plugins for HbbTV app. -#HBBTV_PLUGIN_PATH="/usr/lib/HbbtvPlugins" - -# Set InetTV player stored path -#INETTV_HTML_PLAYER_PATH="/usr/share/inettv/inettv_player/index.html" - -# Set location of extra libraries -#CDM_LIB_PATH="/usr/lib" - -# Set location of all NPAPI plugins -NPAPI_PLUGIN_PATH=${HBBTV_PLUGIN_PATH}":"${NETCAST_PLUGIN_PATH}":"${PRIVILEGED_PLUGIN_PATH} - -#if [ -e "etc/wam/make_shm.sh" ] ; then -# /etc/wam/make_shm.sh -#fi - -# setup 8 Mb minimum codecache capacity -JSC_minGlobalCodeCacheCapacity=8388608 - -# Enable more explicit logging of timing with regards to rendering -# export WAM2_ENABLE_DEBUG_RENDER_TIMING=1 - -# enable Web Inspector and Tellurium if in developer mode -TELLURIUM_NUB_PATH=/usr/palm/tellurium/telluriumnub.js -ENABLE_INSPECTOR=1 - -# Enable cursor by default -ENABLE_CURSOR_BY_DEFAULT=1 - -# Enable launch optimization -ENABLE_LAUNCH_OPTIMIZATION=1 - -# Set the duration(seconds) passed from last network activity (e.g. FMP Detector) -# If set to a positive value, adjust a custom timeout for a network stable timer in FMPDetector -NETWORK_STABLE_TIMEOUT=3 - -# please keep it in alphabetical order -#WAM_EXTRA_FLAGS="" -#WAM_JS_FLAGS="" -#WAM_COMMON_SWITCHES=" \ -# --application-cache-domain-limit=$WAM_APPCACHE_DOMAINLIMIT \ -# --application-cache-size=$WAM_APPCACHE_MAXSIZE \ -# --browser-subprocess-path=$WAM_EXE_PATH \ -# --disable-direct-npapi-requests \ -# --disable-extensions \ -# --disable-low-res-tiling \ -# --disable-new-video-renderer \ -# --disk-cache-size=$WAM_DISKCACHE_MAXSIZE \ -# --enable-aggressive-release-policy \ -# --enable-accelerated-plugin-rendering \ -# --accelerated-plugin-rendering-blacklist=device;drmAgent;sound;service \ -# --enable-gpu-rasterization \ -# --disable-gpu-rasterization-for-first-frame \ -# --enable-key-event-throttling \ -# --enable-threaded-compositing \ -# --enable-watchdog \ -# --hide-selection-handles \ -# --ignore-gpu-blacklist \ -# --ignore-netif=p2p \ -# --in-process-gpu \ -# --max-unused-resource-memory-usage-percentage=0 \ -# --network-stable-timeout=$NETWORK_STABLE_TIMEOUT \ -# --noerrdialogs \ -# --num-raster-threads=$BLINK_NUM_RASTER_THREADS \ -# --ozone-platform=wayland \ -# --remote-debugging-port=9998 \ -# --resource-buffer-max-allocation-size=$WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE \ -# --resource-buffer-size=$WAM_RESOURCE_BUFFER_SIZE \ -# --touch-events=disabled \ -# --ui-disable-opaque-shader-program \ -# --user-agent-suffix=SmartTV \ -# --user-data-dir=$WAM_DATA_PATH \ -# --enable-devtools-experiments \ -# --webos-wam \ " - -#WAM_LITE_SWITCHES=" --in-process-zygote " - -#export WAM_WEBOS_LITE=NO -#if [ "${WAM_WEBOS_LITE}" = "YES" ] ; then -# export WAM_SWITCHES=${WAM_COMMON_SWITCHES}${WAM_LITE_SWITCHES} -# export SKIA_FONT_CACHE_SIZE=1 -# export SKIA_IMAGE_CACHE_SIZE=40 -# export SKIA_BACKGROUND_FONT_CACHE_SIZE=0 -#else -# export WAM_SWITCHES=${WAM_COMMON_SWITCHES} -# export SKIA_FONT_CACHE_SIZE=8 -# export SKIA_IMAGE_CACHE_SIZE=80 -# export SKIA_BACKGROUND_FONT_CACHE_SIZE=512 -#fi - -#export WAM_EXTRA_SKIA_CACHE_SWITCHES=" \ -# --skia-font-cache-size-mb=$SKIA_FONT_CACHE_SIZE \ -# --skia-image-cache-size-mb=$SKIA_IMAGE_CACHE_SIZE \ -# --skia-background-font-cache-size-kb=$SKIA_BACKGROUND_FONT_CACHE_SIZE \ -# " - -#export WAM_EXTRA_GPU_TUNING_SWITCHES=" \ -# --gpu-program-cache-size-kb=$GPU_PROGRAM_CACHE_SIZE \ -# " -#export WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES=" \ -# --watchdog-render-timeout=$WATCHDOG_RENDER_TIMEOUT \ -# " - -#WEBOS_LOAD_ACCESSIBILITY_PLUGIN=1 - -#WAM_V8_CODE_CACHE_SWITCHES=" --enable-local-resource-code-cache --disallow-code-cache-from-file-uris-with-query-string " - -# Load any special configuration from plugins -#if [ -e "/etc/wam/plugins/conf.sh" ] ; then -# . /etc/wam/plugins/conf.sh || true -#fi - -#exec $WAM_EXE_PATH $WAM_SWITCHES $WAM_EXTRA_SKIA_CACHE_SWITCHES $WAM_EXTRA_GPU_TUNING_SWITCHES $WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES $WAM_EXTRA_FLAGS $WAM_V8_CODE_CACHE_SWITCHES --js-flags="$WAM_JS_FLAGS" - diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service deleted file mode 100644 index a855bf9f5..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service +++ /dev/null @@ -1,37 +0,0 @@ -# @@@LICENSE -# -# Copyright (c) 2017-2018 LG Electronics, Inc. -# -# Confidential computer software. Valid license from LG required for -# possession, use or copying. Consistent with FAR 12.211 and 12.212, -# Commercial Computer Software, Computer Software Documentation, and -# Technical Data for Commercial Items are licensed to the U.S. Government -# under vendor's standard commercial license. -# -# LICENSE@@@ - -[Unit] -Description="WebAppMgr is responsible for running web apps and manage their lifecycle" -After=afm-service-homescreen-service--0.1--main@%i.service weston@display.service -Wants=afm-service-homescreen-service--0.1--main@%i.service -BindsTo=weston@display.service - -[Service] -Type=simple -User=%i -Slice=user-%i.slice -SmackProcessLabel=System -SupplementaryGroups=audio display -UMask=0077 -CapabilityBoundingSet= -OOMScoreAdjust=-1000 -EnvironmentFile=-/etc/default/WebAppMgr.env -Environment=XDG_RUNTIME_DIR=/run/user/%i -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus -Environment=WAM_DATA_PATH="/home/%i/wamdata" -ExecStart=/usr/bin/WebAppMgr --no-sandbox --in-process-gpu --remote-debugging-port=9998 --user-data-dir="/home/%i/wamdata" --webos-wam -Restart=on-failure -RestartSec=50 - -[Install] -WantedBy=default.target diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch deleted file mode 100644 index 829abe07f..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch +++ /dev/null @@ -1,56 +0,0 @@ -From f31e93261f34abaa3dcdc4959963f5b5a8983002 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= -Date: Thu, 25 Jun 2020 19:47:24 +0200 -Subject: [PATCH] Set webapp roles that are max 12 characters long. - -From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= - -This is a workaround for SPEC-3127. To prevent repeated roles as much -as possible, I'm using the appid as a basis instead of "Webapp-" + -host + port, which has many chances to be redundant in the first 12 -chars. - -Bug-AGL: SPEC-3127 - ---- - src/agl/WebRuntimeAGL.cpp | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/src/agl/WebRuntimeAGL.cpp b/src/agl/WebRuntimeAGL.cpp -index aed928b..efd2ee4 100644 ---- a/src/agl/WebRuntimeAGL.cpp -+++ b/src/agl/WebRuntimeAGL.cpp -@@ -274,7 +274,6 @@ int WebAppLauncherRuntime::run(int argc, const char** argv) { - - m_id = getAppId(args); - m_url = getAppUrl(args); -- m_role = "WebApp"; - - setup_signals(); - -@@ -326,15 +325,9 @@ bool WebAppLauncherRuntime::init() { - if (n != std::string::npos) { - std::string sport = authority.substr(n+1); - m_host = authority.substr(0, n); -- m_role.push_back('-'); -- m_role.append(m_host); -- m_role.push_back('-'); -- m_role.append(sport); - m_port = stringTo(sport); - } else { - m_host = authority; -- m_role.push_back('-'); -- m_role.append(m_host); - } - } - -@@ -375,6 +368,9 @@ bool WebAppLauncherRuntime::init() { - m_role = "homescreen"; - else if (m_id.rfind("webapps-homescreen", 0) == 0) - m_role = "homescreen"; -+ else { -+ m_role = m_id.substr(0,12); -+ } - - LOG_DEBUG("id=[%s], name=[%s], role=[%s], url=[%s], host=[%s], port=%d, token=[%s], width=[%s], height[%s], surface_type[%d], panel_type[%d]", - m_id.c_str(), m_name.c_str(), m_role.c_str(), m_url.c_str(), diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb b/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb deleted file mode 100644 index d50a14fa0..000000000 --- a/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb +++ /dev/null @@ -1,51 +0,0 @@ -SUMMARY = "WAM" -AUTHOR = "Jani Hautakangas " -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -inherit cmake - -DEPENDS = "glib-2.0 jsoncpp boost chromium68 wayland-ivi-extension libhomescreen" - -EXTRA_OECMAKE = "\ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=${prefix} \ - -DPLATFORM_NAME=${@'${DISTRO}'.upper().replace('-', '_')} \ - -DCHROMIUM_SRC_DIR=${STAGING_INCDIR}/chromium68" - -PR="r0" - -PROVIDES += "virtual/webruntime" -RPROVIDES_${PN} += "virtual/webruntime" - -SRC_URI = "\ - git://github.com/igalia/${BPN}.git;branch=WIP@6.agl.compositor;protocol=https \ - file://WebAppMgr@.service \ - file://WebAppMgr.env \ - file://trunc-webapp-roles.patch \ -" -S = "${WORKDIR}/git" -SRCREV = "bd650046b688eb1593ae68c16ba3912837507d08" - -do_install_append() { - install -d ${D}${sysconfdir}/wam - install -v -m 644 ${S}/files/launch/security_policy.conf ${D}${sysconfdir}/wam/security_policy.conf - install -d ${D}${systemd_system_unitdir} - install -v -m 644 ${WORKDIR}/WebAppMgr@.service ${D}${systemd_system_unitdir}/WebAppMgr@.service - install -d ${D}${sysconfdir}/default/ - install -v -m 644 ${WORKDIR}/WebAppMgr.env ${D}${sysconfdir}/default/WebAppMgr.env - ln -snf WebAppMgr ${D}${bindir}/web-runtime - install -d ${D}${systemd_system_unitdir}/afm-user-session@.target.wants - ln -sf ../WebAppMgr@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/ -} - -FILES_${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_system_unitdir}" - -CXXFLAGS_append_agl-devel = " -DAGL_DEVEL" - -do_install_append_agl-devel() { - # Enable remote inspector and dev mode - install -d ${D}${localstatedir}/agl-devel/preferences - touch ${D}${localstatedir}/agl-devel/preferences/debug_system_apps - touch ${D}${localstatedir}/agl-devel/preferences/devmode_enabled -} diff --git a/meta-agl-profile-graphical-qt5/LICENSE b/meta-agl-profile-graphical-qt5/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-graphical-qt5/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only b/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical-qt5/LICENSE.MIT b/meta-agl-profile-graphical-qt5/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-graphical-qt5/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical-qt5/conf/layer.conf b/meta-agl-profile-graphical-qt5/conf/layer.conf deleted file mode 100644 index ef39630d8..000000000 --- a/meta-agl-profile-graphical-qt5/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofilegraphicalqt5" -BBFILE_PATTERN_aglprofilegraphicalqt5 = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofilegraphicalqt5 = "70" - -LAYERSERIES_COMPAT_aglprofilegraphicalqt5 = "dunfell" diff --git a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb b/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb deleted file mode 100644 index a31c666ca..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "The software for application framework of AGL IVI profile" -DESCRIPTION = "A set of packages belong to AGL application framework which required by \ -Native App Fw Subsystem" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-appfw-native \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-appfw-native-qt5 \ - " diff --git a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb deleted file mode 100644 index 2f0f01fec..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb +++ /dev/null @@ -1,16 +0,0 @@ -SUMMARY = "The software for application framework of AGL IVI profile" -DESCRIPTION = "A set of packages belong to AGL application framework" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-appfw-qt5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-appfw-native \ -" \ No newline at end of file diff --git a/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb b/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb deleted file mode 100644 index 802167b2d..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb +++ /dev/null @@ -1,11 +0,0 @@ -require recipes-devtools/libafb-helpers/libafb-helpers_git.inc - -DEPENDS_append = " qtwebsockets" -RDEPENDS_${PN}_append = " af-binder" - -inherit cmake_qt5 - -EXTRA_OECMAKE_append = " -DAFB_HELPERS_QT=ON -DAFB_HELPERS=OFF" - -ALLOW_EMPTY_${PN} = "1" - diff --git a/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb b/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb deleted file mode 100644 index dd270d048..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "AGL Qt AppFW Library" -DESCRIPTION = "libqtappfw" -HOMEPAGE = "http://docs.automotivelinux.org" -LICENSE = "Apache-2.0" -SECTION = "libs" - -BBCLASSEXTEND = "nativesdk" - -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -DEPENDS += "qtbase qtdeclarative qtwebsockets" - -inherit cmake_qt5 - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqtappfw;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "fe20f1b029f67dee1f790ade7a9114086f2abd38" -S = "${WORKDIR}/git/" - -# PV needs to be modified with SRCPV to work AUTOREV correctly -PV = "0.0+git${SRCPV}" diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb deleted file mode 100755 index 5147ea44a..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Cross SDK of Full AGL Distribution for IVI profile" - -DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \ -It includes the full meta-toolchain, plus developement headers and libraries \ -to form a standalone cross SDK." - -require agl-image-graphical-qt5.bb - -LICENSE = "MIT" - -require agl-image-graphical-qt5-crosssdk.inc - -inherit populate_sdk populate_sdk_qt5 - -# Task do_populate_sdk and do_rootfs can't be exec simultaneously. -# Both exec "createrepo" on the same directory, and so one of them -# can failed (randomly). -addtask do_populate_sdk after do_rootfs diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc deleted file mode 100644 index f43bb07d7..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc +++ /dev/null @@ -1,14 +0,0 @@ -require recipes-platform/images/agl-image-minimal-crosssdk.inc - -TOOLCHAIN_TARGET_TASK += "libafb-helpers-qt-staticdev" - -# Add wayland-scanner to SDK (SPEC-945) -# Use TOOLCHAIN_HOST_TASK instead of adding to the packagegroup -# wayland-scanner is in nativesdk-wayland-dev ! -# option: add also nativesdk-qtwayland-tools -TOOLCHAIN_HOST_TASK_append = " nativesdk-wayland nativesdk-wayland-dev" - -TOOLCHAIN_HOST_TASK_append = " nativesdk-perl-modules " - -# Add qtwaylandscanner to the SDK -TOOLCHAIN_HOST_TASK_append = " nativesdk-qtwayland-tools " diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb deleted file mode 100644 index bcfd724fa..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb +++ /dev/null @@ -1,5 +0,0 @@ -SUMMARY = "A very basic Wayland image with a terminal" - -require agl-image-graphical-qt5.inc - -LICENSE = "MIT" diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc deleted file mode 100644 index 114d06a07..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc +++ /dev/null @@ -1 +0,0 @@ -require recipes-platform/images/agl-image-weston.inc diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb deleted file mode 100644 index a05d69f53..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb +++ /dev/null @@ -1,29 +0,0 @@ -SUMMARY = "Qt5 for native GUI framework of AGL IVI profile" -DESCRIPTION = "A set of Qt5 packages which required by Native App Fw Subsystem" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-appfw-native-qt5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - qtbase \ - qtbase-dev \ - qtbase-plugins \ - qtbase-staticdev \ - qtbase-tools \ - qtdeclarative \ - qtdeclarative-qmlplugins \ - qtdeclarative-tools \ - qtcharts \ - qtwayland \ - qtwayland-plugins \ - qtwayland-tools \ - qtgraphicaleffects-qmlplugins \ - qtvirtualkeyboard \ - " diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb deleted file mode 100644 index adebabe76..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb +++ /dev/null @@ -1,26 +0,0 @@ -SUMMARY = "The examples to test Qt5 on AGL Demo Platform" -DESCRIPTION = "A set of packages which contains Qt5 examples" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-demo-qt-examples \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - qt3d-examples \ - qtbase-examples \ - qtconnectivity-examples \ - qtdeclarative-examples \ - qtlocation-examples \ - qtmultimedia-examples \ - qtsensors-examples \ - qtsystems-examples \ - qttools-examples \ - qtwayland-examples \ - qtxmlpatterns-examples \ - " diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb deleted file mode 100644 index 74b35f70a..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "The middlewares for AGL IVI profile" -DESCRIPTION = "The set of packages required for AGL Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-graphical-qt5 \ - profile-graphical-qt5 \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-profile-graphical \ - packagegroup-agl-appfw-native-qt5 \ -" - -RDEPENDS_${PN} += "\ - agl-login-manager \ - " - -RDEPENDS_profile-graphical-qt5 = "${PN}" diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend deleted file mode 100644 index 08afa6c7f..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend +++ /dev/null @@ -1,18 +0,0 @@ -# add missing dependencies for SDK - -RDEPENDS_${PN} += " \ - qttools-plugins \ - qtquickcontrols-dev \ - qtquickcontrols-qmlplugins \ - qtquickcontrols2-dev \ - qtquickcontrols2-mkspecs \ - qtquickcontrols2-qmlplugins \ -" - -# remove dependency on qtwebkit (still added to SDK by packagegroup-qt5-toolchain-target) -# see SPEC-1159 -RDEPENDS_${PN}_remove = " \ - qtwebkit-dev \ - qtwebkit-mkspecs \ - qtwebkit-qmlplugins \ -" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb deleted file mode 100644 index 09a262eb7..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb +++ /dev/null @@ -1,13 +0,0 @@ -SUMMARY = "A wrapper library of libhomescreen for Qt Application in AGL" -SECTION = "libs" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93" - -DEPENDS = "qtbase libhomescreen" -RDEPENDS_${PN} = "libhomescreen" - -inherit qmake5 - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqthomescreen.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "b218476402bceda7eb42d41064552a7261ff3205" -S = "${WORKDIR}/git" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb deleted file mode 100644 index dbeda2d11..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb +++ /dev/null @@ -1,25 +0,0 @@ -SUMMARY = "Execute Script QML plugin" -DESCRIPTION = "This provides a simple QML plugin able to execute script file." - -LICENSE = "CLOSED" - -DEPENDS = "qtbase-native qtdeclarative" - -SRC_URI = "git://github.com/ntanibata/qml-execscript-plugin.git;protocol=git;" -SRCREV = "1f05c44cccd8aef485d8df8206c8df4e5ad6f310" -S = "${WORKDIR}/git" - -inherit qmake5 - -EXTRA_OECONF = "--with-moc-dir=${STAGING_BINDIR_NATIVE}/qt5" -QML_LIBDIR = "${libdir}/qt5/qml" - -do_install() { - install -d ${D}${libdir}/qt5/qml/execScript/ - install -m 0755 execScript/*.so ${D}${libdir}/qt5/qml/execScript/ - install -m 0644 ../git/execScript/qmldir ${D}${libdir}/qt5/qml/execScript/ -} - -FILES_${PN} += "${QML_LIBDIR}/execScript/libexecscriptplugin.so" -FILES_${PN} += "${QML_LIBDIR}/execScript/qmldir" -FILES_${PN}-dbg += "${QML_LIBDIR}/execScript/.debug" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend deleted file mode 100644 index b7cfe8dce..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -# Backport this fix from meta-qt5: -# https://github.com/meta-qt5/meta-qt5/commit/bf7cdd963008f2d61bc4c324fff2bfafe511fb5f -SRC_URI_remove = "file://0012-qdbuscpp2xml.pro-do-not-build-with-bootstrapped-depe.patch" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch deleted file mode 100644 index 10a1ddd88..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch +++ /dev/null @@ -1,30 +0,0 @@ -From a4943bb5c7fdf5eb297223d2c3bb02d2271bea48 Mon Sep 17 00:00:00 2001 -From: Risto Avila -Date: Thu, 17 Dec 2015 04:22:53 +0200 -Subject: [PATCH] Force qdbus to make introspect for every findMetaObject - ---- - src/dbus/qdbusintegrator.cpp | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index cce8b9c..ae2a9dc 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -2512,8 +2512,11 @@ QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &pa - if (!interface.isEmpty()) { - QDBusReadLocker locker(FindMetaObject1Action, this); - QDBusMetaObject *mo = cachedMetaObjects.value(interface, 0); -- if (mo) -- return mo; -+ if (mo) { -+ // service is not unique. Remove cached object to force introspect -+ cachedMetaObjects.remove(interface); -+ delete mo; -+ } - } - - // introspect the target object --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend deleted file mode 100644 index e939fa35a..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend +++ /dev/null @@ -1,12 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -PACKAGECONFIG_WAYLAND = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)}" -PACKAGECONFIG_GL = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}" -PACKAGECONFIG_append = " ${PACKAGECONFIG_WAYLAND} icu accessibility" -PACKAGECONFIG_append = " fontconfig" -PACKAGECONFIG_append = " sql-sqlite" - -EXTRA_OECONF_append = "" - -# '-qpa wayland-egl' set wayland-egl as default of platform plagins -PACKAGECONFIG[wayland]="-qpa wayland-egl -no-qpa-platform-guard" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch deleted file mode 100644 index ba8a991ed..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 58197439eade86e7efc6fe98116c0092ea429d29 Mon Sep 17 00:00:00 2001 -From: Matt Ranostay -Date: Tue, 10 Mar 2020 13:59:58 -0700 -Subject: [PATCH] mapbox: update API url to match new schema - ---- - src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp | 7 ++++--- - src/plugins/geoservices/mapbox/qmapboxcommon.h | 2 +- - 2 files changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp b/src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp -index 0b128556..bd2be6b6 100644 ---- a/src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp -+++ b/src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp -@@ -88,12 +88,13 @@ QGeoTiledMapReply *QGeoTileFetcherMapbox::getTileImage(const QGeoTileSpec &spec) - request.setRawHeader("User-Agent", m_userAgent); - - request.setUrl(QUrl(mapboxTilesApiPath + -- ((spec.mapId() >= m_mapIds.size()) ? QStringLiteral("mapbox.streets") : m_mapIds[spec.mapId() - 1]) + QLatin1Char('/') + -+ m_mapIds[m_mapIds.size() - 1] + -+ QStringLiteral("/tiles/256/") + - QString::number(spec.zoom()) + QLatin1Char('/') + - QString::number(spec.x()) + QLatin1Char('/') + - QString::number(spec.y()) + -- ((m_scaleFactor > 1) ? (QLatin1Char('@') + QString::number(m_scaleFactor) + QLatin1String("x.")) : QLatin1String(".")) + -- m_format + QLatin1Char('?') + -+ ((m_scaleFactor > 1) ? (QLatin1Char('@') + QString::number(m_scaleFactor) + QLatin1String("x")) : QLatin1String("")) + -+ QLatin1Char('?') + - QStringLiteral("access_token=") + m_accessToken)); - - QNetworkReply *reply = m_networkManager->get(request); -diff --git a/src/plugins/geoservices/mapbox/qmapboxcommon.h b/src/plugins/geoservices/mapbox/qmapboxcommon.h -index e60c4e83..4b2ea98d 100644 ---- a/src/plugins/geoservices/mapbox/qmapboxcommon.h -+++ b/src/plugins/geoservices/mapbox/qmapboxcommon.h -@@ -46,7 +46,7 @@ - - QT_BEGIN_NAMESPACE - --static const QString mapboxTilesApiPath = QStringLiteral("http://api.tiles.mapbox.com/v4/"); -+static const QString mapboxTilesApiPath = QStringLiteral("https://api.mapbox.com/"); - - // https://www.mapbox.com/api-documentation/#geocoding - static const QString mapboxGeocodingApiPath = QStringLiteral("https://api.mapbox.com/geocoding/v5/mapbox.places/"); --- -2.25.0 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend deleted file mode 100644 index bcda6a1e5..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend +++ /dev/null @@ -1,14 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "\ - file://0001-mapbox-update-API-url-to-match-new-schema.patch \ - " - -# Need to explicitly enable the various plugins -PACKAGECONFIG += " \ - geoservices_osm \ - geoservices_here \ - geoservices_itemsoverlay \ - geoservices_mapbox \ - geoservices_mapboxgl \ -" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch deleted file mode 100644 index 007e46763..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch +++ /dev/null @@ -1,80 +0,0 @@ -From ed61f1d932c5c6d38458fcd2e1d5d154383f017e Mon Sep 17 00:00:00 2001 -From: Tasuku Suzuki -Date: Mon, 12 Dec 2016 16:32:47 +0900 -Subject: [PATCH] metadata image support with the "data" URL scheme for QtQuick - -add posterImage, coverArtImage and thumbnailImage to metadata - -Change-Id: I10b9bae10c219ffa41506d6e6b345020790217a6 ---- - .../multimedia/qdeclarativemediametadata_p.h | 33 ++++++++++++++++++++++ - 1 file changed, 33 insertions(+) - -diff --git a/src/imports/multimedia/qdeclarativemediametadata_p.h b/src/imports/multimedia/qdeclarativemediametadata_p.h -index ede7f87..6a6a815 100644 ---- a/src/imports/multimedia/qdeclarativemediametadata_p.h -+++ b/src/imports/multimedia/qdeclarativemediametadata_p.h -@@ -51,6 +51,9 @@ - // We mean it. - // - -+#include -+#include -+#include - #include - #include - #include -@@ -153,6 +156,9 @@ class QDeclarativeMediaMetaData : public QObject - Q_PROPERTY(QVariant gpsProcessingMethod READ gpsProcessingMethod WRITE setGPSProcessingMethod NOTIFY metaDataChanged) - Q_PROPERTY(QVariant gpsAreaInformation READ gpsAreaInformation WRITE setGPSAreaInformation NOTIFY metaDataChanged) - -+ Q_PROPERTY(QVariant posterImage READ posterImage NOTIFY metaDataChanged) -+ Q_PROPERTY(QVariant coverArtImage READ coverArtImage NOTIFY metaDataChanged) -+ Q_PROPERTY(QVariant thumbnailImage READ thumbnailImage NOTIFY metaDataChanged) - public: - QDeclarativeMediaMetaData(QMediaObject *player, QObject *parent = 0) - : QObject(parent) -@@ -425,6 +431,16 @@ QT_WARNING_POP - void setGPSAreaInformation(const QVariant &information) { - setMetaData(QMediaMetaData::GPSAreaInformation, information); } - -+ QVariant posterImage() const { -+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::PosterImage)); -+ } -+ QVariant coverArtImage() const { -+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::CoverArtImage)); -+ } -+ QVariant thumbnailImage() const { -+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::ThumbnailImage)); -+ } -+ - Q_SIGNALS: - void metaDataChanged(); - -@@ -440,6 +456,23 @@ private: - m_writerControl->setMetaData(key, value); - } - -+ QUrl convertImageToUrl(const QVariant &variant) const -+ { -+ if (variant.type() != QVariant::Image) -+ return QUrl(); -+ -+ QImage image = variant.value(); -+ QByteArray data; -+ QBuffer buffer(&data); -+ buffer.open(QBuffer::WriteOnly); -+ QImageWriter png(&buffer, "png"); -+ if (!png.write(image)) { -+ return QUrl(); -+ } -+ buffer.close(); -+ return QUrl(QStringLiteral("data:image/png;base64,") + data.toBase64()); -+ } -+ - QMediaObject *m_mediaObject; - QMetaDataWriterControl *m_writerControl; - bool m_requestedWriterControl; --- -2.7.4 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend deleted file mode 100644 index a06ac2d89..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -FILESEXTRAPATHS_append := ":${THISDIR}/${PN}" - -PACKAGECONFIG_append = " gstreamer" - -SRC_URI_append = " \ - file://0001-metadata-image-support-with-the-data-URL-scheme-for-.patch \ - " diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend deleted file mode 100644 index 550c58d05..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -DEPENDS_remove = "bluez4" -# currently Qt5 does not support bluez5 "Nothing PROVIDES 'gconfbluez5'" -#DEPENDS_append = "bluez5" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland deleted file mode 100644 index a371c6c4e..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland +++ /dev/null @@ -1,12 +0,0 @@ -QT_WAYLAND_SHELL_INTEGRATION=@QT_WAYLAND_DEFAULT_SHELL@ -# The following might be necessary when multiple/split surfaces are created. -# Without this, QtWayland will sometimes maintain the same/old size even if the -# split surface is destroyed. -# We keep it disabled by default as it causes an additional repaint of the -# surface until the compositor sends a configure event to scale the window to -# the actual area. Typical windows will, by default, have an initial size set -# by qtwayland when starting-up (without an explicit size specified by the -# application). -# Note that QtWayland will only test the presence of the environment variable -# so it will be enabled even if set to 0 -# QT_WAYLAND_RESIZE_AFTER_SWAP=1 diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb deleted file mode 100644 index ae7c956d4..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb +++ /dev/null @@ -1,21 +0,0 @@ -SUMMARY = "QtWayland config file." -DESCRIPTION = "Config file for qtwayland." -SECTION = "apps" -LICENSE = "MIT" - -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" - -SRC_URI = "file://qtwayland" - -inherit allarch - -QTWAYLAND_DEFAULT_SHELL ?= "xdg-shell" - -do_compile[noexec] = "1" - -do_install () { - install -D -m 644 ${WORKDIR}/qtwayland ${D}${sysconfdir}/afm/unit.env.d/qtwayland - sed -i -e 's/@QT_WAYLAND_DEFAULT_SHELL@/${QTWAYLAND_DEFAULT_SHELL}/' ${D}${sysconfdir}/afm/unit.env.d/qtwayland -} - -RPROVIDES_${PN} += "virtual/qtwayland-config" diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch deleted file mode 100644 index c91e11704..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 8caaf802a8b42e9bb1d74fc335a571882c75d73e Mon Sep 17 00:00:00 2001 -From: Holger Behrens -Date: Tue, 3 Feb 2015 09:52:52 +0100 -Subject: [meta-ivi-demo][PATCH 1/2] protocol: update 3rd party ivi-application - protocol - -Signed-off-by: Holger Behrens ---- - src/3rdparty/protocol/ivi-application.xml | 31 +++---------------------------- - 1 file changed, 3 insertions(+), 28 deletions(-) - -diff --git a/src/3rdparty/protocol/ivi-application.xml b/src/3rdparty/protocol/ivi-application.xml -index 833fd38..b06ae6c 100644 ---- a/src/3rdparty/protocol/ivi-application.xml -+++ b/src/3rdparty/protocol/ivi-application.xml -@@ -42,34 +42,9 @@ - - - -- -- -- These define all possible warning codes returned by ivi compositor on server-side warnings. -- invalid_wl_surface: -- - wl_surface already has a another role. -- - wl_surface is destroyed before the ivi_surface is destroyed. -- ivi_id_in_use: ivi_id is already assigned by another application. -- -- -- -- -- -- -- -- The ivi compositor encountered warning while processing a request by this -- application. The warning is defined by argument warning_code and optional -- warning_text. If the warning is detected, client shall destroy the ivi_surface -- object. -- -- When a warning event is sent, the compositor turns the ivi_surface object inert. -- The ivi_surface will not deliver further events, all requests on it are ignored -- except 'destroy', and the association to the ivi_id is removed. The client -- should destroy the ivi_surface object. If an inert ivi_surface object is used as -- an argument to any other object's request, that request will [produce a fatal -- error / produce a warning / be ignored]. -- -- -- -+ -+ -+ - - - --- -2.2.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch deleted file mode 100644 index 591ef71c5..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 31c60aedf415fd06b5c1aa16fdcef1504b67b96d Mon Sep 17 00:00:00 2001 -From: Holger Behrens -Date: Tue, 3 Feb 2015 09:53:43 +0100 -Subject: [meta-ivi-demo][PATCH 2/2] qwaylandwindow: add support for - IVI-Surface-ID property - -Signed-off-by: Holger Behrens ---- - src/client/qwaylandwindow.cpp | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 45a58f2..781081a 100644 ---- a/src/client/qwaylandwindow.cpp -+++ b/src/client/qwaylandwindow.cpp -@@ -100,7 +100,14 @@ QWaylandWindow::QWaylandWindow(QWindow *window) - - if (!(window->flags() & Qt::BypassWindowManagerHint)) { - if (mDisplay->shellIvi()) { -- mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(IVI_SURFACE_ID + getpid(), object()), this); -+ unsigned int id = 0; -+ QVariant value = window->property("IVI-Surface-ID"); -+ if (value.isValid()) { -+ id = value.toUInt(); -+ } else { -+ id = IVI_SURFACE_ID + getpid(); -+ } -+ mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(id, object()), this); - } else if (mDisplay->shellXdg()) { - if (window->type() & Qt::Window) { - mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this); --- -2.2.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch deleted file mode 100644 index 39296c769..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch +++ /dev/null @@ -1,33 +0,0 @@ -Add qt5wayland.manifest. Removed specfile change from patch. - -Adapted from: - -From 424c23191d81b072255bd7f178ad0ee2c2ea091a Mon Sep 17 00:00:00 2001 -From: Tomasz Olszak -Date: Fri, 25 Apr 2014 14:32:22 +0200 -Subject: [PATCH 10/21] Added manifest file according to smack 3-domain model. - -Bug-Tizen:TIVI-2416 - -Change-Id: I414e245a5c8847bec32ef6a97569d0f06221e1db -Signed-off-by: Tomasz Olszak ---- - packaging/qt5-qtwayland.manifest | 5 +++++ - packaging/qt5-qtwayland.spec | 4 ++++ - 2 files changed, 9 insertions(+) - create mode 100644 packaging/qt5-qtwayland.manifest - -diff --git a/packaging/qt5-qtwayland.manifest b/packaging/qt5-qtwayland.manifest -new file mode 100644 -index 0000000..75b0fa5 ---- /dev/null -+++ b/packaging/qt5-qtwayland.manifest -@@ -0,0 +1,5 @@ -+ -+ -+ -+ -+ --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch deleted file mode 100644 index 6bea62621..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch +++ /dev/null @@ -1,468 +0,0 @@ -From 5cd43dc7519f54f9786fb6c686a2ce1e682d4366 Mon Sep 17 00:00:00 2001 -From: Philippe Coval -Date: Fri, 25 Apr 2014 10:31:42 +0200 -Subject: [PATCH 16/21] xdg-shell: Add xdg-shell protocol file version 1.4.0 - -Source: http://cgit.freedesktop.org/wayland/weston/plain/protocol/xdg-shell.xml?id=1.4.0 - -This file will need to be refreshed on protocol update -until xdg-shell land in wayland's public headers - -Task-number: QTBUG-38633/part/1of2 -Change-Id: I397d863dcfc2223ac6eb234c37dbcd7449ecffff -Reviewed-by: Giulio Camuffo -Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/c2a22eea6716e073875474adf624d8463eba836c -Bug-Tizen: TIVI-3113/part -Signed-off-by: Philippe Coval ---- - src/3rdparty/protocol/xdg-shell.xml | 438 ++++++++++++++++++++++++++++++++++++ - 1 file changed, 438 insertions(+) - create mode 100644 src/3rdparty/protocol/xdg-shell.xml - -diff --git a/src/3rdparty/protocol/xdg-shell.xml b/src/3rdparty/protocol/xdg-shell.xml -new file mode 100644 -index 0000000..4e5cff8 ---- /dev/null -+++ b/src/3rdparty/protocol/xdg-shell.xml -@@ -0,0 +1,438 @@ -+ -+ -+ -+ -+ Copyright © 2008-2013 Kristian Høgsberg -+ Copyright © 2013 Rafael Antognolli -+ Copyright © 2013 Jasper St. Pierre -+ Copyright © 2010-2013 Intel Corporation -+ -+ Permission to use, copy, modify, distribute, and sell this -+ software and its documentation for any purpose is hereby granted -+ without fee, provided that the above copyright notice appear in -+ all copies and that both that copyright notice and this permission -+ notice appear in supporting documentation, and that the name of -+ the copyright holders not be used in advertising or publicity -+ pertaining to distribution of the software without specific, -+ written prior permission. The copyright holders make no -+ representations about the suitability of this software for any -+ purpose. It is provided "as is" without express or implied -+ warranty. -+ -+ THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -+ FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN -+ AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -+ THIS SOFTWARE. -+ -+ -+ -+ -+ This interface is implemented by servers that provide -+ desktop-style user interfaces. -+ -+ It allows clients to associate a xdg_surface with -+ a basic surface. -+ -+ -+ -+ -+ Use this enum to check the protocol version, and it will be updated -+ automatically. -+ -+ -+ -+ -+ -+ -+ -+ Use this request in order to enable use of this interface. -+ -+ Understand and agree that one is using an unstable interface, -+ that will likely change in the future, breaking the API. -+ -+ -+ -+ -+ -+ -+ Create a shell surface for an existing surface. -+ -+ Only one shell or popup surface can be associated with a given -+ surface. -+ -+ -+ -+ -+ -+ -+ -+ Create a popup surface for an existing surface. -+ -+ Only one shell or popup surface can be associated with a given -+ surface. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ An interface that may be implemented by a wl_surface, for -+ implementations that provide a desktop-style user interface. -+ -+ It provides requests to treat surfaces like windows, allowing to set -+ properties like maximized, fullscreen, minimized, and to move and resize -+ them, and associate metadata like title and app id. -+ -+ On the server side the object is automatically destroyed when -+ the related wl_surface is destroyed. On client side, -+ xdg_surface.destroy() must be called before destroying -+ the wl_surface object. -+ -+ -+ -+ -+ The xdg_surface interface is removed from the wl_surface object -+ that was turned into a xdg_surface with -+ xdg_shell.get_xdg_surface request. The xdg_surface properties, -+ like maximized and fullscreen, are lost. The wl_surface loses -+ its role as a xdg_surface. The wl_surface is unmapped. -+ -+ -+ -+ -+ -+ Setting a surface as transient of another means that it is child -+ of another surface. -+ -+ Child surfaces are stacked above their parents, and will be -+ unmapped if the parent is unmapped too. They should not appear -+ on task bars and alt+tab. -+ -+ -+ -+ -+ -+ -+ Set a short title for the surface. -+ -+ This string may be used to identify the surface in a task bar, -+ window list, or other user interface elements provided by the -+ compositor. -+ -+ The string must be encoded in UTF-8. -+ -+ -+ -+ -+ -+ -+ Set an id for the surface. -+ -+ The app id identifies the general class of applications to which -+ the surface belongs. -+ -+ It should be the ID that appears in the new desktop entry -+ specification, the interface name. -+ -+ -+ -+ -+ -+ -+ A client must respond to a ping event with a pong request or -+ the client may be deemed unresponsive. -+ -+ -+ -+ -+ -+ -+ Ping a client to check if it is receiving events and sending -+ requests. A client is expected to reply with a pong request. -+ -+ -+ -+ -+ -+ -+ Start a pointer-driven move of the surface. -+ -+ This request must be used in response to a button press event. -+ The server may ignore move requests depending on the state of -+ the surface (e.g. fullscreen or maximized). -+ -+ -+ -+ -+ -+ -+ -+ These values are used to indicate which edge of a surface -+ is being dragged in a resize operation. The server may -+ use this information to adapt its behavior, e.g. choose -+ an appropriate cursor image. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Start a pointer-driven resizing of the surface. -+ -+ This request must be used in response to a button press event. -+ The server may ignore resize requests depending on the state of -+ the surface (e.g. fullscreen or maximized). -+ -+ -+ -+ -+ -+ -+ -+ -+ The configure event asks the client to resize its surface. -+ -+ The size is a hint, in the sense that the client is free to -+ ignore it if it doesn't resize, pick a smaller size (to -+ satisfy aspect ratio or resize in steps of NxM pixels). -+ -+ The edges parameter provides a hint about how the surface -+ was resized. The client may use this information to decide -+ how to adjust its content to the new size (e.g. a scrolling -+ area might adjust its content position to leave the viewable -+ content unmoved). Valid edge values are from resize_edge enum. -+ -+ The client is free to dismiss all but the last configure -+ event it received. -+ -+ The width and height arguments specify the size of the window -+ in surface local coordinates. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the default output used by this surface when it is first mapped. -+ -+ If this value is NULL (default), it's up to the compositor to choose -+ which display will be used to map this surface. -+ -+ When fullscreen or maximized state are set on this surface, and it -+ wasn't mapped yet, the output set with this method will be used. -+ Otherwise, the output where the surface is currently mapped will be -+ used. -+ -+ -+ -+ -+ -+ -+ Event sent from the compositor to the client requesting that the client -+ goes to a fullscreen state. It's the client job to call set_fullscreen -+ and really trigger the fullscreen state. -+ -+ -+ -+ -+ -+ Event sent from the compositor to the client requesting that the client -+ leaves the fullscreen state. It's the client job to call -+ unset_fullscreen and really leave the fullscreen state. -+ -+ -+ -+ -+ -+ Set the surface as fullscreen. -+ -+ After this request, the compositor should send a configure event -+ informing the output size. -+ -+ This request informs the compositor that the next attached buffer -+ committed will be in a fullscreen state. The buffer size should be the -+ same size as the size informed in the configure event, if the client -+ doesn't want to leave any empty area. -+ -+ In other words: the next attached buffer after set_maximized is the new -+ maximized buffer. And the surface will be positioned at the maximized -+ position on commit. -+ -+ A simple way to synchronize and wait for the correct configure event is -+ to use a wl_display.sync request right after the set_fullscreen -+ request. When the sync callback returns, the last configure event -+ received just before it will be the correct one, and should contain the -+ right size for the surface to maximize. -+ -+ Setting one state won't unset another state. Use -+ xdg_surface.unset_fullscreen for unsetting it. -+ -+ -+ -+ -+ -+ Unset the surface fullscreen state. -+ -+ Same negotiation as set_fullscreen must be used. -+ -+ -+ -+ -+ -+ Event sent from the compositor to the client requesting that the client -+ goes to a maximized state. It's the client job to call set_maximized -+ and really trigger the maximized state. -+ -+ -+ -+ -+ -+ Event sent from the compositor to the client requesting that the client -+ leaves the maximized state. It's the client job to call unset_maximized -+ and really leave the maximized state. -+ -+ -+ -+ -+ -+ Set the surface as maximized. -+ -+ After this request, the compositor will send a configure event -+ informing the output size minus panel and other MW decorations. -+ -+ This request informs the compositor that the next attached buffer -+ committed will be in a maximized state. The buffer size should be the -+ same size as the size informed in the configure event, if the client -+ doesn't want to leave any empty area. -+ -+ In other words: the next attached buffer after set_maximized is the new -+ maximized buffer. And the surface will be positioned at the maximized -+ position on commit. -+ -+ A simple way to synchronize and wait for the correct configure event is -+ to use a wl_display.sync request right after the set_maximized request. -+ When the sync callback returns, the last configure event received just -+ before it will be the correct one, and should contain the right size -+ for the surface to maximize. -+ -+ Setting one state won't unset another state. Use -+ xdg_surface.unset_maximized for unsetting it. -+ -+ -+ -+ -+ -+ Unset the surface maximized state. -+ -+ Same negotiation as set_maximized must be used. -+ -+ -+ -+ -+ -+ Set the surface minimized state. -+ -+ Setting one state won't unset another state. -+ -+ -+ -+ -+ -+ The focused_set event is sent when this surface has been -+ activated. Window decorations should be updated accordingly. -+ -+ -+ -+ -+ -+ The focused_unset event is sent when this surface has been -+ deactivated, because another surface has been activated. Window -+ decorations should be updated accordingly. -+ -+ -+ -+ -+ -+ -+ An interface that may be implemented by a wl_surface, for -+ implementations that provide a desktop-style popups/menus. A popup -+ surface is a transient surface with an added pointer grab. -+ -+ An existing implicit grab will be changed to owner-events mode, -+ and the popup grab will continue after the implicit grab ends -+ (i.e. releasing the mouse button does not cause the popup to be -+ unmapped). -+ -+ The popup grab continues until the window is destroyed or a mouse -+ button is pressed in any other clients window. A click in any of -+ the clients surfaces is reported as normal, however, clicks in -+ other clients surfaces will be discarded and trigger the callback. -+ -+ The x and y arguments specify the locations of the upper left -+ corner of the surface relative to the upper left corner of the -+ parent surface, in surface local coordinates. -+ -+ xdg_popup surfaces are always transient for another surface. -+ -+ -+ -+ -+ The xdg_surface interface is removed from the wl_surface object -+ that was turned into a xdg_surface with -+ xdg_shell.get_xdg_surface request. The xdg_surface properties, -+ like maximized and fullscreen, are lost. The wl_surface loses -+ its role as a xdg_surface. The wl_surface is unmapped. -+ -+ -+ -+ -+ -+ A client must respond to a ping event with a pong request or -+ the client may be deemed unresponsive. -+ -+ -+ -+ -+ -+ -+ Ping a client to check if it is receiving events and sending -+ requests. A client is expected to reply with a pong request. -+ -+ -+ -+ -+ -+ -+ The popup_done event is sent out when a popup grab is broken, -+ that is, when the users clicks a surface that doesn't belong -+ to the client owning the popup surface. -+ -+ -+ -+ -+ -+ --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch deleted file mode 100644 index fe1bb50e8..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch +++ /dev/null @@ -1,1029 +0,0 @@ -From 0edba039247ce888dbb7ff0a93c7b9ec01bac46e Mon Sep 17 00:00:00 2001 -From: Philippe Coval -Date: Wed, 26 Mar 2014 10:16:01 +0100 -Subject: [PATCH 17/21] xdg-shell: Add minimize feature to QWindow using - wayland's xdg-shell - -The feature is disabled by default, -and can be enabled at runtime -by exporting QT_WAYLAND_USE_XDG_SHELL env variable. - -This patch relies on presence of protocol file -which has been imported from weston-1.4.0 sources, -until the xdg-shell is merge into wayland itself. - -Because xdg-shell is experimental, -code fallback to WaylandShell if no XdgShell -but keep in mind those shells are exclusive. - -Since xdg-shell and wayland-shell share most of the API, -some factorization is done by an (empty) abstraction class -to keep the code more readable. - -Despite xdg-shell introduces new popups concept, -they're not used on this change for maitainance purpose. - -Notes: - -* This change depends on presence of xdg-shell protocol file. - -* You can check a demo video - (qt-tizen-cinematic-experience-20140430-rzr) - of the test case at : - https://www.youtube.com/watch?v=pY_XXvKc_0E# - -* Use Super+Tab to show window again if hidden - -Task-number: QTBUG-38633/part/2of2 -Change-Id: I2d7ed85bea1847d82439fdfc893a3dbb2581ffff -Reviewed-by: Giulio Camuffo -Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/768484daaa64bea965bef981a16f59be8db0c190 -Bug-Tizen: TIVI-3113/part -Signed-off-by: Philippe Coval ---- - src/client/client.pro | 5 + - src/client/qwaylanddisplay.cpp | 5 + - src/client/qwaylanddisplay_p.h | 4 + - src/client/qwaylandshellsurface.cpp | 134 ------------------------ - src/client/qwaylandshellsurface_p.h | 40 +++----- - src/client/qwaylandwindow.cpp | 40 ++++++-- - src/client/qwaylandwlshellsurface.cpp | 186 ++++++++++++++++++++++++++++++++++ - src/client/qwaylandwlshellsurface_p.h | 101 ++++++++++++++++++ - src/client/qwaylandxdgsurface.cpp | 173 +++++++++++++++++++++++++++++++ - src/client/qwaylandxdgsurface_p.h | 105 +++++++++++++++++++ - 10 files changed, 625 insertions(+), 168 deletions(-) - create mode 100644 src/client/qwaylandwlshellsurface.cpp - create mode 100644 src/client/qwaylandwlshellsurface_p.h - create mode 100644 src/client/qwaylandxdgsurface.cpp - create mode 100644 src/client/qwaylandxdgsurface_p.h - -diff --git a/src/client/client.pro b/src/client/client.pro -index 10cbd31..9ecf82f 100644 ---- a/src/client/client.pro -+++ b/src/client/client.pro -@@ -41,6 +41,7 @@ WAYLANDCLIENTSOURCES += \ - ../extensions/qtkey-extension.xml \ - ../extensions/windowmanager.xml \ - ../3rdparty/protocol/text.xml \ -+ ../3rdparty/protocol/xdg-shell.xml \ - - SOURCES += qwaylandintegration.cpp \ - qwaylandnativeinterface.cpp \ -@@ -57,6 +58,8 @@ SOURCES += qwaylandintegration.cpp \ - qwaylanddatadevicemanager.cpp \ - qwaylanddatasource.cpp \ - qwaylandshellsurface.cpp \ -+ qwaylandwlshellsurface.cpp \ -+ qwaylandxdgsurface.cpp \ - qwaylandextendedoutput.cpp \ - qwaylandextendedsurface.cpp \ - qwaylandsubsurface.cpp \ -@@ -85,6 +88,8 @@ HEADERS += qwaylandintegration_p.h \ - qwaylanddatadevicemanager_p.h \ - qwaylanddatasource_p.h \ - qwaylandshellsurface_p.h \ -+ qwaylandwlshellsurface_p.h \ -+ qwaylandxdgsurface_p.h \ - qwaylandextendedoutput_p.h \ - qwaylandextendedsurface_p.h \ - qwaylandsubsurface_p.h \ -diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 0b715c0..7f953ad 100644 ---- a/src/client/qwaylanddisplay.cpp -+++ b/src/client/qwaylanddisplay.cpp -@@ -61,6 +61,7 @@ - #include "qwaylandqtkey_p.h" - - #include -+#include - - #include - #include -@@ -206,6 +207,10 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin - mCompositor.init(registry, id); - } else if (interface == QStringLiteral("wl_shm")) { - mShm = static_cast(wl_registry_bind(registry, id, &wl_shm_interface,1)); -+ } else if (interface == QStringLiteral("xdg_shell") -+ && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) { -+ mShellXdg.reset(new QtWayland::xdg_shell(registry, id)); -+ mShellXdg->use_unstable_version(QtWayland::xdg_shell::version_current); - } else if (interface == QStringLiteral("wl_shell")){ - mShell.reset(new QtWayland::wl_shell(registry, id)); - } else if (interface == QStringLiteral("wl_seat")) { -diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index 40cb2b2..cf5dfc2 100644 ---- a/src/client/qwaylanddisplay_p.h -+++ b/src/client/qwaylanddisplay_p.h -@@ -51,6 +51,7 @@ - - #include - #include -+#include - - struct wl_cursor_image; - -@@ -78,6 +79,7 @@ namespace QtWayland { - class qt_sub_surface_extension; - class qt_surface_extension; - class wl_text_input_manager; -+ class xdg_shell; - } - - typedef void (*RegistryListener)(void *data, -@@ -113,6 +115,7 @@ public: - QtWayland::wl_compositor *compositor() { return &mCompositor; } - - QtWayland::wl_shell *shell() { return mShell.data(); } -+ QtWayland::xdg_shell *shellXdg() { return mShellXdg.data(); } - - QList inputDevices() const { return mInputDevices; } - QWaylandInputDevice *defaultInputDevice() const; -@@ -168,6 +171,7 @@ private: - QThread *mEventThread; - QWaylandEventThread *mEventThreadObject; - QScopedPointer mShell; -+ QScopedPointer mShellXdg; - QList mScreens; - QList mInputDevices; - QList mRegistryListeners; -diff --git a/src/client/qwaylandshellsurface.cpp b/src/client/qwaylandshellsurface.cpp -index b7a819f..80e509b 100644 ---- a/src/client/qwaylandshellsurface.cpp -+++ b/src/client/qwaylandshellsurface.cpp -@@ -40,137 +40,3 @@ - ****************************************************************************/ - - #include "qwaylandshellsurface_p.h" -- --#include "qwaylanddisplay_p.h" --#include "qwaylandwindow_p.h" --#include "qwaylandinputdevice_p.h" --#include "qwaylanddecoration_p.h" --#include "qwaylandscreen_p.h" -- --#include -- --QT_BEGIN_NAMESPACE -- --QWaylandShellSurface::QWaylandShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window) -- : QtWayland::wl_shell_surface(shell_surface) -- , m_window(window) -- , m_maximized(false) -- , m_fullscreen(false) --{ --} -- --QWaylandShellSurface::~QWaylandShellSurface() --{ -- wl_shell_surface_destroy(object()); --} -- --void QWaylandShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) --{ -- resize(inputDevice->wl_seat(), -- inputDevice->serial(), -- edges); --} -- --void QWaylandShellSurface::move(QWaylandInputDevice *inputDevice) --{ -- move(inputDevice->wl_seat(), -- inputDevice->serial()); --} -- --void QWaylandShellSurface::setMaximized() --{ -- m_maximized = true; -- m_size = m_window->window()->geometry().size(); -- set_maximized(0); --} -- --void QWaylandShellSurface::setFullscreen() --{ -- m_fullscreen = true; -- m_size = m_window->window()->geometry().size(); -- set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, 0); --} -- --void QWaylandShellSurface::setNormal() --{ -- if (m_fullscreen || m_maximized) { -- m_fullscreen = m_maximized = false; -- setTopLevel(); -- QMargins m = m_window->frameMargins(); -- m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom()); -- } --} -- --void QWaylandShellSurface::setMinimized() --{ -- // TODO: There's no wl_shell_surface API for this --} -- --void QWaylandShellSurface::setTopLevel() --{ -- set_toplevel(); --} -- --void QWaylandShellSurface::updateTransientParent(QWindow *parent) --{ -- QWaylandWindow *parent_wayland_window = static_cast(parent->handle()); -- if (!parent_wayland_window) -- return; -- -- // set_transient expects a position relative to the parent -- QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -- QWindow *parentWin = m_window->window()->transientParent(); -- transientPos -= parentWin->geometry().topLeft(); -- if (parent_wayland_window->decoration()) { -- transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); -- transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); -- } -- -- uint32_t flags = 0; -- Qt::WindowFlags wf = m_window->window()->flags(); -- if (wf.testFlag(Qt::ToolTip) -- || wf.testFlag(Qt::WindowTransparentForInput)) -- flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; -- -- set_transient(parent_wayland_window->object(), -- transientPos.x(), -- transientPos.y(), -- flags); --} -- --void QWaylandShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial) --{ -- QWaylandWindow *parent_wayland_window = parent; -- if (!parent_wayland_window) -- return; -- -- // set_popup expects a position relative to the parent -- QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -- transientPos -= parent_wayland_window->geometry().topLeft(); -- if (parent_wayland_window->decoration()) { -- transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); -- transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); -- } -- -- set_popup(device->wl_seat(), serial, parent_wayland_window->object(), -- transientPos.x(), transientPos.y(), 0); --} -- --void QWaylandShellSurface::shell_surface_ping(uint32_t serial) --{ -- pong(serial); --} -- --void QWaylandShellSurface::shell_surface_configure(uint32_t edges, -- int32_t width, -- int32_t height) --{ -- m_window->configure(edges, width, height); --} -- --void QWaylandShellSurface::shell_surface_popup_done() --{ -- QCoreApplication::postEvent(m_window->window(), new QCloseEvent()); --} -- --QT_END_NAMESPACE -diff --git a/src/client/qwaylandshellsurface_p.h b/src/client/qwaylandshellsurface_p.h -index 2477c3f..2f59f60 100644 ---- a/src/client/qwaylandshellsurface_p.h -+++ b/src/client/qwaylandshellsurface_p.h -@@ -55,39 +55,25 @@ class QWaylandWindow; - class QWaylandInputDevice; - class QWindow; - --class Q_WAYLAND_CLIENT_EXPORT QWaylandShellSurface : public QtWayland::wl_shell_surface -+class Q_WAYLAND_CLIENT_EXPORT QWaylandShellSurface - { - public: -- QWaylandShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window); -- ~QWaylandShellSurface(); -+ virtual ~QWaylandShellSurface() {} -+ virtual void resize(QWaylandInputDevice * /*inputDevice*/, enum wl_shell_surface_resize /*edges*/) -+ {} - -- using QtWayland::wl_shell_surface::resize; -- void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges); -- -- using QtWayland::wl_shell_surface::move; -- void move(QWaylandInputDevice *inputDevice); -+ virtual void move(QWaylandInputDevice * /*inputDevice*/) {} -+ virtual void setTitle(const QString & /*title*/) {} -+ virtual void setAppId(const QString & /*appId*/) {} - - private: -- void setMaximized(); -- void setFullscreen(); -- void setNormal(); -- void setMinimized(); -- -- void setTopLevel(); -- void updateTransientParent(QWindow *parent); -- void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial); -- -- QWaylandWindow *m_window; -- bool m_maximized; -- bool m_fullscreen; -- QSize m_size; -- -- void shell_surface_ping(uint32_t serial) Q_DECL_OVERRIDE; -- void shell_surface_configure(uint32_t edges, -- int32_t width, -- int32_t height) Q_DECL_OVERRIDE; -- void shell_surface_popup_done() Q_DECL_OVERRIDE; -+ virtual void setMaximized() {} -+ virtual void setFullscreen() {} -+ virtual void setNormal() {} -+ virtual void setMinimized() {} - -+ virtual void setTopLevel() {} -+ virtual void updateTransientParent(QWindow * /*parent*/) {} - friend class QWaylandWindow; - }; - -diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 920c977..3fb3a49 100644 ---- a/src/client/qwaylandwindow.cpp -+++ b/src/client/qwaylandwindow.cpp -@@ -46,6 +46,8 @@ - #include "qwaylandinputdevice_p.h" - #include "qwaylandscreen_p.h" - #include "qwaylandshellsurface_p.h" -+#include "qwaylandwlshellsurface_p.h" -+#include "qwaylandxdgsurface_p.h" - #include "qwaylandextendedsurface_p.h" - #include "qwaylandsubsurface_p.h" - #include "qwaylanddecoration_p.h" -@@ -92,8 +94,16 @@ QWaylandWindow::QWaylandWindow(QWindow *window) - static WId id = 1; - mWindowId = id++; - -- if (mDisplay->shell() && window->type() & Qt::Window && !(window->flags() & Qt::BypassWindowManagerHint)) -- mShellSurface = new QWaylandShellSurface(mDisplay->shell()->get_shell_surface(object()), this); -+ if (!(window->flags() & Qt::BypassWindowManagerHint)) { -+ if (mDisplay->shellXdg()) { -+ if (window->type() & Qt::Window) { -+ mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this); -+ } -+ } else if (mDisplay->shell() && window->type() & Qt::Window) { -+ mShellSurface = new QWaylandWlShellSurface(mDisplay->shell()->get_shell_surface(object()), this); -+ } -+ } -+ - if (mDisplay->windowExtension()) - mExtendedWindow = new QWaylandExtendedSurface(this, mDisplay->windowExtension()->get_extended_surface(object())); - if (mDisplay->subSurfaceExtension()) -@@ -101,12 +111,12 @@ QWaylandWindow::QWaylandWindow(QWindow *window) - - if (mShellSurface) { - // Set initial surface title -- mShellSurface->set_title(window->title()); -+ mShellSurface->setTitle(window->title()); - - // Set surface class to the .desktop file name (obtained from executable name) - QFileInfo exeFileInfo(qApp->applicationFilePath()); - QString className = exeFileInfo.baseName() + QLatin1String(".desktop"); -- mShellSurface->set_class(className); -+ mShellSurface->setAppId(className); - } - - if (QPlatformWindow::parent() && mSubSurfaceWindow) { -@@ -170,7 +180,7 @@ void QWaylandWindow::setParent(const QPlatformWindow *parent) - void QWaylandWindow::setWindowTitle(const QString &title) - { - if (mShellSurface) { -- mShellSurface->set_title(title); -+ mShellSurface->setTitle(title); - } - - if (mWindowDecoration && window()->isVisible()) -@@ -212,8 +222,10 @@ void QWaylandWindow::setVisible(bool visible) - mMouseDevice = parent->mMouseDevice; - mMouseSerial = parent->mMouseSerial; - -- if (mMouseDevice) -- mShellSurface->setPopup(transientParent(), mMouseDevice, mMouseSerial); -+ QWaylandWlShellSurface *wlshellSurface = dynamic_cast(mShellSurface); -+ if (mMouseDevice && wlshellSurface) { -+ wlshellSurface->setPopup(transientParent(), mMouseDevice, mMouseSerial); -+ } - } - - if (!mSentInitialResize) { -@@ -428,6 +440,20 @@ void QWaylandWindow::setWindowFlags(Qt::WindowFlags flags) - - bool QWaylandWindow::createDecoration() - { -+ // so far only xdg-shell support this "unminimize" trick, may be moved elsewhere -+ if (mState == Qt::WindowMinimized) { -+ QWaylandXdgSurface *xdgSurface = dynamic_cast(mShellSurface); -+ if ( xdgSurface ) { -+ if (xdgSurface->isFullscreen()) { -+ setWindowStateInternal(Qt::WindowFullScreen); -+ } else if (xdgSurface->isMaximized()) { -+ setWindowStateInternal(Qt::WindowMaximized); -+ } else { -+ setWindowStateInternal(Qt::WindowNoState); -+ } -+ } -+ } -+ - static bool disableWaylandDecorations = !qgetenv("QT_WAYLAND_DISABLE_WINDOWDECORATION").isEmpty(); - if (disableWaylandDecorations) - return false; -diff --git a/src/client/qwaylandwlshellsurface.cpp b/src/client/qwaylandwlshellsurface.cpp -new file mode 100644 -index 0000000..4b73ec2 ---- /dev/null -+++ b/src/client/qwaylandwlshellsurface.cpp -@@ -0,0 +1,186 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qwaylandwlshellsurface_p.h" -+ -+#include "qwaylanddisplay_p.h" -+#include "qwaylandwindow_p.h" -+#include "qwaylandinputdevice_p.h" -+#include "qwaylanddecoration_p.h" -+#include "qwaylandscreen_p.h" -+ -+#include -+ -+QT_BEGIN_NAMESPACE -+ -+QWaylandWlShellSurface::QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window) -+ : QtWayland::wl_shell_surface(shell_surface) -+ , m_window(window) -+ , m_maximized(false) -+ , m_fullscreen(false) -+{ -+} -+ -+QWaylandWlShellSurface::~QWaylandWlShellSurface() -+{ -+ wl_shell_surface_destroy(object()); -+} -+ -+void QWaylandWlShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -+{ -+ resize(inputDevice->wl_seat(), -+ inputDevice->serial(), -+ edges); -+} -+ -+void QWaylandWlShellSurface::move(QWaylandInputDevice *inputDevice) -+{ -+ move(inputDevice->wl_seat(), -+ inputDevice->serial()); -+} -+ -+void QWaylandWlShellSurface::setTitle(const QString & title) -+{ -+ return QtWayland::wl_shell_surface::set_title(title); -+} -+ -+void QWaylandWlShellSurface::setAppId(const QString & appId) -+{ -+ return QtWayland::wl_shell_surface::set_class(appId); -+} -+ -+void QWaylandWlShellSurface::setMaximized() -+{ -+ m_maximized = true; -+ m_size = m_window->window()->geometry().size(); -+ set_maximized(0); -+} -+ -+void QWaylandWlShellSurface::setFullscreen() -+{ -+ m_fullscreen = true; -+ m_size = m_window->window()->geometry().size(); -+ set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, 0); -+} -+ -+void QWaylandWlShellSurface::setNormal() -+{ -+ if (m_fullscreen || m_maximized) { -+ m_fullscreen = m_maximized = false; -+ setTopLevel(); -+ QMargins m = m_window->frameMargins(); -+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom()); -+ } -+} -+ -+void QWaylandWlShellSurface::setMinimized() -+{ -+ // TODO: There's no wl_shell_surface API for this -+} -+ -+void QWaylandWlShellSurface::setTopLevel() -+{ -+ set_toplevel(); -+} -+ -+void QWaylandWlShellSurface::updateTransientParent(QWindow *parent) -+{ -+ QWaylandWindow *parent_wayland_window = static_cast(parent->handle()); -+ if (!parent_wayland_window) -+ return; -+ -+ // set_transient expects a position relative to the parent -+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -+ QWindow *parentWin = m_window->window()->transientParent(); -+ transientPos -= parentWin->geometry().topLeft(); -+ if (parent_wayland_window->decoration()) { -+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); -+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); -+ } -+ -+ uint32_t flags = 0; -+ Qt::WindowFlags wf = m_window->window()->flags(); -+ if (wf.testFlag(Qt::ToolTip) -+ || wf.testFlag(Qt::WindowTransparentForInput)) -+ flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; -+ -+ set_transient(parent_wayland_window->object(), -+ transientPos.x(), -+ transientPos.y(), -+ flags); -+} -+ -+void QWaylandWlShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial) -+{ -+ QWaylandWindow *parent_wayland_window = parent; -+ if (!parent_wayland_window) -+ return; -+ -+ // set_popup expects a position relative to the parent -+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -+ transientPos -= parent_wayland_window->geometry().topLeft(); -+ if (parent_wayland_window->decoration()) { -+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); -+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); -+ } -+ -+ set_popup(device->wl_seat(), serial, parent_wayland_window->object(), -+ transientPos.x(), transientPos.y(), 0); -+} -+ -+void QWaylandWlShellSurface::shell_surface_ping(uint32_t serial) -+{ -+ pong(serial); -+} -+ -+void QWaylandWlShellSurface::shell_surface_configure(uint32_t edges, -+ int32_t width, -+ int32_t height) -+{ -+ m_window->configure(edges, width, height); -+} -+ -+void QWaylandWlShellSurface::shell_surface_popup_done() -+{ -+ QCoreApplication::postEvent(m_window->window(), new QCloseEvent()); -+} -+ -+QT_END_NAMESPACE -diff --git a/src/client/qwaylandwlshellsurface_p.h b/src/client/qwaylandwlshellsurface_p.h -new file mode 100644 -index 0000000..d02bb7b ---- /dev/null -+++ b/src/client/qwaylandwlshellsurface_p.h -@@ -0,0 +1,101 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QWAYLANDWLSHELLSURFACE_H -+#define QWAYLANDWLSHELLSURFACE_H -+ -+#include -+ -+#include -+ -+#include -+#include -+#include "qwaylandshellsurface_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QWaylandWindow; -+class QWaylandInputDevice; -+class QWindow; -+ -+class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellSurface : public QtWayland::wl_shell_surface -+ , public QWaylandShellSurface -+{ -+public: -+ QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window); -+ virtual ~QWaylandWlShellSurface(); -+ -+ using QtWayland::wl_shell_surface::resize; -+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE; -+ -+ using QtWayland::wl_shell_surface::move; -+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE; -+ -+ void setTitle(const QString & title) Q_DECL_OVERRIDE; -+ void setAppId(const QString &appId) Q_DECL_OVERRIDE; -+ -+private: -+ void setMaximized() Q_DECL_OVERRIDE; -+ void setFullscreen() Q_DECL_OVERRIDE; -+ void setNormal() Q_DECL_OVERRIDE; -+ void setMinimized() Q_DECL_OVERRIDE; -+ -+ void setTopLevel() Q_DECL_OVERRIDE; -+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE; -+ void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial); -+ -+ QWaylandWindow *m_window; -+ bool m_maximized; -+ bool m_fullscreen; -+ QSize m_size; -+ -+ void shell_surface_ping(uint32_t serial) Q_DECL_OVERRIDE; -+ void shell_surface_configure(uint32_t edges, -+ int32_t width, -+ int32_t height) Q_DECL_OVERRIDE; -+ void shell_surface_popup_done() Q_DECL_OVERRIDE; -+ -+ friend class QWaylandWindow; -+}; -+ -+QT_END_NAMESPACE -+ -+#endif // QWAYLANDSHELLSURFACE_H -diff --git a/src/client/qwaylandxdgsurface.cpp b/src/client/qwaylandxdgsurface.cpp -new file mode 100644 -index 0000000..1b8affa ---- /dev/null -+++ b/src/client/qwaylandxdgsurface.cpp -@@ -0,0 +1,173 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qwaylandxdgsurface_p.h" -+ -+#include "qwaylanddisplay_p.h" -+#include "qwaylandwindow_p.h" -+#include "qwaylandinputdevice_p.h" -+#include "qwaylanddecoration_p.h" -+#include "qwaylandscreen_p.h" -+ -+#include -+ -+QT_BEGIN_NAMESPACE -+ -+QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWaylandWindow *window) -+ : QtWayland::xdg_surface(xdg_surface) -+ , m_window(window) -+ , m_maximized(false) -+ , m_minimized(false) -+ , m_fullscreen(false) -+{ -+} -+ -+QWaylandXdgSurface::~QWaylandXdgSurface() -+{ -+ xdg_surface_destroy(object()); -+} -+ -+void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -+{ -+ // May need some conversion if types get incompatibles, ATM they're identical -+ enum resize_edge const * const arg = reinterpret_cast(&edges); -+ resize(inputDevice, *arg); -+} -+ -+void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum resize_edge edges) -+{ -+ resize(inputDevice->wl_seat(), -+ inputDevice->serial(), -+ edges); -+} -+ -+void QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice) -+{ -+ move(inputDevice->wl_seat(), -+ inputDevice->serial()); -+} -+ -+void QWaylandXdgSurface::setMaximized() -+{ -+ m_maximized = true; -+ m_size = m_window->window()->geometry().size(); -+ set_maximized(); -+} -+ -+void QWaylandXdgSurface::setFullscreen() -+{ -+ m_fullscreen = true; -+ m_size = m_window->window()->geometry().size(); -+ set_fullscreen(); -+} -+ -+void QWaylandXdgSurface::setNormal() -+{ -+ if (m_fullscreen || m_maximized || m_minimized) { -+ if (m_maximized) { unset_maximized(); } -+ if (m_fullscreen) { unset_fullscreen(); } -+ -+ m_fullscreen = m_maximized = m_minimized = false; -+ setTopLevel(); -+ QMargins m = m_window->frameMargins(); -+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom()); -+ } -+} -+ -+void QWaylandXdgSurface::setMinimized() -+{ -+ m_minimized = true; -+ m_size = m_window->window()->geometry().size(); -+ set_minimized(); -+} -+ -+void QWaylandXdgSurface::setTopLevel() -+{ -+ // There's no xdg_shell_surface API for this, ignoring -+} -+ -+void QWaylandXdgSurface::updateTransientParent(QWindow *parent) -+{ -+ QWaylandWindow *parent_wayland_window = static_cast(parent->handle()); -+ if (!parent_wayland_window) -+ return; -+ -+ // set_transient expects a position relative to the parent -+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -+ QWindow *parentWin = m_window->window()->transientParent(); -+ transientPos -= parentWin->geometry().topLeft(); -+ if (parent_wayland_window->decoration()) { -+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); -+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); -+ } -+ -+ uint32_t flags = 0; -+ Qt::WindowFlags wf = m_window->window()->flags(); -+ if (wf.testFlag(Qt::ToolTip) -+ || wf.testFlag(Qt::WindowTransparentForInput)) -+ flags |= XDG_SURFACE_SET_TRANSIENT_FOR; -+ -+ set_transient_for(parent_wayland_window->object()); -+} -+ -+void QWaylandXdgSurface::setTitle(const QString & title) -+{ -+ return QtWayland::xdg_surface::set_title(title); -+} -+ -+void QWaylandXdgSurface::setAppId(const QString & appId) -+{ -+ return QtWayland::xdg_surface::set_app_id(appId); -+} -+ -+void QWaylandXdgSurface::xdg_surface_ping(uint32_t serial) -+{ -+ pong(serial); -+} -+ -+void QWaylandXdgSurface::xdg_surface_configure(uint32_t edges, int32_t width, -+ int32_t height) -+{ -+ m_window->configure(edges, width, height); -+} -+ -+ -+QT_END_NAMESPACE -diff --git a/src/client/qwaylandxdgsurface_p.h b/src/client/qwaylandxdgsurface_p.h -new file mode 100644 -index 0000000..744d3f3 ---- /dev/null -+++ b/src/client/qwaylandxdgsurface_p.h -@@ -0,0 +1,105 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QWAYLANDXDGSURFACE_H -+#define QWAYLANDXDGSURFACE_H -+ -+#include -+ -+#include -+ -+#include -+#include -+#include "qwaylandshellsurface_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QWaylandWindow; -+class QWaylandInputDevice; -+class QWindow; -+ -+class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurface : public QtWayland::xdg_surface -+ , public QWaylandShellSurface -+{ -+public: -+ QWaylandXdgSurface(struct ::xdg_surface *shell_surface, QWaylandWindow *window); -+ virtual ~QWaylandXdgSurface(); -+ -+ using QtWayland::xdg_surface::resize; -+ void resize(QWaylandInputDevice *inputDevice, enum resize_edge edges); -+ -+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE; -+ -+ using QtWayland::xdg_surface::move; -+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE; -+ -+ void setTitle(const QString &title) Q_DECL_OVERRIDE; -+ void setAppId(const QString &appId) Q_DECL_OVERRIDE; -+ -+ bool isFullscreen() const { return m_fullscreen; } -+ bool isMaximized() const { return m_maximized; } -+ -+private: -+ void setMaximized() Q_DECL_OVERRIDE; -+ void setFullscreen() Q_DECL_OVERRIDE; -+ void setNormal() Q_DECL_OVERRIDE; -+ void setMinimized() Q_DECL_OVERRIDE; -+ -+ void setTopLevel() Q_DECL_OVERRIDE; -+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE; -+ -+private: -+ QWaylandWindow *m_window; -+ bool m_maximized; -+ bool m_minimized; -+ bool m_fullscreen; -+ QSize m_size; -+ -+ void xdg_surface_ping(uint32_t serial) Q_DECL_OVERRIDE; -+ void xdg_surface_configure(uint32_t edges, -+ int32_t width, -+ int32_t height) Q_DECL_OVERRIDE; -+ friend class QWaylandWindow; -+}; -+ -+QT_END_NAMESPACE -+ -+#endif // QWAYLANDXDGSURFACE_H --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch deleted file mode 100644 index 8f0425a76..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch +++ /dev/null @@ -1,772 +0,0 @@ -From c4219cca0febd7119e0bec776fdc2877b3448e0b Mon Sep 17 00:00:00 2001 -From: Philippe Coval -Date: Tue, 10 Jun 2014 16:22:17 +0200 -Subject: [PATCH 19/21] xdg-shell: upgrade to support current version - (weston-1.5.0) - -The protocol file is a raw copy of - -Source: http://cgit.freedesktop.org/wayland/weston/plain/protocol/xdg-shell.xml?id=1.5.0 - -Task-number: QTBUG-38633/related -Reviewed-by: Giulio Camuffo -Reviewed-by: Philippe Coval -Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/4bac130b97fbaa565aa9883eb302557ef0185d50 -Change-Id: I41ca2f89c09a8b6348ce2fbf6d59f44b4c81ffff ---- - src/3rdparty/protocol/xdg-shell.xml | 288 ++++++++++++++++++------------------ - src/client/client.pro | 2 + - src/client/qwaylanddisplay.cpp | 10 +- - src/client/qwaylanddisplay_p.h | 5 +- - src/client/qwaylandxdgshell.cpp | 77 ++++++++++ - src/client/qwaylandxdgshell_p.h | 73 +++++++++ - src/client/qwaylandxdgsurface.cpp | 60 ++++++-- - src/client/qwaylandxdgsurface_p.h | 11 +- - 8 files changed, 364 insertions(+), 162 deletions(-) - create mode 100644 src/client/qwaylandxdgshell.cpp - create mode 100644 src/client/qwaylandxdgshell_p.h - -diff --git a/src/3rdparty/protocol/xdg-shell.xml b/src/3rdparty/protocol/xdg-shell.xml -index 4e5cff8..79a2831 100644 ---- a/src/3rdparty/protocol/xdg-shell.xml -+++ b/src/3rdparty/protocol/xdg-shell.xml -@@ -40,19 +40,22 @@ - - - -- Use this enum to check the protocol version, and it will be updated -- automatically. -+ The 'current' member of this enum gives the version of the -+ protocol. Implementations can compare this to the version -+ they implement using static_assert to ensure the protocol and -+ implementation versions match. - -- -+ - - - - - -- Use this request in order to enable use of this interface. -- -- Understand and agree that one is using an unstable interface, -- that will likely change in the future, breaking the API. -+ Negotiate the unstable version of the interface. This -+ mechanism is in place to ensure client and server agree on the -+ unstable versions of the protocol that they speak or exit -+ cleanly if they don't agree. This request will go away once -+ the xdg-shell protocol is stable. - - - -@@ -84,6 +87,28 @@ - - - -+ -+ -+ -+ The ping event asks the client if it's still alive. Pass the -+ serial specified in the event back to the compositor by sending -+ a "pong" request back with the specified serial. -+ -+ Compositors can use this to determine if the client is still -+ alive. It's unspecified what will happen if the client doesn't -+ respond to the ping request, or in what timeframe. Clients should -+ try to respond in a reasonable amount of time. -+ -+ -+ -+ -+ -+ -+ A client must respond to a ping event with a pong request or -+ the client may be deemed unresponsive. -+ -+ -+ - - - -@@ -124,6 +149,32 @@ - - - -+ -+ -+ This tells the compositor what the visible size of the window -+ should be, so it can use it to determine what borders to use for -+ constrainment and alignment. -+ -+ CSD often has invisible areas for decoration purposes, like drop -+ shadows. These "shadow" drawings need to be subtracted out of the -+ normal boundaries of the window when computing where to place -+ windows (e.g. to set this window so it's centered on top of another, -+ or to put it to the left or right of the screen.) -+ -+ This value should change as little as possible at runtime, to -+ prevent flicker. -+ -+ This value is also ignored when the window is maximized or -+ fullscreen, and assumed to be 0. -+ -+ If never called, this value is assumed to be 0. -+ -+ -+ -+ -+ -+ -+ - - - Set a short title for the surface. -@@ -150,22 +201,6 @@ - - - -- -- -- A client must respond to a ping event with a pong request or -- the client may be deemed unresponsive. -- -- -- -- -- -- -- Ping a client to check if it is receiving events and sending -- requests. A client is expected to reply with a pong request. -- -- -- -- - - - Start a pointer-driven move of the surface. -@@ -217,12 +252,6 @@ - ignore it if it doesn't resize, pick a smaller size (to - satisfy aspect ratio or resize in steps of NxM pixels). - -- The edges parameter provides a hint about how the surface -- was resized. The client may use this information to decide -- how to adjust its content to the new size (e.g. a scrolling -- area might adjust its content position to leave the viewable -- content unmoved). Valid edge values are from resize_edge enum. -- - The client is free to dismiss all but the last configure - event it received. - -@@ -230,7 +259,6 @@ - in surface local coordinates. - - -- - - - -@@ -250,128 +278,122 @@ - - - -- -- -- Event sent from the compositor to the client requesting that the client -- goes to a fullscreen state. It's the client job to call set_fullscreen -- and really trigger the fullscreen state. -- -- -- -- -- -- Event sent from the compositor to the client requesting that the client -- leaves the fullscreen state. It's the client job to call -- unset_fullscreen and really leave the fullscreen state. -- -- -+ -+ -+ The different state values used on the surface. This is designed for -+ state values like maximized, fullscreen. It is paired with the -+ request_change_state event to ensure that both the client and the -+ compositor setting the state can be synchronized. - -- -- -- Set the surface as fullscreen. -+ States set in this way are double-buffered. They will get applied on -+ the next commit. - -- After this request, the compositor should send a configure event -- informing the output size. -+ Desktop environments may extend this enum by taking up a range of -+ values and documenting the range they chose in this description. -+ They are not required to document the values for the range that they -+ chose. Ideally, any good extensions from a desktop environment should -+ make its way into standardization into this enum. - -- This request informs the compositor that the next attached buffer -- committed will be in a fullscreen state. The buffer size should be the -- same size as the size informed in the configure event, if the client -- doesn't want to leave any empty area. -+ The current reserved ranges are: - -- In other words: the next attached buffer after set_maximized is the new -- maximized buffer. And the surface will be positioned at the maximized -- position on commit. -- -- A simple way to synchronize and wait for the correct configure event is -- to use a wl_display.sync request right after the set_fullscreen -- request. When the sync callback returns, the last configure event -- received just before it will be the correct one, and should contain the -- right size for the surface to maximize. -- -- Setting one state won't unset another state. Use -- xdg_surface.unset_fullscreen for unsetting it. -+ 0x0000 - 0x0FFF: xdg-shell core values, documented below. -+ 0x1000 - 0x1FFF: GNOME - -- -+ -+ A non-zero value indicates the surface is maximized. Otherwise, -+ the surface is unmaximized. -+ -+ -+ A non-zero value indicates the surface is fullscreen. Otherwise, -+ the surface is not fullscreen. -+ -+ - -- -- -- Unset the surface fullscreen state. -+ -+ -+ This asks the compositor to change the state. If the compositor wants -+ to change the state, it will send a change_state event with the same -+ state_type, value, and serial, and the event flow continues as if it -+ it was initiated by the compositor. - -- Same negotiation as set_fullscreen must be used. -+ If the compositor does not want to change the state, it will send a -+ change_state to the client with the old value of the state. - -+ -+ -+ -+ This serial is so the client can know which change_state event corresponds -+ to which request_change_state request it sent out. -+ - - -- -- -- Event sent from the compositor to the client requesting that the client -- goes to a maximized state. It's the client job to call set_maximized -- and really trigger the maximized state. -+ -+ -+ This event tells the client to change a surface's state. The client -+ should respond with an ack_change_state request to the compositor to -+ guarantee that the compositor knows that the client has seen it. - -- - -- -- -- Event sent from the compositor to the client requesting that the client -- leaves the maximized state. It's the client job to call unset_maximized -- and really leave the maximized state. -- -+ -+ -+ - - -- -- -- Set the surface as maximized. -- -- After this request, the compositor will send a configure event -- informing the output size minus panel and other MW decorations. -- -- This request informs the compositor that the next attached buffer -- committed will be in a maximized state. The buffer size should be the -- same size as the size informed in the configure event, if the client -- doesn't want to leave any empty area. -+ -+ -+ When a change_state event is received, a client should then ack it -+ using the ack_change_state request to ensure that the compositor -+ knows the client has seen the event. - -- In other words: the next attached buffer after set_maximized is the new -- maximized buffer. And the surface will be positioned at the maximized -- position on commit. -+ By this point, the state is confirmed, and the next attach should -+ contain the buffer drawn for the new state value. - -- A simple way to synchronize and wait for the correct configure event is -- to use a wl_display.sync request right after the set_maximized request. -- When the sync callback returns, the last configure event received just -- before it will be the correct one, and should contain the right size -- for the surface to maximize. -- -- Setting one state won't unset another state. Use -- xdg_surface.unset_maximized for unsetting it. -+ The values here need to be the same as the values in the cooresponding -+ change_state event. - -+ -+ -+ - - -- -- -- Unset the surface maximized state. -- -- Same negotiation as set_maximized must be used. -+ -+ -+ Minimize the surface. - - - -- -- -- Set the surface minimized state. -- -- Setting one state won't unset another state. -+ -+ -+ The activated_set event is sent when this surface has been -+ activated, which means that the surface has user attention. -+ Window decorations should be updated accordingly. You should -+ not use this event for anything but the style of decorations -+ you display, use wl_keyboard.enter and wl_keyboard.leave for -+ determining keyboard focus. - -- -+ - -- -- -- The focused_set event is sent when this surface has been -- activated. Window decorations should be updated accordingly. -+ -+ -+ The deactivate event is sent when this surface has been -+ deactivated, which means that the surface lost user attention. -+ Window decorations should be updated accordingly. You should -+ not use this event for anything but the style of decorations -+ you display, use wl_keyboard.enter and wl_keyboard.leave for -+ determining keyboard focus. - - - -- -- -- The focused_unset event is sent when this surface has been -- deactivated, because another surface has been activated. Window -- decorations should be updated accordingly. -+ -+ -+ The close event is sent by the compositor when the user -+ wants the surface to be closed. This should be equivalent to -+ the user clicking the close button in client-side decorations, -+ if your application has any... -+ -+ This is only a request that the user intends to close your -+ window. The client may choose to ignore this request, or show -+ a dialog to ask the user to save their data... - - - -@@ -409,22 +431,6 @@ - - - -- -- -- A client must respond to a ping event with a pong request or -- the client may be deemed unresponsive. -- -- -- -- -- -- -- Ping a client to check if it is receiving events and sending -- requests. A client is expected to reply with a pong request. -- -- -- -- - - - The popup_done event is sent out when a popup grab is broken, -diff --git a/src/client/client.pro b/src/client/client.pro -index 9ecf82f..73e3b7f 100644 ---- a/src/client/client.pro -+++ b/src/client/client.pro -@@ -59,6 +59,7 @@ SOURCES += qwaylandintegration.cpp \ - qwaylanddatasource.cpp \ - qwaylandshellsurface.cpp \ - qwaylandwlshellsurface.cpp \ -+ qwaylandxdgshell.cpp \ - qwaylandxdgsurface.cpp \ - qwaylandextendedoutput.cpp \ - qwaylandextendedsurface.cpp \ -@@ -89,6 +90,7 @@ HEADERS += qwaylandintegration_p.h \ - qwaylanddatasource_p.h \ - qwaylandshellsurface_p.h \ - qwaylandwlshellsurface_p.h \ -+ qwaylandxdgshell_p.h \ - qwaylandxdgsurface_p.h \ - qwaylandextendedoutput_p.h \ - qwaylandextendedsurface_p.h \ -diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 7f953ad..2e25672 100644 ---- a/src/client/qwaylanddisplay.cpp -+++ b/src/client/qwaylanddisplay.cpp -@@ -50,7 +50,7 @@ - #include "qwaylandclipboard_p.h" - #include "qwaylanddatadevicemanager_p.h" - #include "qwaylandhardwareintegration_p.h" -- -+#include "qwaylandxdgshell_p.h" - - #include "qwaylandwindowmanagerintegration_p.h" - -@@ -209,8 +209,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin - mShm = static_cast(wl_registry_bind(registry, id, &wl_shm_interface,1)); - } else if (interface == QStringLiteral("xdg_shell") - && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) { -- mShellXdg.reset(new QtWayland::xdg_shell(registry, id)); -- mShellXdg->use_unstable_version(QtWayland::xdg_shell::version_current); -+ mShellXdg.reset(new QWaylandXdgShell(registry,id)); - } else if (interface == QStringLiteral("wl_shell")){ - mShell.reset(new QtWayland::wl_shell(registry, id)); - } else if (interface == QStringLiteral("wl_seat")) { -@@ -275,4 +274,9 @@ void QWaylandDisplay::forceRoundTrip() - wl_display_roundtrip(mDisplay); - } - -+QtWayland::xdg_shell *QWaylandDisplay::shellXdg() -+{ -+ return mShellXdg.data(); -+} -+ - QT_END_NAMESPACE -diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index cf5dfc2..f1b35a7 100644 ---- a/src/client/qwaylanddisplay_p.h -+++ b/src/client/qwaylanddisplay_p.h -@@ -72,6 +72,7 @@ class QWaylandWindow; - class QWaylandEventThread; - class QWaylandIntegration; - class QWaylandHardwareIntegration; -+class QWaylandXdgShell; - - namespace QtWayland { - class qt_output_extension; -@@ -115,7 +116,7 @@ public: - QtWayland::wl_compositor *compositor() { return &mCompositor; } - - QtWayland::wl_shell *shell() { return mShell.data(); } -- QtWayland::xdg_shell *shellXdg() { return mShellXdg.data(); } -+ QtWayland::xdg_shell *shellXdg(); - - QList inputDevices() const { return mInputDevices; } - QWaylandInputDevice *defaultInputDevice() const; -@@ -171,7 +172,7 @@ private: - QThread *mEventThread; - QWaylandEventThread *mEventThreadObject; - QScopedPointer mShell; -- QScopedPointer mShellXdg; -+ QScopedPointer mShellXdg; - QList mScreens; - QList mInputDevices; - QList mRegistryListeners; -diff --git a/src/client/qwaylandxdgshell.cpp b/src/client/qwaylandxdgshell.cpp -new file mode 100644 -index 0000000..eb9f91c ---- /dev/null -+++ b/src/client/qwaylandxdgshell.cpp -@@ -0,0 +1,77 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2014 Eurogiciel, author: -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qwaylandxdgshell_p.h" -+ -+#include "qwaylanddisplay_p.h" -+#include "qwaylandwindow_p.h" -+#include "qwaylandinputdevice_p.h" -+#include "qwaylanddecoration_p.h" -+#include "qwaylandscreen_p.h" -+ -+#include -+ -+QT_BEGIN_NAMESPACE -+ -+QWaylandXdgShell::QWaylandXdgShell(struct ::xdg_shell *shell) -+ : QtWayland::xdg_shell(shell) -+{ -+} -+ -+QWaylandXdgShell::QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id) -+ : QtWayland::xdg_shell(registry, id) -+{ -+ use_unstable_version(QtWayland::xdg_shell::version_current); -+} -+ -+QWaylandXdgShell::~QWaylandXdgShell() -+{ -+ xdg_shell_destroy(object()); -+} -+ -+ -+void QWaylandXdgShell::xdg_shell_ping(uint32_t serial) -+{ -+ pong(serial); -+} -+ -+ -+QT_END_NAMESPACE -diff --git a/src/client/qwaylandxdgshell_p.h b/src/client/qwaylandxdgshell_p.h -new file mode 100644 -index 0000000..6a396bd ---- /dev/null -+++ b/src/client/qwaylandxdgshell_p.h -@@ -0,0 +1,73 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2014 Eurogiciel, author: -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QWAYLANDXDGSHELL_H -+#define QWAYLANDXDGSHELL_H -+ -+#include -+ -+#include -+ -+#include -+#include -+#include "qwaylandshellsurface_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QWaylandWindow; -+class QWaylandInputDevice; -+class QWindow; -+ -+class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShell : public QtWayland::xdg_shell -+{ -+public: -+ QWaylandXdgShell(struct ::xdg_shell *shell); -+ QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id); -+ -+ virtual ~QWaylandXdgShell(); -+ -+private: -+ void xdg_shell_ping(uint32_t serial) Q_DECL_OVERRIDE; -+}; -+ -+QT_END_NAMESPACE -+ -+#endif // QWAYLANDXDGSHELL_H -diff --git a/src/client/qwaylandxdgsurface.cpp b/src/client/qwaylandxdgsurface.cpp -index 1b8affa..5fb74d2 100644 ---- a/src/client/qwaylandxdgsurface.cpp -+++ b/src/client/qwaylandxdgsurface.cpp -@@ -87,23 +87,25 @@ void QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice) - - void QWaylandXdgSurface::setMaximized() - { -- m_maximized = true; -- m_size = m_window->window()->geometry().size(); -- set_maximized(); -+ if (!m_maximized) -+ request_change_state(XDG_SURFACE_STATE_MAXIMIZED, true, 0); - } - - void QWaylandXdgSurface::setFullscreen() - { -- m_fullscreen = true; -- m_size = m_window->window()->geometry().size(); -- set_fullscreen(); -+ if (!m_fullscreen) -+ request_change_state(XDG_SURFACE_STATE_FULLSCREEN, true, 0); - } - - void QWaylandXdgSurface::setNormal() - { - if (m_fullscreen || m_maximized || m_minimized) { -- if (m_maximized) { unset_maximized(); } -- if (m_fullscreen) { unset_fullscreen(); } -+ if (m_maximized) { -+ request_change_state(XDG_SURFACE_STATE_MAXIMIZED, false, 0); -+ } -+ if (m_fullscreen) { -+ request_change_state(XDG_SURFACE_STATE_FULLSCREEN, false, 0); -+ } - - m_fullscreen = m_maximized = m_minimized = false; - setTopLevel(); -@@ -158,16 +160,48 @@ void QWaylandXdgSurface::setAppId(const QString & appId) - return QtWayland::xdg_surface::set_app_id(appId); - } - --void QWaylandXdgSurface::xdg_surface_ping(uint32_t serial) -+void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height) - { -- pong(serial); -+ m_window->configure(0 , width, height); - } - --void QWaylandXdgSurface::xdg_surface_configure(uint32_t edges, int32_t width, -- int32_t height) -+void QWaylandXdgSurface::xdg_surface_change_state(uint32_t state, -+ uint32_t value, -+ uint32_t serial) - { -- m_window->configure(edges, width, height); -+ -+ if (state == XDG_SURFACE_STATE_MAXIMIZED -+ || state == XDG_SURFACE_STATE_FULLSCREEN) { -+ if (value) { -+ m_size = m_window->window()->geometry().size(); -+ } else { -+ QMargins m = m_window->frameMargins(); -+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom()); -+ } -+ } -+ -+ switch (state) { -+ case XDG_SURFACE_STATE_MAXIMIZED: -+ m_maximized = value; -+ break; -+ case XDG_SURFACE_STATE_FULLSCREEN: -+ m_fullscreen = value; -+ break; -+ } -+ -+ xdg_surface_ack_change_state(object(), state, value, serial); - } - -+void QWaylandXdgSurface::xdg_surface_activated() -+{ -+} -+ -+void QWaylandXdgSurface::xdg_surface_deactivated() -+{ -+} -+ -+void QWaylandXdgSurface::xdg_surface_close() -+{ -+} - - QT_END_NAMESPACE -diff --git a/src/client/qwaylandxdgsurface_p.h b/src/client/qwaylandxdgsurface_p.h -index 744d3f3..d2a154e 100644 ---- a/src/client/qwaylandxdgsurface_p.h -+++ b/src/client/qwaylandxdgsurface_p.h -@@ -93,10 +93,15 @@ private: - bool m_fullscreen; - QSize m_size; - -- void xdg_surface_ping(uint32_t serial) Q_DECL_OVERRIDE; -- void xdg_surface_configure(uint32_t edges, -- int32_t width, -+ void xdg_surface_configure(int32_t width, - int32_t height) Q_DECL_OVERRIDE; -+ void xdg_surface_change_state(uint32_t state, -+ uint32_t value, -+ uint32_t serial) Q_DECL_OVERRIDE; -+ void xdg_surface_activated() Q_DECL_OVERRIDE; -+ void xdg_surface_deactivated() Q_DECL_OVERRIDE; -+ void xdg_surface_close() Q_DECL_OVERRIDE; -+ - friend class QWaylandWindow; - }; - --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch deleted file mode 100644 index 413459fb6..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch +++ /dev/null @@ -1,128 +0,0 @@ -From b4f032b13338ad6c21024177b031c75063ef7493 Mon Sep 17 00:00:00 2001 -From: Manuel Bachmann -Date: Sun, 7 Sep 2014 08:19:30 +0200 -Subject: [PATCH 20/21] Add IVI-Shell protocol file version patch v6 - -Source : http://lists.freedesktop.org/archives/wayland-devel/2014-June/015617.html - -This file comes from the last proposed definition of the IVI-Shell protocol, -and will need to be refreshed on protocol update. - -Task-number: QTBUG-XXXXX/part/1of2 - -Signed-off-by: Manuel Bachmann ---- - src/3rdparty/protocol/ivi-application.xml | 101 ++++++++++++++++++++++++++++++ - 1 file changed, 101 insertions(+) - create mode 100644 src/3rdparty/protocol/ivi-application.xml - -diff --git a/src/3rdparty/protocol/ivi-application.xml b/src/3rdparty/protocol/ivi-application.xml -new file mode 100644 -index 0000000..833fd38 ---- /dev/null -+++ b/src/3rdparty/protocol/ivi-application.xml -@@ -0,0 +1,101 @@ -+ -+ -+ -+ -+ Copyright (C) 2013 DENSO CORPORATION -+ Copyright (c) 2013 BMW Car IT GmbH -+ -+ 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. -+ -+ -+ -+ -+ -+ -+ -+ This removes link from ivi_id to wl_surface and destroys ivi_surface. -+ -+ -+ -+ -+ -+ The new visibility state is provided in argument visibility. -+ If visibility is 0, the surface has become invisible. -+ If visibility is not 0, the surface has become visible. -+ -+ -+ -+ -+ -+ -+ These define all possible warning codes returned by ivi compositor on server-side warnings. -+ invalid_wl_surface: -+ - wl_surface already has a another role. -+ - wl_surface is destroyed before the ivi_surface is destroyed. -+ ivi_id_in_use: ivi_id is already assigned by another application. -+ -+ -+ -+ -+ -+ -+ -+ The ivi compositor encountered warning while processing a request by this -+ application. The warning is defined by argument warning_code and optional -+ warning_text. If the warning is detected, client shall destroy the ivi_surface -+ object. -+ -+ When a warning event is sent, the compositor turns the ivi_surface object inert. -+ The ivi_surface will not deliver further events, all requests on it are ignored -+ except 'destroy', and the association to the ivi_id is removed. The client -+ should destroy the ivi_surface object. If an inert ivi_surface object is used as -+ an argument to any other object's request, that request will [produce a fatal -+ error / produce a warning / be ignored]. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ This interface is implemented by servers that provide desktop-style user interfaces. -+ It allows clients to associate a ivi_surface with a basic surface. -+ -+ -+ -+ -+ surface_create will create a interface:ivi_surface with numeric ID; ivi_id in -+ ivi compositor. These ivi_ids are defined as unique in the system to identify -+ it inside of ivi compositor. The ivi compositor implements business logic how to -+ set properties of the surface with ivi_id according to status of the system. -+ E.g. a unique ID for Car Navigation application is used for implementing special -+ logic of the application about where it shall be located. -+ if a wl_surface which already has another role is set, the server regards this as -+ error and disconnects the client. -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch deleted file mode 100644 index 8723def26..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch +++ /dev/null @@ -1,539 +0,0 @@ -From 1ddfa43692cabae0f552351cfbc09377e479471e Mon Sep 17 00:00:00 2001 -From: Manuel Bachmann -Date: Mon, 8 Sep 2014 11:38:01 +0200 -Subject: [PATCH 21/21] Implement initial IVI-Shell support - -IVI-Shell provides a shell interface for Weston, which maps the GENIVI API (http://www.genivi.org) for In-Vehicle Infotainment. - -This patch enables detecting the IVI-Shell interface at runtime, and creating compatible surfaces if found. - -Task-number: QTBUG-XXXXX/part/2of2 - -Change-Id: I1f6c11bf56b727a54fb48faab9c076b61d635440 -Signed-off-by: Manuel Bachmann ---- - src/client/client.pro | 5 ++ - src/client/qwaylanddisplay.cpp | 9 ++++ - src/client/qwaylanddisplay_p.h | 5 ++ - src/client/qwaylandivishell.cpp | 69 +++++++++++++++++++++++++ - src/client/qwaylandivishell_p.h | 70 +++++++++++++++++++++++++ - src/client/qwaylandivisurface.cpp | 105 ++++++++++++++++++++++++++++++++++++++ - src/client/qwaylandivisurface_p.h | 90 ++++++++++++++++++++++++++++++++ - src/client/qwaylandwindow.cpp | 8 ++- - 8 files changed, 360 insertions(+), 1 deletion(-) - create mode 100644 src/client/qwaylandivishell.cpp - create mode 100644 src/client/qwaylandivishell_p.h - create mode 100644 src/client/qwaylandivisurface.cpp - create mode 100644 src/client/qwaylandivisurface_p.h - -diff --git a/src/client/client.pro b/src/client/client.pro -index 73e3b7f..adb526d 100644 ---- a/src/client/client.pro -+++ b/src/client/client.pro -@@ -42,6 +42,7 @@ WAYLANDCLIENTSOURCES += \ - ../extensions/windowmanager.xml \ - ../3rdparty/protocol/text.xml \ - ../3rdparty/protocol/xdg-shell.xml \ -+ ../3rdparty/protocol/ivi-application.xml \ - - SOURCES += qwaylandintegration.cpp \ - qwaylandnativeinterface.cpp \ -@@ -61,6 +62,8 @@ SOURCES += qwaylandintegration.cpp \ - qwaylandwlshellsurface.cpp \ - qwaylandxdgshell.cpp \ - qwaylandxdgsurface.cpp \ -+ qwaylandivishell.cpp \ -+ qwaylandivisurface.cpp \ - qwaylandextendedoutput.cpp \ - qwaylandextendedsurface.cpp \ - qwaylandsubsurface.cpp \ -@@ -92,6 +95,8 @@ HEADERS += qwaylandintegration_p.h \ - qwaylandwlshellsurface_p.h \ - qwaylandxdgshell_p.h \ - qwaylandxdgsurface_p.h \ -+ qwaylandivishell_p.h \ -+ qwaylandivisurface_p.h \ - qwaylandextendedoutput_p.h \ - qwaylandextendedsurface_p.h \ - qwaylandsubsurface_p.h \ -diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 2e25672..2a93db7 100644 ---- a/src/client/qwaylanddisplay.cpp -+++ b/src/client/qwaylanddisplay.cpp -@@ -51,6 +51,7 @@ - #include "qwaylanddatadevicemanager_p.h" - #include "qwaylandhardwareintegration_p.h" - #include "qwaylandxdgshell_p.h" -+#include "qwaylandivishell_p.h" - - #include "qwaylandwindowmanagerintegration_p.h" - -@@ -62,6 +63,7 @@ - - #include - #include -+#include - - #include - #include -@@ -207,6 +209,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin - mCompositor.init(registry, id); - } else if (interface == QStringLiteral("wl_shm")) { - mShm = static_cast(wl_registry_bind(registry, id, &wl_shm_interface,1)); -+ } else if (interface == QStringLiteral("ivi_application")) { -+ mShellIvi.reset(new QWaylandIviShell(registry,id)); - } else if (interface == QStringLiteral("xdg_shell") - && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) { - mShellXdg.reset(new QWaylandXdgShell(registry,id)); -@@ -279,4 +283,9 @@ QtWayland::xdg_shell *QWaylandDisplay::shellXdg() - return mShellXdg.data(); - } - -+QtWayland::ivi_application *QWaylandDisplay::shellIvi() -+{ -+ return mShellIvi.data(); -+} -+ - QT_END_NAMESPACE -diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index f1b35a7..b9c686c 100644 ---- a/src/client/qwaylanddisplay_p.h -+++ b/src/client/qwaylanddisplay_p.h -@@ -52,6 +52,7 @@ - #include - #include - #include -+#include - - struct wl_cursor_image; - -@@ -72,6 +73,7 @@ class QWaylandWindow; - class QWaylandEventThread; - class QWaylandIntegration; - class QWaylandHardwareIntegration; -+class QWaylandIviShell; - class QWaylandXdgShell; - - namespace QtWayland { -@@ -81,6 +83,7 @@ namespace QtWayland { - class qt_surface_extension; - class wl_text_input_manager; - class xdg_shell; -+ class ivi_application; - } - - typedef void (*RegistryListener)(void *data, -@@ -117,6 +120,7 @@ public: - - QtWayland::wl_shell *shell() { return mShell.data(); } - QtWayland::xdg_shell *shellXdg(); -+ QtWayland::ivi_application *shellIvi(); - - QList inputDevices() const { return mInputDevices; } - QWaylandInputDevice *defaultInputDevice() const; -@@ -173,6 +177,7 @@ private: - QWaylandEventThread *mEventThreadObject; - QScopedPointer mShell; - QScopedPointer mShellXdg; -+ QScopedPointer mShellIvi; - QList mScreens; - QList mInputDevices; - QList mRegistryListeners; -diff --git a/src/client/qwaylandivishell.cpp b/src/client/qwaylandivishell.cpp -new file mode 100644 -index 0000000..9d63d0d ---- /dev/null -+++ b/src/client/qwaylandivishell.cpp -@@ -0,0 +1,69 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2014 Eurogiciel, author: -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qwaylandivishell_p.h" -+ -+#include "qwaylanddisplay_p.h" -+#include "qwaylandwindow_p.h" -+#include "qwaylandinputdevice_p.h" -+#include "qwaylanddecoration_p.h" -+#include "qwaylandscreen_p.h" -+ -+#include -+ -+QT_BEGIN_NAMESPACE -+ -+QWaylandIviShell::QWaylandIviShell(struct ::ivi_application *shell) -+ : QtWayland::ivi_application(shell) -+{ -+} -+ -+QWaylandIviShell::QWaylandIviShell(struct ::wl_registry *registry, uint32_t id) -+ : QtWayland::ivi_application(registry, id) -+{ -+} -+ -+QWaylandIviShell::~QWaylandIviShell() -+{ -+ ivi_application_destroy(object()); -+} -+ -+QT_END_NAMESPACE -diff --git a/src/client/qwaylandivishell_p.h b/src/client/qwaylandivishell_p.h -new file mode 100644 -index 0000000..f9f6983 ---- /dev/null -+++ b/src/client/qwaylandivishell_p.h -@@ -0,0 +1,70 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2014 Eurogiciel, author: -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QWAYLANDIVISHELL_H -+#define QWAYLANDIVISHELL_H -+ -+#include -+ -+#include -+ -+#include -+#include -+#include "qwaylandshellsurface_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QWaylandWindow; -+class QWaylandInputDevice; -+class QWindow; -+ -+class Q_WAYLAND_CLIENT_EXPORT QWaylandIviShell : public QtWayland::ivi_application -+{ -+public: -+ QWaylandIviShell(struct ::ivi_application *shell); -+ QWaylandIviShell(struct ::wl_registry *registry, uint32_t id); -+ -+ virtual ~QWaylandIviShell(); -+}; -+ -+QT_END_NAMESPACE -+ -+#endif // QWAYLANDIVISHELL_H -diff --git a/src/client/qwaylandivisurface.cpp b/src/client/qwaylandivisurface.cpp -new file mode 100644 -index 0000000..a12309e ---- /dev/null -+++ b/src/client/qwaylandivisurface.cpp -@@ -0,0 +1,105 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qwaylandivisurface_p.h" -+ -+#include "qwaylanddisplay_p.h" -+#include "qwaylandwindow_p.h" -+#include "qwaylandinputdevice_p.h" -+#include "qwaylanddecoration_p.h" -+#include "qwaylandscreen_p.h" -+ -+#include -+ -+QT_BEGIN_NAMESPACE -+ -+QWaylandIviSurface::QWaylandIviSurface(struct ::ivi_surface *ivi_surface, QWaylandWindow *window) -+ : QtWayland::ivi_surface(ivi_surface) -+ , m_window(window) -+{ -+} -+ -+QWaylandIviSurface::~QWaylandIviSurface() -+{ -+ ivi_surface_destroy(object()); -+} -+ -+void QWaylandIviSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -+{ -+} -+ -+void QWaylandIviSurface::move(QWaylandInputDevice *inputDevice) -+{ -+} -+ -+void QWaylandIviSurface::setMaximized() -+{ -+} -+ -+void QWaylandIviSurface::setFullscreen() -+{ -+} -+ -+void QWaylandIviSurface::setNormal() -+{ -+} -+ -+void QWaylandIviSurface::setMinimized() -+{ -+} -+ -+void QWaylandIviSurface::setTopLevel() -+{ -+} -+ -+void QWaylandIviSurface::updateTransientParent(QWindow *parent) -+{ -+} -+ -+void QWaylandIviSurface::setTitle(const QString & title) -+{ -+} -+ -+void QWaylandIviSurface::setAppId(const QString & appId) -+{ -+} -+ -+QT_END_NAMESPACE -diff --git a/src/client/qwaylandivisurface_p.h b/src/client/qwaylandivisurface_p.h -new file mode 100644 -index 0000000..c6a7ce6 ---- /dev/null -+++ b/src/client/qwaylandivisurface_p.h -@@ -0,0 +1,90 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -+** Contact: http://www.qt-project.org/legal -+** -+** This file is part of the config.tests of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** 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 Digia. For licensing terms and -+** conditions see http://qt.digia.com/licensing. For further information -+** use the contact form at http://qt.digia.com/contact-us. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Digia gives you certain additional -+** rights. These rights are described in the Digia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU -+** General Public License version 3.0 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU General Public License version 3.0 requirements will be -+** met: http://www.gnu.org/copyleft/gpl.html. -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QWAYLANDIVISURFACE_H -+#define QWAYLANDIVISURFACE_H -+ -+#include -+ -+#include -+ -+#include -+#include -+#include "qwaylandshellsurface_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QWaylandWindow; -+class QWaylandInputDevice; -+class QWindow; -+class QWaylandExtendedSurface; -+ -+class Q_WAYLAND_CLIENT_EXPORT QWaylandIviSurface : public QtWayland::ivi_surface -+ , public QWaylandShellSurface -+{ -+public: -+ QWaylandIviSurface(struct ::ivi_surface *shell_surface, QWaylandWindow *window); -+ virtual ~QWaylandIviSurface(); -+ -+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE; -+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE; -+ -+ void setTitle(const QString &title) Q_DECL_OVERRIDE; -+ void setAppId(const QString &appId) Q_DECL_OVERRIDE; -+ -+private: -+ void setMaximized() Q_DECL_OVERRIDE; -+ void setFullscreen() Q_DECL_OVERRIDE; -+ void setNormal() Q_DECL_OVERRIDE; -+ void setMinimized() Q_DECL_OVERRIDE; -+ -+ void setTopLevel() Q_DECL_OVERRIDE; -+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE; -+ -+private: -+ QWaylandWindow *m_window; -+ -+ friend class QWaylandWindow; -+}; -+ -+QT_END_NAMESPACE -+ -+#endif // QWAYLANDIVISURFACE_H -diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 3fb3a49..45a58f2 100644 ---- a/src/client/qwaylandwindow.cpp -+++ b/src/client/qwaylandwindow.cpp -@@ -39,6 +39,8 @@ - ** - ****************************************************************************/ - -+#include -+ - #include "qwaylandwindow_p.h" - - #include "qwaylandbuffer_p.h" -@@ -48,10 +50,12 @@ - #include "qwaylandshellsurface_p.h" - #include "qwaylandwlshellsurface_p.h" - #include "qwaylandxdgsurface_p.h" -+#include "qwaylandivisurface_p.h" - #include "qwaylandextendedsurface_p.h" - #include "qwaylandsubsurface_p.h" - #include "qwaylanddecoration_p.h" - #include "qwaylandwindowmanagerintegration_p.h" -+#define IVI_SURFACE_ID 8000 - - #include - #include -@@ -95,7 +99,9 @@ QWaylandWindow::QWaylandWindow(QWindow *window) - mWindowId = id++; - - if (!(window->flags() & Qt::BypassWindowManagerHint)) { -- if (mDisplay->shellXdg()) { -+ if (mDisplay->shellIvi()) { -+ mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(IVI_SURFACE_ID + getpid(), object()), this); -+ } else if (mDisplay->shellXdg()) { - if (window->type() & Qt::Window) { - mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this); - } --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch deleted file mode 100644 index 984ae8132..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/tests/auto/compositor/compositor/compositor.pro b/tests/auto/compositor/compositor/compositor.pro -index 2919fa4..d9acac3 100644 ---- a/tests/auto/compositor/compositor/compositor.pro -+++ b/tests/auto/compositor/compositor/compositor.pro -@@ -7,9 +7,6 @@ QT += core-private gui-private waylandcompositor waylandcompositor-private - - QMAKE_USE += wayland-client wayland-server - --qtConfig(xkbcommon-evdev): \ -- QMAKE_USE += xkbcommon_evdev -- - WAYLANDCLIENTSOURCES += \ - ../../../../src/3rdparty/protocol/xdg-shell.xml \ - ../../../../src/3rdparty/protocol/ivi-application.xml \ diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch deleted file mode 100644 index bca61b5db..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 9617c349a212d5407087daf4f4a2386bce94ecc1 Mon Sep 17 00:00:00 2001 -From: Philippe Coval -Date: Thu, 12 Jun 2014 11:55:29 +0200 -Subject: [PATCH 18/21] packaging: enable xdg-shell at runtime - -Change-Id: Iffbae496f1e09c8fa44a28d4eb515678e3bbb297 -Bug-Tizen: TIVI-3113/part -Signed-off-by: Philippe Coval ---- - packaging/qt5-qtwayland.spec | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/packaging/qt5-qtwayland.spec b/packaging/qt5-qtwayland.spec -index cba18e2..ff32185 100644 ---- a/packaging/qt5-qtwayland.spec -+++ b/packaging/qt5-qtwayland.spec -@@ -97,6 +97,11 @@ rm -rf %{buildroot} - - %post - /sbin/ldconfig -+ -+f="/etc/profile.d/qt.sh" -+grep QT_WAYLAND_USE_XDG_SHELL $f \ -+ || echo "QT_WAYLAND_USE_XDG_SHELL='defined'; export QT_WAYLAND_USE_XDG_SHELL" >> $f -+ - %postun - /sbin/ldconfig - --- -1.9.1 - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend deleted file mode 100644 index 2f6072acd..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend +++ /dev/null @@ -1,26 +0,0 @@ -FILESEXTRAPATHS_append := ":${THISDIR}/${PN}" - -# QT_MODULE_BRANCH = "5.4" - -# TODO: -# These patches for IVI-SHELL are tempolary disabled because of issues. And new -# patches are proposed. -# -# file://0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch \ -# file://0021-Implement-initial-IVI-Shell-support.patch \ -# file://0001-protocol-update-3rd-party-ivi-application-protocol.patch \ -# file://0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch \ -# -# The xdg-shell merged into upstream, so we don't need these patch anymore. -# But xdg-shell doesn't work well in current AGL Distro because of -# mismatch of protocol versions between server(weston) and client(Qt Apps). -# -# file://0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch \ -# file://0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch \ -# file://0019-xdg-shell-upgrade-to-support-current-version-weston-.patch \ -# - -SRC_URI_append = "\ - file://0010-Added-manifest-file-according-to-smack-3-domain-mode.patch \ - " - diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend deleted file mode 100644 index 0420578e1..000000000 --- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -PACKAGECONFIG = "gstreamer qtlocation qtmultimedia qtsensors" diff --git a/meta-agl-profile-graphical/LICENSE b/meta-agl-profile-graphical/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-graphical/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical/LICENSE.GPL-2.0-only b/meta-agl-profile-graphical/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-graphical/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical/LICENSE.MIT b/meta-agl-profile-graphical/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-graphical/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-graphical/classes/agl-graphical.bbclass b/meta-agl-profile-graphical/classes/agl-graphical.bbclass deleted file mode 100644 index 65106db18..000000000 --- a/meta-agl-profile-graphical/classes/agl-graphical.bbclass +++ /dev/null @@ -1,6 +0,0 @@ -WESTONUSER ??= "display" -WESTONGROUP ??= "display" -WESTONARGS ?= "--idle-time=0 --tty=7" -WESTONLAUNCHARGS ??= "--tty /dev/tty7 --user ${WESTONUSER}" -DISPLAY_XDG_RUNTIME_DIR ??= "/run/platform/${WESTONUSER}" - diff --git a/meta-agl-profile-graphical/conf/layer.conf b/meta-agl-profile-graphical/conf/layer.conf deleted file mode 100644 index 0a6efea74..000000000 --- a/meta-agl-profile-graphical/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofilegraphical" -BBFILE_PATTERN_aglprofilegraphical = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofilegraphical = "70" - -LAYERSERIES_COMPAT_aglprofilegraphical = "dunfell" diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb deleted file mode 100644 index 7d2661bc0..000000000 --- a/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb +++ /dev/null @@ -1,14 +0,0 @@ -SUMMARY = "Homescreen binding and client library for application" -DESCRIPTION = "agl-service-homescreen is the binding library" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/agl-service-homescreen" -SECTION = "HMI" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -DEPENDS = "dbus glib-2.0 af-binder json-c" - -inherit cmake aglwgt - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-homescreen;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" -S = "${WORKDIR}/git" diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb deleted file mode 100644 index 4f1757c7d..000000000 --- a/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Mediaplayer Service Binding" -DESCRIPTION = "AGL Mediaplayer Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-mediaplayer" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-mediaplayer;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c gstreamer1.0 gstreamer1.0-plugins-base" -RDEPENDS_${PN} = "agl-service-mediascanner agl-service-bluetooth gstreamer1.0-plugins-bad-waylandsink" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb deleted file mode 100644 index a46ce128c..000000000 --- a/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "Radio Service Binding" -DESCRIPTION = "AGL Radio Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-radio" -SECTION = "apps" -LICENSE = "Apache-2.0 & GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \ - file://LICENSE.GPL-2.0-only;md5=751419260aa954499f7abaabaa882bbe" - -PV = "1.0+git${SRCPV}" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-radio;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -S = "${WORKDIR}/git" - -# build-time dependencies -DEPENDS = "rtl-sdr glib-2.0 gstreamer1.0 libusb-compat" - -inherit cmake aglwgt pkgconfig diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb deleted file mode 100644 index 6c5a18107..000000000 --- a/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Task Manager Service Binding" -DESCRIPTION = "AGL Task Manager Service Binding" -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-taskmanager" -SECTION = "apps" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-taskmanager;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -PV = "1.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "json-c procps" - -inherit cmake aglwgt pkgconfig - diff --git a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug b/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug deleted file mode 100644 index fee9573b7..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug +++ /dev/null @@ -1,8 +0,0 @@ -#You can select log level of HMI framework -#1 ERROR -#2 WARNING -#3 NOTICE -#4 INFO -#5 DEBUG -#If you want to output debug log about hmi-framework, please uncomment the following. -#USE_HMI_DEBUG=5 diff --git a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb b/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb deleted file mode 100644 index 27fb60d66..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -DESCRIPTION = "Configurations for HMI framework" - -SECTION = "HMI" -LICENSE = "Apache-2.0" - -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -SRC_URI = " \ - file://hmi-debug \ -" - -FILES_${PN} = " \ - ${sysconfdir}/afm/unit.env.d \ -" - -do_install() { - install -d ${D}${sysconfdir}/afm/unit.env.d - install -m 644 ${WORKDIR}/hmi-debug ${D}${sysconfdir}/afm/unit.env.d -} diff --git a/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb b/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb deleted file mode 100644 index da511c8a1..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb +++ /dev/null @@ -1,19 +0,0 @@ -SUMMARY = "AGL Home Screen Library" -DESCRIPTION = "libhomescreen" -HOMEPAGE = "http://docs.automotivelinux.org" -LICENSE = "Apache-2.0" -SECTION = "libs" - -BBCLASSEXTEND = " nativesdk" - -LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" - -DEPENDS = "af-binder json-c" - -inherit cmake - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libhomescreen.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "0d65d54ba63508c0ef545d02e94d5702f9c8ecb3" -S = "${WORKDIR}/git" - -RDEPENDS_${PN} = "agl-service-homescreen" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf b/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf deleted file mode 100644 index bbd5a80c4..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf +++ /dev/null @@ -1,34 +0,0 @@ -##Generate a weston.ini file: - -To modify any of the default sections (core, shell, ivi-shell), add a -do_configure() function to your bbappend: - -''' -do_configure() { - echo repaint-window=34 >> ${WORKDIR}/core.cfg - - echo transition-duration=300 >> ${WORKDIR}/ivishell.cfg - echo cursor-theme=default >> ${WORKDIR}/ivishell.cfg -} -''' -or: -''' -do_configure() { - sed -i -e 's/drm-backend/fbdev-backend/' ${WORKDIR}/core.cfg -} -''' - -To change the display from the default assumption of an HDMI-1-A connected -screen that needs to be rotated 270 degrees: - -''' -SRC_URI_remove = "file://hdmi-a-1-270.cfg" -SRC_URI += "file://hdmi-a-1-90.cfg" -''' - -To add new sections just list them in SRC_URI: -''' -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://dsi.cfg" -''' diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb deleted file mode 100644 index 553f3a6bf..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb +++ /dev/null @@ -1,28 +0,0 @@ -SUMMARY = "Reference Wayland compositor for AGL" -DESCRIPTION = "The AGL compositor is a reference Wayland server for Automotive \ -Grade Linux, using libweston as a base to provide a graphical environment for \ -the automotive environment." - -HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fagl-compositor" -SECTION = "x11" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0" - -DEPENDS = "wayland wayland-protocols wayland-native weston" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "bdd8dd718496dc8e4330209c46c196442bcf7d3e" - -PV = "0.0.10+git${SRCPV}" -S = "${WORKDIR}/git" - -PACKAGECONFIG[policy-deny-all] = "-Dpolicy-default=deny-all,," - -inherit meson pkgconfig python3native - -FILES_${PN} = " \ - ${bindir}/agl-compositor \ - ${bindir}/agl-screenshooter \ - ${datadir}/${PN}/protocols/agl-shell.xml \ - ${datadir}/${PN}/protocols/agl-shell-desktop.xml \ - " diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb deleted file mode 100644 index 89d97f513..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb +++ /dev/null @@ -1,34 +0,0 @@ -DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise" -HOMEPAGE = "https://github.com/waltham/waltham" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://waltham-transmitter/COPYING;md5=f21c9af4de068fb53b83f0b37d262ec3" - -DEPENDS += "libdrm virtual/kernel wayland wayland-native waltham weston gstreamer1.0 gstreamer gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad wayland-ivi-extension" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/weston-ivi-plugins.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "5287483228fa1e28f3217a54606cfe760c6582bd" - -S = "${WORKDIR}/git/" - -WALTHAM_PIPELINE_TRANSMITTER ?= "waltham-transmitter/waltham-renderer/pipeline_example_general.cfg" -WALTHAM_PIPELINE_RECEIVER ?= "waltham-receiver/receiver_pipeline_example_general.cfg" -WALTHAM_RECIEVER_IP ?= "192.168.1.2" -WALTHAM_RECEIVER_PORT ?= "3440" - -inherit pkgconfig cmake - -do_install_append () { - install -d ${D}/etc/xdg/weston/ - install ${S}/${WALTHAM_PIPELINE_TRANSMITTER} ${D}/etc/xdg/weston/transmitter_pipeline.cfg - install ${S}/${WALTHAM_PIPELINE_RECEIVER} ${D}/etc/xdg/weston/receiver_pipeline.cfg - - sed -i -e "s/YOUR_RECIEVER_IP/${WALTHAM_RECIEVER_IP}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg - sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg - sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/receiver_pipeline.cfg - -} - -FILES_${PN} += "/etc/xdg/weston/*.cfg" -FILES_${PN} += "${libdir}/*" -FILES_${PN} += "${bindir}/*" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch deleted file mode 100644 index 32c2df3c4..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 6ecdf10a10929164f3cbdb754ae91d27576e5036 Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Fri, 16 Oct 2020 18:57:38 +0300 -Subject: [PATCH] Use python3 instead of 2 - -Signed-off-by: Marius Vlad ---- - configure.ac | 2 +- - tools/gen.py | 6 +++--- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 5f65a6b..94b8644 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -32,7 +32,7 @@ AC_SUBST(VERSION_INFO) - # Check for programs - AC_PROG_CC - AC_PROG_CC_STDC --AC_CHECK_PROGS([PYTHON2], [python2 python]) -+AC_CHECK_PROGS([PYTHON3], [python3 python]) - PKG_PROG_PKG_CONFIG() - - AC_ARG_ENABLE(gprof, -diff --git a/tools/gen.py b/tools/gen.py -index 19e8baa..64c5870 100755 ---- a/tools/gen.py -+++ b/tools/gen.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # -*- coding: utf-8 -*- - - # Copyright © 2013-2014 Collabora, Ltd. -@@ -562,11 +562,11 @@ try: - opts, args = getopt.getopt(sys.argv[1:], "hp:i:o:t:m:", - ["preamble=", "input=", "output=", "type=", "mode="]) - except getopt.GetoptError: -- print 'gen.py -p -i -o -t -m ' -+ print('gen.py -p -i -o -t -m ') - sys.exit(2) - for opt, arg in opts: - if opt == '-h': -- print 'gen.py -p -i -o -t -m ' -+ print('gen.py -p -i -o -t -m ') - sys.exit() - elif opt in ("-p", "--preamble"): - preamble_files.append(arg) --- -2.28.0 - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch deleted file mode 100644 index 354bcbc15..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch +++ /dev/null @@ -1,55 +0,0 @@ -From cc87dddc2cdc0c20b053e3da1197efd671b4f50c Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Wed, 23 Sep 2020 22:33:50 +0300 -Subject: [PATCH 1/2] waltham: Fix compile build error - -Newer compilers will complain about the fact debug_message is declared -multiple times: - -multiple definition of `debug_message'; -.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: -first defined here multiple definition of `debug_message'; -.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: -first defined here /usr/bin/ld: -.libs/client-serialice.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: -multiple definition of `debug_message'; -.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35: -first defined here - -Bug-AGL: SPEC-3649 - -Signed-off-by: Marius Vlad ---- - src/waltham/marshaller_log.h | 2 +- - src/waltham/waltham-util.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/waltham/marshaller_log.h b/src/waltham/marshaller_log.h -index 8254914..ffa87c1 100644 ---- a/src/waltham/marshaller_log.h -+++ b/src/waltham/marshaller_log.h -@@ -32,7 +32,7 @@ - /* Comment/uncomment to disable/enable debugging log */ - #define DEBUG - //#define PROFILE --int debug_message; -+extern int debug_message; - - #ifdef DEBUG - static inline void DEBUG_STAMP (void) { -diff --git a/src/waltham/waltham-util.c b/src/waltham/waltham-util.c -index 410b114..8f898f8 100644 ---- a/src/waltham/waltham-util.c -+++ b/src/waltham/waltham-util.c -@@ -34,7 +34,7 @@ - #include "waltham-connection.h" - #include "waltham-private.h" - --int debug_message; -+extern int debug_message; - - static void - wth_pfx_print(const char *pfx, const char *fmt, va_list argp) --- -2.28.0 - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch deleted file mode 100644 index 5aefb922b..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch +++ /dev/null @@ -1,70 +0,0 @@ -From d30005429fe92daa14151c2a6175d5cf19506cac Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Wed, 7 Oct 2020 16:36:38 +0300 -Subject: [PATCH 2/2] commandxml: Add support wthp_app_id interface - -With it, we hang off the app_id which we can use to pass it to the -receiver side. - -Bug-AGL: SPEC-3601 - -Signed-off-by: Marius Vlad ---- - data/command.xml | 29 +++++++++++++++++++++++++++++ - src/waltham/header-preamble.txt | 1 + - 2 files changed, 30 insertions(+) - -diff --git a/data/command.xml b/data/command.xml -index a03082b..cb53f75 100644 ---- a/data/command.xml -+++ b/data/command.xml -@@ -1814,6 +1814,35 @@ - - - -+ -+ -+ This interface is exposed as a global singleton. -+ This interface is implemented by servers that provide IVI-style user interfaces. -+ It allows clients to associate an ivi_surface with wthp_surface. -+ -+ -+ -+ -+ -+ -+ -+ -+ This request gives the wthp_surface the role of an IVI Surface. Creating more than -+ one ivi_surface for a wthp_surface is not allowed. Note, that this still allows the -+ following example: -+ -+ 1. create a wthp_surface -+ 2. create ivi_surface for the wthp_surface -+ 3. destroy the ivi_surface -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -diff --git a/src/waltham/header-preamble.txt b/src/waltham/header-preamble.txt -index df765cc..2409859 100644 ---- a/src/waltham/header-preamble.txt -+++ b/src/waltham/header-preamble.txt -@@ -50,5 +50,6 @@ struct wthp_touch; - - struct wthp_ivi_surface; - struct wthp_ivi_application; -+struct wthp_ivi_app_id; - - struct dummy; --- -2.28.0 - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend deleted file mode 100644 index 8d0436a3b..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI_append = "\ - file://0001-waltham-Fix-compile-build-error.patch \ - file://0002-commandxml-Add-support-wthp_app_id-interface.patch \ - file://0001-Use-python3-instead-of-2.patch \ - " diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb deleted file mode 100644 index 01023a1f2..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb +++ /dev/null @@ -1,16 +0,0 @@ -DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise" -HOMEPAGE = "https://github.com/waltham/waltham" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e8ad01a5182f2c1b3a2640e9ea268264 \ -" -SRCREV = "1de58c3ff746ddaba7584d760c5454243723d3ca" -SRC_URI = "git://github.com/wmizuno/waltham.git \ - " -S = "${WORKDIR}/git" - -inherit autotools pkgconfig - -DEPENDS += "libdrm virtual/kernel wayland" -RDEPENDS_${PN} += "libdrm" \ No newline at end of file diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch deleted file mode 100644 index 7ea0b6e9b..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 48977cb77410247df547063d9d7bcd381fb13cde Mon Sep 17 00:00:00 2001 -From: Michael Teyfel -Date: Fri, 12 Oct 2018 17:12:24 +0200 -Subject: [PATCH 1/3] Added ivi-id-agent to CMake - -Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. - -Signed-off-by: Michael Teyfel -Signed-off-by: Scott Murray - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 7d0044a..988fc89 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -40,6 +40,7 @@ add_subdirectory(ivi-layermanagement-api/test) - add_subdirectory(ivi-layermanagement-examples) - add_subdirectory(ivi-layermanagement-api/ilmInput) - add_subdirectory(ivi-input-modules/ivi-input-controller) -+add_subdirectory(ivi-id-agent-modules/ivi-id-agent) - - - #============================================================================================= diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch deleted file mode 100644 index 9f1ab47b7..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch +++ /dev/null @@ -1,21 +0,0 @@ -LayerManagerControl: add error exit status - -Tweak to add a non-zero exit status on errors. This is useful for -scripting, and allows writing a simple loop to detect Weston readiness. - -Upstream-Status: Pending - -Signed-off-by: Scott Murray - -diff --git a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp -index 8ee0546..210e21e 100644 ---- a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp -+++ b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp -@@ -45,6 +45,7 @@ int main(int argc, char* argv[]) - if (CommandSuccess != interpreter.interpretCommand(userCommand)) - { - cerr << "Interpreter error: " << interpreter.getLastError() << endl; -+ return 1; - } - - return 0; diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch deleted file mode 100644 index 0fe2abb35..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch +++ /dev/null @@ -1,530 +0,0 @@ -From 42fc715a430068cdb4484e2cb119418da8ac4e6f Mon Sep 17 00:00:00 2001 -From: Michael Teyfel -Date: Fri, 12 Oct 2018 16:46:57 +0200 -Subject: [PATCH 2/3] ivi-id-agent: added ivi-id-agent - -This is a reference implementation of an ivi-id-agent plugin. It -creates surface-ids for desktop-surfaces depending on the configuration -provided in "weston.ini". For more please refer to the reference -implementation in this commit. - -The only public interface available is the "id_agent_module_init" -function. It is responsible for initialization of structs and reading -the configuration. - -In the reference "weston.ini" two types of configurations can be found: - -[desktop-app] is used to configure a particular application. Therefore -the desired surface-id must be provided. Moreover "app-title" is the -title that is provided by the desktop application (xdg-protocol). -"app-id" behaves accordingly. Although both parameters can be set, it -is not mandatory. Finally at least one has to be set. - -[desktop-app-default] enables the id-agent to generate generic -surface-ids for unconfigured applications, e.g. for development. This -tag is optional. To generate the id an interval starting from -"default-surface-id" to "default-surface-id-max" is used. The id is -incremented until the interval is exceeded. - -In the function "get_id" a surface-id is assigned by means of the -configuration. It can be adjusted, if another behavior is desired. -In this plugin the parameters, that are described above, are evaluated. - -To use these patches please also apply the dedicated patches for -weston: https://github.com/mtey/weston/tree/xdg_support_ivi_id_agent -Since libweston-desktop is used to introduce desktop-surface support, -xdg-protocol is supported. - -Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. - -Signed-off-by: Michael Teyfel -Signed-off-by: Scott Murray - -diff --git a/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt -new file mode 100644 -index 0000000..7354a7e ---- /dev/null -+++ b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt -@@ -0,0 +1,69 @@ -+############################################################################### -+# -+# Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH -+# -+# -+# 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. -+# -+############################################################################### -+ -+cmake_minimum_required (VERSION 2.6) -+ -+project(ivi-id-agent) -+ -+find_package(PkgConfig REQUIRED) -+pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED) -+pkg_check_modules(WESTON weston>=5.0.0 REQUIRED) -+pkg_check_modules(PIXMAN pixman-1 REQUIRED) -+pkg_check_modules(LIBWESTON_DESKTOP libweston-desktop-8 REQUIRED) -+ -+find_package(Threads REQUIRED) -+ -+include_directories( -+ src -+ ${WAYLAND_SERVER_INCLUDE_DIRS} -+ ${WESTON_INCLUDE_DIRS} -+ ${PIXMAN_INCLUDE_DIRS} -+) -+ -+link_directories( -+ ${WAYLAND_SERVER_LIBRARY_DIRS} -+ ${PIXMAN_LIBRARY_DIRS} -+) -+ -+ -+add_library(${PROJECT_NAME} MODULE -+ src/ivi-id-agent.c -+) -+ -+set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") -+ -+add_dependencies(${PROJECT_NAME} -+ ${WAYLAND_SERVER_LIBRARIES} -+ ${PIXMAN_LIBRARIES} -+) -+ -+set(LIBS -+ ${LIBS} -+ ${WAYLAND_SERVER_LIBRARIES} -+ ${LIBWESTON_DESKTOP_LIBRARIES} -+) -+ -+set(CMAKE_C_LDFLAGS "-module -avoid-version") -+ -+target_link_libraries(${PROJECT_NAME} ${LIBS}) -+ -+install ( -+ TARGETS ${PROJECT_NAME} -+ LIBRARY DESTINATION lib${LIB_SUFFIX}/weston -+) -diff --git a/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c -new file mode 100644 -index 0000000..9bc115d ---- /dev/null -+++ b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c -@@ -0,0 +1,381 @@ -+/* -+ * Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and -+ * its documentation for any purpose is hereby granted without fee, provided -+ * that the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of the copyright holders not be used in -+ * advertising or publicity pertaining to distribution of the software -+ * without specific, written prior permission. The copyright holders make -+ * no representations about the suitability of this software for any -+ * purpose. It is provided "as is" without express or implied warranty. -+ * -+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include "libweston/config-parser.h" -+#include -+ -+#ifndef INVALID_ID -+#define INVALID_ID 0xFFFFFFFF -+#endif -+ -+struct db_elem -+{ -+ struct wl_list link; -+ uint32_t surface_id; -+ char *cfg_app_id; -+ char *cfg_title; -+ struct ivi_layout_surface *layout_surface; -+}; -+ -+struct ivi_id_agent -+{ -+ uint32_t default_behavior_set; -+ uint32_t default_surface_id; -+ uint32_t default_surface_id_max; -+ struct wl_list app_list; -+ struct weston_compositor *compositor; -+ const struct ivi_layout_interface *interface; -+ -+ struct wl_listener desktop_surface_configured; -+ struct wl_listener destroy_listener; -+ struct wl_listener surface_removed; -+}; -+ -+static int32_t -+check_config_parameter(char *cfg_val, char *val) -+{ -+ if (cfg_val == NULL) -+ return IVI_SUCCEEDED; -+ else if (val == NULL || strcmp(cfg_val, val) != 0) -+ return IVI_FAILED; -+ -+ return IVI_SUCCEEDED; -+} -+ -+static int32_t -+get_id_from_config(struct ivi_id_agent *ida, struct ivi_layout_surface -+ *layout_surface) { -+ struct db_elem *db_elem; -+ char *temp_app_id = NULL; -+ char *temp_title = NULL; -+ int ret = IVI_FAILED; -+ -+ struct weston_surface *weston_surface = -+ ida->interface->surface_get_weston_surface(layout_surface); -+ -+ /* Get app id and title */ -+ struct weston_desktop_surface *wds = weston_surface_get_desktop_surface( -+ weston_surface); -+ -+ if (weston_desktop_surface_get_app_id(wds) != NULL) -+ temp_app_id = strdup(weston_desktop_surface_get_app_id(wds)); -+ -+ if (weston_desktop_surface_get_title(wds) != NULL) -+ temp_title = strdup(weston_desktop_surface_get_title(wds)); -+ -+ /* -+ * Check for every config parameter to be fulfilled. This part must be -+ * extended, if additional attributes are desired to be checked. -+ */ -+ wl_list_for_each(db_elem, &ida->app_list, link) -+ { -+ if (check_config_parameter(db_elem->cfg_app_id, temp_app_id) == 0) { -+ if (check_config_parameter(db_elem->cfg_title, temp_title) == 0) { -+ /* Found configuration for application. */ -+ int res = ida->interface->surface_set_id(layout_surface, -+ db_elem->surface_id); -+ if (res) -+ continue; -+ -+ db_elem->layout_surface = layout_surface; -+ ret = IVI_SUCCEEDED; -+ -+ break; -+ } -+ } -+ } -+ -+ free(temp_app_id); -+ free(temp_title); -+ -+ return ret; -+} -+ -+/* -+ * This function generates the id of a surface in regard to the desired -+ * parameters. For implementation of different behavior in id generation please -+ * adjust this function. -+ * In this implementation the app_id and/or title of the application is used for -+ * identification. It is also possible to use the pid, uid or gid for example. -+ */ -+static int32_t -+get_id(struct ivi_id_agent *ida, struct ivi_layout_surface *layout_surface) -+{ -+ if (get_id_from_config(ida, layout_surface) == IVI_SUCCEEDED) -+ return IVI_SUCCEEDED; -+ -+ /* No default layer available */ -+ if (ida->default_behavior_set == 0) { -+ weston_log("ivi-id-agent: Could not find configuration for application\n"); -+ goto ivi_failed; -+ -+ /* Default behavior for unknown applications */ -+ } else if (ida->default_surface_id < ida->default_surface_id_max) { -+ weston_log("ivi-id-agent: No configuration for application adding to " -+ "default layer\n"); -+ -+ /* -+ * Check if ivi-shell application already created an application with -+ * desired surface_id -+ */ -+ struct ivi_layout_surface *temp_layout_surf = -+ ida->interface->get_surface_from_id( -+ ida->default_surface_id); -+ if ((temp_layout_surf != NULL) && (temp_layout_surf != layout_surface)) { -+ weston_log("ivi-id-agent: surface_id already used by an ivi-shell " -+ "application\n"); -+ goto ivi_failed; -+ } -+ -+ ida->interface->surface_set_id(layout_surface, -+ ida->default_surface_id); -+ ida->default_surface_id++; -+ -+ } else { -+ weston_log("ivi-id-agent: Interval for default surface_id generation " -+ "exceeded\n"); -+ goto ivi_failed; -+ } -+ -+ return IVI_SUCCEEDED; -+ -+ivi_failed: -+ return IVI_FAILED; -+} -+ -+static void -+desktop_surface_event_configure(struct wl_listener *listener, -+ void *data) -+{ -+ struct ivi_id_agent *ida = wl_container_of(listener, ida, -+ desktop_surface_configured); -+ -+ struct ivi_layout_surface *layout_surface = -+ (struct ivi_layout_surface *) data; -+ -+ if (get_id(ida, layout_surface) == IVI_FAILED) -+ weston_log("ivi-id-agent: Could not create surface_id for application\n"); -+} -+ -+static void -+surface_event_remove(struct wl_listener *listener, void *data) { -+ struct ivi_id_agent *ida = wl_container_of(listener, ida, -+ surface_removed); -+ struct ivi_layout_surface *layout_surface = -+ (struct ivi_layout_surface *) data; -+ struct db_elem *db_elem = NULL; -+ -+ wl_list_for_each(db_elem, &ida->app_list, link) -+ { -+ if(db_elem->layout_surface == layout_surface) { -+ db_elem->layout_surface = NULL; -+ break; -+ } -+ } -+} -+ -+static int32_t deinit(struct ivi_id_agent *ida); -+ -+static void -+id_agent_module_deinit(struct wl_listener *listener, void *data) { -+ (void)data; -+ struct ivi_id_agent *ida = wl_container_of(listener, ida, destroy_listener); -+ -+ deinit(ida); -+} -+ -+static int32_t -+check_config(struct db_elem *curr_db_elem, struct ivi_id_agent *ida) -+{ -+ struct db_elem *db_elem; -+ -+ if (ida->default_surface_id <= curr_db_elem->surface_id -+ && curr_db_elem->surface_id <= ida->default_surface_id_max) { -+ weston_log("ivi-id-agent: surface_id: %d in default id interval " -+ "[%d, %d] (CONFIG ERROR)\n", curr_db_elem->surface_id, -+ ida->default_surface_id, ida->default_surface_id_max); -+ goto ivi_failed; -+ } -+ -+ wl_list_for_each(db_elem, &ida->app_list, link) -+ { -+ if(curr_db_elem == db_elem) -+ continue; -+ -+ if (db_elem->surface_id == curr_db_elem->surface_id) { -+ weston_log("ivi-id-agent: Duplicate surface_id: %d (CONFIG ERROR)\n", -+ curr_db_elem->surface_id); -+ goto ivi_failed; -+ } -+ } -+ -+ return IVI_SUCCEEDED; -+ -+ivi_failed: -+ return IVI_FAILED; -+} -+ -+static int32_t -+read_config(struct ivi_id_agent *ida) -+{ -+ struct weston_config *config = NULL; -+ struct weston_config_section *section = NULL; -+ const char *name = NULL; -+ -+ config = wet_get_config(ida->compositor); -+ if (!config) -+ goto ivi_failed; -+ -+ section = weston_config_get_section(config, "desktop-app-default", NULL, -+ NULL); -+ -+ if (section) { -+ weston_log("ivi-id-agent: Default behavior for unknown applications is " -+ "set\n"); -+ ida->default_behavior_set = 1; -+ -+ weston_config_section_get_uint(section, "default-surface-id", -+ &ida->default_surface_id, INVALID_ID); -+ weston_config_section_get_uint(section, "default-surface-id-max", -+ &ida->default_surface_id_max, INVALID_ID); -+ -+ if (ida->default_surface_id == INVALID_ID || -+ ida->default_surface_id_max == INVALID_ID) { -+ weston_log("ivi-id-agent: Missing configuration for default " -+ "behavior\n"); -+ ida->default_behavior_set = 0; -+ } -+ } else { -+ ida->default_behavior_set = 0; -+ } -+ -+ section = NULL; -+ while (weston_config_next_section(config, §ion, &name)) { -+ struct db_elem *db_elem = NULL; -+ -+ if (strcmp(name, "desktop-app") != 0) -+ continue; -+ -+ db_elem = calloc(1, sizeof *db_elem); -+ if (db_elem == NULL) { -+ weston_log("ivi-id-agent: No memory to allocate\n"); -+ goto ivi_failed; -+ } -+ -+ wl_list_insert(&ida->app_list, &db_elem->link); -+ -+ weston_config_section_get_uint(section, "surface-id", -+ &db_elem->surface_id, INVALID_ID); -+ -+ if (db_elem->surface_id == INVALID_ID) { -+ weston_log("ivi-id-agent: surface-id is not set in configuration\n"); -+ goto ivi_failed; -+ } -+ -+ weston_config_section_get_string(section, "app-id", -+ &db_elem->cfg_app_id, NULL); -+ weston_config_section_get_string(section, "app-title", -+ &db_elem->cfg_title, NULL); -+ -+ if (db_elem->cfg_app_id == NULL && db_elem->cfg_title == NULL) { -+ weston_log("ivi-id-agent: Every parameter is NULL in app " -+ "configuration\n"); -+ goto ivi_failed; -+ } -+ -+ if (check_config(db_elem, ida) == IVI_FAILED) { -+ weston_log("ivi-id-agent: No valid config found, deinit...\n"); -+ goto ivi_failed; -+ } -+ } -+ -+ if(ida->default_behavior_set == 0 && wl_list_empty(&ida->app_list)) { -+ weston_log("ivi-id-agent: No valid config found, deinit...\n"); -+ goto ivi_failed; -+ } -+ -+ return IVI_SUCCEEDED; -+ -+ivi_failed: -+ return IVI_FAILED; -+} -+ -+WL_EXPORT int32_t -+id_agent_module_init(struct weston_compositor *compositor, -+ const struct ivi_layout_interface *interface) -+{ -+ struct ivi_id_agent *ida = NULL; -+ -+ ida = calloc(1, sizeof *ida); -+ if (ida == NULL) { -+ weston_log("failed to allocate ivi_id_agent\n"); -+ goto ivi_failed; -+ } -+ -+ ida->compositor = compositor; -+ ida->interface = interface; -+ ida->desktop_surface_configured.notify = desktop_surface_event_configure; -+ ida->destroy_listener.notify = id_agent_module_deinit; -+ ida->surface_removed.notify = surface_event_remove; -+ -+ wl_signal_add(&compositor->destroy_signal, &ida->destroy_listener); -+ ida->interface->add_listener_configure_desktop_surface( -+ &ida->desktop_surface_configured); -+ interface->add_listener_remove_surface(&ida->surface_removed); -+ -+ wl_list_init(&ida->app_list); -+ if(read_config(ida) != 0) { -+ weston_log("ivi-id-agent: Read config failed\n"); -+ deinit(ida); -+ goto ivi_failed; -+ } -+ -+ return IVI_SUCCEEDED; -+ -+ivi_failed: -+ return IVI_FAILED; -+} -+ -+static int32_t -+deinit(struct ivi_id_agent *ida) -+{ -+ struct db_elem *db_elem; -+ wl_list_for_each(db_elem, &ida->app_list, link) { -+ free(db_elem->cfg_app_id); -+ free(db_elem->cfg_title); -+ free(db_elem); -+ } -+ -+ wl_list_remove(&ida->desktop_surface_configured.link); -+ wl_list_remove(&ida->destroy_listener.link); -+ wl_list_remove(&ida->surface_removed.link); -+ free(ida); -+ -+ return IVI_SUCCEEDED; -+} -diff --git a/ivi-id-agent-modules/ivi-id-agent/weston.ini.in b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in -new file mode 100644 -index 0000000..48a196c ---- /dev/null -+++ b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in -@@ -0,0 +1,20 @@ -+[core] -+shell=ivi-shell.so -+require-input=false -+ -+[ivi-shell] -+ivi-module=ivi-controller.so -+ivi-input-module=ivi-input-controller.so -+ivi-id-agent-module=ivi-id-agent.so -+ -+[desktop-app] -+surface-id=111 -+app-title=Flower -+ -+[desktop-app] -+surface-id=251 -+app-title=Flower -+ -+[desktop-app-default] -+default-surface-id=2000000 -+default-surface-id-max=2001000 diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch deleted file mode 100644 index 8985879b0..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 5fed5c51ca8c1574804362bfdea4930c16457d34 Mon Sep 17 00:00:00 2001 -From: Michael Teyfel -Date: Fri, 12 Oct 2018 16:57:24 +0200 -Subject: [PATCH 3/3] ivi-controller: load id-agent module - -Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. - -Signed-off-by: Michael Teyfel -Signed-off-by: Scott Murray - -diff --git a/weston-ivi-shell/src/ivi-controller.c b/weston-ivi-shell/src/ivi-controller.c -index 8faec2a..8fa51f4 100644 ---- a/weston-ivi-shell/src/ivi-controller.c -+++ b/weston-ivi-shell/src/ivi-controller.c -@@ -2154,6 +2154,41 @@ load_input_module(struct ivishell *shell) - return 0; - } - -+static int load_id_agent_module(struct ivishell *shell) -+{ -+ struct weston_config *config = wet_get_config(shell->compositor); -+ struct weston_config_section *section; -+ char *id_agent_module = NULL; -+ -+ int (*id_agent_module_init)(struct weston_compositor *compositor, -+ const struct ivi_layout_interface *interface); -+ -+ section = weston_config_get_section(config, "ivi-shell", NULL, NULL); -+ -+ if (weston_config_section_get_string(section, "ivi-id-agent-module", -+ &id_agent_module, NULL) < 0) { -+ /* input events are handled by weston's default grabs */ -+ weston_log("ivi-controller: No ivi-id-agent-module set\n"); -+ return 0; -+ } -+ -+ id_agent_module_init = wet_load_module_entrypoint(id_agent_module, "id_agent_module_init"); -+ if (!id_agent_module_init) { -+ free(id_agent_module); -+ return -1; -+ } -+ -+ if (id_agent_module_init(shell->compositor, shell->interface) != 0) { -+ weston_log("ivi-controller: Initialization of id-agent module failed\n"); -+ free(id_agent_module); -+ return -1; -+ } -+ -+ free(id_agent_module); -+ -+ return 0; -+} -+ - static void - launch_client_process(void *data) - { -@@ -2221,6 +2256,10 @@ wet_module_init(struct weston_compositor *compositor, - shell->destroy_listener.notify = ivi_shell_destroy; - wl_signal_add(&compositor->destroy_signal, &shell->destroy_listener); - -+ if (load_id_agent_module(shell) < 0) { -+ weston_log("ivi-controller: id-agent module not loaded\n"); -+ } -+ - if (shell->bkgnd_surface_id && shell->ivi_client_name) { - loop = wl_display_get_event_loop(compositor->wl_display); - wl_event_loop_add_idle(loop, launch_client_process, shell); diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch deleted file mode 100644 index 05d1cc238..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h -index a88f2b0..12a2017 100644 ---- a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h -+++ b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h -@@ -245,6 +245,7 @@ typedef enum - ILM_NOTIFICATION_CONTENT_AVAILABLE = ILM_BIT(6), - ILM_NOTIFICATION_CONTENT_REMOVED = ILM_BIT(7), - ILM_NOTIFICATION_CONFIGURED = ILM_BIT(8), -+ ILM_NOTIFICATION_FOCUS = ILM_BIT(9), - ILM_NOTIFICATION_ALL = 0xffff - } t_ilm_notification_mask; - -diff --git a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c -index a912e50..5166839 100644 ---- a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c -+++ b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c -@@ -819,6 +819,12 @@ input_listener_input_focus(void *data, - surf_ctx->prop.focus |= device; - else - surf_ctx->prop.focus &= ~device; -+ -+ if (surf_ctx->notification != NULL) { -+ surf_ctx->notification(surf_ctx->id_surface, -+ &surf_ctx->prop, -+ ILM_NOTIFICATION_FOCUS); -+ } - } - } - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch deleted file mode 100644 index 21028d58a..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch +++ /dev/null @@ -1,22 +0,0 @@ -Disable EGLWLMockNavigation example build - -The EGLWLMockNavigation example code has build issues on TI platforms. -To avoid needing to patch it just for those platforms, just disable -building it since there are no known users inside AGL. - -Upstream-Status: Inappropriate [disable feature] - -Signed-off-by: Scott Murray - -diff --git a/ivi-layermanagement-examples/CMakeLists.txt b/ivi-layermanagement-examples/CMakeLists.txt -index 1eab8e9..48bdffd 100644 ---- a/ivi-layermanagement-examples/CMakeLists.txt -+++ b/ivi-layermanagement-examples/CMakeLists.txt -@@ -24,7 +24,6 @@ project (ivi-layermanagement-examples) - # cmake configuration - #=========================================================================================================== - add_subdirectory(LayerManagerControl) --add_subdirectory(EGLWLMockNavigation) - add_subdirectory(EGLWLInputEventExample) - add_subdirectory(layer-add-surfaces) - add_subdirectory(multi-touch-viewer) diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch deleted file mode 100644 index dddbfd370..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c -index a0bfc48..257a1dc 100644 ---- a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c -+++ b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c -@@ -31,7 +31,7 @@ - #include - #include - --#include "plugin-registry.h" -+#include - #include "ilm_types.h" - - #include "ivi-input-server-protocol.h" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch deleted file mode 100644 index 86b448be1..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 3610fa9..8b4614d 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -34,7 +34,7 @@ add_subdirectory(ivi-layermanagement-api/ilmCommon) - add_subdirectory(ivi-layermanagement-api/ilmClient) - add_subdirectory(ivi-layermanagement-api/ilmControl) - add_subdirectory(ivi-layermanagement-api/test) --add_subdirectory(ivi-layermanagement-examples) -+#add_subdirectory(ivi-layermanagement-examples) - - if(WITH_ILM_INPUT) - add_subdirectory(ivi-input-api/ilmInput) diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb deleted file mode 100644 index 68fc694a8..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb +++ /dev/null @@ -1,36 +0,0 @@ -SUMMARY = "Wayland IVI Extension" -DESCRIPTION = "GENIVI Layer Management API based on Wayland IVI Extension" -HOMEPAGE = "http://projects.genivi.org/wayland-ivi-extension" -BUGTRACKER = "http://bugs.genivi.org/enter_bug.cgi?product=Wayland%20IVI%20Extension" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=1f1a56bb2dadf5f2be8eb342acf4ed79" - -SRC_URI = "git://github.com/GENIVI/${BPN}.git;protocol=http \ - file://0001-Added-ivi-id-agent-to-CMake.patch \ - file://0002-ivi-id-agent-added-ivi-id-agent.patch \ - file://0003-ivi-controller-load-id-agent-module.patch \ - file://0002-add-LayerManagerControl-error-status.patch \ - file://0004-ivi-ilmcontrol-added-focus-notification.patch \ - file://0005-disable-EGLWLMockNavigation-example-build.patch \ - file://0006-fix-plugin-registry-include.patch \ -" -SRC_URI_append_wandboard = " file://wandboard_fix_build.patch" -SRCREV = "736fb654ac81230cf4f9e51a5772d3a02d7639bf" - -PV = "2.2.0+git${SRCPV}" -S = "${WORKDIR}/git" - -DEPENDS = "weston virtual/libgles2 pixman wayland-native" - -FILESEXTRAPATHS_prepend := ":${THISDIR}/wayland-ivi-extension:" - -inherit cmake - -EXTRA_OECMAKE := "-DWITH_ILM_INPUT=1" - -FILES_${PN} += "${libdir}/weston/*" -FILES_${PN} += "${datadir}/wayland-protocols/stable/ivi-application/*" - -FILES_${PN}-dbg += "${libdir}/weston/.debug/*" - -EXTRA_OECMAKE += "-DLIB_SUFFIX=${@d.getVar('baselib', True).replace('lib', '')}" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch deleted file mode 100644 index d0dcb45af..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9162f7d4cfeec7103474e8703218b3679ca9ed10 Mon Sep 17 00:00:00 2001 -From: Ronan Le Martret -Date: Tue, 18 Apr 2017 13:53:26 +0200 -Subject: [PATCH] Change socket mode:add rw for group - -Signed-off-by: Ronan Le Martret -[Updated for 1.18.0 to remove fuzz] -Signed-off-by: Scott Murray - ---- - src/wayland-server.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/wayland-server.c b/src/wayland-server.c -index 3f48dfe..fbccb45 100644 ---- a/src/wayland-server.c -+++ b/src/wayland-server.c -@@ -1528,7 +1528,10 @@ _wl_display_add_socket(struct wl_display *display, struct wl_socket *s) - wl_log("bind() failed with error: %s\n", strerror(errno)); - return -1; - } -- -+ if (chmod(s->addr.sun_path, 0660) < 0) { -+ wl_log("chmod() failed with error: %m\n"); -+ return -1; -+ } - if (listen(s->fd, 128) < 0) { - wl_log("listen() failed with error: %s\n", strerror(errno)); - return -1; diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend deleted file mode 100644 index 9d1822697..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI_append = "\ - file://0001-Change-socket-mode-add-rw-for-group.patch \ - " diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend deleted file mode 100644 index b3fecec22..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend +++ /dev/null @@ -1,83 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -inherit agl-graphical - -AGL_DEFAULT_WESTONSTART ??= "/usr/bin/agl-compositor --config ${sysconfdir}/xdg/weston/weston.ini" - -WESTONSTART ??= "${AGL_DEFAULT_WESTONSTART} ${WESTONARGS}" -WESTONSTART_append = " ${@bb.utils.contains("IMAGE_FEATURES", "debug-tweaks", " --log=${DISPLAY_XDG_RUNTIME_DIR}/compositor.log", "",d)}" - -# Systemd name of DRM device to have weston/agl-compositor startup depend -# upon, if required. Currently only x86-64 seems to need a dependency to -# avoid failures due to racing with i915 driver init on e.g. UpSquared. -# It seems safer for now to only apply it there rather than doing a blanket -# default everywhere that might then need to be over-ridden for vendor BSPs. -WESTON_DRM_DEVICE ?= "" - -WIFILES = " \ - file://weston.conf.in \ - file://weston-dep.conf.in \ - file://tmpfiles.conf.in \ - file://zz-dri.rules.in \ - file://zz-input.rules.in \ - file://zz-tty.rules.in \ -" - -WIFILES_append_imx = " \ - file://zz-dri-imx.rules.in \ -" - -SRC_URI_append = " ${WIFILES}" - -do_install_append() { - # Remove upstream weston.ini to avoid conflict with weston-ini-conf package - rm -f ${D}${sysconfdir}/xdg/weston/weston.ini - - # Remove upstream weston udev rules just to be safe - rm -f ${D}${sysconfdir}/udev/rules.d/71-weston-drm.rules - - # Process ".in" files - files=$(echo ${WIFILES} | sed s,file://,,g) - for f in ${files}; do - g=${f%.in} - if [ "${f}" != "${g}" ]; then - sed -e "s,@WESTONUSER@,${WESTONUSER},g" \ - -e "s,@WESTONGROUP@,${WESTONGROUP},g" \ - -e "s,@XDG_RUNTIME_DIR@,${DISPLAY_XDG_RUNTIME_DIR},g" \ - -e "s,@WESTONSTART@,${WESTONSTART},g" \ - -e "s,@WESTON_DRM_DEVICE@,${WESTON_DRM_DEVICE},g" \ - ${WORKDIR}/${f} > ${WORKDIR}/${g} - fi - done - - # Install weston drop-in - install -d ${D}${systemd_system_unitdir}/weston@.service.d - install -m644 ${WORKDIR}/weston.conf ${D}/${systemd_system_unitdir}/weston@.service.d/weston-init.conf - - # Install weston DRM device dependency drop-in if required - if [ -n "${WESTON_DRM_DEVICE}" ]; then - install -m 0644 ${WORKDIR}/weston-dep.conf ${D}/${systemd_system_unitdir}/weston@.service.d/ - fi - - # Install tmpfiles drop-in - install -d ${D}${libdir}/tmpfiles.d - install -m644 ${WORKDIR}/tmpfiles.conf ${D}${libdir}/tmpfiles.d/weston-init.conf - - # Install udev rules - install -d ${D}${sysconfdir}/udev/rules.d - for f in ${files}; do - g=${f%.in} - h=${g%.rules} - if [ "${g}" != "${h}" ]; then - install -m644 ${WORKDIR}/${g} ${D}${sysconfdir}/udev/rules.d - fi - done -} - -FILES_${PN} += " \ - ${libdir}/tmpfiles.d/ \ - ${systemd_system_unitdir}/weston@.service.d/ \ -" - -SYSTEMD_AUTO_ENABLE = "enable" - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in deleted file mode 100644 index c4b302faf..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in +++ /dev/null @@ -1,6 +0,0 @@ -# This file is distributed to create weston XDG_RUNTIME_DIR (/run/deamon/@WESTONUSER@) -# -# See tmpfiles.d(5) for details - -d /run/platform/ 0775 root root - -d /run/platform/@WESTONUSER@ 0770 @WESTONUSER@ @WESTONGROUP@ - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston-dep.conf.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston-dep.conf.in deleted file mode 100644 index 2b8102096..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston-dep.conf.in +++ /dev/null @@ -1,3 +0,0 @@ -[Unit] -Requires=@WESTON_DRM_DEVICE@ -After=@WESTON_DRM_DEVICE@ diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in deleted file mode 100644 index 9c3df052d..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in +++ /dev/null @@ -1,12 +0,0 @@ -[Service] -Type=notify -Environment="XDG_RUNTIME_DIR=@XDG_RUNTIME_DIR@" -# Note that clearing PAMName (thus not having PAMName=login) disables -# logind support for the session, which allows setting XDG_RUNTIME_DIR -# to something other than /run/user/% (as is done above). -# Without systemd-logind support, weston needs to be patched to allow -# its direct launcher to work for non-root users in this scenario. -PAMName= -ExecStart= -ExecStart=@WESTONSTART@ -SmackProcessLabel=System::Weston diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in deleted file mode 100644 index 585db6be8..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in +++ /dev/null @@ -1,2 +0,0 @@ -SUBSYSTEM=="gpu_class", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*" - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in deleted file mode 100644 index 51c68c303..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in +++ /dev/null @@ -1 +0,0 @@ -SUBSYSTEM=="drm", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in deleted file mode 100644 index fb3e677f4..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in +++ /dev/null @@ -1 +0,0 @@ -SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in deleted file mode 100644 index e5ce4b553..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in +++ /dev/null @@ -1 +0,0 @@ -SUBSYSTEM=="tty", KERNEL=="tty7", OWNER="@WESTONUSER@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready deleted file mode 100644 index c7cba3043..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2018, Konsulko Group -# -# 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. -# - -# -# Simple script to check if Weston+IVI shell is ready by calling -# LayerManagerControl, optionally waiting for a specified timeout. -# - -usage="Usage: weston-ready [-t timeout]" -timeout=0 - -function info() { echo "$@" >&2; } - -if [ $# -eq 2 ]; then - if [ $1 = "-t" ]; then - timeout=$(($2 * 10)) - else - echo $usage - exit 1 - fi -fi - -info "using timeout $timeout" - -time=0 -rc=1 -while true; do - if [ $time -gt $timeout ]; then - info "Timeout reached" - break - elif LayerManagerControl get screens >/dev/null 2>&1; then - info "Weston is now ready" - rc=0 - break - fi - info "waiting..." - if [ $timeout -gt 0 ]; then - usleep 500000 - fi - time=$(($time + 5)) -done -exit $rc diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service deleted file mode 100644 index 82490fef4..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Wait for Weston readiness -Requires=weston@display.service -After=weston@display.service - -[Service] -SupplementaryGroups=display -Environment="XDG_RUNTIME_DIR=/run/platform/display" -ExecStart=/usr/bin/weston-ready -t 10 -Type=oneshot diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb deleted file mode 100644 index a3d0bb248..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb +++ /dev/null @@ -1,21 +0,0 @@ -SUMMARY = "Weston readiness checker" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -inherit systemd - -SRC_URI = "file://weston-ready \ - file://weston-ready.service \ -" - -do_install() { - install -D -m 0755 ${WORKDIR}/weston-ready ${D}${bindir}/weston-ready - - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - install -D -m 0644 ${WORKDIR}/weston-ready.service ${D}${systemd_system_unitdir}/weston-ready.service - fi -} - -SYSTEMD_SERVICE_${PN} = "weston-ready.service" - -RDEPENDS_${PN} += "weston bash" diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch deleted file mode 100644 index 362f6b064..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch +++ /dev/null @@ -1,51 +0,0 @@ -Allow regular users to launch Weston - -Signed-off-by: Ronan Le Martret -[Reworked for Weston 7.0.0 switch to meson] -Signed-off-by: Scott Murray - -diff --git a/libweston/launcher-direct.c b/libweston/launcher-direct.c -index 9fa329b6..8e218804 100644 ---- a/libweston/launcher-direct.c -+++ b/libweston/launcher-direct.c -@@ -291,8 +291,10 @@ launcher_direct_connect(struct weston_launcher **out, struct weston_compositor * - { - struct launcher_direct *launcher; - -+#ifndef ENABLE_USER_START - if (geteuid() != 0) - return -EINVAL; -+#endif - - launcher = zalloc(sizeof(*launcher)); - if (launcher == NULL) -diff --git a/libweston/meson.build b/libweston/meson.build -index d8d3fc07..0d39ebf1 100644 ---- a/libweston/meson.build -+++ b/libweston/meson.build -@@ -216,6 +216,10 @@ if get_option('weston-launch') - meson.add_install_script('echo', 'REMINDER: You are installing weston-launch, please make it setuid-root.') - endif - -+if get_option('enable-user-start') -+ config_h.set('ENABLE_USER_START', '1') -+endif -+ - subdir('renderer-gl') - subdir('backend-drm') - subdir('backend-fbdev') -diff --git a/meson_options.txt b/meson_options.txt -index d5bf1d54..c93f31d1 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -217,3 +217,10 @@ option( - value: false, - description: 'Generate documentation' - ) -+ -+option( -+ 'enable-user-start', -+ type: 'boolean', -+ value: true, -+ description: 'Tests: enable start as non-root user' -+) diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch deleted file mode 100644 index 32755c4b3..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 7e5fb58591a29d60657158262a0772796bfd3461 Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Wed, 12 Feb 2020 13:18:19 +0200 -Subject: [PATCH] libweston: Expose weston_output_damage() in libweston - -We have weston_compositor_damage_all() exported and declared but users -might need weston_output_damage() to refer to an individual output. The -symbol already exported so just declare it. - -Signed-off-by: Marius Vlad ---- - include/libweston/libweston.h | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h -index 1439775e..9fac5be0 100644 ---- a/include/libweston/libweston.h -+++ b/include/libweston/libweston.h -@@ -1604,6 +1604,8 @@ weston_compositor_schedule_repaint(struct weston_compositor *compositor); - void - weston_compositor_damage_all(struct weston_compositor *compositor); - void -+weston_output_damage(struct weston_output *woutput); -+void - weston_compositor_wake(struct weston_compositor *compositor); - void - weston_compositor_sleep(struct weston_compositor *compositor); --- -2.20.1 - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch deleted file mode 100644 index 02af7cbaf..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Migrate-weston_seat_init-release-to-public.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 4534fcab54409b08faf4445ed6780136b58afb63 Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Mon, 28 Sep 2020 22:51:00 +0300 -Subject: [PATCH 1/2] libweston: Migrate weston_seat_init/release to public - headers - -weston_seat_init/release needed for creating weston plug-ins that want -manage seat/input on their own. - -Signed-off-by: Marius Vlad ---- - include/libweston/libweston.h | 25 +++++++++++++++++++++++++ - libweston/libweston-internal.h | 31 +++---------------------------- - 2 files changed, 28 insertions(+), 28 deletions(-) - -diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h -index 54ea008..59541f2 100644 ---- a/include/libweston/libweston.h -+++ b/include/libweston/libweston.h -@@ -2053,6 +2053,31 @@ void - weston_timeline_refresh_subscription_objects(struct weston_compositor *wc, - void *object); - -+/* input, seat */ -+void -+weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec, -+ const char *seat_name); -+void -+weston_seat_release(struct weston_seat *seat); -+ -+void -+weston_seat_init_pointer(struct weston_seat *seat); -+ -+int -+weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap); -+ -+void -+weston_seat_init_touch(struct weston_seat *seat); -+ -+void -+weston_seat_release_keyboard(struct weston_seat *seat); -+ -+void -+weston_seat_release_pointer(struct weston_seat *seat); -+ -+void -+weston_seat_release_touch(struct weston_seat *seat); -+ - #ifdef __cplusplus - } - #endif -diff --git a/libweston/libweston-internal.h b/libweston/libweston-internal.h -index 66c38e8..f5c4c2c 100644 ---- a/libweston/libweston-internal.h -+++ b/libweston/libweston-internal.h -@@ -168,44 +168,19 @@ weston_plane_init(struct weston_plane *plane, - void - weston_plane_release(struct weston_plane *plane); - --/* weston_seat */ -- - struct clipboard * - clipboard_create(struct weston_seat *seat); - --void --weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec, -- const char *seat_name); -- --void --weston_seat_repick(struct weston_seat *seat); -+/* weston_seat */ - - void --weston_seat_release(struct weston_seat *seat); -+weston_seat_update_keymap(struct weston_seat *seat, struct xkb_keymap *keymap); - - void - weston_seat_send_selection(struct weston_seat *seat, struct wl_client *client); - - void --weston_seat_init_pointer(struct weston_seat *seat); -- --int --weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap); -- --void --weston_seat_init_touch(struct weston_seat *seat); -- --void --weston_seat_release_keyboard(struct weston_seat *seat); -- --void --weston_seat_release_pointer(struct weston_seat *seat); -- --void --weston_seat_release_touch(struct weston_seat *seat); -- --void --weston_seat_update_keymap(struct weston_seat *seat, struct xkb_keymap *keymap); -+weston_seat_repick(struct weston_seat *seat); - - void - wl_data_device_set_keyboard_focus(struct weston_seat *seat); --- -2.28.0 - diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch deleted file mode 100644 index cb122590b..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0005-correctly-tear-down-drm-backend.patch +++ /dev/null @@ -1,37 +0,0 @@ -commit 5130a8c21a9deea54e8f7c96a3a5049e2d60a210 -Author: Marius Vlad -Date: Thu Jul 30 14:47:32 2020 +0300 - -backend-drm: Correctly tear down the DRM backend - -It seem that we skipped to put back in TEXT mode the tty, in case a DRM -device node wasn't present at that time, or it isn't present at all. This -orders the destroy part correctly as to handle that case as well. - -As a side effect, as the tty will still be set to GRAPHICS mode we will -require a manual change of the tty number, which might be not possible -on all systems. Properly putting back the tty to TEXT mode should avoid -that, and allows to re-use the same tty no in case the DRM device has -been created at a later point in time. - -Upstream-Status: Backport -Signed-off-by: Marius Vlad -Signed-off-by: Scott Murray - -diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c -index 980a12da..1cf61a33 100644 ---- a/libweston/backend-drm/drm.c -+++ b/libweston/backend-drm/drm.c -@@ -3031,10 +3031,10 @@ err_sprite: - destroy_sprites(b); - err_udev_dev: - udev_device_unref(drm_device); --err_launcher: -- weston_launcher_destroy(compositor->launcher); - err_udev: - udev_unref(b->udev); -+err_launcher: -+ weston_launcher_destroy(compositor->launcher); - err_compositor: - weston_compositor_shutdown(compositor); - free(b); diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston deleted file mode 100644 index 63a32405a..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston +++ /dev/null @@ -1,8 +0,0 @@ -System System::Weston rwxa-- -System::Weston System rwx--- -System::Weston System::Shared rwx--- -System::Weston System::Run rwxat- -System::Weston System::Log rwxa-- -System::Weston _ r-x--l -System::Weston User::Home r-x--l -System::Weston User::App-Shared rwxat- diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend deleted file mode 100644 index d681aa133..000000000 --- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend +++ /dev/null @@ -1,26 +0,0 @@ -FILESEXTRAPATHS_append := ":${THISDIR}/${PN}" - -SRC_URI_append = "\ - file://0001-Allow-regular-users-to-launch-Weston_7.0.0.patch \ - file://0001-libweston-Expose-weston_output_damage-in-libweston.patch \ - file://0001-libweston-Migrate-weston_seat_init-release-to-public.patch \ - file://0005-correctly-tear-down-drm-backend.patch \ - file://smack-weston \ - " - -EXTRA_OEMESON_append = " -Denable-user-start=true" - -# Workaround for incorrect upstream definition -PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base" -PACKAGECONFIG_append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting', ' remoting', '', d)}" - -do_install_append() { - if ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'true', 'false', d)}; then - # Install SMACK rules - install -D -m 0644 ${WORKDIR}/smack-weston ${D}${sysconfdir}/smack/accesses.d/weston - fi -} - -FILES_${PN} += "\ - ${sysconfdir}/smack/accesses.d/* \ -" diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch deleted file mode 100644 index 443e7db8b..000000000 --- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 03e502084633838badfcc2b91a1aca1651c18544 Mon Sep 17 00:00:00 2001 -From: Marius Vlad -Date: Wed, 24 Jun 2020 19:44:35 +0300 -Subject: [PATCH] gst/wayland/: Install wayland header from gstwayland library - -Necessary for cluster-receiver to pass out the wl_surface. - -Bug-AGL: SPEC-3382 - -Signed-off-by: Marius Vlad ---- - gst-libs/gst/wayland/meson.build | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/gst-libs/gst/wayland/meson.build b/gst-libs/gst/wayland/meson.build -index b1ede41f1..8957381d2 100644 ---- a/gst-libs/gst/wayland/meson.build -+++ b/gst-libs/gst/wayland/meson.build -@@ -21,4 +21,6 @@ if use_wayland - gstwayland_dep = declare_dependency(link_with : gstwayland, - include_directories : [libsinc], - dependencies : [gst_dep, gstvideo_dep]) -+ -+ install_headers('wayland.h', subdir: 'gst/wayland') - endif --- -2.26.2 - diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend deleted file mode 100644 index a74fb623d..000000000 --- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" -SRC_URI_append=" file://0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch" diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend deleted file mode 100644 index 86a181fbb..000000000 --- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -# libv4l2 is useful for making more efficient use of cameras via v4l2src. -PACKAGECONFIG_append = " libv4l2" diff --git a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb b/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb deleted file mode 100644 index bbb61c922..000000000 --- a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "A very basic Wayland image with a terminal" - -require agl-image-weston.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - packagegroup-agl-profile-graphical \ - " diff --git a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc b/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc deleted file mode 100644 index cef3bf64e..000000000 --- a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc +++ /dev/null @@ -1,7 +0,0 @@ -require recipes-platform/images/agl-image-minimal.inc - -IMAGE_FEATURES += "splash package-management ssh-server-dropbear" - -inherit features_check - -REQUIRED_DISTRO_FEATURES = "wayland" diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb deleted file mode 100644 index cd37cb7d5..000000000 --- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb +++ /dev/null @@ -1,16 +0,0 @@ -SUMMARY = "The software for application framework of AGL IVI profile" -DESCRIPTION = "A set of packages belong to AGL application framework which required by \ -Multimedia Subsystem" - -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-graphical-multimedia \ - " - -RDEPENDS_${PN} += "\ - alsa-utils \ - gstreamer1.0-meta-base \ - " diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend deleted file mode 100644 index 4a98a233c..000000000 --- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -RDEPENDS_${PN}_append_ulcb = "\ - ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-kernel-modules','',d)} \ - ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-libs','',d)} \ - ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-gstreamer1.0-plugins','',d)} \ -" diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb deleted file mode 100644 index e587ab21c..000000000 --- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "The minimal set of packages for Connectivity Subsystem" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-graphical-services \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} = "\ - ${@bb.utils.contains('DISTRO_FEATURES', 'pipewire', 'agl-service-mediaplayer', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'pipewire', 'agl-service-radio', '', d)} \ - " diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb deleted file mode 100644 index 79577c170..000000000 --- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb +++ /dev/null @@ -1,20 +0,0 @@ -DESCRIPTION = "The minimal set of packages required for Wayland support" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-graphical-weston \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += " \ - weston \ - weston-init \ - weston-ini-conf \ - weston-examples \ - agl-login-manager \ - agl-compositor \ - " - diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb deleted file mode 100644 index 406ebcdb4..000000000 --- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "The middleware for AGL IVI profile" -DESCRIPTION = "The set of packages required for AGL IVI Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-graphical \ - profile-graphical \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-image-minimal \ - packagegroup-agl-graphical-weston \ - packagegroup-agl-graphical-services \ - packagegroup-agl-graphical-multimedia \ -" -# FIXME: Removed due to issues building against weston 5.0.0: -# waltham-transmitter - -RDEPENDS_profile-graphical = "${PN}" diff --git a/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend b/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend deleted file mode 100644 index d6fcb40af..000000000 --- a/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend +++ /dev/null @@ -1,6 +0,0 @@ - -do_install_append() { - # Needed for wayland-0 socket access and memfd usage - echo "~APP~ System::Weston rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack - echo "System::Weston ~APP~ rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack -} diff --git a/meta-agl-profile-hud/LICENSE b/meta-agl-profile-hud/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-hud/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-hud/LICENSE.GPL-2.0-only b/meta-agl-profile-hud/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-hud/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-hud/LICENSE.MIT b/meta-agl-profile-hud/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-hud/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-hud/conf/layer.conf b/meta-agl-profile-hud/conf/layer.conf deleted file mode 100644 index f8f18cdc9..000000000 --- a/meta-agl-profile-hud/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofilehud" -BBFILE_PATTERN_aglprofilehud = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofilehud = "70" - -LAYERSERIES_COMPAT_aglprofilehud = "dunfell" diff --git a/meta-agl-profile-telematics/LICENSE b/meta-agl-profile-telematics/LICENSE deleted file mode 100644 index e8758f89c..000000000 --- a/meta-agl-profile-telematics/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Different components of the AGL layers are under different licenses (a mix -of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further -details of the individual licenses. - -All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar) -is MIT licensed unless otherwise stated. -Source code included in tree for individual recipes (e.g. patches) are under -the LICENSE stated in the associated recipe (.bb file) unless otherwise stated. - -License information for any other files (scripts) is either explicitly stated -or defaults to GPL version 2 only. - -Individual files can contain the following style tags instead of the full -license text to identify their license: - - SPDX-License-Identifier: GPL-2.0-only - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-telematics/LICENSE.GPL-2.0-only b/meta-agl-profile-telematics/LICENSE.GPL-2.0-only deleted file mode 100644 index 5db3c0a21..000000000 --- a/meta-agl-profile-telematics/LICENSE.GPL-2.0-only +++ /dev/null @@ -1,288 +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. - - GNU GENERAL PUBLIC LICENSE - 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 - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: GPL-2.0-only - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-telematics/LICENSE.MIT b/meta-agl-profile-telematics/LICENSE.MIT deleted file mode 100644 index a6919eb7e..000000000 --- a/meta-agl-profile-telematics/LICENSE.MIT +++ /dev/null @@ -1,25 +0,0 @@ -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. - -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: MIT - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/meta-agl-profile-telematics/conf/layer.conf b/meta-agl-profile-telematics/conf/layer.conf deleted file mode 100644 index f9ef2e3bf..000000000 --- a/meta-agl-profile-telematics/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "aglprofiletelematics" -BBFILE_PATTERN_aglprofiletelematics = "^${LAYERDIR}/" -BBFILE_PRIORITY_aglprofiletelematics = "70" - -LAYERSERIES_COMPAT_aglprofiletelematics = "dunfell" diff --git a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb b/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb deleted file mode 100644 index ad6ef9888..000000000 --- a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb +++ /dev/null @@ -1,9 +0,0 @@ -SUMMARY = "A basic telematics image" - -require agl-image-telematics.inc - -LICENSE = "MIT" - -IMAGE_INSTALL_append = "\ - profile-telematics \ - " diff --git a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc b/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc deleted file mode 100644 index 3e951550e..000000000 --- a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc +++ /dev/null @@ -1,5 +0,0 @@ -require recipes-platform/images/agl-image-boot.inc - -inherit features_check - -REQUIRED_DISTRO_FEATURES = "3g" diff --git a/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb b/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb deleted file mode 100644 index 66fc0f765..000000000 --- a/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb +++ /dev/null @@ -1,25 +0,0 @@ -SUMMARY = "The middleware for AGL telematics profile" -DESCRIPTION = "The set of packages required for AGL Telematics Distribution" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-profile-telematics \ - profile-telematics \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - packagegroup-agl-image-boot \ - packagegroup-agl-core-security \ - ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client','',d)} \ - ${@bb.utils.contains("DISTRO_FEATURES", "3g", "libqmi", "", d)} \ - agl-login-manager \ - agl-service-can-low-level \ - agl-service-network \ - can-utils \ -" - -RDEPENDS_profile-telematics = "${PN}" diff --git a/meta-agl.md b/meta-agl.md index 6c3427cd5..565eff5a7 100755 --- a/meta-agl.md +++ b/meta-agl.md @@ -7,9 +7,6 @@ You use this layer as the minimal core on which to build AGL profiles. **NOTE:** The `meta-agl` layer does not include a reference UI. The reference UI is included as part of the [`meta-agl-demo`](./meta-agl-demo.html) layer. - Furthermore, `meta-agl` does not include additional components, such - as security, which are part of the - `meta-agl-extra` layer. ## Sub-Layers @@ -17,59 +14,45 @@ The `meta-agl` layer itself contains many sub-layers and files. Following is a "tree" look at the layer: ``` -. -├── docs -├── meta-agl -├── meta-agl-bsp -├── meta-agl-distro -├── meta-agl-profile-cluster -├── meta-agl-profile-cluster-qt5 -├── meta-agl-profile-core -├── meta-agl-profile-graphical -├── meta-agl-profile-graphical-html5 -├── meta-agl-profile-graphical-qt5 -├── meta-agl-profile-hud -├── meta-agl-profile-telematics -├── meta-app-framework -├── meta-netboot -├── meta-security -├── README-AGL.md -├── README.md -├── scripts -├── templates +|-- LICENSE +|-- LICENSE.GPL-2.0-only +|-- LICENSE.MIT +|-- README-AGL.md +|-- README.md -> meta-agl.md +|-- agl-layers-overview.md +|-- docs +|-- meta-agl-bsp +|-- meta-agl-core +|-- meta-agl-core-test +|-- meta-agl-ic +|-- meta-agl-ivi +|-- meta-agl.md +|-- meta-app-framework +|-- meta-netboot +|-- meta-pipewire +|-- scripts +`-- templates ``` This list provides some overview information on the files and sub-layers in `meta-agl`: +* LICENSE* : licenses of the various components. +* README* : RTFM +* agl-layers-overview.md: references to the various layers that make up AGL * `docs`: Contains files that support AGL documentation. -* `meta-agl`: Contains layer configuration for the `meta-agl` layer. * `meta-agl-bsp`: Contains adaptations for recipes and required packages to boot an AGL distribution on targeted hardware and emulation (i.e. QEMU). -* `meta-agl-distro`: Contains distro configuration and supporting scripts. -* `meta-agl-profile-cluster`: The middleware for the AGL cluster profile. - The set of packages required for AGL Cluster Distribution. - Profiles include support for Wayland images. -* `meta-agl-profile-cluster-qt5`: The middleware for the AGL Qt5-based cluster profile. - The set of packages required for AGL Qt5-based Cluster Distribution. - Profiles include support for Wayland images with Qt5. -* `meta-agl-profile-core`: Configuration and recipes for the AGL core profiles. -* `meta-agl-profile-graphical`: Configuration and recipes supporting graphical user - interfaces. -* `meta-agl-profile-graphical-html5`: Configuration and recipes supporting profiles - with HTML user interface support. -* `meta-agl-profile-graphical-qt5`: Configuration and recipes supporting profiles - with Qt5-based user interface support. -* `meta-agl-profile-hud`: Configuration and recipes supporting profiles with - Head-Up-Display (HUD) support. -* `meta-agl-profile-telematics`: Configuration and recipes supporting profiles with - telematics support. +* `meta-agl-core`: This is the core layer with essential recieps and the distro. +* `meta-agl-core-test`: recipes supporting qa images (separate layer due to external dependencies) +* `meta-agl-ic`: Instrument Cluster platform +* `meta-agl-ivi`: IVI platform * `meta-app-framework`: Configuration and recipes supporting the AGL Application Framework. * `meta-netboot`: Contains recipes and configuration adjustments to allow network boot through network block device (NBD) since network file system (NFS) does not support security labels. -* `meta-security`: Configuration and recipes supporting security applications. +* `meta-pipewire`: Configuration and recipes supporting pipewire as audio manager * `scripts`: AGL development setup and support scripts. * `templates`: Base, feature, and machine templates used in the AGL development environment. @@ -80,41 +63,40 @@ This section describes the AGL [packagegroup](https://yoctoproject.org/docs/2.4.4/dev-manual/dev-manual.html#usingpoky-extend-customimage-customtasks) design: -* packagegroup-agl-image-minimal +### core non-ui packagegroups: +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb - packagegroup-agl-core-automotive.bb - packagegroup-agl-core-connectivity.bb - packagegroup-agl-core-graphics.bb - packagegroup-agl-core-kernel.bb - packagegroup-agl-core-multimedia.bb - packagegroup-agl-core-navi-lbs.bb - packagegroup-agl-core-os-commonlibs.bb - packagegroup-agl-core-security.bb - packagegroup-agl-core-speech-services.bb +### graphical subsystem +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb - The previous list of Packagegroups are used to create the `agl-image-minimal` image, - which is a small image just capable of allowing a device to boot. +### image-related packagegroups +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb +meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb - Subsystem should maintain packagegroup-agl-core-[subsystem].bb which should - hold sufficient packages to build `agl-image-minimal`. +### QA/Test related packagegroups +meta-agl-core-test/recipes-test/packagegroups +meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb -* packagegroup-agl-image-ivi +## Images - packagegroup-agl-ivi-automotive.bb - packagegroup-agl-ivi-connectivity.bb - packagegroup-agl-ivi-graphics.bb - packagegroup-agl-ivi-kernel.bb - packagegroup-agl-ivi-multimedia.bb - packagegroup-agl-ivi-navi-lbs.bb - packagegroup-agl-ivi-os-commonlibs.bb - packagegroup-agl-ivi-security.bb - packagegroup-agl-ivi-speech-services.bb +### (Barely) bootable image +meta-agl-core/recipes-platform/images/agl-image-boot.bb - The previous list of Packagegroups are used to create the `agl-image-ivi` - image, which is a baseline image (i.e. Service Layer and Operating System - Layer defined in AGL Spec v1.0) for the AGL profiles. +### minimal image and SDK (console) +meta-agl-core/recipes-platform/images/agl-image-minimal.bb +meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb -* packagegroup-agl-test.bb +### weston-based image for re-use +meta-agl-core/recipes-platform/images/agl-image-weston.bb - Additional tools used in QA tests (for agl-image*-qa). +### image for use in the YP autobuilder +meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb +### image with extra QA tooling (e.g. to run LTP) +meta-agl-core-test/images/agl-image-minimal-qa.bb diff --git a/meta-agl/conf/layer.conf b/meta-agl/conf/layer.conf deleted file mode 100644 index 6f431e6ac..000000000 --- a/meta-agl/conf/layer.conf +++ /dev/null @@ -1,12 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have recipes-* directories, add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "agl" -BBFILE_PATTERN_agl = "^${LAYERDIR}/" -BBFILE_PRIORITY_agl = "70" - -LAYERSERIES_COMPAT_agl = "dunfell" diff --git a/meta-app-framework/conf/include/agl-appfw-smack.inc b/meta-app-framework/conf/include/agl-appfw-smack.inc index 139722402..831368a31 100644 --- a/meta-app-framework/conf/include/agl-appfw-smack.inc +++ b/meta-app-framework/conf/include/agl-appfw-smack.inc @@ -3,6 +3,8 @@ OVERRIDES .= ":with-lsm-smack" DISTRO_FEATURES_append = " smack xattr" DISTRO_FEATURES_NATIVE_append = " smack xattr" +APPFW_ENABLED = "1" + # use tar-native to support SMACK extended attributes independently of host config IMAGE_CMD_TAR = "tar --xattrs --xattrs-include='*'" do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot" @@ -17,3 +19,6 @@ PACKAGECONFIG_append_pn-shadow-native = " attr" # set the home directory for root ROOT_HOME = "/home/0" + +# include devel wgts in images +IMAGE_FEATURES_append = " agl-devel-wgt" diff --git a/meta-app-framework/conf/include/agl-sign-wgts.inc b/meta-app-framework/conf/include/agl-sign-wgts.inc new file mode 100644 index 000000000..d56c01288 --- /dev/null +++ b/meta-app-framework/conf/include/agl-sign-wgts.inc @@ -0,0 +1,3 @@ +# allows insertion of code or items specific to developement +OVERRIDES .= ":agl-sign-wgts" +AGL_FEATURES_append = " agl-sign-wgts" diff --git a/meta-app-framework/conf/layer.conf b/meta-app-framework/conf/layer.conf index 21b8ee530..77701bb57 100644 --- a/meta-app-framework/conf/layer.conf +++ b/meta-app-framework/conf/layer.conf @@ -10,3 +10,24 @@ BBFILE_PATTERN_app-framework = "^${LAYERDIR}/" BBFILE_PRIORITY_app-framework = "70" LAYERSERIES_COMPAT_app-framework = "dunfell" + +# dependency: meta-oe +LAYERDEPENDS_app-framework = "openembedded-layer" +# dependency: meta-security +LAYERDEPENDS_app-framework += "security" + +# AGL core layer is an optional requirement +LAYERRECOMMENDS_app-framework += "aglcore" +LAYERRECOMMENDS_app-framework += "qt5-layer" + +BBFILES_DYNAMIC += " \ + qt5-layer:${LAYERDIR}/dynamic-layers/meta-qt5/*/*/*.bb \ + qt5-layer:${LAYERDIR}/dynamic-layers/meta-qt5/*/*/*.bbappend \ + aglcore:${LAYERDIR}/dynamic-layers/meta-agl-core/*/*/*.bb \ + aglcore:${LAYERDIR}/dynamic-layers/meta-agl-core/*/*/*.bbappend \ +" + + +# bug in meta-security +BBMASK += "packagegroup-core-security-ptest\.bb" +#BBMASK += "meta-security/recipes-mac/smack/smack-test_1.0.bb diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend new file mode 100644 index 000000000..048154e04 --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', '${PN}_appfw.inc', '', d)} diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security_appfw.inc b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security_appfw.inc new file mode 100644 index 000000000..423f15fdb --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security_appfw.inc @@ -0,0 +1,8 @@ +RDEPENDS_${PN}_append = "\ + smack-system-setup \ + xmlsec1 \ + cynagora \ + security-manager \ + security-manager-policy \ + agl-users \ + " diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend new file mode 100644 index 000000000..514dde79b --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'packagegroup-agl-image-boot_appfw.inc', '', d)} diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot_appfw.inc b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot_appfw.inc new file mode 100644 index 000000000..b3383f114 --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot_appfw.inc @@ -0,0 +1,3 @@ +RDEPENDS_${PN}_append = "\ + packagegroup-agl-app-framework \ + " diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend new file mode 100644 index 000000000..5f890bf06 --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'packagegroup-agl-image-minimal_appfw.inc', '', d)} diff --git a/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal_appfw.inc b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal_appfw.inc new file mode 100644 index 000000000..b3383f114 --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal_appfw.inc @@ -0,0 +1,3 @@ +RDEPENDS_${PN}_append = "\ + packagegroup-agl-app-framework \ + " diff --git a/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb b/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb new file mode 100644 index 000000000..802167b2d --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb @@ -0,0 +1,11 @@ +require recipes-devtools/libafb-helpers/libafb-helpers_git.inc + +DEPENDS_append = " qtwebsockets" +RDEPENDS_${PN}_append = " af-binder" + +inherit cmake_qt5 + +EXTRA_OECMAKE_append = " -DAFB_HELPERS_QT=ON -DAFB_HELPERS=OFF" + +ALLOW_EMPTY_${PN} = "1" + diff --git a/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb b/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb new file mode 100644 index 000000000..dd270d048 --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb @@ -0,0 +1,20 @@ +SUMMARY = "AGL Qt AppFW Library" +DESCRIPTION = "libqtappfw" +HOMEPAGE = "http://docs.automotivelinux.org" +LICENSE = "Apache-2.0" +SECTION = "libs" + +BBCLASSEXTEND = "nativesdk" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" + +DEPENDS += "qtbase qtdeclarative qtwebsockets" + +inherit cmake_qt5 + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqtappfw;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "fe20f1b029f67dee1f790ade7a9114086f2abd38" +S = "${WORKDIR}/git/" + +# PV needs to be modified with SRCPV to work AUTOREV correctly +PV = "0.0+git${SRCPV}" diff --git a/meta-app-framework/dynamic-layers/meta-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-qt5.bb b/meta-app-framework/dynamic-layers/meta-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-qt5.bb new file mode 100644 index 000000000..2f0f01fec --- /dev/null +++ b/meta-app-framework/dynamic-layers/meta-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-qt5.bb @@ -0,0 +1,16 @@ +SUMMARY = "The software for application framework of AGL IVI profile" +DESCRIPTION = "A set of packages belong to AGL application framework" + +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-appfw-qt5 \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + packagegroup-agl-appfw-native \ +" \ No newline at end of file diff --git a/meta-app-framework/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-app-framework/recipes-connectivity/bluez5/bluez5_%.bbappend new file mode 100644 index 000000000..20d2a68d7 --- /dev/null +++ b/meta-app-framework/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'bluez5_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-connectivity/bluez5/bluez5_appfw.inc b/meta-app-framework/recipes-connectivity/bluez5/bluez5_appfw.inc new file mode 100644 index 000000000..21529e96b --- /dev/null +++ b/meta-app-framework/recipes-connectivity/bluez5/bluez5_appfw.inc @@ -0,0 +1,55 @@ +# Recent bluez5 releases started limiting the capabilities of +# bluetoothd. When running on a Smack-enabled system, that change has the +# effect that bluetoothd can no longer create the input device under +# /sys because bluez5 running with label "System" has no write +# access to that. +# +# It works when running as normal root with unrestricted capabilities +# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows +# the process to ignore Smack rules. +# +# We need to ensure that bluetoothd still has that capability. +# +# To fix the issue, Patick and Casey(the Smack architect) had a talk +# about it in Ostro dev mail list. Casey has some ideas about the issue: +# "Turning off privilege is a great thing to do *so long as you don't +# really need the privilege*. In this case you really need it. +# The application package isn't written to account for Smack's use of +# CAP_MAC_OVERRIDE as the mechanism for controlling this dangerous operation. +# Yes, it would be possible to change /proc to change the Smack label on +# that particular file, but that might open other paths for exploit. +# I say give the program the required capability. The program maintainer +# may well say change the kernel handling of /proc. You're stuck in the +# middle, as both work the way they're intended and hence the system +# doesn't work. :( There isn't a way to make this work without "loosening" +# something." +# Therefore, when we we run the program with CAP_MAC_OVERRIDE, +# the whole reason for having capabilities is so the we can give a +# process the ability to bypass one kind of check without giving it the +# ability to bypass other, unrelated checks. A process with +# CAP_MAC_OVERRIDE is still constrained by the file mode bits. +# We was overly worried about granting that capability. +# When it has no other effect than excluding a process from Smack MAC enforcement, +# then adding to the process seems like the right solution for now. +# +# The conclusion from Patick and Casey is that the Smack architect give the key point +# that this is the solution preferred. +# +# Because the solution is to some extend specific to the environment +# in which connmand runs, this change is not submitted upstream +# and it can be overridden by a distro via FIX_BLUEZ5_CAPABILITIES. +# +# The related patch has been submitted to upstream too. +# upstream link: http://permalink.gmane.org/gmane.linux.bluez.kernel/67993 + +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI_append_with-lsm-smack = "\ + file://bluetooth.service.conf \ +" + +FILES_${PN}_append = " ${systemd_unitdir}" + +do_install_append_with-lsm-smack() { + install -Dm0644 ${WORKDIR}/bluetooth.service.conf ${D}${systemd_unitdir}/system/bluetooth.service.d/smack.conf +} diff --git a/meta-app-framework/recipes-connectivity/bluez5/files/bluetooth.service.conf b/meta-app-framework/recipes-connectivity/bluez5/files/bluetooth.service.conf new file mode 100644 index 000000000..b93ab4fee --- /dev/null +++ b/meta-app-framework/recipes-connectivity/bluez5/files/bluetooth.service.conf @@ -0,0 +1,2 @@ +[Service] +CapabilityBoundingSet=CAP_MAC_OVERRIDE diff --git a/meta-app-framework/recipes-connectivity/connman/connman_%.bbappend b/meta-app-framework/recipes-connectivity/connman/connman_%.bbappend new file mode 100644 index 000000000..72aa9f276 --- /dev/null +++ b/meta-app-framework/recipes-connectivity/connman/connman_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'connman_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-connectivity/connman/connman_appfw.inc b/meta-app-framework/recipes-connectivity/connman/connman_appfw.inc new file mode 100644 index 000000000..23af33104 --- /dev/null +++ b/meta-app-framework/recipes-connectivity/connman/connman_appfw.inc @@ -0,0 +1,34 @@ +# Recent ConnMan releases started limiting the capabilities of +# ConnMan. When running on a Smack-enabled system, that change has the +# effect that connmand can no longer change network settings under +# /proc/net because the Smack label of /proc is "_", and connmand +# running with label "System" has no write access to that. +# +# It works when running as normal root with unrestricted capabilities +# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows +# the process to ignore Smack rules. +# +# We need to ensure that connmand still has that capability. +# +# The alternative would be to set up fine-grained labelling of +# /proc with corresponding rules, which is considerably more work +# and also may depend on kernel changes (like supporting smackfsroot +# for procfs, which seems to be missing at the moment). +# +# Because the solution is to some extend specific to the environment +# in which connmand runs, this change is not submitted upstream +# and it can be overridden by a distro via FIX_CONNMAN_CAPABILITIES. + +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI_append_with-lsm-smack = "\ + file://connman.service.conf \ +" + +RDEPENDS_${PN}_append_with-lsm-smack = " smack" + +FILES_${PN}_append = " ${systemd_unitdir}" + +do_install_append_with-lsm-smack() { + install -Dm0644 ${WORKDIR}/connman.service.conf ${D}${systemd_unitdir}/system/connman.service.d/smack.conf +} diff --git a/meta-app-framework/recipes-connectivity/connman/files/connman.service.conf b/meta-app-framework/recipes-connectivity/connman/files/connman.service.conf new file mode 100644 index 000000000..6ebbf6ad1 --- /dev/null +++ b/meta-app-framework/recipes-connectivity/connman/files/connman.service.conf @@ -0,0 +1,4 @@ +[Service] +CapabilityBoundingSet=CAP_MAC_OVERRIDE +ExecStartPre=+-/bin/mkdir -p /run/connman +ExecStartPre=+-/usr/bin/chsmack -t -a System::Shared /run/connman diff --git a/meta-app-framework/recipes-core/base-files/base-files_%.bbappend b/meta-app-framework/recipes-core/base-files/base-files_%.bbappend index 1dddcd6f2..28b08face 100644 --- a/meta-app-framework/recipes-core/base-files/base-files_%.bbappend +++ b/meta-app-framework/recipes-core/base-files/base-files_%.bbappend @@ -1,32 +1 @@ -RDEPENDS_${PN}_append_with-lsm-smack = " smack" -PACKAGE_WRITE_DEPS_append_with-lsm-smack = " smack-native" - -do_install_append() { - install -m 0700 -d ${D}/${sysconfdir}/skel - chmod -R 0700 ${D}/${sysconfdir}/skel - install -m 0700 -d ${D}/${sysconfdir}/skel/app-data - install -m 0700 -d ${D}/${sysconfdir}/skel/.config - install -m 0755 -d ${D}/var - if [ -d ${D}/usr/local ]; then - mv ${D}/usr/local ${D}/var - else - install -m 0755 -d ${D}/var/local - fi - ln -s ../var/local ${D}/usr/local -} - -do_install_append_with-lsm-smack () { - install -d ${D}/${sysconfdir}/smack/accesses.d - cat > ${D}/${sysconfdir}/smack/accesses.d/default-access-domains-no-user < ${D}/${sysconfdir}/smack/accesses.d/default-access-domains-no-user <${D}/${sysconfdir}/smack/accesses.d/default-access-domains <${D}/${libdir}/tmpfiles.d/packet-forwarding.conf <${D}/${base_libdir}/udev/rules.d/85-netdev-ipconf-smacklabel.rules < + install -d $D${sysconfdir} + # This has no effect on files installed into /etc during image construction + # because pseudo does not know the special semantic of SMACK::TRANSMUTE. + # To avoid having different xattrs on files inside /etc when pre-installed + # in an image vs. installed on a device, the xattr-images.bbclass has + # a workaround for this deficiency in pseudo. + chsmack -t $D${sysconfdir} + chsmack -a 'System::Shared' $D${sysconfdir} + + # Same for /media. Any daemon running as "System" will get write access + # to everything. + install -d $D/media + chsmack -t $D/media + chsmack -a 'System::Shared' $D/media + + # Same for /var. Any daemon running as "System" will get write access + # to everything. + install -d $D${localstatedir} + chsmack -t $D${localstatedir} + chsmack -a 'System::Shared' $D${localstatedir} + + # + mkdir -p $D/tmp + chsmack -a '*' $D/tmp + + # + # + # These are in a file system mounted by systemd. We patch the systemd service + # to set these attributes. +} diff --git a/meta-app-framework/recipes-core/coreutils/coreutils_%.bbappend b/meta-app-framework/recipes-core/coreutils/coreutils_%.bbappend new file mode 100644 index 000000000..b7bf9fff4 --- /dev/null +++ b/meta-app-framework/recipes-core/coreutils/coreutils_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'coreutils_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-core/coreutils/coreutils_appfw.inc b/meta-app-framework/recipes-core/coreutils/coreutils_appfw.inc new file mode 100644 index 000000000..1b9b722ec --- /dev/null +++ b/meta-app-framework/recipes-core/coreutils/coreutils_appfw.inc @@ -0,0 +1,7 @@ +# Smack patches are included in coreutils v8.22, we just need to enable them. +# The default is not deterministic (enabled if libsmack found), so disable +# explicitly otherwise. +EXTRA_OECONF_SMACK_class-target = "--disable-libsmack" +EXTRA_OECONF_SMACK_with-lsm-smack_class-target = "--enable-libsmack" +EXTRA_OECONF_append_class-target = " ${EXTRA_OECONF_SMACK}" +DEPENDS_append_with-lsm-smack_class-target = " smack" diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch new file mode 100644 index 000000000..55cedb9c7 --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch @@ -0,0 +1,2309 @@ +From ea4b650366261e4257e4b0fb95e7f48e30ef36f0 Mon Sep 17 00:00:00 2001 +From: Jacek Bukarewicz +Date: Thu, 27 Nov 2014 18:11:05 +0100 +Subject: [PATCH 1/8] Integration of Cynara asynchronous security checks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This commit introduces basic framework for asynchronous policy +checks and Cynara integration code. Functions for checking security +policy can now return third value - BUS_RESULT_LATER denoting check +result unavailability. Whenever policy checker cannot decide on the +result of the check it is supposed to allocate DeferredMessage structure +that will be passed to the upper layers which can decide what should be +done in such situation. +Proper handling of such case will be implemented in subsequent commits. +Currently such return value results in message denial. + +Cherry picked from 4dcfb02f17247ff9de966b62182cd2e08f301238 +by José Bollo. + +Updated for dbus 1.10.20 by Scott Murray and José Bollo +Updated for dbus 1.12.16 by José Bollo + +Change-Id: I9bcbce34577e5dc2a3cecf6233a0a2b0e43e1108 +Signed-off-by: José Bollo +Signed-off-by: Scott Murray +--- + bus/Makefile.am | 6 + + bus/activation.c | 5 +- + bus/bus.c | 124 ++++-- + bus/bus.h | 22 +- + bus/check.c | 217 ++++++++++ + bus/check.h | 68 ++++ + bus/config-parser-common.c | 6 + + bus/config-parser-common.h | 1 + + bus/config-parser-trivial.c | 2 + + bus/config-parser.c | 72 +++- + bus/connection.c | 57 ++- + bus/connection.h | 4 + + bus/cynara.c | 374 ++++++++++++++++++ + bus/cynara.h | 37 ++ + bus/dispatch.c | 46 ++- + bus/driver.h | 2 + + bus/policy.c | 195 ++++++--- + bus/policy.h | 29 +- + configure.ac | 12 + + test/Makefile.am | 1 + + .../data/invalid-config-files/badcheck-1.conf | 9 + + .../data/invalid-config-files/badcheck-2.conf | 9 + + test/data/valid-config-files/check-1.conf | 9 + + .../debug-check-some.conf.in | 18 + + 24 files changed, 1181 insertions(+), 144 deletions(-) + create mode 100644 bus/check.c + create mode 100644 bus/check.h + create mode 100644 bus/cynara.c + create mode 100644 bus/cynara.h + create mode 100644 test/data/invalid-config-files/badcheck-1.conf + create mode 100644 test/data/invalid-config-files/badcheck-2.conf + create mode 100644 test/data/valid-config-files/check-1.conf + create mode 100644 test/data/valid-config-files/debug-check-some.conf.in + +diff --git a/bus/Makefile.am b/bus/Makefile.am +index c917063..2a8a72c 100644 +--- a/bus/Makefile.am ++++ b/bus/Makefile.am +@@ -13,6 +13,7 @@ DBUS_BUS_LIBS = \ + $(THREAD_LIBS) \ + $(ADT_LIBS) \ + $(NETWORK_libs) \ ++ $(CYNARA_LIBS) \ + $(NULL) + + DBUS_LAUNCHER_LIBS = \ +@@ -30,6 +31,7 @@ AM_CPPFLAGS = \ + $(APPARMOR_CFLAGS) \ + -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \ + -DDBUS_COMPILATION \ ++ $(CYNARA_CFLAGS) \ + $(NULL) + + # if assertions are enabled, improve backtraces +@@ -90,6 +92,8 @@ BUS_SOURCES= \ + audit.h \ + bus.c \ + bus.h \ ++ check.c \ ++ check.h \ + config-loader-expat.c \ + config-parser.c \ + config-parser.h \ +@@ -97,6 +101,8 @@ BUS_SOURCES= \ + config-parser-common.h \ + connection.c \ + connection.h \ ++ cynara.c \ ++ cynara.h \ + desktop-file.c \ + desktop-file.h \ + $(DIR_WATCH_SOURCE) \ +diff --git a/bus/activation.c b/bus/activation.c +index 99404b9..f9c6c62 100644 +--- a/bus/activation.c ++++ b/bus/activation.c +@@ -1789,14 +1789,15 @@ bus_activation_activate_service (BusActivation *activation, + + if (auto_activation && + entry != NULL && +- !bus_context_check_security_policy (activation->context, ++ BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context, + transaction, + connection, /* sender */ + NULL, /* addressed recipient */ + NULL, /* proposed recipient */ + activation_message, + entry, +- error)) ++ error, ++ NULL)) + { + _DBUS_ASSERT_ERROR_IS_SET (error); + _dbus_verbose ("activation not authorized: %s: %s\n", +diff --git a/bus/bus.c b/bus/bus.c +index 2ad8e78..6fc45d0 100644 +--- a/bus/bus.c ++++ b/bus/bus.c +@@ -38,6 +38,7 @@ + #include "apparmor.h" + #include "audit.h" + #include "dir-watch.h" ++#include "check.h" + #include + #include + #include +@@ -67,6 +68,7 @@ struct BusContext + BusRegistry *registry; + BusPolicy *policy; + BusMatchmaker *matchmaker; ++ BusCheck *check; + BusLimits limits; + DBusRLimit *initial_fd_limit; + unsigned int fork : 1; +@@ -1003,6 +1005,10 @@ bus_context_new (const DBusString *config_file, + parser = NULL; + } + ++ context->check = bus_check_new(context, error); ++ if (context->check == NULL) ++ goto failed; ++ + dbus_server_free_data_slot (&server_data_slot); + + return context; +@@ -1127,6 +1133,12 @@ bus_context_unref (BusContext *context) + + bus_context_shutdown (context); + ++ if (context->check) ++ { ++ bus_check_unref(context->check); ++ context->check = NULL; ++ } ++ + if (context->connections) + { + bus_connections_unref (context->connections); +@@ -1256,6 +1268,12 @@ bus_context_get_loop (BusContext *context) + return context->loop; + } + ++BusCheck* ++bus_context_get_check (BusContext *context) ++{ ++ return context->check; ++} ++ + dbus_bool_t + bus_context_allow_unix_user (BusContext *context, + unsigned long uid) +@@ -1451,6 +1469,7 @@ complain_about_message (BusContext *context, + DBusConnection *proposed_recipient, + dbus_bool_t requested_reply, + dbus_bool_t log, ++ const char *privilege, + DBusError *error) + { + DBusError stack_error = DBUS_ERROR_INIT; +@@ -1480,7 +1499,8 @@ complain_about_message (BusContext *context, + dbus_set_error (&stack_error, error_name, + "%s, %d matched rules; type=\"%s\", sender=\"%s\" (%s) " + "interface=\"%s\" member=\"%s\" error name=\"%s\" " +- "requested_reply=\"%d\" destination=\"%s\" (%s)", ++ "requested_reply=\"%d\" destination=\"%s\" (%s) " ++ "privilege=\"%s\"", + complaint, + matched_rules, + dbus_message_type_to_string (dbus_message_get_type (message)), +@@ -1491,7 +1511,8 @@ complain_about_message (BusContext *context, + nonnull (dbus_message_get_error_name (message), "(unset)"), + requested_reply, + nonnull (dbus_message_get_destination (message), DBUS_SERVICE_DBUS), +- proposed_recipient_loginfo); ++ proposed_recipient_loginfo, ++ nonnull (privilege, "(n/a)")); + + /* If we hit OOM while setting the error, this will syslog "out of memory" + * which is itself an indication that something is seriously wrong */ +@@ -1519,7 +1540,7 @@ complain_about_message (BusContext *context, + * NULL for addressed_recipient may mean the bus driver, or may mean + * no destination was specified in the message (e.g. a signal). + */ +-dbus_bool_t ++BusResult + bus_context_check_security_policy (BusContext *context, + BusTransaction *transaction, + DBusConnection *sender, +@@ -1527,7 +1548,8 @@ bus_context_check_security_policy (BusContext *context, + DBusConnection *proposed_recipient, + DBusMessage *message, + BusActivationEntry *activation_entry, +- DBusError *error) ++ DBusError *error, ++ BusDeferredMessage **deferred_message) + { + const char *src, *dest; + BusClientPolicy *sender_policy; +@@ -1536,6 +1558,7 @@ bus_context_check_security_policy (BusContext *context, + dbus_bool_t log; + int type; + dbus_bool_t requested_reply; ++ const char *privilege; + + type = dbus_message_get_type (message); + src = dbus_message_get_sender (message); +@@ -1565,7 +1588,7 @@ bus_context_check_security_policy (BusContext *context, + dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, + "Message bus will not accept messages of unknown type\n"); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + requested_reply = FALSE; +@@ -1595,7 +1618,7 @@ bus_context_check_security_policy (BusContext *context, + if (dbus_error_is_set (&error2)) + { + dbus_move_error (&error2, error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + } + } +@@ -1624,11 +1647,11 @@ bus_context_check_security_policy (BusContext *context, + complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, + "An SELinux policy prevents this sender from sending this " + "message to this recipient", +- 0, message, sender, proposed_recipient, FALSE, FALSE, error); ++ 0, message, sender, proposed_recipient, FALSE, FALSE, NULL, error); + _dbus_verbose ("SELinux security check denying send to service\n"); + } + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + /* next verify AppArmor access controls. If allowed then +@@ -1646,7 +1669,7 @@ bus_context_check_security_policy (BusContext *context, + src ? src : DBUS_SERVICE_DBUS, + activation_entry, + error)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + if (!bus_connection_is_active (sender)) + { +@@ -1660,7 +1683,7 @@ bus_context_check_security_policy (BusContext *context, + { + _dbus_verbose ("security check allowing %s message\n", + "Hello"); +- return TRUE; ++ return BUS_RESULT_TRUE; + } + else + { +@@ -1671,7 +1694,7 @@ bus_context_check_security_policy (BusContext *context, + "Client tried to send a message other than %s without being registered", + "Hello"); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + } + } +@@ -1720,20 +1743,29 @@ bus_context_check_security_policy (BusContext *context, + (proposed_recipient == NULL && recipient_policy == NULL)); + + log = FALSE; +- if (sender_policy && +- !bus_client_policy_check_can_send (sender_policy, +- context->registry, +- requested_reply, +- proposed_recipient, +- message, &toggles, &log)) +- { +- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, +- "Rejected send message", toggles, +- message, sender, proposed_recipient, requested_reply, +- (addressed_recipient == proposed_recipient), error); +- _dbus_verbose ("security policy disallowing message due to sender policy\n"); +- return FALSE; +- } ++ if (sender_policy) ++ { ++ BusResult res = bus_client_policy_check_can_send (sender, ++ sender_policy, ++ context->registry, ++ requested_reply, ++ addressed_recipient, ++ proposed_recipient, ++ message, &toggles, &log, &privilege, ++ deferred_message); ++ if (res == BUS_RESULT_FALSE) ++ { ++ complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, ++ "Rejected send message", toggles, ++ message, sender, proposed_recipient, requested_reply, ++ (addressed_recipient == proposed_recipient), privilege, ++ error); ++ _dbus_verbose ("security policy disallowing message due to sender policy\n"); ++ return BUS_RESULT_FALSE; ++ } ++ else if (res == BUS_RESULT_LATER) ++ return BUS_RESULT_LATER; ++ } + + if (log) + { +@@ -1742,23 +1774,29 @@ bus_context_check_security_policy (BusContext *context, + complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, + "Would reject message", toggles, + message, sender, proposed_recipient, requested_reply, +- TRUE, NULL); ++ TRUE, privilege, NULL); + } + +- if (recipient_policy && +- !bus_client_policy_check_can_receive (recipient_policy, +- context->registry, +- requested_reply, +- sender, +- addressed_recipient, proposed_recipient, +- message, &toggles)) ++ if (recipient_policy) + { +- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, +- "Rejected receive message", toggles, +- message, sender, proposed_recipient, requested_reply, +- (addressed_recipient == proposed_recipient), error); +- _dbus_verbose ("security policy disallowing message due to recipient policy\n"); +- return FALSE; ++ BusResult res; ++ res = bus_client_policy_check_can_receive (recipient_policy, ++ context->registry, ++ requested_reply, ++ sender, ++ addressed_recipient, proposed_recipient, ++ message, &toggles, &privilege, deferred_message); ++ if (res == BUS_RESULT_FALSE) ++ { ++ complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected receive message", ++ toggles, message, sender, proposed_recipient, requested_reply, ++ (addressed_recipient == proposed_recipient), privilege, error); ++ _dbus_verbose( ++ "security policy disallowing message due to recipient policy\n"); ++ return BUS_RESULT_FALSE; ++ } ++ else if (res == BUS_RESULT_LATER) ++ return BUS_RESULT_LATER; + } + + /* See if limits on size have been exceeded */ +@@ -1768,10 +1806,10 @@ bus_context_check_security_policy (BusContext *context, + { + complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, + "Rejected: destination has a full message queue", +- 0, message, sender, proposed_recipient, requested_reply, TRUE, ++ 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL, + error); + _dbus_verbose ("security policy disallowing message due to full message queue\n"); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + /* Record that we will allow a reply here in the future (don't +@@ -1792,11 +1830,11 @@ bus_context_check_security_policy (BusContext *context, + message, error)) + { + _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n"); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + _dbus_verbose ("security policy allowing message\n"); +- return TRUE; ++ return BUS_RESULT_TRUE; + } + + void +diff --git a/bus/bus.h b/bus/bus.h +index 2e0de82..82c32c8 100644 +--- a/bus/bus.h ++++ b/bus/bus.h +@@ -45,6 +45,22 @@ typedef struct BusTransaction BusTransaction; + typedef struct BusMatchmaker BusMatchmaker; + typedef struct BusMatchRule BusMatchRule; + typedef struct BusActivationEntry BusActivationEntry; ++typedef struct BusCheck BusCheck; ++typedef struct BusDeferredMessage BusDeferredMessage; ++typedef struct BusCynara BusCynara; ++ ++/** ++ * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches. ++ * The disadvantage of such solution is that now BusResult variables cannot be used in switch ++ * statement. ++ * Additionally, BUS_RESULT_TRUE is defined as 0 instead of 1 to help detect type mismatches ++ * at runtime. ++ */ ++typedef const struct BusResultStruct { int dummy; } *BusResult; ++ ++static const BusResult BUS_RESULT_TRUE = (BusResult)0x0; ++static const BusResult BUS_RESULT_FALSE = (BusResult)0x1; ++static const BusResult BUS_RESULT_LATER = (BusResult)0x2; + + typedef struct + { +@@ -101,6 +117,7 @@ BusConnections* bus_context_get_connections (BusContext + BusActivation* bus_context_get_activation (BusContext *context); + BusMatchmaker* bus_context_get_matchmaker (BusContext *context); + DBusLoop* bus_context_get_loop (BusContext *context); ++BusCheck * bus_context_get_check (BusContext *context); + dbus_bool_t bus_context_allow_unix_user (BusContext *context, + unsigned long uid); + dbus_bool_t bus_context_allow_windows_user (BusContext *context, +@@ -136,14 +153,15 @@ void bus_context_log_and_set_error (BusContext + const char *name, + const char *msg, + ...) _DBUS_GNUC_PRINTF (5, 6); +-dbus_bool_t bus_context_check_security_policy (BusContext *context, ++BusResult bus_context_check_security_policy (BusContext *context, + BusTransaction *transaction, + DBusConnection *sender, + DBusConnection *addressed_recipient, + DBusConnection *proposed_recipient, + DBusMessage *message, + BusActivationEntry *activation_entry, +- DBusError *error); ++ DBusError *error, ++ BusDeferredMessage **deferred_message); + void bus_context_check_all_watches (BusContext *context); + + #endif /* BUS_BUS_H */ +diff --git a/bus/check.c b/bus/check.c +new file mode 100644 +index 0000000..5b72d31 +--- /dev/null ++++ b/bus/check.c +@@ -0,0 +1,217 @@ ++/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ ++/* check.c Bus security policy runtime check ++ * ++ * Copyright (C) 2014 Intel, Inc. ++ * Copyright (c) 2014 Samsung Electronics, Ltd. ++ * ++ * Licensed under the Academic Free License version 2.1 ++ * ++ * 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 ++ * ++ */ ++ ++#include ++#include "check.h" ++#include "connection.h" ++#include "dispatch.h" ++#include "cynara.h" ++#include "utils.h" ++#include ++#include ++#include ++ ++ ++typedef struct BusCheck ++{ ++ int refcount; ++ ++ BusContext *context; ++ BusCynara *cynara; ++} BusCheck; ++ ++typedef struct BusDeferredMessage ++{ ++ int refcount; ++ ++ DBusMessage *message; ++ DBusConnection *sender; ++ DBusConnection *proposed_recipient; ++ DBusConnection *addressed_recipient; ++ dbus_bool_t full_dispatch; ++ BusDeferredMessageStatus status; ++ BusResult response; ++ BusCheckResponseFunc response_callback; ++} BusDeferredMessage; ++ ++BusCheck * ++bus_check_new (BusContext *context, DBusError *error) ++{ ++ BusCheck *check; ++ ++ check = dbus_new(BusCheck, 1); ++ if (check == NULL) ++ { ++ BUS_SET_OOM(error); ++ return NULL; ++ } ++ ++ check->refcount = 1; ++ check->context = context; ++ check->cynara = bus_cynara_new(check, error); ++ if (dbus_error_is_set(error)) ++ { ++ dbus_free(check); ++ return NULL; ++ } ++ ++ return check; ++} ++ ++BusCheck * ++bus_check_ref (BusCheck *check) ++{ ++ _dbus_assert (check->refcount > 0); ++ check->refcount += 1; ++ ++ return check; ++} ++ ++void ++bus_check_unref (BusCheck *check) ++{ ++ _dbus_assert (check->refcount > 0); ++ ++ check->refcount -= 1; ++ ++ if (check->refcount == 0) ++ { ++ bus_cynara_unref(check->cynara); ++ dbus_free(check); ++ } ++} ++ ++BusContext * ++bus_check_get_context (BusCheck *check) ++{ ++ return check->context; ++} ++ ++BusCynara * ++bus_check_get_cynara (BusCheck *check) ++{ ++ return check->cynara; ++} ++ ++BusResult ++bus_check_privilege (BusCheck *check, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *privilege, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message) ++{ ++ BusResult result = BUS_RESULT_FALSE; ++#ifdef DBUS_ENABLE_CYNARA ++ BusCynara *cynara; ++#endif ++ DBusConnection *connection; ++ ++ connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; ++ ++ if (!dbus_connection_get_is_connected(connection)) ++ { ++ return BUS_RESULT_FALSE; ++ } ++ ++ /* ask policy checkers */ ++#ifdef DBUS_ENABLE_CYNARA ++ cynara = bus_check_get_cynara(check); ++ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, ++ proposed_recipient, privilege, check_type, deferred_message); ++#endif ++ ++ if (result == BUS_RESULT_LATER && deferred_message != NULL) ++ { ++ (*deferred_message)->status |= check_type; ++ } ++ return result; ++} ++ ++BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ BusResult response) ++{ ++ BusDeferredMessage *deferred_message; ++ ++ deferred_message = dbus_new(BusDeferredMessage, 1); ++ if (deferred_message == NULL) ++ { ++ return NULL; ++ } ++ ++ deferred_message->refcount = 1; ++ deferred_message->sender = sender != NULL ? dbus_connection_ref(sender) : NULL; ++ deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL; ++ deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL; ++ deferred_message->message = dbus_message_ref(message); ++ deferred_message->response = response; ++ deferred_message->status = 0; ++ deferred_message->full_dispatch = FALSE; ++ deferred_message->response_callback = NULL; ++ ++ return deferred_message; ++} ++ ++BusDeferredMessage * ++bus_deferred_message_ref (BusDeferredMessage *deferred_message) ++{ ++ _dbus_assert (deferred_message->refcount > 0); ++ deferred_message->refcount += 1; ++ return deferred_message; ++} ++ ++void ++bus_deferred_message_unref (BusDeferredMessage *deferred_message) ++{ ++ _dbus_assert (deferred_message->refcount > 0); ++ ++ deferred_message->refcount -= 1; ++ ++ if (deferred_message->refcount == 0) ++ { ++ dbus_message_unref(deferred_message->message); ++ if (deferred_message->sender != NULL) ++ dbus_connection_unref(deferred_message->sender); ++ if (deferred_message->addressed_recipient != NULL) ++ dbus_connection_unref(deferred_message->addressed_recipient); ++ if (deferred_message->proposed_recipient != NULL) ++ dbus_connection_unref(deferred_message->proposed_recipient); ++ dbus_free(deferred_message); ++ } ++} ++ ++void ++bus_deferred_message_response_received (BusDeferredMessage *deferred_message, ++ BusResult result) ++{ ++ if (deferred_message->response_callback != NULL) ++ { ++ deferred_message->response_callback(deferred_message, result); ++ } ++} +diff --git a/bus/check.h b/bus/check.h +new file mode 100644 +index 0000000..c3fcaf9 +--- /dev/null ++++ b/bus/check.h +@@ -0,0 +1,68 @@ ++/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ ++/* check.h Bus security policy runtime check ++ * ++ * Copyright (C) 2014 Intel, Inc. ++ * Copyright (c) 2014 Samsung Electronics, Ltd. ++ * ++ * Licensed under the Academic Free License version 2.1 ++ * ++ * 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 ++ * ++ */ ++ ++#ifndef BUS_CHECK_H ++#define BUS_CHECK_H ++ ++#include "bus.h" ++#include "policy.h" ++ ++ ++typedef void (*BusCheckResponseFunc) (BusDeferredMessage *message, ++ BusResult result); ++ ++typedef enum { ++ BUS_DEFERRED_MESSAGE_CHECK_SEND = 1 << 0, ++ BUS_DEFERRED_MESSAGE_CHECK_RECEIVE = 1 << 1, ++ BUS_DEFERRED_MESSAGE_CHECK_OWN = 1 << 2, ++} BusDeferredMessageStatus; ++ ++ ++BusCheck *bus_check_new (BusContext *context, ++ DBusError *error); ++BusCheck *bus_check_ref (BusCheck *check); ++void bus_check_unref (BusCheck *check); ++ ++BusContext *bus_check_get_context (BusCheck *check); ++BusCynara *bus_check_get_cynara (BusCheck *check); ++BusResult bus_check_privilege (BusCheck *check, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *privilege, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message); ++ ++BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ BusResult response); ++ ++BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message); ++void bus_deferred_message_unref (BusDeferredMessage *deferred_message); ++void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, ++ BusResult result); ++#endif /* BUS_CHECK_H */ +diff --git a/bus/config-parser-common.c b/bus/config-parser-common.c +index c1c4191..e2f253d 100644 +--- a/bus/config-parser-common.c ++++ b/bus/config-parser-common.c +@@ -75,6 +75,10 @@ bus_config_parser_element_name_to_type (const char *name) + { + return ELEMENT_DENY; + } ++ else if (strcmp (name, "check") == 0) ++ { ++ return ELEMENT_CHECK; ++ } + else if (strcmp (name, "servicehelper") == 0) + { + return ELEMENT_SERVICEHELPER; +@@ -159,6 +163,8 @@ bus_config_parser_element_type_to_name (ElementType type) + return "allow"; + case ELEMENT_DENY: + return "deny"; ++ case ELEMENT_CHECK: ++ return "check"; + case ELEMENT_FORK: + return "fork"; + case ELEMENT_PIDFILE: +diff --git a/bus/config-parser-common.h b/bus/config-parser-common.h +index 382a014..9e026d1 100644 +--- a/bus/config-parser-common.h ++++ b/bus/config-parser-common.h +@@ -36,6 +36,7 @@ typedef enum + ELEMENT_LIMIT, + ELEMENT_ALLOW, + ELEMENT_DENY, ++ ELEMENT_CHECK, + ELEMENT_FORK, + ELEMENT_PIDFILE, + ELEMENT_SERVICEDIR, +diff --git a/bus/config-parser-trivial.c b/bus/config-parser-trivial.c +index dd65c6d..23dedb4 100644 +--- a/bus/config-parser-trivial.c ++++ b/bus/config-parser-trivial.c +@@ -194,6 +194,7 @@ bus_config_parser_start_element (BusConfigParser *parser, + case ELEMENT_POLICY: + case ELEMENT_LIMIT: + case ELEMENT_ALLOW: ++ case ELEMENT_CHECK: + case ELEMENT_DENY: + case ELEMENT_FORK: + case ELEMENT_PIDFILE: +@@ -316,6 +317,7 @@ bus_config_parser_content (BusConfigParser *parser, + case ELEMENT_POLICY: + case ELEMENT_LIMIT: + case ELEMENT_ALLOW: ++ case ELEMENT_CHECK: + case ELEMENT_DENY: + case ELEMENT_FORK: + case ELEMENT_PIDFILE: +diff --git a/bus/config-parser.c b/bus/config-parser.c +index be27d38..7f91469 100644 +--- a/bus/config-parser.c ++++ b/bus/config-parser.c +@@ -1318,7 +1318,7 @@ append_rule_from_element (BusConfigParser *parser, + const char *element_name, + const char **attribute_names, + const char **attribute_values, +- dbus_bool_t allow, ++ BusPolicyRuleAccess access, + DBusError *error) + { + const char *log; +@@ -1360,6 +1360,7 @@ append_rule_from_element (BusConfigParser *parser, + const char *own_prefix; + const char *user; + const char *group; ++ const char *privilege; + + BusPolicyRule *rule; + +@@ -1390,6 +1391,7 @@ append_rule_from_element (BusConfigParser *parser, + "user", &user, + "group", &group, + "log", &log, ++ "privilege", &privilege, + NULL)) + return FALSE; + +@@ -1422,6 +1424,7 @@ append_rule_from_element (BusConfigParser *parser, + + if (!(any_send_attribute || + any_receive_attribute || ++ privilege || + own || own_prefix || user || group)) + { + dbus_set_error (error, DBUS_ERROR_FAILED, +@@ -1438,7 +1441,30 @@ append_rule_from_element (BusConfigParser *parser, + element_name); + return FALSE; + } +- ++ ++ if (access == BUS_POLICY_RULE_ACCESS_CHECK) ++ { ++ if (privilege == NULL || !*privilege) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, ++ "On element <%s>, you must specify the privilege to be checked.", ++ element_name); ++ return FALSE; ++ } ++ } ++ else ++ { ++ if (privilege != NULL && *privilege) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, ++ "On element <%s>, privilege %s is used outside of a check rule.", ++ element_name, privilege); ++ return FALSE; ++ } ++ else ++ privilege = NULL; /* replace (potentially) empty string with NULL pointer, it wouldn't be used anyway */ ++ } ++ + /* Allowed combinations of elements are: + * + * base, must be all send or all receive: +@@ -1589,7 +1615,7 @@ append_rule_from_element (BusConfigParser *parser, + error)) + return FALSE; + +- rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, access); + if (rule == NULL) + goto nomem; + +@@ -1694,7 +1720,7 @@ append_rule_from_element (BusConfigParser *parser, + error)) + return FALSE; + +- rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, access); + if (rule == NULL) + goto nomem; + +@@ -1726,7 +1752,7 @@ append_rule_from_element (BusConfigParser *parser, + } + else if (own || own_prefix) + { +- rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, access); + if (rule == NULL) + goto nomem; + +@@ -1752,7 +1778,7 @@ append_rule_from_element (BusConfigParser *parser, + { + if (IS_WILDCARD (user)) + { +- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access); + if (rule == NULL) + goto nomem; + +@@ -1767,7 +1793,7 @@ append_rule_from_element (BusConfigParser *parser, + + if (_dbus_parse_unix_user_from_config (&username, &uid)) + { +- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access); + if (rule == NULL) + goto nomem; + +@@ -1784,7 +1810,7 @@ append_rule_from_element (BusConfigParser *parser, + { + if (IS_WILDCARD (group)) + { +- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access); + if (rule == NULL) + goto nomem; + +@@ -1799,7 +1825,7 @@ append_rule_from_element (BusConfigParser *parser, + + if (_dbus_parse_unix_group_from_config (&groupname, &gid)) + { +- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow); ++ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access); + if (rule == NULL) + goto nomem; + +@@ -1823,6 +1849,10 @@ append_rule_from_element (BusConfigParser *parser, + _dbus_assert (pe != NULL); + _dbus_assert (pe->type == ELEMENT_POLICY); + ++ rule->privilege = _dbus_strdup (privilege); ++ if (privilege && !rule->privilege) ++ goto nomem; ++ + switch (pe->d.policy.type) + { + case POLICY_IGNORED: +@@ -1898,7 +1928,7 @@ start_policy_child (BusConfigParser *parser, + { + if (!append_rule_from_element (parser, element_name, + attribute_names, attribute_values, +- TRUE, error)) ++ BUS_POLICY_RULE_ACCESS_ALLOW, error)) + return FALSE; + + if (push_element (parser, ELEMENT_ALLOW) == NULL) +@@ -1913,7 +1943,7 @@ start_policy_child (BusConfigParser *parser, + { + if (!append_rule_from_element (parser, element_name, + attribute_names, attribute_values, +- FALSE, error)) ++ BUS_POLICY_RULE_ACCESS_DENY, error)) + return FALSE; + + if (push_element (parser, ELEMENT_DENY) == NULL) +@@ -1922,6 +1952,21 @@ start_policy_child (BusConfigParser *parser, + return FALSE; + } + ++ return TRUE; ++ } ++ else if (strcmp (element_name, "check") == 0) ++ { ++ if (!append_rule_from_element (parser, element_name, ++ attribute_names, attribute_values, ++ BUS_POLICY_RULE_ACCESS_CHECK, error)) ++ return FALSE; ++ ++ if (push_element (parser, ELEMENT_CHECK) == NULL) ++ { ++ BUS_SET_OOM (error); ++ return FALSE; ++ } ++ + return TRUE; + } + else +@@ -2284,6 +2329,7 @@ bus_config_parser_end_element (BusConfigParser *parser, + case ELEMENT_POLICY: + case ELEMENT_ALLOW: + case ELEMENT_DENY: ++ case ELEMENT_CHECK: + case ELEMENT_FORK: + case ELEMENT_SYSLOG: + case ELEMENT_KEEP_UMASK: +@@ -2600,6 +2646,7 @@ bus_config_parser_content (BusConfigParser *parser, + case ELEMENT_POLICY: + case ELEMENT_ALLOW: + case ELEMENT_DENY: ++ case ELEMENT_CHECK: + case ELEMENT_FORK: + case ELEMENT_SYSLOG: + case ELEMENT_KEEP_UMASK: +@@ -3127,6 +3174,8 @@ do_load (const DBusString *full_path, + dbus_error_init (&error); + + parser = bus_config_load (full_path, TRUE, NULL, &error); ++ if (dbus_error_is_set (&error)) ++ _dbus_verbose ("Failed to load file: %s\n", error.message); + if (parser == NULL) + { + _DBUS_ASSERT_ERROR_IS_SET (&error); +@@ -3359,6 +3408,7 @@ elements_equal (const Element *a, + case ELEMENT_LISTEN: + case ELEMENT_AUTH: + case ELEMENT_ALLOW: ++ case ELEMENT_CHECK: + case ELEMENT_DENY: + case ELEMENT_FORK: + case ELEMENT_PIDFILE: +diff --git a/bus/connection.c b/bus/connection.c +index 53605fa..b348d42 100644 +--- a/bus/connection.c ++++ b/bus/connection.c +@@ -36,6 +36,10 @@ + #include + #include + #include ++#ifdef DBUS_ENABLE_CYNARA ++#include ++#include ++#endif + + /* Trim executed commands to this length; we want to keep logs readable */ + #define MAX_LOG_COMMAND_LEN 50 +@@ -116,6 +120,9 @@ typedef struct + + /** non-NULL if and only if this is a monitor */ + DBusList *link_in_monitors; ++#ifdef DBUS_ENABLE_CYNARA ++ char *cynara_session_id; ++#endif + } BusConnectionData; + + static dbus_bool_t bus_pending_reply_expired (BusExpireList *list, +@@ -129,8 +136,8 @@ static dbus_bool_t expire_incomplete_timeout (void *data); + + #define BUS_CONNECTION_DATA(connection) (dbus_connection_get_data ((connection), connection_data_slot)) + +-static DBusLoop* +-connection_get_loop (DBusConnection *connection) ++DBusLoop* ++bus_connection_get_loop (DBusConnection *connection) + { + BusConnectionData *d; + +@@ -354,7 +361,7 @@ add_connection_watch (DBusWatch *watch, + { + DBusConnection *connection = data; + +- return _dbus_loop_add_watch (connection_get_loop (connection), watch); ++ return _dbus_loop_add_watch (bus_connection_get_loop (connection), watch); + } + + static void +@@ -363,7 +370,7 @@ remove_connection_watch (DBusWatch *watch, + { + DBusConnection *connection = data; + +- _dbus_loop_remove_watch (connection_get_loop (connection), watch); ++ _dbus_loop_remove_watch (bus_connection_get_loop (connection), watch); + } + + static void +@@ -372,7 +379,7 @@ toggle_connection_watch (DBusWatch *watch, + { + DBusConnection *connection = data; + +- _dbus_loop_toggle_watch (connection_get_loop (connection), watch); ++ _dbus_loop_toggle_watch (bus_connection_get_loop (connection), watch); + } + + static dbus_bool_t +@@ -381,7 +388,7 @@ add_connection_timeout (DBusTimeout *timeout, + { + DBusConnection *connection = data; + +- return _dbus_loop_add_timeout (connection_get_loop (connection), timeout); ++ return _dbus_loop_add_timeout (bus_connection_get_loop (connection), timeout); + } + + static void +@@ -390,7 +397,7 @@ remove_connection_timeout (DBusTimeout *timeout, + { + DBusConnection *connection = data; + +- _dbus_loop_remove_timeout (connection_get_loop (connection), timeout); ++ _dbus_loop_remove_timeout (bus_connection_get_loop (connection), timeout); + } + + static void +@@ -448,6 +455,10 @@ free_connection_data (void *data) + + dbus_free (d->name); + ++#ifdef DBUS_ENABLE_CYNARA ++ free (d->cynara_session_id); ++#endif ++ + dbus_free (d); + } + +@@ -1078,6 +1089,22 @@ bus_connection_get_policy (DBusConnection *connection) + return d->policy; + } + ++#ifdef DBUS_ENABLE_CYNARA ++const char *bus_connection_get_cynara_session_id (DBusConnection *connection) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA (connection); ++ _dbus_assert (d != NULL); ++ ++ if (d->cynara_session_id == NULL) ++ { ++ unsigned long pid; ++ if (dbus_connection_get_unix_process_id(connection, &pid)) ++ d->cynara_session_id = cynara_session_from_pid(pid); ++ } ++ return d->cynara_session_id; ++} ++#endif ++ + static dbus_bool_t + foreach_active (BusConnections *connections, + BusConnectionForeachFunction function, +@@ -2333,6 +2360,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + DBusMessage *message) + { + DBusError error = DBUS_ERROR_INIT; ++ BusResult res; + + /* We have to set the sender to the driver, and have + * to check security policy since it was not done in +@@ -2370,10 +2398,11 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + * if we're actively capturing messages, it's nice to log that we + * tried to send it and did not allow ourselves to do so. + */ +- if (!bus_context_check_security_policy (bus_transaction_get_context (transaction), +- transaction, +- NULL, connection, connection, +- message, NULL, &error)) ++ res = bus_context_check_security_policy (bus_transaction_get_context (transaction), ++ transaction, ++ NULL, connection, connection, message, NULL, ++ &error, NULL); ++ if (res == BUS_RESULT_FALSE) + { + if (!bus_transaction_capture_error_reply (transaction, connection, + &error, message)) +@@ -2388,6 +2417,12 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + dbus_error_free (&error); + return TRUE; + } ++ else if (res == BUS_RESULT_LATER) ++ { ++ _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n"); ++ dbus_error_free (&error); ++ return TRUE; ++ } + + return bus_transaction_send (transaction, connection, message); + } +diff --git a/bus/connection.h b/bus/connection.h +index 9e253ae..71078ea 100644 +--- a/bus/connection.h ++++ b/bus/connection.h +@@ -31,6 +31,7 @@ + typedef dbus_bool_t (* BusConnectionForeachFunction) (DBusConnection *connection, + void *data); + ++DBusLoop* bus_connection_get_loop (DBusConnection *connection); + + BusConnections* bus_connections_new (BusContext *context); + BusConnections* bus_connections_ref (BusConnections *connections); +@@ -124,6 +125,9 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection, + BusTransaction *transaction, + DBusList **rules, + DBusError *error); ++#ifdef DBUS_ENABLE_CYNARA ++const char *bus_connection_get_cynara_session_id (DBusConnection *connection); ++#endif + + /* transaction API so we can send or not send a block of messages as a whole */ + +diff --git a/bus/cynara.c b/bus/cynara.c +new file mode 100644 +index 0000000..57a4c45 +--- /dev/null ++++ b/bus/cynara.c +@@ -0,0 +1,374 @@ ++/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ ++/* cynara.c Cynara runtime privilege checking ++ * ++ * Copyright (c) 2014 Samsung Electronics, Ltd. ++ * ++ * Licensed under the Academic Free License version 2.1 ++ * ++ * 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 ++ * ++ */ ++ ++#include ++#include "cynara.h" ++#include "check.h" ++#include "utils.h" ++ ++#include ++ ++#include ++#include ++#include ++#include ++#ifdef DBUS_ENABLE_CYNARA ++#include ++#endif ++ ++ ++#ifdef DBUS_ENABLE_CYNARA ++typedef struct BusCynara ++{ ++ int refcount; ++ ++ BusContext *context; ++ BusCheck *check; ++ cynara_async *cynara; ++ DBusWatch *cynara_watch; ++} BusCynara; ++ ++#define USE_CYNARA_CACHE 1 ++#ifdef USE_CYNARA_CACHE ++#define CYNARA_CACHE_SIZE 1000 ++#endif ++ ++static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch, ++ unsigned int flags, ++ void *data); ++ ++static void status_callback(int old_fd, ++ int new_fd, ++ cynara_async_status status, ++ void *user_status_data); ++static void bus_cynara_check_response_callback (cynara_check_id check_id, ++ cynara_async_call_cause cause, ++ int response, ++ void *user_response_data); ++#endif ++ ++ ++BusCynara * ++bus_cynara_new(BusCheck *check, DBusError *error) ++{ ++#ifdef DBUS_ENABLE_CYNARA ++ BusContext *context; ++ BusCynara *cynara; ++ cynara_async_configuration *conf = NULL; ++ int ret; ++ ++ cynara = dbus_new(BusCynara, 1); ++ if (cynara == NULL) ++ { ++ BUS_SET_OOM(error); ++ return NULL; ++ } ++ ++ context = bus_check_get_context(check); ++ ++ cynara->refcount = 1; ++ cynara->check = check; ++ cynara->context = context; ++ cynara->cynara_watch = NULL; ++ ++ ret = cynara_async_configuration_create(&conf); ++ if (ret != CYNARA_API_SUCCESS) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration"); ++ goto out; ++ } ++ ++#ifdef CYNARA_CACHE_SIZE ++ ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE); ++ if (ret != CYNARA_API_SUCCESS) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size"); ++ goto out; ++ } ++#endif ++ ++ ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara); ++ if (ret != CYNARA_API_SUCCESS) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client"); ++ goto out; ++ } ++ ++out: ++ cynara_async_configuration_destroy(conf); ++ if (ret != CYNARA_API_SUCCESS) ++ { ++ dbus_free(cynara); ++ return NULL; ++ } ++ ++ return cynara; ++#else ++ return NULL; ++#endif ++} ++ ++BusCynara * ++bus_cynara_ref (BusCynara *cynara) ++{ ++#ifdef DBUS_ENABLE_CYNARA ++ _dbus_assert (cynara->refcount > 0); ++ cynara->refcount += 1; ++ ++ return cynara; ++#else ++ return NULL; ++#endif ++} ++ ++void ++bus_cynara_unref (BusCynara *cynara) ++{ ++#ifdef DBUS_ENABLE_CYNARA ++ _dbus_assert (cynara->refcount > 0); ++ ++ cynara->refcount -= 1; ++ ++ if (cynara->refcount == 0) ++ { ++ cynara_async_finish(cynara->cynara); ++ dbus_free(cynara); ++ } ++#endif ++} ++ ++BusResult ++bus_cynara_check_privilege (BusCynara *cynara, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *privilege, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message_param) ++{ ++#ifdef DBUS_ENABLE_CYNARA ++ int result; ++ unsigned long uid; ++ char *label; ++ const char *session_id; ++ char user[32]; ++ cynara_check_id check_id; ++ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; ++ BusDeferredMessage *deferred_message; ++ BusResult ret; ++ ++ _dbus_assert(connection != NULL); ++ ++ if (dbus_connection_get_unix_user(connection, &uid) == FALSE) ++ return BUS_RESULT_FALSE; ++ ++ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) ++ { ++ _dbus_warn("Failed to obtain security label for connection\n"); ++ return BUS_RESULT_FALSE; ++ } ++ ++ session_id = bus_connection_get_cynara_session_id (connection); ++ if (session_id == NULL) ++ { ++ ret = BUS_RESULT_FALSE; ++ goto out; ++ } ++ ++ snprintf(user, sizeof(user), "%lu", uid); ++ ++#if USE_CYNARA_CACHE ++ result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege); ++#else ++ result = CYNARA_API_CACHE_MISS; ++#endif ++ ++ switch (result) ++ { ++ case CYNARA_API_ACCESS_ALLOWED: ++ _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", ++ label, session_id, user, privilege); ++ ret = BUS_RESULT_TRUE; ++ break; ++ ++ case CYNARA_API_ACCESS_DENIED: ++ _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", ++ label, session_id, user, privilege); ++ ret = BUS_RESULT_FALSE; ++ break; ++ ++ case CYNARA_API_CACHE_MISS: ++ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, ++ proposed_recipient, BUS_RESULT_LATER); ++ if (deferred_message == NULL) ++ { ++ _dbus_verbose("Failed to allocate memory for deferred message\n"); ++ ret = BUS_RESULT_FALSE; ++ goto out; ++ } ++ ++ /* callback is supposed to unref deferred_message*/ ++ result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id, ++ &bus_cynara_check_response_callback, deferred_message); ++ if (result == CYNARA_API_SUCCESS) ++ { ++ _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u " ++ "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message); ++ if (deferred_message_param != NULL) ++ *deferred_message_param = deferred_message; ++ ret = BUS_RESULT_LATER; ++ } ++ else ++ { ++ _dbus_verbose("Error on cynara request create: %i\n", result); ++ bus_deferred_message_unref(deferred_message); ++ ret = BUS_RESULT_FALSE; ++ } ++ break; ++ default: ++ _dbus_verbose("Error when accessing Cynara cache: %i\n", result); ++ ret = BUS_RESULT_FALSE; ++ } ++out: ++ dbus_free(label); ++ return ret; ++ ++#else ++ return BUS_RESULT_FALSE; ++#endif ++} ++ ++ ++ ++#ifdef DBUS_ENABLE_CYNARA ++static void ++status_callback(int old_fd, int new_fd, cynara_async_status status, ++ void *user_status_data) ++{ ++ BusCynara *cynara = (BusCynara *)user_status_data; ++ DBusLoop *loop = bus_context_get_loop(cynara->context); ++ ++ if (cynara->cynara_watch != NULL) ++ { ++ _dbus_loop_remove_watch(loop, cynara->cynara_watch); ++ _dbus_watch_invalidate(cynara->cynara_watch); ++ _dbus_watch_unref(cynara->cynara_watch); ++ cynara->cynara_watch = NULL; ++ } ++ ++ if (new_fd != -1) ++ { ++ unsigned int flags; ++ DBusWatch *watch; ++ ++ switch (status) ++ { ++ case CYNARA_STATUS_FOR_READ: ++ flags = DBUS_WATCH_READABLE; ++ break; ++ case CYNARA_STATUS_FOR_RW: ++ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; ++ break; ++ default: ++ /* Cynara passed unknown status - warn and add RW watch */ ++ _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status); ++ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; ++ break; ++ } ++ ++ watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL); ++ if (watch != NULL) ++ { ++ if (_dbus_loop_add_watch(loop, watch) == TRUE) ++ { ++ cynara->cynara_watch = watch; ++ return; ++ } ++ ++ _dbus_watch_invalidate(watch); ++ _dbus_watch_unref(watch); ++ } ++ ++ /* It seems like not much can be done at this point. Cynara events won't be processed ++ * until next Cynara function call triggering status callback */ ++ _dbus_verbose("Failed to add dbus watch\n"); ++ } ++} ++ ++static dbus_bool_t ++bus_cynara_watch_callback(DBusWatch *watch, ++ unsigned int flags, ++ void *data) ++{ ++ BusCynara *cynara = (BusCynara *)data; ++ int result = cynara_async_process(cynara->cynara); ++ if (result != CYNARA_API_SUCCESS) ++ _dbus_verbose("cynara_async_process returned %d\n", result); ++ ++ return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE; ++} ++ ++static inline const char * ++call_cause_to_string(cynara_async_call_cause cause) ++{ ++ switch (cause) ++ { ++ case CYNARA_CALL_CAUSE_ANSWER: ++ return "ANSWER"; ++ case CYNARA_CALL_CAUSE_CANCEL: ++ return "CANCEL"; ++ case CYNARA_CALL_CAUSE_FINISH: ++ return "FINSIH"; ++ case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE: ++ return "SERVICE NOT AVAILABLE"; ++ default: ++ return "INVALID"; ++ } ++} ++ ++static void ++bus_cynara_check_response_callback (cynara_check_id check_id, ++ cynara_async_call_cause cause, ++ int response, ++ void *user_response_data) ++{ ++ BusDeferredMessage *deferred_message = user_response_data; ++ BusResult result; ++ ++ _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n", ++ (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data); ++ ++ if (deferred_message == NULL) ++ return; ++ ++ if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED) ++ result = BUS_RESULT_TRUE; ++ else ++ result = BUS_RESULT_FALSE; ++ ++ bus_deferred_message_response_received(deferred_message, result); ++ bus_deferred_message_unref(deferred_message); ++} ++ ++#endif /* DBUS_ENABLE_CYNARA */ +diff --git a/bus/cynara.h b/bus/cynara.h +new file mode 100644 +index 0000000..c4728bb +--- /dev/null ++++ b/bus/cynara.h +@@ -0,0 +1,37 @@ ++/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ ++/* cynara.h Cynara runtime privilege checking ++ * ++ * Copyright (c) 2014 Samsung Electronics, Ltd. ++ * ++ * Licensed under the Academic Free License version 2.1 ++ * ++ * 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 ++ * ++ */ ++ ++#include "bus.h" ++#include "check.h" ++ ++BusCynara *bus_cynara_new (BusCheck *check, DBusError *error); ++BusCynara *bus_cynara_ref (BusCynara *cynara); ++void bus_cynara_unref (BusCynara *cynara); ++BusResult bus_cynara_check_privilege (BusCynara *cynara, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *privilege, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message); +diff --git a/bus/dispatch.c b/bus/dispatch.c +index 19228be..d3867f7 100644 +--- a/bus/dispatch.c ++++ b/bus/dispatch.c +@@ -25,6 +25,7 @@ + + #include + #include "dispatch.h" ++#include "check.h" + #include "connection.h" + #include "driver.h" + #include "services.h" +@@ -64,14 +65,18 @@ send_one_message (DBusConnection *connection, + DBusError *error) + { + DBusError stack_error = DBUS_ERROR_INIT; ++ BusDeferredMessage *deferred_message; ++ BusResult result; + +- if (!bus_context_check_security_policy (context, transaction, ++ result = bus_context_check_security_policy (context, transaction, + sender, + addressed_recipient, + connection, + message, + NULL, +- &stack_error)) ++ &stack_error, ++ &deferred_message); ++ if (result != BUS_RESULT_TRUE) + { + if (!bus_transaction_capture_error_reply (transaction, sender, + &stack_error, message)) +@@ -130,6 +135,8 @@ bus_dispatch_matches (BusTransaction *transaction, + BusMatchmaker *matchmaker; + DBusList *link; + BusContext *context; ++ BusDeferredMessage *deferred_message; ++ BusResult res; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + +@@ -145,11 +152,20 @@ bus_dispatch_matches (BusTransaction *transaction, + /* First, send the message to the addressed_recipient, if there is one. */ + if (addressed_recipient != NULL) + { +- if (!bus_context_check_security_policy (context, transaction, +- sender, addressed_recipient, +- addressed_recipient, +- message, NULL, error)) ++ res = bus_context_check_security_policy (context, transaction, ++ sender, addressed_recipient, ++ addressed_recipient, ++ message, NULL, error, ++ &deferred_message); ++ if (res == BUS_RESULT_FALSE) + return FALSE; ++ else if (res == BUS_RESULT_LATER) ++ { ++ dbus_set_error (error, ++ DBUS_ERROR_ACCESS_DENIED, ++ "Rejecting message because time is needed to check security policy"); ++ return FALSE; ++ } + + if (dbus_message_contains_unix_fds (message) && + !dbus_connection_can_send_type (addressed_recipient, +@@ -374,19 +390,31 @@ bus_dispatch (DBusConnection *connection, + if (service_name && + strcmp (service_name, DBUS_SERVICE_DBUS) == 0) /* to bus driver */ + { ++ BusDeferredMessage *deferred_message; ++ BusResult res; ++ + if (!bus_transaction_capture (transaction, connection, NULL, message)) + { + BUS_SET_OOM (&error); + goto out; + } + +- if (!bus_context_check_security_policy (context, transaction, +- connection, NULL, NULL, message, +- NULL, &error)) ++ res = bus_context_check_security_policy (context, transaction, ++ connection, NULL, NULL, message, NULL, ++ &error, &deferred_message); ++ if (res == BUS_RESULT_FALSE) + { + _dbus_verbose ("Security policy rejected message\n"); + goto out; + } ++ else if (res == BUS_RESULT_LATER) ++ { ++ dbus_set_error (&error, ++ DBUS_ERROR_ACCESS_DENIED, ++ "Rejecting message because time is needed to check security policy"); ++ _dbus_verbose ("Security policy needs time to check policy. Dropping message\n"); ++ goto out; ++ } + + _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS); + if (!bus_driver_handle_message (connection, transaction, message, &error)) +diff --git a/bus/driver.h b/bus/driver.h +index ac1289d..a7297ad 100644 +--- a/bus/driver.h ++++ b/bus/driver.h +@@ -66,5 +66,7 @@ dbus_bool_t bus_driver_send_ack_reply (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); ++dbus_bool_t bus_driver_check_message_is_for_us (DBusMessage *message, ++ DBusError *error); + + #endif /* BUS_DRIVER_H */ +diff --git a/bus/policy.c b/bus/policy.c +index a37be80..7de92c6 100644 +--- a/bus/policy.c ++++ b/bus/policy.c +@@ -22,6 +22,7 @@ + */ + + #include ++#include "check.h" + #include "policy.h" + #include "services.h" + #include "test.h" +@@ -33,7 +34,7 @@ + + BusPolicyRule* + bus_policy_rule_new (BusPolicyRuleType type, +- dbus_bool_t allow) ++ BusPolicyRuleAccess access) + { + BusPolicyRule *rule; + +@@ -43,7 +44,7 @@ bus_policy_rule_new (BusPolicyRuleType type, + + rule->type = type; + rule->refcount = 1; +- rule->allow = allow; ++ rule->access = access; + + switch (rule->type) + { +@@ -55,18 +56,19 @@ bus_policy_rule_new (BusPolicyRuleType type, + break; + case BUS_POLICY_RULE_SEND: + rule->d.send.message_type = DBUS_MESSAGE_TYPE_INVALID; +- + /* allow rules default to TRUE (only requested replies allowed) ++ * check rules default to TRUE (only requested replies are checked) + * deny rules default to FALSE (only unrequested replies denied) + */ +- rule->d.send.requested_reply = rule->allow; ++ rule->d.send.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY; + break; + case BUS_POLICY_RULE_RECEIVE: + rule->d.receive.message_type = DBUS_MESSAGE_TYPE_INVALID; + /* allow rules default to TRUE (only requested replies allowed) ++ * check rules default to TRUE (only requested replies are checked) + * deny rules default to FALSE (only unrequested replies denied) + */ +- rule->d.receive.requested_reply = rule->allow; ++ rule->d.receive.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY; + break; + case BUS_POLICY_RULE_OWN: + break; +@@ -122,7 +124,8 @@ bus_policy_rule_unref (BusPolicyRule *rule) + default: + _dbus_assert_not_reached ("invalid rule"); + } +- ++ ++ dbus_free (rule->privilege); + dbus_free (rule); + } + } +@@ -435,7 +438,10 @@ list_allows_user (dbus_bool_t def, + else + continue; + +- allowed = rule->allow; ++ /* We don't intend to support and ++ rules. They are treated like deny. ++ */ ++ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; + } + + return allowed; +@@ -873,18 +879,23 @@ bus_client_policy_append_rule (BusClientPolicy *policy, + return TRUE; + } + +-dbus_bool_t +-bus_client_policy_check_can_send (BusClientPolicy *policy, +- BusRegistry *registry, +- dbus_bool_t requested_reply, +- DBusConnection *receiver, +- DBusMessage *message, +- dbus_int32_t *toggles, +- dbus_bool_t *log) ++BusResult ++bus_client_policy_check_can_send (DBusConnection *sender, ++ BusClientPolicy *policy, ++ BusRegistry *registry, ++ dbus_bool_t requested_reply, ++ DBusConnection *addressed_recipient, ++ DBusConnection *receiver, ++ DBusMessage *message, ++ dbus_int32_t *toggles, ++ dbus_bool_t *log, ++ const char **privilege_param, ++ BusDeferredMessage **deferred_message) + { + DBusList *link; +- dbus_bool_t allowed; +- ++ BusResult result; ++ const char *privilege; ++ + /* policy->rules is in the order the rules appeared + * in the config file, i.e. last rule that applies wins + */ +@@ -892,7 +903,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, + _dbus_verbose (" (policy) checking send rules\n"); + *toggles = 0; + +- allowed = FALSE; ++ result = BUS_RESULT_FALSE; + link = _dbus_list_get_first_link (&policy->rules); + while (link != NULL) + { +@@ -923,13 +934,14 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, + /* If it's a reply, the requested_reply flag kicks in */ + if (dbus_message_get_reply_serial (message) != 0) + { +- /* for allow, requested_reply=true means the rule applies +- * only when reply was requested. requested_reply=false means +- * always allow. ++ /* for allow or check requested_reply=true means the rule applies ++ * only when reply was requested. requested_reply=false means the ++ * rule always applies + */ +- if (!requested_reply && rule->allow && rule->d.send.requested_reply && !rule->d.send.eavesdrop) ++ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop) + { +- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n"); ++ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n", ++ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check"); + continue; + } + +@@ -937,7 +949,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, + * when the reply was not requested. requested_reply=true means the + * rule always applies. + */ +- if (requested_reply && !rule->allow && !rule->d.send.requested_reply) ++ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.send.requested_reply) + { + _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n"); + continue; +@@ -960,13 +972,15 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, + /* The interface is optional in messages. For allow rules, if the message + * has no interface we want to skip the rule (and thus not allow); + * for deny rules, if the message has no interface we want to use the +- * rule (and thus deny). ++ * rule (and thus deny). Check rules are meant to be used like allow ++ * rules (they can grant access, but not remove it), so we treat it like ++ * allow here. + */ + dbus_bool_t no_interface; + + no_interface = dbus_message_get_interface (message) == NULL; + +- if ((no_interface && rule->allow) || ++ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) || + (!no_interface && + strcmp (dbus_message_get_interface (message), + rule->d.send.interface) != 0)) +@@ -1079,33 +1093,64 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, + } + + /* Use this rule */ +- allowed = rule->allow; ++ switch (rule->access) ++ { ++ case BUS_POLICY_RULE_ACCESS_ALLOW: ++ result = BUS_RESULT_TRUE; ++ break; ++ case BUS_POLICY_RULE_ACCESS_DENY: ++ default: ++ result = BUS_RESULT_FALSE; ++ break; ++ case BUS_POLICY_RULE_ACCESS_CHECK: ++ result = BUS_RESULT_LATER; ++ privilege = rule->privilege; ++ break; ++ } ++ + *log = rule->d.send.log; + (*toggles)++; + +- _dbus_verbose (" (policy) used rule, allow now = %d\n", +- allowed); ++ _dbus_verbose (" (policy) used rule, result now = %d\n", ++ (int)(intptr_t)result); + } + +- return allowed; ++ if (result == BUS_RESULT_LATER) ++ { ++ BusContext *context = bus_connection_get_context(sender); ++ BusCheck *check = bus_context_get_check(context); ++ ++ result = bus_check_privilege(check, message, sender, addressed_recipient, receiver, ++ privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message); ++ } ++ else ++ privilege = NULL; ++ ++ if (privilege_param != NULL) ++ *privilege_param = privilege; ++ ++ return result; + } + + /* See docs on what the args mean on bus_context_check_security_policy() + * comment + */ +-dbus_bool_t +-bus_client_policy_check_can_receive (BusClientPolicy *policy, +- BusRegistry *registry, +- dbus_bool_t requested_reply, +- DBusConnection *sender, +- DBusConnection *addressed_recipient, +- DBusConnection *proposed_recipient, +- DBusMessage *message, +- dbus_int32_t *toggles) ++BusResult ++bus_client_policy_check_can_receive (BusClientPolicy *policy, ++ BusRegistry *registry, ++ dbus_bool_t requested_reply, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ DBusMessage *message, ++ dbus_int32_t *toggles, ++ const char **privilege_param, ++ BusDeferredMessage **deferred_message) + { + DBusList *link; +- dbus_bool_t allowed; + dbus_bool_t eavesdropping; ++ BusResult result; ++ const char *privilege; + + eavesdropping = + addressed_recipient != proposed_recipient && +@@ -1118,7 +1163,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + _dbus_verbose (" (policy) checking receive rules, eavesdropping = %d\n", eavesdropping); + *toggles = 0; + +- allowed = FALSE; ++ result = BUS_RESULT_FALSE; + link = _dbus_list_get_first_link (&policy->rules); + while (link != NULL) + { +@@ -1141,19 +1186,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + } + } + +- /* for allow, eavesdrop=false means the rule doesn't apply when +- * eavesdropping. eavesdrop=true means always allow. ++ ++ /* for allow or check, eavesdrop=false means the rule doesn't apply when ++ * eavesdropping. eavesdrop=true means the rule always applies + */ +- if (eavesdropping && rule->allow && !rule->d.receive.eavesdrop) ++ if (eavesdropping && rule->access != BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.eavesdrop) + { +- _dbus_verbose (" (policy) skipping allow rule since it doesn't apply to eavesdropping\n"); ++ _dbus_verbose (" (policy) skipping %s rule since it doesn't apply to eavesdropping\n", ++ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check"); + continue; + } + + /* for deny, eavesdrop=true means the rule applies only when + * eavesdropping; eavesdrop=false means always deny. + */ +- if (!eavesdropping && !rule->allow && rule->d.receive.eavesdrop) ++ if (!eavesdropping && rule->access == BUS_POLICY_RULE_ACCESS_DENY && rule->d.receive.eavesdrop) + { + _dbus_verbose (" (policy) skipping deny rule since it only applies to eavesdropping\n"); + continue; +@@ -1162,13 +1209,14 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + /* If it's a reply, the requested_reply flag kicks in */ + if (dbus_message_get_reply_serial (message) != 0) + { +- /* for allow, requested_reply=true means the rule applies +- * only when reply was requested. requested_reply=false means +- * always allow. ++ /* for allow or check requested_reply=true means the rule applies ++ * only when reply was requested. requested_reply=false means the ++ * rule always applies + */ +- if (!requested_reply && rule->allow && rule->d.receive.requested_reply && !rule->d.receive.eavesdrop) ++ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop) + { +- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n"); ++ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n", ++ rule->access == BUS_POLICY_RULE_ACCESS_DENY ? "allow" : "deny"); + continue; + } + +@@ -1176,7 +1224,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + * when the reply was not requested. requested_reply=true means the + * rule always applies. + */ +- if (requested_reply && !rule->allow && !rule->d.receive.requested_reply) ++ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.requested_reply) + { + _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n"); + continue; +@@ -1199,13 +1247,13 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + /* The interface is optional in messages. For allow rules, if the message + * has no interface we want to skip the rule (and thus not allow); + * for deny rules, if the message has no interface we want to use the +- * rule (and thus deny). ++ * rule (and thus deny). Check rules are treated like allow rules. + */ + dbus_bool_t no_interface; + + no_interface = dbus_message_get_interface (message) == NULL; + +- if ((no_interface && rule->allow) || ++ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) || + (!no_interface && + strcmp (dbus_message_get_interface (message), + rule->d.receive.interface) != 0)) +@@ -1295,14 +1343,43 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + } + + /* Use this rule */ +- allowed = rule->allow; ++ switch (rule->access) ++ { ++ case BUS_POLICY_RULE_ACCESS_ALLOW: ++ result = BUS_RESULT_TRUE; ++ break; ++ case BUS_POLICY_RULE_ACCESS_DENY: ++ default: ++ result = BUS_RESULT_FALSE; ++ break; ++ case BUS_POLICY_RULE_ACCESS_CHECK: ++ result = BUS_RESULT_LATER; ++ privilege = rule->privilege; ++ break; ++ } ++ + (*toggles)++; + +- _dbus_verbose (" (policy) used rule, allow now = %d\n", +- allowed); ++ _dbus_verbose (" (policy) used rule, result now = %d\n", ++ (int)(intptr_t)result); + } + +- return allowed; ++ ++ if (result == BUS_RESULT_LATER) ++ { ++ BusContext *context = bus_connection_get_context(proposed_recipient); ++ BusCheck *check = bus_context_get_check(context); ++ ++ result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient, ++ privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message); ++ } ++ else ++ privilege = NULL; ++ ++ if (privilege_param != NULL) ++ *privilege_param = privilege; ++ ++ return result; + } + + +@@ -1354,7 +1431,7 @@ bus_rules_check_can_own (DBusList *rules, + } + + /* Use this rule */ +- allowed = rule->allow; ++ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; + } + + return allowed; +diff --git a/bus/policy.h b/bus/policy.h +index ec43ffa..f839d23 100644 +--- a/bus/policy.h ++++ b/bus/policy.h +@@ -46,6 +46,14 @@ typedef enum + BUS_POLICY_TRISTATE_TRUE + } BusPolicyTristate; + ++typedef enum ++{ ++ BUS_POLICY_RULE_ACCESS_DENY, ++ BUS_POLICY_RULE_ACCESS_ALLOW, ++ /** runtime check resulting in allow or deny */ ++ BUS_POLICY_RULE_ACCESS_CHECK ++} BusPolicyRuleAccess; ++ + /** determines whether the rule affects a connection, or some global item */ + #define BUS_POLICY_RULE_IS_PER_CLIENT(rule) (!((rule)->type == BUS_POLICY_RULE_USER || \ + (rule)->type == BUS_POLICY_RULE_GROUP)) +@@ -56,8 +64,9 @@ struct BusPolicyRule + + BusPolicyRuleType type; + +- unsigned int allow : 1; /**< #TRUE if this allows, #FALSE if it denies */ +- ++ unsigned int access : 2; /**< BusPolicyRuleAccess */ ++ char *privilege; /**< for BUS_POLICY_RULE_ACCESS_CHECK */ ++ + union + { + struct +@@ -118,7 +127,7 @@ struct BusPolicyRule + }; + + BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type, +- dbus_bool_t allow); ++ BusPolicyRuleAccess access); + BusPolicyRule* bus_policy_rule_ref (BusPolicyRule *rule); + void bus_policy_rule_unref (BusPolicyRule *rule); + +@@ -152,21 +161,27 @@ dbus_bool_t bus_policy_merge (BusPolicy *policy, + BusClientPolicy* bus_client_policy_new (void); + BusClientPolicy* bus_client_policy_ref (BusClientPolicy *policy); + void bus_client_policy_unref (BusClientPolicy *policy); +-dbus_bool_t bus_client_policy_check_can_send (BusClientPolicy *policy, ++BusResult bus_client_policy_check_can_send (DBusConnection *sender, ++ BusClientPolicy *policy, + BusRegistry *registry, + dbus_bool_t requested_reply, ++ DBusConnection *addressed_recipient, + DBusConnection *receiver, + DBusMessage *message, + dbus_int32_t *toggles, +- dbus_bool_t *log); +-dbus_bool_t bus_client_policy_check_can_receive (BusClientPolicy *policy, ++ dbus_bool_t *log, ++ const char **privilege_param, ++ BusDeferredMessage **deferred_message); ++BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy, + BusRegistry *registry, + dbus_bool_t requested_reply, + DBusConnection *sender, + DBusConnection *addressed_recipient, + DBusConnection *proposed_recipient, + DBusMessage *message, +- dbus_int32_t *toggles); ++ dbus_int32_t *toggles, ++ const char **privilege_param, ++ BusDeferredMessage **deferred_message); + dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy, + const DBusString *service_name); + dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy, +diff --git a/configure.ac b/configure.ac +index d1e3a29..11b5ffd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1742,6 +1742,17 @@ AC_ARG_ENABLE([user-session], + AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION], + [test "x$enable_user_session" = xyes]) + ++#enable cynara integration ++AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no]) ++if test "x$enable_cynara" = xyes; then ++ PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0], ++ [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])], ++ [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])]) ++fi ++ ++AC_SUBST([CYNARA_CFLAGS]) ++AC_SUBST([CYNARA_LIBS]) ++ + AC_CONFIG_FILES([ + Doxyfile + dbus/Version +@@ -1824,6 +1835,7 @@ echo " + Building bus stats API: ${enable_stats} + Building SELinux support: ${have_selinux} + Building AppArmor support: ${have_apparmor} ++ Building Cynara support: ${enable_cynara} + Building inotify support: ${have_inotify} + Building kqueue support: ${have_kqueue} + Building systemd support: ${have_systemd} +diff --git a/test/Makefile.am b/test/Makefile.am +index af1e13b..e6f50e1 100644 +--- a/test/Makefile.am ++++ b/test/Makefile.am +@@ -439,6 +439,7 @@ in_data = \ + data/valid-config-files/debug-allow-all.conf.in \ + data/valid-config-files/finite-timeout.conf.in \ + data/valid-config-files/forbidding.conf.in \ ++ data/valid-config-files/debug-check-some.conf.in \ + data/valid-config-files/incoming-limit.conf.in \ + data/valid-config-files/max-completed-connections.conf.in \ + data/valid-config-files/max-connections-per-user.conf.in \ +diff --git a/test/data/invalid-config-files/badcheck-1.conf b/test/data/invalid-config-files/badcheck-1.conf +new file mode 100644 +index 0000000..fad9f50 +--- /dev/null ++++ b/test/data/invalid-config-files/badcheck-1.conf +@@ -0,0 +1,9 @@ ++ ++ ++ mybususer ++ unix:path=/foo/bar ++ ++ ++ ++ +diff --git a/test/data/invalid-config-files/badcheck-2.conf b/test/data/invalid-config-files/badcheck-2.conf +new file mode 100644 +index 0000000..63c7ef2 +--- /dev/null ++++ b/test/data/invalid-config-files/badcheck-2.conf +@@ -0,0 +1,9 @@ ++ ++ ++ mybususer ++ unix:path=/foo/bar ++ ++ ++ ++ +diff --git a/test/data/valid-config-files/check-1.conf b/test/data/valid-config-files/check-1.conf +new file mode 100644 +index 0000000..ad71473 +--- /dev/null ++++ b/test/data/valid-config-files/check-1.conf +@@ -0,0 +1,9 @@ ++ ++ ++ mybususer ++ unix:path=/foo/bar ++ ++ ++ ++ +diff --git a/test/data/valid-config-files/debug-check-some.conf.in b/test/data/valid-config-files/debug-check-some.conf.in +new file mode 100644 +index 0000000..47ee854 +--- /dev/null ++++ b/test/data/valid-config-files/debug-check-some.conf.in +@@ -0,0 +1,18 @@ ++ ++ ++ ++ ++ debug-pipe:name=test-server ++ @TEST_LISTEN@ ++ @DBUS_TEST_DATA@/valid-service-files ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch new file mode 100644 index 000000000..bac8cf97f --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch @@ -0,0 +1,967 @@ +From c2f4ba585c777b731df6b6b8a165b6cc4dc5d639 Mon Sep 17 00:00:00 2001 +From: Jacek Bukarewicz +Date: Fri, 28 Nov 2014 12:07:39 +0100 +Subject: [PATCH 2/8] Disable message dispatching when send rule result is not + known +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When unicast message is sent to addressed recipient and policy result +is not available message dispatch from the sender is disabled. +This also means that any further messages from the given connection are +put into the incoming queue without being processed. If response is received +message dispatching is resumed. This time answer is attached to the message +which is now processed synchronously. +Receive rule result unavailability is not yet handled - such messages are +rejected. Also, if message is sent to non-addressed recipient and policy result +is unknown, message is silently dropped. + +Cherry-picked from b1b87ad9f20b2052c28431b48e81073078a745ce +by Jose Bollo. + +Updated for dbus 1.10.20 by Scott Murray and José Bollo + +Signed-off-by: José Bollo +Signed-off-by: Scott Murray +--- + bus/activation.c | 76 +++++++++++-- + bus/check.c | 109 +++++++++++++++++-- + bus/check.h | 10 ++ + bus/cynara.c | 1 - + bus/dispatch.c | 184 ++++++++++++++++++++++++++++---- + bus/dispatch.h | 2 +- + bus/driver.c | 12 ++- + dbus/dbus-connection-internal.h | 15 +++ + dbus/dbus-connection.c | 125 +++++++++++++++++++++- + dbus/dbus-list.c | 29 +++++ + dbus/dbus-list.h | 3 + + dbus/dbus-shared.h | 3 +- + 12 files changed, 528 insertions(+), 41 deletions(-) + +diff --git a/bus/activation.c b/bus/activation.c +index f9c6c62..8301b59 100644 +--- a/bus/activation.c ++++ b/bus/activation.c +@@ -32,6 +32,7 @@ + #include "services.h" + #include "test.h" + #include "utils.h" ++#include + #include + #include + #include +@@ -94,6 +95,8 @@ struct BusPendingActivationEntry + DBusConnection *connection; + + dbus_bool_t auto_activation; ++ ++ dbus_bool_t is_put_back; + }; + + typedef struct +@@ -1241,20 +1244,23 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation + BusPendingActivationEntry *entry = link->data; + DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link); + +- if (entry->auto_activation && (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection))) ++ if (entry->auto_activation && !entry->is_put_back && ++ (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection))) + { + DBusConnection *addressed_recipient; + DBusError error; ++ BusResult res; + + dbus_error_init (&error); + + addressed_recipient = bus_service_get_primary_owners_connection (service); + + /* Resume dispatching where we left off in bus_dispatch() */ +- if (!bus_dispatch_matches (transaction, +- entry->connection, +- addressed_recipient, +- entry->activation_message, &error)) ++ res = bus_dispatch_matches (transaction, ++ entry->connection, ++ addressed_recipient, ++ entry->activation_message, &error); ++ if (res == BUS_RESULT_FALSE) + { + /* If permission is denied, we just want to return the error + * to the original method invoker; in particular, we don't +@@ -1266,11 +1272,44 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation + bus_connection_send_oom_error (entry->connection, + entry->activation_message); + } +- + dbus_error_free (&error); + link = next; + continue; + } ++ else if (res == BUS_RESULT_LATER) ++ { ++ DBusList *putback_message_link = link; ++ DBusMessage *last_inserted_message = NULL; ++ ++ /* NULL entry->connection implies sending pending ActivationRequest message to systemd */ ++ if (entry->connection == NULL) ++ { ++ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly when sender is NULL"); ++ link = next; ++ continue; ++ } ++ ++ /** ++ * Getting here means that policy check result is not yet available and dispatching ++ * messages from entry->connection has been disabled. ++ * Let's put back all messages for the given connection in the incoming queue and mark ++ * this entry as put back so they are not handled twice. ++ */ ++ while (putback_message_link != NULL) ++ { ++ BusPendingActivationEntry *putback_message = putback_message_link->data; ++ if (putback_message->connection == entry->connection) ++ { ++ if (!_dbus_connection_putback_message (putback_message->connection, last_inserted_message, ++ putback_message->activation_message, &error)) ++ goto error; ++ last_inserted_message = putback_message->activation_message; ++ putback_message->is_put_back = TRUE; ++ } ++ ++ putback_message_link = _dbus_list_get_next_link(&pending_activation->entries, putback_message_link); ++ } ++ } + } + + link = next; +@@ -1287,6 +1326,19 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation + return TRUE; + + error: ++ /* remove all messages that have been put to connections' incoming queues */ ++ link = _dbus_list_get_first_link (&pending_activation->entries); ++ while (link != NULL) ++ { ++ BusPendingActivationEntry *entry = link->data; ++ if (entry->is_put_back) ++ { ++ _dbus_connection_remove_message(entry->connection, entry->activation_message); ++ entry->is_put_back = FALSE; ++ } ++ link = _dbus_list_get_next_link(&pending_activation->entries, link); ++ } ++ + return FALSE; + } + +@@ -2079,6 +2131,7 @@ bus_activation_activate_service (BusActivation *activation, + + if (service != NULL) + { ++ BusResult res; + bus_context_log (activation->context, + DBUS_SYSTEM_LOG_INFO, "Activating via systemd: service name='%s' unit='%s' requested by '%s' (%s)", + service_name, +@@ -2086,8 +2139,17 @@ bus_activation_activate_service (BusActivation *activation, + bus_connection_get_name (connection), + bus_connection_get_loginfo (connection)); + /* Wonderful, systemd is connected, let's just send the msg */ +- retval = bus_dispatch_matches (activation_transaction, NULL, ++ res = bus_dispatch_matches (activation_transaction, NULL, + systemd, message, error); ++ ++ if (res == BUS_RESULT_TRUE) ++ retval = TRUE; ++ else ++ { ++ retval = FALSE; ++ if (res == BUS_RESULT_LATER) ++ _dbus_verbose("Unexpectedly need time to check message from bus driver to systemd - dropping the message.\n"); ++ } + } + else + { +diff --git a/bus/check.c b/bus/check.c +index 5b72d31..4b8a699 100644 +--- a/bus/check.c ++++ b/bus/check.c +@@ -55,6 +55,8 @@ typedef struct BusDeferredMessage + BusCheckResponseFunc response_callback; + } BusDeferredMessage; + ++static dbus_int32_t deferred_message_data_slot = -1; ++ + BusCheck * + bus_check_new (BusContext *context, DBusError *error) + { +@@ -67,11 +69,19 @@ bus_check_new (BusContext *context, DBusError *error) + return NULL; + } + ++ if (!dbus_message_allocate_data_slot(&deferred_message_data_slot)) ++ { ++ dbus_free(check); ++ BUS_SET_OOM(error); ++ return NULL; ++ } ++ + check->refcount = 1; + check->context = context; + check->cynara = bus_cynara_new(check, error); + if (dbus_error_is_set(error)) + { ++ dbus_message_free_data_slot(&deferred_message_data_slot); + dbus_free(check); + return NULL; + } +@@ -98,6 +108,7 @@ bus_check_unref (BusCheck *check) + if (check->refcount == 0) + { + bus_cynara_unref(check->cynara); ++ dbus_message_free_data_slot(&deferred_message_data_slot); + dbus_free(check); + } + } +@@ -114,6 +125,45 @@ bus_check_get_cynara (BusCheck *check) + return check->cynara; + } + ++static void ++bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message, ++ BusResult result) ++{ ++ _dbus_verbose("bus_check_enable_dispatch_callback called deferred_message=%p\n", deferred_message); ++ ++ deferred_message->response = result; ++ _dbus_connection_enable_dispatch(deferred_message->sender); ++} ++ ++static void ++deferred_message_free_function(void *data) ++{ ++ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data; ++ bus_deferred_message_unref(deferred_message); ++} ++ ++void ++bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message) ++{ ++ _dbus_assert(deferred_message != NULL); ++ _dbus_assert(deferred_message->sender != NULL); ++ ++ if (dbus_message_get_data(deferred_message->message, deferred_message_data_slot) == NULL) ++ { ++ if (dbus_message_set_data(deferred_message->message, deferred_message_data_slot, deferred_message, ++ deferred_message_free_function)) ++ bus_deferred_message_ref(deferred_message); ++ } ++ ++ _dbus_connection_disable_dispatch(deferred_message->sender); ++ deferred_message->response_callback = bus_check_enable_dispatch_callback; ++} ++ ++#ifdef DBUS_ENABLE_EMBEDDED_TESTS ++BusResult (*bus_check_test_override) (DBusConnection *connection, ++ const char *privilege); ++#endif ++ + BusResult + bus_check_privilege (BusCheck *check, + DBusMessage *message, +@@ -124,6 +174,7 @@ bus_check_privilege (BusCheck *check, + BusDeferredMessageStatus check_type, + BusDeferredMessage **deferred_message) + { ++ BusDeferredMessage *previous_deferred_message; + BusResult result = BUS_RESULT_FALSE; + #ifdef DBUS_ENABLE_CYNARA + BusCynara *cynara; +@@ -137,16 +188,54 @@ bus_check_privilege (BusCheck *check, + return BUS_RESULT_FALSE; + } + +- /* ask policy checkers */ +-#ifdef DBUS_ENABLE_CYNARA +- cynara = bus_check_get_cynara(check); +- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, +- proposed_recipient, privilege, check_type, deferred_message); ++#ifdef DBUS_ENABLE_EMBEDDED_TESTS ++ if (bus_check_test_override) ++ return bus_check_test_override (connection, privilege); + #endif + +- if (result == BUS_RESULT_LATER && deferred_message != NULL) ++ previous_deferred_message = dbus_message_get_data(message, deferred_message_data_slot); ++ /* check if message blocked at sender's queue is being processed */ ++ if (previous_deferred_message != NULL) ++ { ++ if ((check_type & BUS_DEFERRED_MESSAGE_CHECK_SEND) && ++ !(previous_deferred_message->status & BUS_DEFERRED_MESSAGE_CHECK_SEND)) ++ { ++ /** ++ * Message has been deferred due to receive or own rule which means that sending this message ++ * is allowed - it must have been checked previously. ++ * This might happen when client calls RequestName method which depending on security ++ * policy might result in both "can_send" and "can_own" Cynara checks. ++ */ ++ result = BUS_RESULT_TRUE; ++ } ++ else ++ { ++ result = previous_deferred_message->response; ++ if (result == BUS_RESULT_LATER) ++ { ++ /* result is still not known - reuse deferred message object */ ++ if (deferred_message != NULL) ++ *deferred_message = previous_deferred_message; ++ } ++ else ++ { ++ /* result is available - we can remove deferred message from the processed message */ ++ dbus_message_set_data(message, deferred_message_data_slot, NULL, NULL); ++ } ++ } ++ } ++ else + { +- (*deferred_message)->status |= check_type; ++ /* ask policy checkers */ ++#ifdef DBUS_ENABLE_CYNARA ++ cynara = bus_check_get_cynara(check); ++ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, ++ proposed_recipient, privilege, check_type, deferred_message); ++#endif ++ if (result == BUS_RESULT_LATER && deferred_message != NULL) ++ { ++ (*deferred_message)->status |= check_type; ++ } + } + return result; + } +@@ -206,6 +295,12 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message) + } + } + ++BusDeferredMessageStatus ++bus_deferred_message_get_status (BusDeferredMessage *deferred_message) ++{ ++ return deferred_message->status; ++} ++ + void + bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + BusResult result) +diff --git a/bus/check.h b/bus/check.h +index c3fcaf9..d177549 100644 +--- a/bus/check.h ++++ b/bus/check.h +@@ -55,6 +55,7 @@ BusResult bus_check_privilege (BusCheck *check, + BusDeferredMessageStatus check_type, + BusDeferredMessage **deferred_message); + ++ + BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, + DBusConnection *sender, + DBusConnection *addressed_recipient, +@@ -65,4 +66,13 @@ BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage + void bus_deferred_message_unref (BusDeferredMessage *deferred_message); + void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + BusResult result); ++void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message); ++ ++BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message); ++ ++#ifdef DBUS_ENABLE_EMBEDDED_TESTS ++extern BusResult (*bus_check_test_override) (DBusConnection *connection, ++ const char *privilege); ++#endif ++ + #endif /* BUS_CHECK_H */ +diff --git a/bus/cynara.c b/bus/cynara.c +index 57a4c45..77aed62 100644 +--- a/bus/cynara.c ++++ b/bus/cynara.c +@@ -36,7 +36,6 @@ + #include + #endif + +- + #ifdef DBUS_ENABLE_CYNARA + typedef struct BusCynara + { +diff --git a/bus/dispatch.c b/bus/dispatch.c +index d3867f7..50a22a3 100644 +--- a/bus/dispatch.c ++++ b/bus/dispatch.c +@@ -35,6 +35,7 @@ + #include "signals.h" + #include "test.h" + #include ++#include + #include + #include + +@@ -122,7 +123,7 @@ send_one_message (DBusConnection *connection, + return TRUE; + } + +-dbus_bool_t ++BusResult + bus_dispatch_matches (BusTransaction *transaction, + DBusConnection *sender, + DBusConnection *addressed_recipient, +@@ -158,13 +159,29 @@ bus_dispatch_matches (BusTransaction *transaction, + message, NULL, error, + &deferred_message); + if (res == BUS_RESULT_FALSE) +- return FALSE; ++ return BUS_RESULT_FALSE; + else if (res == BUS_RESULT_LATER) + { +- dbus_set_error (error, +- DBUS_ERROR_ACCESS_DENIED, +- "Rejecting message because time is needed to check security policy"); +- return FALSE; ++ BusDeferredMessageStatus status; ++ status = bus_deferred_message_get_status(deferred_message); ++ ++ if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND) ++ { ++ /* send rule result not available - disable dispatching messages from the sender */ ++ bus_deferred_message_disable_sender(deferred_message); ++ return BUS_RESULT_LATER; ++ } ++ else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE) ++ { ++ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, ++ "Rejecting message because time is needed to check security policy"); ++ return BUS_RESULT_FALSE; ++ } ++ else ++ { ++ _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n"); ++ return BUS_RESULT_FALSE; ++ } + } + + if (dbus_message_contains_unix_fds (message) && +@@ -175,14 +192,14 @@ bus_dispatch_matches (BusTransaction *transaction, + DBUS_ERROR_NOT_SUPPORTED, + "Tried to send message with Unix file descriptors" + "to a client that doesn't support that."); +- return FALSE; +- } ++ return BUS_RESULT_FALSE; ++ } + + /* Dispatch the message */ + if (!bus_transaction_send (transaction, addressed_recipient, message)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + } + +@@ -197,7 +214,7 @@ bus_dispatch_matches (BusTransaction *transaction, + &recipients)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + link = _dbus_list_get_first_link (&recipients); +@@ -219,10 +236,10 @@ bus_dispatch_matches (BusTransaction *transaction, + if (dbus_error_is_set (&tmp_error)) + { + dbus_move_error (&tmp_error, error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + else +- return TRUE; ++ return BUS_RESULT_TRUE; + } + + static DBusHandlerResult +@@ -409,10 +426,12 @@ bus_dispatch (DBusConnection *connection, + } + else if (res == BUS_RESULT_LATER) + { +- dbus_set_error (&error, +- DBUS_ERROR_ACCESS_DENIED, +- "Rejecting message because time is needed to check security policy"); +- _dbus_verbose ("Security policy needs time to check policy. Dropping message\n"); ++ /* Disable dispatching messages from the sender, ++ * roll back and dispatch the message once the policy result is available */ ++ bus_deferred_message_disable_sender(deferred_message); ++ bus_transaction_cancel_and_free (transaction); ++ transaction = NULL; ++ result = DBUS_HANDLER_RESULT_LATER; + goto out; + } + +@@ -514,8 +533,14 @@ bus_dispatch (DBusConnection *connection, + * addressed_recipient == NULL), and match it against other connections' + * match rules. + */ +- if (!bus_dispatch_matches (transaction, connection, addressed_recipient, message, &error)) +- goto out; ++ if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient, ++ message, &error)) ++ { ++ /* Roll back and dispatch the message once the policy result is available */ ++ bus_transaction_cancel_and_free (transaction); ++ transaction = NULL; ++ result = DBUS_HANDLER_RESULT_LATER; ++ } + + out: + if (dbus_error_is_set (&error)) +@@ -5060,9 +5085,132 @@ bus_dispatch_test_conf_fail (const DBusString *test_data_dir, + } + #endif + ++typedef struct { ++ DBusTimeout *timeout; ++ DBusConnection *connection; ++ dbus_bool_t timedout; ++ int check_counter; ++} BusTestCheckData; ++ ++static BusTestCheckData *cdata; ++ ++static dbus_bool_t ++bus_dispatch_test_check_timeout (void *data) ++{ ++ _dbus_verbose ("timeout triggered - pretend that privilege check result is available\n"); ++ ++ /* should only happen once during the test */ ++ _dbus_assert (!cdata->timedout); ++ cdata->timedout = TRUE; ++ _dbus_connection_enable_dispatch (cdata->connection); ++ ++ /* don't call this again */ ++ _dbus_loop_remove_timeout (bus_connection_get_loop (cdata->connection), ++ cdata->timeout); ++ dbus_connection_unref (cdata->connection); ++ cdata->connection = NULL; ++ return TRUE; ++} ++ ++static BusResult ++bus_dispatch_test_check_override (DBusConnection *connection, ++ const char *privilege) ++{ ++ _dbus_verbose ("overriding privilege check %s #%d\n", privilege, cdata->check_counter); ++ cdata->check_counter++; ++ if (!cdata->timedout) ++ { ++ dbus_bool_t added; ++ ++ /* Should be the first privilege check for the "Echo" method. */ ++ _dbus_assert (cdata->check_counter == 1); ++ cdata->timeout = _dbus_timeout_new (1, bus_dispatch_test_check_timeout, ++ NULL, NULL); ++ _dbus_assert (cdata->timeout); ++ added = _dbus_loop_add_timeout (bus_connection_get_loop (connection), ++ cdata->timeout); ++ _dbus_assert (added); ++ cdata->connection = connection; ++ dbus_connection_ref (connection); ++ _dbus_connection_disable_dispatch (connection); ++ return BUS_RESULT_LATER; ++ } ++ else ++ { ++ /* Should only be checked one more time, and this time succeeds. */ ++ _dbus_assert (cdata->check_counter == 2); ++ return BUS_RESULT_TRUE; ++ } ++} ++ ++static dbus_bool_t ++bus_dispatch_test_check (const DBusString *test_data_dir) ++{ ++ const char *filename = "valid-config-files/debug-check-some.conf"; ++ BusContext *context; ++ DBusConnection *foo; ++ DBusError error; ++ dbus_bool_t result = TRUE; ++ BusTestCheckData data; ++ ++ /* save the config name for the activation helper */ ++ if (!setenv_TEST_LAUNCH_HELPER_CONFIG (test_data_dir, filename)) ++ _dbus_assert_not_reached ("no memory setting TEST_LAUNCH_HELPER_CONFIG"); ++ ++ dbus_error_init (&error); ++ ++ context = bus_context_new_test (test_data_dir, filename); ++ if (context == NULL) ++ return FALSE; ++ ++ foo = dbus_connection_open_private (TEST_DEBUG_PIPE, &error); ++ if (foo == NULL) ++ _dbus_assert_not_reached ("could not alloc connection"); ++ ++ if (!bus_setup_debug_client (foo)) ++ _dbus_assert_not_reached ("could not set up connection"); ++ ++ spin_connection_until_authenticated (context, foo); ++ ++ if (!check_hello_message (context, foo)) ++ _dbus_assert_not_reached ("hello message failed"); ++ ++ if (!check_double_hello_message (context, foo)) ++ _dbus_assert_not_reached ("double hello message failed"); ++ ++ if (!check_add_match (context, foo, "")) ++ _dbus_assert_not_reached ("AddMatch message failed"); ++ ++ /* ++ * Cause bus_check_send_privilege() to return BUS_RESULT_LATER in the ++ * first call, then BUS_RESULT_TRUE. ++ */ ++ cdata = &data; ++ memset (cdata, 0, sizeof(*cdata)); ++ bus_check_test_override = bus_dispatch_test_check_override; ++ ++ result = check_existent_service_auto_start (context, foo); ++ ++ _dbus_assert (cdata->check_counter == 2); ++ _dbus_assert (cdata->timedout); ++ _dbus_assert (cdata->timeout); ++ _dbus_assert (!cdata->connection); ++ _dbus_timeout_unref (cdata->timeout); ++ ++ kill_client_connection_unchecked (foo); ++ ++ bus_context_unref (context); ++ ++ return result; ++} ++ + dbus_bool_t + bus_dispatch_test (const DBusString *test_data_dir) + { ++ _dbus_verbose (" tests\n"); ++ if (!bus_dispatch_test_check (test_data_dir)) ++ return FALSE; ++ + /* run normal activation tests */ + _dbus_verbose ("Normal activation tests\n"); + if (!bus_dispatch_test_conf (test_data_dir, +diff --git a/bus/dispatch.h b/bus/dispatch.h +index fb5ba7a..afba6a2 100644 +--- a/bus/dispatch.h ++++ b/bus/dispatch.h +@@ -29,7 +29,7 @@ + + dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection); + void bus_dispatch_remove_connection (DBusConnection *connection); +-dbus_bool_t bus_dispatch_matches (BusTransaction *transaction, ++BusResult bus_dispatch_matches (BusTransaction *transaction, + DBusConnection *sender, + DBusConnection *recipient, + DBusMessage *message, +diff --git a/bus/driver.c b/bus/driver.c +index cd0a714..f414f64 100644 +--- a/bus/driver.c ++++ b/bus/driver.c +@@ -218,6 +218,7 @@ bus_driver_send_service_owner_changed (const char *service_name, + { + DBusMessage *message; + dbus_bool_t retval; ++ BusResult res; + const char *null_service; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -253,7 +254,16 @@ bus_driver_send_service_owner_changed (const char *service_name, + if (!bus_transaction_capture (transaction, NULL, NULL, message)) + goto oom; + +- retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); ++ res = bus_dispatch_matches (transaction, NULL, NULL, message, error); ++ if (res == BUS_RESULT_TRUE) ++ retval = TRUE; ++ else ++ { ++ retval = FALSE; ++ if (res == BUS_RESULT_LATER) ++ /* should never happen */ ++ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly"); ++ } + dbus_message_unref (message); + + return retval; +diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h +index 4835732..94b1c95 100644 +--- a/dbus/dbus-connection-internal.h ++++ b/dbus/dbus-connection-internal.h +@@ -118,6 +118,21 @@ DBUS_PRIVATE_EXPORT + dbus_bool_t _dbus_connection_get_linux_security_label (DBusConnection *connection, + char **label_p); + ++DBUS_PRIVATE_EXPORT ++void _dbus_connection_enable_dispatch (DBusConnection *connection); ++DBUS_PRIVATE_EXPORT ++void _dbus_connection_disable_dispatch (DBusConnection *connection); ++ ++DBUS_PRIVATE_EXPORT ++dbus_bool_t _dbus_connection_putback_message (DBusConnection *connection, ++ DBusMessage *after_message, ++ DBusMessage *message, ++ DBusError *error); ++ ++DBUS_PRIVATE_EXPORT ++dbus_bool_t _dbus_connection_remove_message (DBusConnection *connection, ++ DBusMessage *message); ++ + /* if DBUS_ENABLE_STATS */ + DBUS_PRIVATE_EXPORT + void _dbus_connection_get_stats (DBusConnection *connection, +diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c +index c525b6d..958968c 100644 +--- a/dbus/dbus-connection.c ++++ b/dbus/dbus-connection.c +@@ -311,7 +311,8 @@ struct DBusConnection + */ + dbus_bool_t dispatch_acquired; /**< Someone has dispatch path (can drain incoming queue) */ + dbus_bool_t io_path_acquired; /**< Someone has transport io path (can use the transport to read/write messages) */ +- ++ ++ unsigned int dispatch_disabled : 1; /**< if true, then dispatching incoming messages is stopped until enabled again */ + unsigned int shareable : 1; /**< #TRUE if libdbus owns a reference to the connection and can return it from dbus_connection_open() more than once */ + + unsigned int exit_on_disconnect : 1; /**< If #TRUE, exit after handling disconnect signal */ +@@ -439,6 +440,39 @@ _dbus_connection_wakeup_mainloop (DBusConnection *connection) + (*connection->wakeup_main_function) (connection->wakeup_main_data); + } + ++static void ++_dbus_connection_set_dispatch(DBusConnection *connection, ++ dbus_bool_t disabled) ++{ ++ CONNECTION_LOCK (connection); ++ if (connection->dispatch_disabled != disabled) ++ { ++ DBusDispatchStatus status; ++ ++ connection->dispatch_disabled = disabled; ++ status = _dbus_connection_get_dispatch_status_unlocked (connection); ++ _dbus_connection_update_dispatch_status_and_unlock (connection, status); ++ } ++ else ++ { ++ CONNECTION_UNLOCK (connection); ++ } ++} ++ ++ ++void ++_dbus_connection_enable_dispatch (DBusConnection *connection) ++{ ++ _dbus_connection_set_dispatch (connection, FALSE); ++} ++ ++void ++ _dbus_connection_disable_dispatch (DBusConnection *connection) ++{ ++ _dbus_connection_set_dispatch (connection, TRUE); ++} ++ ++ + #ifdef DBUS_ENABLE_EMBEDDED_TESTS + /** + * Gets the locks so we can examine them +@@ -4069,6 +4103,82 @@ _dbus_connection_putback_message_link_unlocked (DBusConnection *connection, + "_dbus_connection_putback_message_link_unlocked"); + } + ++dbus_bool_t ++_dbus_connection_putback_message (DBusConnection *connection, ++ DBusMessage *after_message, ++ DBusMessage *message, ++ DBusError *error) ++{ ++ DBusDispatchStatus status; ++ DBusList *message_link = _dbus_list_alloc_link (message); ++ DBusList *after_link; ++ if (message_link == NULL) ++ { ++ _DBUS_SET_OOM (error); ++ return FALSE; ++ } ++ dbus_message_ref (message); ++ ++ CONNECTION_LOCK (connection); ++ _dbus_connection_acquire_dispatch (connection); ++ HAVE_LOCK_CHECK (connection); ++ ++ after_link = _dbus_list_find_first(&connection->incoming_messages, after_message); ++ _dbus_list_insert_after_link (&connection->incoming_messages, after_link, message_link); ++ connection->n_incoming += 1; ++ ++ _dbus_verbose ("Message %p (%s %s %s '%s') put back into queue %p, %d incoming\n", ++ message_link->data, ++ dbus_message_type_to_string (dbus_message_get_type (message_link->data)), ++ dbus_message_get_interface (message_link->data) ? ++ dbus_message_get_interface (message_link->data) : ++ "no interface", ++ dbus_message_get_member (message_link->data) ? ++ dbus_message_get_member (message_link->data) : ++ "no member", ++ dbus_message_get_signature (message_link->data), ++ connection, connection->n_incoming); ++ ++ _dbus_message_trace_ref (message_link->data, -1, -1, ++ "_dbus_connection_putback_message"); ++ ++ _dbus_connection_release_dispatch (connection); ++ ++ status = _dbus_connection_get_dispatch_status_unlocked (connection); ++ _dbus_connection_update_dispatch_status_and_unlock (connection, status); ++ ++ return TRUE; ++} ++ ++dbus_bool_t ++_dbus_connection_remove_message (DBusConnection *connection, ++ DBusMessage *message) ++{ ++ DBusDispatchStatus status; ++ dbus_bool_t removed; ++ ++ CONNECTION_LOCK (connection); ++ _dbus_connection_acquire_dispatch (connection); ++ HAVE_LOCK_CHECK (connection); ++ ++ removed = _dbus_list_remove(&connection->incoming_messages, message); ++ ++ if (removed) ++ { ++ connection->n_incoming -= 1; ++ dbus_message_unref(message); ++ _dbus_verbose ("Message %p removed from incoming queue\n", message); ++ } ++ else ++ _dbus_verbose ("Message %p not found in the incoming queue\n", message); ++ ++ _dbus_connection_release_dispatch (connection); ++ ++ status = _dbus_connection_get_dispatch_status_unlocked (connection); ++ _dbus_connection_update_dispatch_status_and_unlock (connection, status); ++ return removed; ++} ++ + /** + * Returns the first-received message from the incoming message queue, + * removing it from the queue. The caller owns a reference to the +@@ -4252,8 +4362,9 @@ static DBusDispatchStatus + _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection) + { + HAVE_LOCK_CHECK (connection); +- +- if (connection->n_incoming > 0) ++ if (connection->dispatch_disabled && _dbus_connection_get_is_connected_unlocked(connection)) ++ return DBUS_DISPATCH_COMPLETE; ++ else if (connection->n_incoming > 0) + return DBUS_DISPATCH_DATA_REMAINS; + else if (!_dbus_transport_queue_messages (connection->transport)) + return DBUS_DISPATCH_NEED_MEMORY; +@@ -4716,6 +4827,8 @@ dbus_connection_dispatch (DBusConnection *connection) + + CONNECTION_LOCK (connection); + ++ if (result == DBUS_HANDLER_RESULT_LATER) ++ goto out; + if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) + { + _dbus_verbose ("No memory\n"); +@@ -4838,9 +4951,11 @@ dbus_connection_dispatch (DBusConnection *connection) + connection); + + out: +- if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) ++ if (result == DBUS_HANDLER_RESULT_LATER || ++ result == DBUS_HANDLER_RESULT_NEED_MEMORY) + { +- _dbus_verbose ("out of memory\n"); ++ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) ++ _dbus_verbose ("out of memory\n"); + + /* Put message back, and we'll start over. + * Yes this means handlers must be idempotent if they +diff --git a/dbus/dbus-list.c b/dbus/dbus-list.c +index 8e713c0..32ea871 100644 +--- a/dbus/dbus-list.c ++++ b/dbus/dbus-list.c +@@ -458,6 +458,35 @@ _dbus_list_remove_last (DBusList **list, + return FALSE; + } + ++/** ++ * Finds a value in the list. Returns the first link ++ * with value equal to the given data pointer. ++ * This is a linear-time operation. ++ * Returns #NULL if no value found that matches. ++ * ++ * @param list address of the list head. ++ * @param data the value to find. ++ * @returns the link if found ++ */ ++DBusList* ++_dbus_list_find_first (DBusList **list, ++ void *data) ++{ ++ DBusList *link; ++ ++ link = _dbus_list_get_first_link (list); ++ ++ while (link != NULL) ++ { ++ if (link->data == data) ++ return link; ++ ++ link = _dbus_list_get_next_link (list, link); ++ } ++ ++ return NULL; ++} ++ + /** + * Finds a value in the list. Returns the last link + * with value equal to the given data pointer. +diff --git a/dbus/dbus-list.h b/dbus/dbus-list.h +index 9350a0d..fee9f1b 100644 +--- a/dbus/dbus-list.h ++++ b/dbus/dbus-list.h +@@ -68,6 +68,9 @@ DBUS_PRIVATE_EXPORT + void _dbus_list_remove_link (DBusList **list, + DBusList *link); + DBUS_PRIVATE_EXPORT ++DBusList* _dbus_list_find_first (DBusList **list, ++ void *data); ++DBUS_PRIVATE_EXPORT + DBusList* _dbus_list_find_last (DBusList **list, + void *data); + DBUS_PRIVATE_EXPORT +diff --git a/dbus/dbus-shared.h b/dbus/dbus-shared.h +index 7ab9103..e5bfbed 100644 +--- a/dbus/dbus-shared.h ++++ b/dbus/dbus-shared.h +@@ -67,7 +67,8 @@ typedef enum + { + DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */ + DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */ +- DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */ ++ DBUS_HANDLER_RESULT_NEED_MEMORY, /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */ ++ DBUS_HANDLER_RESULT_LATER /**< Message dispatch deferred due to pending policy check */ + } DBusHandlerResult; + + /* Bus names */ +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch new file mode 100644 index 000000000..7d89a7496 --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch @@ -0,0 +1,1095 @@ +From 9d39aa9dd55680529d721a0389ce9ef579bb669a Mon Sep 17 00:00:00 2001 +From: Jacek Bukarewicz +Date: Fri, 28 Nov 2014 12:39:33 +0100 +Subject: [PATCH 3/8] Handle unavailability of policy results for broadcasts + and receive rules +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When message is sent to the addressed recipient and receive rule +result is unavailable we don't want to block the sender +as it most likely will be the privileged service, so instead we queue +it at the recipient. Any further messages sent to it will be queued to +maintain message order. Once the answer from Cynara arrives messages are +dispatched from the recipient queue. In such case full dispatch is +performed - messages are sent to addressed recipient and other +interested connections. +Messages sent to non-addressed recipients (eavesdroppers or broadcast +message recipients) are handled in a similar way. The difference is +that it is not full dispatch meaning message is sent to a single recipient. + +Cherry picked from 1e231194610892dd4360224998d91336097b05a1 by Jose Bollo + +Updated for dbus 1.10.20 by Scott Murray and José Bollo + +Signed-off-by: José Bollo +Signed-off-by: Scott Murray +--- + bus/activation.c | 4 +- + bus/bus.c | 50 ++++++-- + bus/bus.h | 19 +++ + bus/check.c | 307 +++++++++++++++++++++++++++++++++++++++++++++++ + bus/check.h | 25 ++++ + bus/connection.c | 168 ++++++++++++++++++++++++-- + bus/connection.h | 19 ++- + bus/dispatch.c | 115 +++++++++++++++--- + bus/dispatch.h | 11 +- + bus/driver.c | 2 +- + bus/policy.c | 6 + + 11 files changed, 683 insertions(+), 43 deletions(-) + +diff --git a/bus/activation.c b/bus/activation.c +index 8301b59..d4b597c 100644 +--- a/bus/activation.c ++++ b/bus/activation.c +@@ -1259,7 +1259,7 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation + res = bus_dispatch_matches (transaction, + entry->connection, + addressed_recipient, +- entry->activation_message, &error); ++ entry->activation_message, NULL, &error); + if (res == BUS_RESULT_FALSE) + { + /* If permission is denied, we just want to return the error +@@ -2140,7 +2140,7 @@ bus_activation_activate_service (BusActivation *activation, + bus_connection_get_loginfo (connection)); + /* Wonderful, systemd is connected, let's just send the msg */ + res = bus_dispatch_matches (activation_transaction, NULL, +- systemd, message, error); ++ systemd, message, NULL, error); + + if (res == BUS_RESULT_TRUE) + retval = TRUE; +diff --git a/bus/bus.c b/bus/bus.c +index 6fc45d0..0aa700b 100644 +--- a/bus/bus.c ++++ b/bus/bus.c +@@ -1800,17 +1800,9 @@ bus_context_check_security_policy (BusContext *context, + } + + /* See if limits on size have been exceeded */ +- if (proposed_recipient && +- ((dbus_connection_get_outgoing_size (proposed_recipient) > context->limits.max_outgoing_bytes) || +- (dbus_connection_get_outgoing_unix_fds (proposed_recipient) > context->limits.max_outgoing_unix_fds))) +- { +- complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, +- "Rejected: destination has a full message queue", +- 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL, +- error); +- _dbus_verbose ("security policy disallowing message due to full message queue\n"); ++ if (!bus_context_check_recipient_message_limits(context, proposed_recipient, sender, message, ++ requested_reply, error)) + return BUS_RESULT_FALSE; +- } + + /* Record that we will allow a reply here in the future (don't + * bother if the recipient is the bus or this is an eavesdropping +@@ -1869,3 +1861,41 @@ bus_context_check_all_watches (BusContext *context) + _dbus_server_toggle_all_watches (server, enabled); + } + } ++ ++void ++bus_context_complain_about_message (BusContext *context, ++ const char *error_name, ++ const char *complaint, ++ int matched_rules, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *proposed_recipient, ++ dbus_bool_t requested_reply, ++ dbus_bool_t log, ++ const char *privilege, ++ DBusError *error) ++{ ++ complain_about_message(context, error_name, complaint, matched_rules, message, sender, ++ proposed_recipient, requested_reply, log, privilege, error); ++} ++ ++dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context, ++ DBusConnection *recipient, ++ DBusConnection *sender, ++ DBusMessage *message, ++ dbus_bool_t requested_reply, ++ DBusError *error) ++{ ++ if (recipient && ++ ((dbus_connection_get_outgoing_size (recipient) > context->limits.max_outgoing_bytes) || ++ (dbus_connection_get_outgoing_unix_fds (recipient) > context->limits.max_outgoing_unix_fds))) ++ { ++ complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, ++ "Rejected: destination has a full message queue", ++ 0, message, sender, recipient, requested_reply, TRUE, NULL, ++ error); ++ _dbus_verbose ("security policy disallowing message due to full message queue\n"); ++ return FALSE; ++ } ++ return TRUE; ++} +diff --git a/bus/bus.h b/bus/bus.h +index 82c32c8..1b08f7c 100644 +--- a/bus/bus.h ++++ b/bus/bus.h +@@ -164,4 +164,23 @@ BusResult bus_context_check_security_policy (BusContext + BusDeferredMessage **deferred_message); + void bus_context_check_all_watches (BusContext *context); + ++dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context, ++ DBusConnection *recipient, ++ DBusConnection *sender, ++ DBusMessage *message, ++ dbus_bool_t requested_reply, ++ DBusError *error); ++void bus_context_complain_about_message (BusContext *context, ++ const char *error_name, ++ const char *complaint, ++ int matched_rules, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *proposed_recipient, ++ dbus_bool_t requested_reply, ++ dbus_bool_t log, ++ const char *privilege, ++ DBusError *error); ++ ++ + #endif /* BUS_BUS_H */ +diff --git a/bus/check.c b/bus/check.c +index 4b8a699..f3d283f 100644 +--- a/bus/check.c ++++ b/bus/check.c +@@ -49,6 +49,9 @@ typedef struct BusDeferredMessage + DBusConnection *sender; + DBusConnection *proposed_recipient; + DBusConnection *addressed_recipient; ++ dbus_bool_t requested_reply; ++ int matched_rules; ++ const char *privilege; + dbus_bool_t full_dispatch; + BusDeferredMessageStatus status; + BusResult response; +@@ -135,6 +138,89 @@ bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message, + _dbus_connection_enable_dispatch(deferred_message->sender); + } + ++static void ++bus_check_queued_message_reply_callback (BusDeferredMessage *deferred_message, ++ BusResult result) ++{ ++ int status; ++ ++ _dbus_verbose("bus_check_queued_message_reply_callback called message=%p\n", deferred_message); ++ ++ if (!bus_connection_is_active(deferred_message->proposed_recipient)) ++ return; ++ ++ status = deferred_message->status; ++ ++ deferred_message->status = 0; /* mark message as not waiting for response */ ++ deferred_message->response = result; ++ ++ /* ++ * If send rule allows us to send message we still need to check receive rules. ++ */ ++ if ((status & BUS_DEFERRED_MESSAGE_CHECK_SEND) && (result == BUS_RESULT_TRUE)) ++ { ++ int toggles; ++ BusContext *context; ++ BusRegistry *registry; ++ BusClientPolicy *recipient_policy; ++ BusDeferredMessage *deferred_message_receive; ++ ++ context = bus_connection_get_context(deferred_message->proposed_recipient); ++ registry = bus_context_get_registry(context); ++ recipient_policy = bus_connection_get_policy(deferred_message->proposed_recipient); ++ ++ deferred_message->response = bus_client_policy_check_can_receive(recipient_policy, registry, ++ deferred_message->requested_reply, deferred_message->sender, ++ deferred_message->addressed_recipient, deferred_message->proposed_recipient, deferred_message->message, ++ &toggles, NULL, &deferred_message_receive); ++ if (deferred_message->response == BUS_RESULT_LATER) ++ { ++ /* replace deferred message associated with send check with the one associated with ++ * receive check */ ++ if (!bus_deferred_message_replace(deferred_message, deferred_message_receive)) ++ { ++ /* failed to replace deferred message (due to oom). Set it to rejected */ ++ deferred_message->response = BUS_RESULT_FALSE; ++ } ++ } ++ } ++ ++ bus_connection_dispatch_deferred(deferred_message->proposed_recipient); ++} ++ ++static void ++queue_deferred_message_cancel_transaction_hook (void *data) ++{ ++ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data; ++ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message); ++} ++ ++ ++dbus_bool_t ++bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message, ++ BusTransaction *transaction, ++ dbus_bool_t full_dispatch, ++ dbus_bool_t prepend) ++{ ++ _dbus_assert(deferred_message != NULL); ++ _dbus_assert(deferred_message->proposed_recipient != NULL); ++ ++ if (!bus_connection_queue_deferred_message(deferred_message->proposed_recipient, ++ deferred_message, prepend)) ++ return FALSE; ++ ++ if (!bus_transaction_add_cancel_hook(transaction, queue_deferred_message_cancel_transaction_hook, ++ deferred_message, NULL)) ++ { ++ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message); ++ return FALSE; ++ } ++ deferred_message->response_callback = bus_check_queued_message_reply_callback; ++ deferred_message->full_dispatch = full_dispatch; ++ ++ return TRUE; ++} ++ + static void + deferred_message_free_function(void *data) + { +@@ -159,6 +245,20 @@ bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message) + deferred_message->response_callback = bus_check_enable_dispatch_callback; + } + ++void ++bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message, ++ dbus_bool_t requested_reply, ++ int matched_rules, ++ const char *privilege) ++{ ++ _dbus_assert(deferred_message != NULL); ++ ++ deferred_message->requested_reply = requested_reply; ++ deferred_message->matched_rules = matched_rules; ++ deferred_message->privilege = privilege; ++} ++ ++ + #ifdef DBUS_ENABLE_EMBEDDED_TESTS + BusResult (*bus_check_test_override) (DBusConnection *connection, + const char *privilege); +@@ -259,6 +359,9 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, + deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL; + deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL; + deferred_message->message = dbus_message_ref(message); ++ deferred_message->requested_reply = FALSE; ++ deferred_message->matched_rules = 0; ++ deferred_message->privilege = NULL; + deferred_message->response = response; + deferred_message->status = 0; + deferred_message->full_dispatch = FALSE; +@@ -295,12 +398,215 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message) + } + } + ++dbus_bool_t ++bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, DBusError *error) ++{ ++ BusContext *context = bus_connection_get_context(deferred_message->proposed_recipient); ++ ++ return bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient, ++ deferred_message->sender, deferred_message->message, deferred_message->requested_reply, ++ error); ++} ++ ++dbus_bool_t ++bus_deferred_message_expect_method_reply(BusDeferredMessage *deferred_message, BusTransaction *transaction, DBusError *error) ++{ ++ int type = dbus_message_get_type(deferred_message->message); ++ if (type == DBUS_MESSAGE_TYPE_METHOD_CALL && ++ deferred_message->sender && ++ deferred_message->addressed_recipient && ++ deferred_message->addressed_recipient == deferred_message->proposed_recipient && /* not eavesdropping */ ++ !bus_connections_expect_reply (bus_connection_get_connections (deferred_message->sender), ++ transaction, ++ deferred_message->sender, deferred_message->addressed_recipient, ++ deferred_message->message, error)) ++ { ++ _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n"); ++ return FALSE; ++ } ++ return TRUE; ++} ++ ++void ++bus_deferred_message_create_error(BusDeferredMessage *deferred_message, ++ const char *error_message, DBusError *error) ++{ ++ BusContext *context; ++ _dbus_assert (deferred_message->status == 0 && deferred_message->response == BUS_RESULT_FALSE); ++ ++ if (deferred_message->sender == NULL) ++ return; /* error won't be sent to bus driver anyway */ ++ ++ context = bus_connection_get_context(deferred_message->sender); ++ bus_context_complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected message", ++ deferred_message->matched_rules, deferred_message->message, deferred_message->sender, ++ deferred_message->proposed_recipient, deferred_message->requested_reply, FALSE, ++ deferred_message->privilege, error); ++} ++ ++BusResult ++bus_deferred_message_dispatch (BusDeferredMessage *deferred_message) ++{ ++ BusContext *context = bus_connection_get_context (deferred_message->proposed_recipient); ++ BusTransaction *transaction = bus_transaction_new (context); ++ BusResult result = BUS_RESULT_TRUE; ++ DBusError error; ++ ++ if (transaction == NULL) ++ { ++ return BUS_RESULT_FALSE; ++ } ++ ++ dbus_error_init(&error); ++ ++ if (!deferred_message->full_dispatch) ++ { ++ result = deferred_message->response; ++ if (result == BUS_RESULT_TRUE) ++ { ++ if (!bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient, ++ deferred_message->sender, deferred_message->message, deferred_message->requested_reply, &error)) ++ result = BUS_RESULT_FALSE; ++ } ++ else if (result == BUS_RESULT_LATER) ++ { ++ BusDeferredMessage *deferred_message2; ++ result = bus_context_check_security_policy (context, transaction, ++ deferred_message->sender, ++ deferred_message->addressed_recipient, ++ deferred_message->proposed_recipient, ++ deferred_message->message, NULL, NULL, ++ &deferred_message2); ++ ++ if (result == BUS_RESULT_LATER) ++ { ++ /* prepend at recipient */ ++ if (!bus_deferred_message_queue_at_recipient(deferred_message2, transaction, ++ FALSE, TRUE)) ++ result = BUS_RESULT_FALSE; ++ } ++ } ++ ++ /* silently drop messages on access denial */ ++ if (result == BUS_RESULT_TRUE) ++ { ++ if (!bus_transaction_send (transaction, deferred_message->proposed_recipient, deferred_message->message, TRUE)) ++ result = BUS_RESULT_FALSE; ++ } ++ ++ bus_transaction_execute_and_free(transaction); ++ ++ goto out; ++ } ++ ++ /* do not attempt to send message if sender has disconnected */ ++ if (deferred_message->sender != NULL && !bus_connection_is_active(deferred_message->sender)) ++ { ++ bus_transaction_cancel_and_free(transaction); ++ result = BUS_RESULT_FALSE; ++ goto out; ++ } ++ ++ result = bus_dispatch_matches(transaction, deferred_message->sender, ++ deferred_message->addressed_recipient, deferred_message->message, deferred_message, &error); ++ ++ if (result == BUS_RESULT_LATER) ++ { ++ /* Message deferring was already done in bus_dispatch_matches */ ++ bus_transaction_cancel_and_free(transaction); ++ goto out; ++ } ++ ++ /* this part is a copy & paste from bus_dispatch function. Probably can be moved to a function */ ++ if (dbus_error_is_set (&error)) ++ { ++ if (!dbus_connection_get_is_connected (deferred_message->sender)) ++ { ++ /* If we disconnected it, we won't bother to send it any error ++ * messages. ++ */ ++ _dbus_verbose ("Not sending error to connection we disconnected\n"); ++ } ++ else if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY)) ++ { ++ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message); ++ ++ /* cancel transaction due to OOM */ ++ if (transaction != NULL) ++ { ++ bus_transaction_cancel_and_free (transaction); ++ transaction = NULL; ++ } ++ } ++ else ++ { ++ /* Try to send the real error, if no mem to do that, send ++ * the OOM error ++ */ ++ _dbus_assert (transaction != NULL); ++ if (!bus_transaction_send_error_reply (transaction, deferred_message->sender, ++ &error, deferred_message->message)) ++ { ++ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message); ++ ++ /* cancel transaction due to OOM */ ++ if (transaction != NULL) ++ { ++ bus_transaction_cancel_and_free (transaction); ++ transaction = NULL; ++ } ++ } ++ } ++ } ++ ++ if (transaction != NULL) ++ { ++ bus_transaction_execute_and_free (transaction); ++ } ++ ++out: ++ dbus_error_free(&error); ++ ++ return result; ++} ++ ++dbus_bool_t ++bus_deferred_message_replace (BusDeferredMessage *old_message, BusDeferredMessage *new_message) ++{ ++ if (bus_connection_replace_deferred_message(old_message->proposed_recipient, ++ old_message, new_message)) ++ { ++ new_message->response_callback = old_message->response_callback; ++ new_message->full_dispatch = old_message->full_dispatch; ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++dbus_bool_t ++bus_deferred_message_waits_for_check(BusDeferredMessage *deferred_message) ++{ ++ return deferred_message->status != 0; ++} ++ ++DBusConnection * ++bus_deferred_message_get_recipient(BusDeferredMessage *deferred_message) ++{ ++ return deferred_message->proposed_recipient; ++} ++ + BusDeferredMessageStatus + bus_deferred_message_get_status (BusDeferredMessage *deferred_message) + { + return deferred_message->status; + } + ++BusResult ++bus_deferred_message_get_response (BusDeferredMessage *deferred_message) ++{ ++ return deferred_message->response; ++} ++ + void + bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + BusResult result) +@@ -310,3 +616,4 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + deferred_message->response_callback(deferred_message, result); + } + } ++ +diff --git a/bus/check.h b/bus/check.h +index d177549..9c13c18 100644 +--- a/bus/check.h ++++ b/bus/check.h +@@ -64,12 +64,37 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *messag + + BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message); + void bus_deferred_message_unref (BusDeferredMessage *deferred_message); ++BusResult bus_deferred_message_dispatch (BusDeferredMessage *deferred_message); ++dbus_bool_t bus_deferred_message_waits_for_check (BusDeferredMessage *deferred_message); ++DBusConnection *bus_deferred_message_get_recipient (BusDeferredMessage *deferred_message); + void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + BusResult result); ++dbus_bool_t bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message, ++ BusTransaction *transaction, ++ dbus_bool_t full_dispatch, ++ dbus_bool_t prepend); ++dbus_bool_t bus_deferred_message_replace (BusDeferredMessage *old_message, ++ BusDeferredMessage *new_message); + void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message); ++BusResult bus_deferred_message_get_response (BusDeferredMessage *deferred_message); + + BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message); + ++ ++dbus_bool_t bus_deferred_message_expect_method_reply (BusDeferredMessage *deferred_message, ++ BusTransaction *transaction, ++ DBusError *error); ++void bus_deferred_message_create_error (BusDeferredMessage *deferred_message, ++ const char *error_message, ++ DBusError *error); ++void bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message, ++ dbus_bool_t requested_reply, ++ int matched_rules, ++ const char *privilege); ++dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, ++ DBusError *error); ++ ++ + #ifdef DBUS_ENABLE_EMBEDDED_TESTS + extern BusResult (*bus_check_test_override) (DBusConnection *connection, + const char *privilege); +diff --git a/bus/connection.c b/bus/connection.c +index b348d42..ee93384 100644 +--- a/bus/connection.c ++++ b/bus/connection.c +@@ -31,11 +31,13 @@ + #include "expirelist.h" + #include "selinux.h" + #include "apparmor.h" ++#include "check.h" + #include + #include + #include + #include + #include ++#include + #ifdef DBUS_ENABLE_CYNARA + #include + #include +@@ -102,6 +104,7 @@ typedef struct + DBusMessage *oom_message; + DBusPreallocatedSend *oom_preallocated; + BusClientPolicy *policy; ++ DBusList *deferred_messages; /**< Queue of messages deferred due to pending policy check */ + + char *cached_loginfo_string; + BusSELinuxID *selinux_id; +@@ -268,6 +271,8 @@ bus_connection_disconnected (DBusConnection *connection) + bus_transaction_execute_and_free (transaction); + } + ++ bus_connection_clear_deferred_messages(connection); ++ + bus_dispatch_remove_connection (connection); + + /* no more watching */ +@@ -2307,7 +2312,7 @@ bus_transaction_capture (BusTransaction *transaction, + { + DBusConnection *recipient = link->data; + +- if (!bus_transaction_send (transaction, recipient, message)) ++ if (!bus_transaction_send (transaction, recipient, message, FALSE)) + goto out; + } + +@@ -2361,6 +2366,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + { + DBusError error = DBUS_ERROR_INIT; + BusResult res; ++ BusDeferredMessage *deferred_message; + + /* We have to set the sender to the driver, and have + * to check security policy since it was not done in +@@ -2401,7 +2407,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + res = bus_context_check_security_policy (bus_transaction_get_context (transaction), + transaction, + NULL, connection, connection, message, NULL, +- &error, NULL); ++ &error, &deferred_message); + if (res == BUS_RESULT_FALSE) + { + if (!bus_transaction_capture_error_reply (transaction, connection, +@@ -2419,18 +2425,20 @@ bus_transaction_send_from_driver (BusTransaction *transaction, + } + else if (res == BUS_RESULT_LATER) + { +- _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n"); + dbus_error_free (&error); +- return TRUE; ++ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE)) ++ return FALSE; ++ return TRUE; /* pretend to have sent it */ + } + +- return bus_transaction_send (transaction, connection, message); ++ return bus_transaction_send (transaction, connection, message, FALSE); + } + + dbus_bool_t + bus_transaction_send (BusTransaction *transaction, + DBusConnection *connection, +- DBusMessage *message) ++ DBusMessage *message, ++ dbus_bool_t deferred_dispatch) + { + MessageToSend *to_send; + BusConnectionData *d; +@@ -2456,7 +2464,28 @@ bus_transaction_send (BusTransaction *transaction, + + d = BUS_CONNECTION_DATA (connection); + _dbus_assert (d != NULL); +- ++ ++ if (!deferred_dispatch && d->deferred_messages != NULL) ++ { ++ BusDeferredMessage *deferred_message; ++ dbus_bool_t success; ++ /* sender and addressed recipient are not required at this point as we only need to send message ++ * to a single recipient without performing policy check. */ ++ deferred_message = bus_deferred_message_new (message, ++ NULL, ++ NULL, ++ connection, ++ BUS_RESULT_TRUE); ++ if (deferred_message == NULL) ++ return FALSE; ++ ++ success = bus_deferred_message_queue_at_recipient(deferred_message, transaction, ++ FALSE, FALSE); ++ bus_deferred_message_unref(deferred_message); ++ ++ return success; ++ } ++ + to_send = dbus_new (MessageToSend, 1); + if (to_send == NULL) + { +@@ -2708,6 +2737,131 @@ bus_transaction_add_cancel_hook (BusTransaction *transaction, + return TRUE; + } + ++void ++bus_connection_dispatch_deferred (DBusConnection *connection) ++{ ++ BusDeferredMessage *message; ++ ++ _dbus_return_if_fail (connection != NULL); ++ ++ while ((message = bus_connection_pop_deferred_message(connection)) != NULL) ++ { ++ bus_deferred_message_dispatch(message); ++ bus_deferred_message_unref(message); ++ } ++} ++ ++dbus_bool_t ++bus_connection_has_deferred_messages (DBusConnection *connection) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ return d->deferred_messages != NULL ? TRUE : FALSE; ++} ++ ++dbus_bool_t ++bus_connection_queue_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *message, ++ dbus_bool_t prepend) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ dbus_bool_t success; ++ if (prepend) ++ success = _dbus_list_prepend(&d->deferred_messages, message); ++ else ++ success = _dbus_list_append(&d->deferred_messages, message); ++ ++ if (success) ++ { ++ bus_deferred_message_ref(message); ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++dbus_bool_t ++bus_connection_replace_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *oldMessage, ++ BusDeferredMessage *newMessage) ++{ ++ DBusList *link; ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ ++ link = _dbus_list_find_first(&d->deferred_messages, oldMessage); ++ if (link == NULL) ++ return FALSE; ++ ++ if (!_dbus_list_insert_after(&d->deferred_messages, link, newMessage)) ++ return FALSE; ++ ++ bus_deferred_message_ref(newMessage); ++ _dbus_list_remove_link(&d->deferred_messages, link); ++ bus_deferred_message_unref(oldMessage); ++ return TRUE; ++} ++ ++BusDeferredMessage * ++bus_connection_pop_deferred_message (DBusConnection *connection) ++{ ++ DBusList *link; ++ BusDeferredMessage *message; ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ ++ link =_dbus_list_get_first_link(&d->deferred_messages); ++ if (link != NULL) ++ { ++ message = link->data; ++ if (!bus_deferred_message_waits_for_check(message)) ++ { ++ _dbus_list_remove_link(&d->deferred_messages, link); ++ return message; ++ } ++ } ++ ++ return NULL; ++} ++ ++dbus_bool_t ++bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ if (_dbus_list_prepend(&d->deferred_messages, message)) ++ { ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++void ++bus_connection_clear_deferred_messages (DBusConnection *connection) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ DBusList *link; ++ DBusList *next; ++ BusDeferredMessage *message; ++ ++ link =_dbus_list_get_first_link(&d->deferred_messages); ++ while (link != NULL) ++ { ++ next = _dbus_list_get_next_link (&d->deferred_messages, link); ++ message = link->data; ++ ++ bus_deferred_message_unref(message); ++ _dbus_list_remove_link(&d->deferred_messages, link); ++ ++ link = next; ++ } ++} ++ ++void ++bus_connection_remove_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *message) ++{ ++ BusConnectionData *d = BUS_CONNECTION_DATA(connection); ++ if (_dbus_list_remove(&d->deferred_messages, message)) ++ bus_deferred_message_unref(message); ++} ++ + int + bus_connections_get_n_active (BusConnections *connections) + { +diff --git a/bus/connection.h b/bus/connection.h +index 71078ea..97dae96 100644 +--- a/bus/connection.h ++++ b/bus/connection.h +@@ -85,6 +85,22 @@ dbus_bool_t bus_connection_preallocate_oom_error (DBusConnection *connection); + void bus_connection_send_oom_error (DBusConnection *connection, + DBusMessage *in_reply_to); + ++dbus_bool_t bus_connection_has_deferred_messages (DBusConnection *connection); ++dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *message, ++ dbus_bool_t prepend); ++BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection); ++dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *message); ++void bus_connection_remove_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *message); ++dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection, ++ BusDeferredMessage *oldMessage, ++ BusDeferredMessage *newMessage); ++void bus_connection_dispatch_deferred (DBusConnection *connection); ++void bus_connection_clear_deferred_messages (DBusConnection *connection); ++ ++ + /* called by signals.c */ + dbus_bool_t bus_connection_add_match_rule (DBusConnection *connection, + BusMatchRule *rule); +@@ -137,7 +153,8 @@ BusTransaction* bus_transaction_new (BusContext * + BusContext* bus_transaction_get_context (BusTransaction *transaction); + dbus_bool_t bus_transaction_send (BusTransaction *transaction, + DBusConnection *connection, +- DBusMessage *message); ++ DBusMessage *message, ++ dbus_bool_t deferred_dispatch); + dbus_bool_t bus_transaction_capture (BusTransaction *transaction, + DBusConnection *connection, + DBusConnection *addressed_recipient, +diff --git a/bus/dispatch.c b/bus/dispatch.c +index 50a22a3..7d30ce4 100644 +--- a/bus/dispatch.c ++++ b/bus/dispatch.c +@@ -33,6 +33,7 @@ + #include "utils.h" + #include "bus.h" + #include "signals.h" ++#include "dispatch.h" + #include "test.h" + #include + #include +@@ -77,7 +78,7 @@ send_one_message (DBusConnection *connection, + NULL, + &stack_error, + &deferred_message); +- if (result != BUS_RESULT_TRUE) ++ if (result == BUS_RESULT_FALSE) + { + if (!bus_transaction_capture_error_reply (transaction, sender, + &stack_error, message)) +@@ -112,9 +113,19 @@ send_one_message (DBusConnection *connection, + return TRUE; /* don't send it but don't return an error either */ + } + ++ if (result == BUS_RESULT_LATER) ++ { ++ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE)) ++ { ++ BUS_SET_OOM (error); ++ return FALSE; ++ } ++ return TRUE; /* pretend to have sent it */ ++ } ++ + if (!bus_transaction_send (transaction, + connection, +- message)) ++ message, FALSE)) + { + BUS_SET_OOM (error); + return FALSE; +@@ -124,11 +135,12 @@ send_one_message (DBusConnection *connection, + } + + BusResult +-bus_dispatch_matches (BusTransaction *transaction, +- DBusConnection *sender, +- DBusConnection *addressed_recipient, +- DBusMessage *message, +- DBusError *error) ++bus_dispatch_matches (BusTransaction *transaction, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusMessage *message, ++ BusDeferredMessage *dispatched_deferred_message, ++ DBusError *error) + { + DBusError tmp_error; + BusConnections *connections; +@@ -137,7 +149,6 @@ bus_dispatch_matches (BusTransaction *transaction, + DBusList *link; + BusContext *context; + BusDeferredMessage *deferred_message; +- BusResult res; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + +@@ -153,16 +164,80 @@ bus_dispatch_matches (BusTransaction *transaction, + /* First, send the message to the addressed_recipient, if there is one. */ + if (addressed_recipient != NULL) + { +- res = bus_context_check_security_policy (context, transaction, ++ BusResult result; ++ /* To maintain message order message needs to be appended at the recipient if there are already ++ * deferred messages and we are not doing deferred dispatch ++ */ ++ if (dispatched_deferred_message == NULL && bus_connection_has_deferred_messages(addressed_recipient)) ++ { ++ deferred_message = bus_deferred_message_new(message, sender, ++ addressed_recipient, addressed_recipient, BUS_RESULT_LATER); ++ ++ if (deferred_message == NULL) ++ { ++ BUS_SET_OOM(error); ++ return BUS_RESULT_FALSE; ++ } ++ ++ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE)) ++ { ++ bus_deferred_message_unref(deferred_message); ++ BUS_SET_OOM(error); ++ return BUS_RESULT_FALSE; ++ } ++ ++ bus_deferred_message_unref(deferred_message); ++ return BUS_RESULT_TRUE; /* pretend to have sent it */ ++ } ++ ++ if (dispatched_deferred_message != NULL) ++ { ++ result = bus_deferred_message_get_response(dispatched_deferred_message); ++ if (result == BUS_RESULT_TRUE) ++ { ++ /* if we know the result of policy check we still need to check if message limits ++ * are not exceeded. It is also required to add entry in expected replies list if ++ * this is a method call ++ */ ++ if (!bus_deferred_message_check_message_limits(dispatched_deferred_message, error)) ++ return BUS_RESULT_FALSE; ++ ++ if (!bus_deferred_message_expect_method_reply(dispatched_deferred_message, transaction, error)) ++ return BUS_RESULT_FALSE; ++ } ++ else if (result == BUS_RESULT_FALSE) ++ { ++ bus_deferred_message_create_error(dispatched_deferred_message, "Rejected message", error); ++ return BUS_RESULT_FALSE; ++ } ++ } ++ else ++ result = BUS_RESULT_LATER; ++ ++ if (result == BUS_RESULT_LATER) ++ result = bus_context_check_security_policy (context, transaction, + sender, addressed_recipient, + addressed_recipient, + message, NULL, error, + &deferred_message); +- if (res == BUS_RESULT_FALSE) ++ ++ if (result == BUS_RESULT_FALSE) + return BUS_RESULT_FALSE; +- else if (res == BUS_RESULT_LATER) ++ else if (result == BUS_RESULT_LATER) + { + BusDeferredMessageStatus status; ++ ++ if (dispatched_deferred_message != NULL) ++ { ++ /* for deferred dispatch prepend message at the recipient */ ++ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, TRUE)) ++ { ++ BUS_SET_OOM(error); ++ return BUS_RESULT_FALSE; ++ } ++ return BUS_RESULT_TRUE; /* pretend to have sent it */ ++ } ++ + status = bus_deferred_message_get_status(deferred_message); + + if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND) +@@ -173,13 +248,18 @@ bus_dispatch_matches (BusTransaction *transaction, + } + else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE) + { +- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, +- "Rejecting message because time is needed to check security policy"); +- return BUS_RESULT_FALSE; ++ /* receive rule result not available - queue message at the recipient */ ++ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE)) ++ { ++ BUS_SET_OOM(error); ++ return BUS_RESULT_FALSE; ++ } ++ ++ return BUS_RESULT_TRUE; /* pretend to have sent it */ + } + else + { +- _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n"); ++ _dbus_verbose("deferred message has no status field set unexpectedly\n"); + return BUS_RESULT_FALSE; + } + } +@@ -196,7 +276,8 @@ bus_dispatch_matches (BusTransaction *transaction, + } + + /* Dispatch the message */ +- if (!bus_transaction_send (transaction, addressed_recipient, message)) ++ if (!bus_transaction_send(transaction, addressed_recipient, message, ++ dispatched_deferred_message != NULL ? TRUE : FALSE)) + { + BUS_SET_OOM (error); + return BUS_RESULT_FALSE; +@@ -534,7 +615,7 @@ bus_dispatch (DBusConnection *connection, + * match rules. + */ + if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient, +- message, &error)) ++ message, NULL, &error)) + { + /* Roll back and dispatch the message once the policy result is available */ + bus_transaction_cancel_and_free (transaction); +diff --git a/bus/dispatch.h b/bus/dispatch.h +index afba6a2..f6102e8 100644 +--- a/bus/dispatch.h ++++ b/bus/dispatch.h +@@ -29,10 +29,11 @@ + + dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection); + void bus_dispatch_remove_connection (DBusConnection *connection); +-BusResult bus_dispatch_matches (BusTransaction *transaction, +- DBusConnection *sender, +- DBusConnection *recipient, +- DBusMessage *message, +- DBusError *error); ++BusResult bus_dispatch_matches (BusTransaction *transaction, ++ DBusConnection *sender, ++ DBusConnection *recipient, ++ DBusMessage *message, ++ BusDeferredMessage *dispatched_deferred_message, ++ DBusError *error); + + #endif /* BUS_DISPATCH_H */ +diff --git a/bus/driver.c b/bus/driver.c +index f414f64..d89a658 100644 +--- a/bus/driver.c ++++ b/bus/driver.c +@@ -254,7 +254,7 @@ bus_driver_send_service_owner_changed (const char *service_name, + if (!bus_transaction_capture (transaction, NULL, NULL, message)) + goto oom; + +- res = bus_dispatch_matches (transaction, NULL, NULL, message, error); ++ res = bus_dispatch_matches (transaction, NULL, NULL, message, NULL, error); + if (res == BUS_RESULT_TRUE) + retval = TRUE; + else +diff --git a/bus/policy.c b/bus/policy.c +index 7de92c6..483cc97 100644 +--- a/bus/policy.c ++++ b/bus/policy.c +@@ -1122,6 +1122,9 @@ bus_client_policy_check_can_send (DBusConnection *sender, + + result = bus_check_privilege(check, message, sender, addressed_recipient, receiver, + privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message); ++ if (result == BUS_RESULT_LATER && deferred_message != NULL) ++ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply, ++ *toggles, privilege); + } + else + privilege = NULL; +@@ -1372,6 +1375,9 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + + result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient, + privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message); ++ if (result == BUS_RESULT_LATER && deferred_message != NULL) ++ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply, ++ *toggles, privilege); + } + else + privilege = NULL; +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch new file mode 100644 index 000000000..9953dcaac --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch @@ -0,0 +1,1505 @@ +From 28ada62c98d74285dc22b66650b09b6c8f2c28c4 Mon Sep 17 00:00:00 2001 +From: Jacek Bukarewicz +Date: Thu, 27 Nov 2014 11:26:21 +0100 +Subject: [PATCH 4/8] Add own rule result unavailability handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Own rule result unavailability is handled like send rules - dispatching +messages from the sender is blocked and resumed when result becomes +available. + +Handler of "RequestName" method needs to return BUS_RESULT_LATER when +policy result is not known therefore its return type is modified. +Since bus message handlers are put into function pointer array other +message handler function singatures are also affected. + +Cherry-picked from 35ef89cd6777ea2430077fc621d21bd01df92349 by Jose.bollo + +Updated for dbus 1.10.20 by Scott Murray and José Bollo + +Signed-off-by: José Bollo +Signed-off-by: Scott Murray +--- + bus/dispatch.c | 11 +- + bus/driver.c | 334 ++++++++++++++++++++++++++++--------------------- + bus/driver.h | 2 +- + bus/policy.c | 52 ++++++-- + bus/policy.h | 6 +- + bus/services.c | 26 ++-- + bus/services.h | 3 +- + bus/stats.c | 23 ++-- + bus/stats.h | 6 +- + 9 files changed, 283 insertions(+), 180 deletions(-) + +diff --git a/bus/dispatch.c b/bus/dispatch.c +index 7d30ce4..4b84c21 100644 +--- a/bus/dispatch.c ++++ b/bus/dispatch.c +@@ -517,8 +517,17 @@ bus_dispatch (DBusConnection *connection, + } + + _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS); +- if (!bus_driver_handle_message (connection, transaction, message, &error)) ++ res = bus_driver_handle_message (connection, transaction, message, &error); ++ if (res == BUS_RESULT_FALSE) + goto out; ++ else if (res == BUS_RESULT_LATER) ++ { ++ /* connection has been disabled in message handler */ ++ bus_transaction_cancel_and_free (transaction); ++ transaction = NULL; ++ result = DBUS_HANDLER_RESULT_LATER; ++ goto out; ++ } + } + else if (!bus_connection_is_active (connection)) /* clients must talk to bus driver first */ + { +diff --git a/bus/driver.c b/bus/driver.c +index d89a658..aaeb3b2 100644 +--- a/bus/driver.c ++++ b/bus/driver.c +@@ -420,7 +420,7 @@ create_unique_client_name (BusRegistry *registry, + return TRUE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_hello (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -428,7 +428,7 @@ bus_driver_handle_hello (DBusConnection *connection, + { + DBusString unique_name; + BusService *service; +- dbus_bool_t retval; ++ BusResult retval; + BusRegistry *registry; + BusConnections *connections; + DBusError tmp_error; +@@ -442,7 +442,7 @@ bus_driver_handle_hello (DBusConnection *connection, + /* We already handled an Hello message for this connection. */ + dbus_set_error (error, DBUS_ERROR_FAILED, + "Already handled an Hello message"); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + /* Note that when these limits are exceeded we don't disconnect the +@@ -464,16 +464,16 @@ bus_driver_handle_hello (DBusConnection *connection, + bus_context_log (context, DBUS_SYSTEM_LOG_WARNING, "%s (%s=%d)", + tmp_error.message, limit_name, limit); + dbus_move_error (&tmp_error, error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!_dbus_string_init (&unique_name)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + + registry = bus_connection_get_registry (connection); + +@@ -506,7 +506,7 @@ bus_driver_handle_hello (DBusConnection *connection, + goto out_0; + + _dbus_assert (bus_connection_is_active (connection)); +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out_0: + _dbus_string_free (&unique_name); +@@ -558,7 +558,7 @@ bus_driver_send_welcome_message (DBusConnection *connection, + } + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_list_services (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -580,14 +580,14 @@ bus_driver_handle_list_services (DBusConnection *connection, + if (reply == NULL) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!bus_registry_list_services (registry, &services, &len)) + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + dbus_message_iter_init_append (reply, &iter); +@@ -599,7 +599,7 @@ bus_driver_handle_list_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + { +@@ -611,7 +611,7 @@ bus_driver_handle_list_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + } + +@@ -624,7 +624,7 @@ bus_driver_handle_list_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + ++i; + } +@@ -635,23 +635,23 @@ bus_driver_handle_list_services (DBusConnection *connection, + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!bus_transaction_send_from_driver (transaction, connection, reply)) + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + else + { + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + } + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_list_activatable_services (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -673,14 +673,14 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, + if (reply == NULL) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!bus_activation_list_services (activation, &services, &len)) + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + dbus_message_iter_init_append (reply, &iter); +@@ -692,7 +692,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + { +@@ -704,7 +704,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + } + +@@ -717,7 +717,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, + dbus_free_string_array (services); + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + ++i; + } +@@ -728,23 +728,23 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!bus_transaction_send_from_driver (transaction, connection, reply)) + { + dbus_message_unref (reply); + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + else + { + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + } + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_acquire_service (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -755,7 +755,8 @@ bus_driver_handle_acquire_service (DBusConnection *connection, + const char *name; + dbus_uint32_t service_reply; + dbus_uint32_t flags; +- dbus_bool_t retval; ++ BusResult retval; ++ BusResult res; + BusRegistry *registry; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -766,20 +767,24 @@ bus_driver_handle_acquire_service (DBusConnection *connection, + DBUS_TYPE_STRING, &name, + DBUS_TYPE_UINT32, &flags, + DBUS_TYPE_INVALID)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags); + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + reply = NULL; + + _dbus_string_init_const (&service_name, name); + +- if (!bus_registry_acquire_service (registry, connection, +- &service_name, flags, +- &service_reply, transaction, +- error)) +- goto out; ++ res = bus_registry_acquire_service (registry, connection, message, ++ &service_name, flags, ++ &service_reply, transaction, ++ error); ++ if (res != BUS_RESULT_TRUE) ++ { ++ retval = res; ++ goto out; ++ } + + reply = dbus_message_new_method_return (message); + if (reply == NULL) +@@ -800,7 +805,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection, + goto out; + } + +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out: + if (reply) +@@ -808,7 +813,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection, + return retval; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_release_service (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -818,7 +823,7 @@ bus_driver_handle_release_service (DBusConnection *connection, + DBusString service_name; + const char *name; + dbus_uint32_t service_reply; +- dbus_bool_t retval; ++ BusResult retval; + BusRegistry *registry; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -828,11 +833,11 @@ bus_driver_handle_release_service (DBusConnection *connection, + if (!dbus_message_get_args (message, error, + DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + _dbus_verbose ("Trying to release name %s\n", name); + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + reply = NULL; + + _dbus_string_init_const (&service_name, name); +@@ -861,7 +866,7 @@ bus_driver_handle_release_service (DBusConnection *connection, + goto out; + } + +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out: + if (reply) +@@ -869,7 +874,7 @@ bus_driver_handle_release_service (DBusConnection *connection, + return retval; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_service_exists (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -880,7 +885,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, + BusService *service; + dbus_bool_t service_exists; + const char *name; +- dbus_bool_t retval; ++ BusResult retval; + BusRegistry *registry; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -890,9 +895,9 @@ bus_driver_handle_service_exists (DBusConnection *connection, + if (!dbus_message_get_args (message, error, + DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID)) +- return FALSE; ++ return BUS_RESULT_FALSE; + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + + if (strcmp (name, DBUS_SERVICE_DBUS) == 0) + { +@@ -926,7 +931,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, + goto out; + } + +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out: + if (reply) +@@ -935,7 +940,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, + return retval; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_activate_service (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -943,7 +948,7 @@ bus_driver_handle_activate_service (DBusConnection *connection, + { + dbus_uint32_t flags; + const char *name; +- dbus_bool_t retval; ++ BusResult retval; + BusActivation *activation; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -957,10 +962,10 @@ bus_driver_handle_activate_service (DBusConnection *connection, + { + _DBUS_ASSERT_ERROR_IS_SET (error); + _dbus_verbose ("No memory to get arguments to StartServiceByName\n"); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + + if (!bus_activation_activate_service (activation, connection, transaction, FALSE, + message, name, error)) +@@ -970,7 +975,7 @@ bus_driver_handle_activate_service (DBusConnection *connection, + goto out; + } + +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out: + return retval; +@@ -1072,13 +1077,13 @@ bus_driver_send_or_activate (BusTransaction *transaction, + return TRUE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_update_activation_environment (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error) + { +- dbus_bool_t retval; ++ BusResult retval; + BusActivation *activation; + BusContext *context; + DBusMessageIter iter; +@@ -1100,7 +1105,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, + dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, + "Cannot change activation environment " + "on a system bus."); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + activation = bus_connection_get_activation (connection); +@@ -1114,7 +1119,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, + + dbus_message_iter_recurse (&iter, &dict_iter); + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + systemd_message = NULL; + + /* Then loop through the sent dictionary, add the location of +@@ -1279,7 +1284,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, + if (!bus_driver_send_ack_reply (connection, transaction, message, error)) + goto out; + +- retval = TRUE; ++ retval = BUS_RESULT_TRUE; + + out: + if (systemd_message != NULL) +@@ -1289,7 +1294,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, + return retval; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_add_match (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1371,16 +1376,16 @@ bus_driver_handle_add_match (DBusConnection *connection, + + bus_match_rule_unref (rule); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + failed: + _DBUS_ASSERT_ERROR_IS_SET (error); + if (rule) + bus_match_rule_unref (rule); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_remove_match (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1423,16 +1428,16 @@ bus_driver_handle_remove_match (DBusConnection *connection, + + bus_match_rule_unref (rule); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + failed: + _DBUS_ASSERT_ERROR_IS_SET (error); + if (rule) + bus_match_rule_unref (rule); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_service_owner (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1502,7 +1507,7 @@ bus_driver_handle_get_service_owner (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1511,10 +1516,10 @@ bus_driver_handle_get_service_owner (DBusConnection *connection, + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_list_queued_owners (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1606,7 +1611,7 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1619,10 +1624,10 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection, + if (base_names) + _dbus_list_clear (&base_names); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_connection_unix_user (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1679,7 +1684,7 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1688,10 +1693,10 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection, + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1748,7 +1753,7 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1757,10 +1762,10 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1811,7 +1816,7 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1820,10 +1825,10 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1872,7 +1877,7 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -1881,10 +1886,10 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_connection_credentials (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -1998,7 +2003,7 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection, + + dbus_message_unref (reply); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -2012,10 +2017,10 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection, + dbus_message_unref (reply); + } + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_reload_config (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2040,7 +2045,7 @@ bus_driver_handle_reload_config (DBusConnection *connection, + goto oom; + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -2049,11 +2054,11 @@ bus_driver_handle_reload_config (DBusConnection *connection, + _DBUS_ASSERT_ERROR_IS_SET (error); + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + #ifdef DBUS_ENABLE_VERBOSE_MODE +-static dbus_bool_t ++static BusResult + bus_driver_handle_enable_verbose (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2073,7 +2078,7 @@ bus_driver_handle_enable_verbose (DBusConnection *connection, + _dbus_set_verbose(TRUE); + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -2082,10 +2087,10 @@ bus_driver_handle_enable_verbose (DBusConnection *connection, + + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_disable_verbose (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2105,7 +2110,7 @@ bus_driver_handle_disable_verbose (DBusConnection *connection, + _dbus_set_verbose(FALSE); + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -2114,11 +2119,11 @@ bus_driver_handle_disable_verbose (DBusConnection *connection, + + if (reply) + dbus_message_unref (reply); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + #endif + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_id (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2134,7 +2139,7 @@ bus_driver_handle_get_id (DBusConnection *connection, + if (!_dbus_string_init (&uuid)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + reply = NULL; +@@ -2160,7 +2165,7 @@ bus_driver_handle_get_id (DBusConnection *connection, + + _dbus_string_free (&uuid); + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -2170,10 +2175,10 @@ bus_driver_handle_get_id (DBusConnection *connection, + if (reply) + dbus_message_unref (reply); + _dbus_string_free (&uuid); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_become_monitor (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2189,7 +2194,7 @@ bus_driver_handle_become_monitor (DBusConnection *connection, + int i; + int n_match_rules; + dbus_uint32_t flags; +- dbus_bool_t ret = FALSE; ++ BusResult ret = BUS_RESULT_FALSE; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + +@@ -2262,10 +2267,10 @@ bus_driver_handle_become_monitor (DBusConnection *connection, + if (!bus_connection_be_monitor (connection, transaction, &rules, error)) + goto out; + +- ret = TRUE; ++ ret = BUS_RESULT_TRUE; + + out: +- if (ret) ++ if (ret == BUS_RESULT_TRUE) + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + else + _DBUS_ASSERT_ERROR_IS_SET (error); +@@ -2281,7 +2286,7 @@ out: + return ret; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_machine_id (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2296,7 +2301,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection, + if (!_dbus_string_init (&uuid)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!_dbus_get_local_machine_uuid_encoded (&uuid, error)) +@@ -2321,7 +2326,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection, + + _dbus_string_free (&uuid); + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + _DBUS_ASSERT_ERROR_IS_CLEAR (error); +@@ -2335,29 +2340,30 @@ fail: + dbus_message_unref (reply); + + _dbus_string_free (&uuid); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_ping (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error) + { +- return bus_driver_send_ack_reply (connection, transaction, message, error); ++ return bus_driver_send_ack_reply (connection, transaction, message, error) == TRUE ++ ? BUS_RESULT_TRUE : BUS_RESULT_FALSE; + } + +-static dbus_bool_t bus_driver_handle_get (DBusConnection *connection, ++static BusResult bus_driver_handle_get (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); + +-static dbus_bool_t bus_driver_handle_get_all (DBusConnection *connection, ++static BusResult bus_driver_handle_get_all (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); + +-static dbus_bool_t bus_driver_handle_set (DBusConnection *connection, ++static BusResult bus_driver_handle_set (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); +@@ -2389,10 +2395,10 @@ typedef struct + const char *name; + const char *in_args; + const char *out_args; +- dbus_bool_t (* handler) (DBusConnection *connection, +- BusTransaction *transaction, +- DBusMessage *message, +- DBusError *error); ++ BusResult (* handler) (DBusConnection *connection, ++ BusTransaction *transaction, ++ DBusMessage *message, ++ DBusError *error); + MethodFlags flags; + } MessageHandler; + +@@ -2511,7 +2517,7 @@ static const PropertyHandler dbus_property_handlers[] = { + { NULL, NULL, NULL } + }; + +-static dbus_bool_t bus_driver_handle_introspect (DBusConnection *, ++static BusResult bus_driver_handle_introspect (DBusConnection *, + BusTransaction *, DBusMessage *, DBusError *); + + static const MessageHandler properties_message_handlers[] = { +@@ -2763,7 +2769,7 @@ bus_driver_generate_introspect_string (DBusString *xml, + return TRUE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_introspect (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2784,13 +2790,13 @@ bus_driver_handle_introspect (DBusConnection *connection, + DBUS_TYPE_INVALID)) + { + _DBUS_ASSERT_ERROR_IS_SET (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + if (!_dbus_string_init (&xml)) + { + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + is_canonical_path = dbus_message_has_path (message, DBUS_PATH_DBUS); +@@ -2815,7 +2821,7 @@ bus_driver_handle_introspect (DBusConnection *connection, + dbus_message_unref (reply); + _dbus_string_free (&xml); + +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -2825,10 +2831,42 @@ bus_driver_handle_introspect (DBusConnection *connection, + + _dbus_string_free (&xml); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + ++/* ++ * Set @error and return FALSE if the message is not directed to the ++ * dbus-daemon by its canonical object path. This is hardening against ++ * system services with poorly-written security policy files, which ++ * might allow sending dangerously broad equivalence classes of messages ++ * such as "anything with this assumed-to-be-safe object path". ++ * ++ * dbus-daemon is unusual in that it normally ignores the object path ++ * of incoming messages; we need to keep that behaviour for the "read" ++ * read-only method calls like GetConnectionUnixUser for backwards ++ * compatibility, but it seems safer to be more restrictive for things ++ * intended to be root-only or privileged-developers-only. ++ * ++ * It is possible that there are other system services with the same ++ * quirk as dbus-daemon. ++ */ + dbus_bool_t ++bus_driver_check_message_is_for_us (DBusMessage *message, ++ DBusError *error) ++{ ++ if (!dbus_message_has_path (message, DBUS_PATH_DBUS)) ++ { ++ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, ++ "Method '%s' is only available at the canonical object path '%s'", ++ dbus_message_get_member (message), DBUS_PATH_DBUS); ++ ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++BusResult + bus_driver_handle_message (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -2839,6 +2877,7 @@ bus_driver_handle_message (DBusConnection *connection, + const MessageHandler *mh; + dbus_bool_t found_interface = FALSE; + dbus_bool_t is_canonical_path; ++ BusResult res; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + +@@ -2854,7 +2893,7 @@ bus_driver_handle_message (DBusConnection *connection, + transaction, + message, + error)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + context = bus_connection_get_context (connection); + systemd = bus_driver_get_owner_of_name (connection, +@@ -2871,7 +2910,7 @@ bus_driver_handle_message (DBusConnection *connection, + attacker ? attacker : "(unauthenticated)", + bus_connection_get_loginfo (connection)); + /* ignore it */ +- return TRUE; ++ return BUS_RESULT_TRUE; + } + + if (!bus_context_get_systemd_activation (context)) +@@ -2879,16 +2918,16 @@ bus_driver_handle_message (DBusConnection *connection, + bus_context_log (context, DBUS_SYSTEM_LOG_WARNING, + "Ignoring unexpected ActivationFailure message " + "while not using systemd activation"); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +- return dbus_activation_systemd_failure(bus_context_get_activation(context), message); ++ return dbus_activation_systemd_failure(bus_context_get_activation(context), message) == TRUE ? BUS_RESULT_TRUE : BUS_RESULT_FALSE; + } + + if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) + { + _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); +- return TRUE; /* we just ignore this */ ++ return BUS_RESULT_TRUE; /* we just ignore this */ + } + + /* may be NULL, which means "any interface will do" */ +@@ -2953,20 +2992,27 @@ bus_driver_handle_message (DBusConnection *connection, + name, dbus_message_get_signature (message), + mh->in_args); + _DBUS_ASSERT_ERROR_IS_SET (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +- if ((* mh->handler) (connection, transaction, message, error)) ++ res = (* mh->handler) (connection, transaction, message, error); ++ if (res == BUS_RESULT_TRUE) + { + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + _dbus_verbose ("Driver handler succeeded\n"); +- return TRUE; ++ return BUS_RESULT_TRUE; + } +- else ++ else if (res == BUS_RESULT_FALSE) + { + _DBUS_ASSERT_ERROR_IS_SET (error); + _dbus_verbose ("Driver handler returned failure\n"); +- return FALSE; ++ return BUS_RESULT_FALSE; ++ } ++ else if (res == BUS_RESULT_LATER) ++ { ++ _DBUS_ASSERT_ERROR_IS_CLEAR (error); ++ _dbus_verbose ("Driver handler delayed message processing due to policy check\n"); ++ return BUS_RESULT_LATER; + } + } + } +@@ -2978,7 +3024,7 @@ bus_driver_handle_message (DBusConnection *connection, + "%s does not understand message %s", + DBUS_SERVICE_DBUS, name); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + void +@@ -3099,7 +3145,7 @@ interface_handler_find_property (const InterfaceHandler *ih, + return NULL; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -3120,18 +3166,18 @@ bus_driver_handle_get (DBusConnection *connection, + DBUS_TYPE_STRING, &iface, + DBUS_TYPE_STRING, &prop, + DBUS_TYPE_INVALID)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + /* We only implement Properties on /org/freedesktop/DBus so far. */ + ih = bus_driver_find_interface (iface, TRUE, error); + + if (ih == NULL) +- return FALSE; ++ return BUS_RESULT_FALSE; + + handler = interface_handler_find_property (ih, prop, error); + + if (handler == NULL) +- return FALSE; ++ return BUS_RESULT_FALSE; + + context = bus_transaction_get_context (transaction); + +@@ -3159,17 +3205,17 @@ bus_driver_handle_get (DBusConnection *connection, + goto oom; + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + if (reply != NULL) + dbus_message_unref (reply); + + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_get_all (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -3188,13 +3234,13 @@ bus_driver_handle_get_all (DBusConnection *connection, + if (!dbus_message_get_args (message, error, + DBUS_TYPE_STRING, &iface, + DBUS_TYPE_INVALID)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + /* We only implement Properties on /org/freedesktop/DBus so far. */ + ih = bus_driver_find_interface (iface, TRUE, error); + + if (ih == NULL) +- return FALSE; ++ return BUS_RESULT_FALSE; + + context = bus_transaction_get_context (transaction); + +@@ -3229,7 +3275,7 @@ bus_driver_handle_get_all (DBusConnection *connection, + goto oom; + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom_abandon_message: + _dbus_asv_abandon (&reply_iter, &array_iter); +@@ -3239,10 +3285,10 @@ oom: + dbus_message_unref (reply); + + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-static dbus_bool_t ++static BusResult + bus_driver_handle_set (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -3271,15 +3317,15 @@ bus_driver_handle_set (DBusConnection *connection, + ih = bus_driver_find_interface (iface, TRUE, error); + + if (ih == NULL) +- return FALSE; ++ return BUS_RESULT_FALSE; + + handler = interface_handler_find_property (ih, prop, error); + + if (handler == NULL) +- return FALSE; ++ return BUS_RESULT_FALSE; + + /* We don't implement any properties that can be set yet. */ + dbus_set_error (error, DBUS_ERROR_PROPERTY_READ_ONLY, + "Property '%s.%s' cannot be set", iface, prop); +- return FALSE; ++ return BUS_RESULT_FALSE; + } +diff --git a/bus/driver.h b/bus/driver.h +index a7297ad..05e9886 100644 +--- a/bus/driver.h ++++ b/bus/driver.h +@@ -35,7 +35,7 @@ typedef enum + } BusDriverFound; + + void bus_driver_remove_connection (DBusConnection *connection); +-dbus_bool_t bus_driver_handle_message (DBusConnection *connection, ++BusResult bus_driver_handle_message (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); +diff --git a/bus/policy.c b/bus/policy.c +index 483cc97..f6f4d85 100644 +--- a/bus/policy.c ++++ b/bus/policy.c +@@ -1390,18 +1390,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, + + + +-static dbus_bool_t ++static BusResult + bus_rules_check_can_own (DBusList *rules, +- const DBusString *service_name) ++ const DBusString *service_name, ++ DBusConnection *connection, ++ DBusMessage *message) + { + DBusList *link; +- dbus_bool_t allowed; ++ BusResult result; ++ const char *privilege; + + /* rules is in the order the rules appeared + * in the config file, i.e. last rule that applies wins + */ + +- allowed = FALSE; ++ result = BUS_RESULT_FALSE; + link = _dbus_list_get_first_link (&rules); + while (link != NULL) + { +@@ -1437,17 +1440,46 @@ bus_rules_check_can_own (DBusList *rules, + } + + /* Use this rule */ +- allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; ++ switch (rule->access) ++ { ++ case BUS_POLICY_RULE_ACCESS_ALLOW: ++ result = BUS_RESULT_TRUE; ++ break; ++ default: ++ case BUS_POLICY_RULE_ACCESS_DENY: ++ result = BUS_RESULT_FALSE; ++ break; ++ case BUS_POLICY_RULE_ACCESS_CHECK: ++ result = BUS_RESULT_LATER; ++ privilege = rule->privilege; ++ break; ++ } + } + +- return allowed; ++ if (result == BUS_RESULT_LATER) ++ { ++ BusContext *context = bus_connection_get_context(connection); ++ BusCheck *check = bus_context_get_check(context); ++ BusDeferredMessage *deferred_message; ++ ++ result = bus_check_privilege(check, message, connection, NULL, NULL, ++ privilege, BUS_DEFERRED_MESSAGE_CHECK_OWN, &deferred_message); ++ if (result == BUS_RESULT_LATER) ++ { ++ bus_deferred_message_disable_sender(deferred_message); ++ } ++ } ++ ++ return result; + } + +-dbus_bool_t ++BusResult + bus_client_policy_check_can_own (BusClientPolicy *policy, +- const DBusString *service_name) ++ const DBusString *service_name, ++ DBusConnection *connection, ++ DBusMessage *message) + { +- return bus_rules_check_can_own (policy->rules, service_name); ++ return bus_rules_check_can_own (policy->rules, service_name, connection, message); + } + + #ifdef DBUS_ENABLE_EMBEDDED_TESTS +@@ -1455,7 +1487,7 @@ dbus_bool_t + bus_policy_check_can_own (BusPolicy *policy, + const DBusString *service_name) + { +- return bus_rules_check_can_own (policy->default_rules, service_name); ++ return bus_rules_check_can_own (policy->default_rules, service_name, NULL, NULL) == BUS_RESULT_TRUE; + } + #endif /* DBUS_ENABLE_EMBEDDED_TESTS */ + +diff --git a/bus/policy.h b/bus/policy.h +index f839d23..28ce8f2 100644 +--- a/bus/policy.h ++++ b/bus/policy.h +@@ -182,8 +182,10 @@ BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy, + dbus_int32_t *toggles, + const char **privilege_param, + BusDeferredMessage **deferred_message); +-dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy, +- const DBusString *service_name); ++BusResult bus_client_policy_check_can_own (BusClientPolicy *policy, ++ const DBusString *service_name, ++ DBusConnection *connection, ++ DBusMessage *message); + dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy, + BusPolicyRule *rule); + void bus_client_policy_optimize (BusClientPolicy *policy); +diff --git a/bus/services.c b/bus/services.c +index 127edda..586af18 100644 +--- a/bus/services.c ++++ b/bus/services.c +@@ -376,16 +376,17 @@ bus_registry_list_services (BusRegistry *registry, + return FALSE; + } + +-dbus_bool_t ++BusResult + bus_registry_acquire_service (BusRegistry *registry, + DBusConnection *connection, ++ DBusMessage *message, + const DBusString *service_name, + dbus_uint32_t flags, + dbus_uint32_t *result, + BusTransaction *transaction, + DBusError *error) + { +- dbus_bool_t retval; ++ BusResult retval; + DBusConnection *old_owner_conn; + BusClientPolicy *policy; + BusService *service; +@@ -393,8 +394,9 @@ bus_registry_acquire_service (BusRegistry *registry, + BusSELinuxID *sid; + BusOwner *primary_owner; + int limit; ++ BusResult res; + +- retval = FALSE; ++ retval = BUS_RESULT_FALSE; + + if (!_dbus_validate_bus_name (service_name, 0, + _dbus_string_get_length (service_name))) +@@ -467,7 +469,8 @@ bus_registry_acquire_service (BusRegistry *registry, + _dbus_string_get_const_data (service_name), error)) + goto out; + +- if (!bus_client_policy_check_can_own (policy, service_name)) ++ res = bus_client_policy_check_can_own (policy, service_name, connection, message); ++ if (res == BUS_RESULT_FALSE) + { + dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, + "Connection \"%s\" is not allowed to own the service \"%s\" due " +@@ -478,6 +481,11 @@ bus_registry_acquire_service (BusRegistry *registry, + _dbus_string_get_const_data (service_name)); + goto out; + } ++ else if (res == BUS_RESULT_LATER) ++ { ++ retval = BUS_RESULT_LATER; ++ goto out; ++ } + + limit = bus_context_get_max_services_per_connection (registry->context); + +@@ -603,11 +611,13 @@ bus_registry_acquire_service (BusRegistry *registry, + } + + activation = bus_context_get_activation (registry->context); +- retval = bus_activation_send_pending_auto_activation_messages (activation, ++ ++ if (bus_activation_send_pending_auto_activation_messages (activation, + service, +- transaction); +- if (!retval) +- BUS_SET_OOM (error); ++ transaction)) ++ retval = BUS_RESULT_TRUE; ++ else ++ BUS_SET_OOM (error); + + out: + return retval; +diff --git a/bus/services.h b/bus/services.h +index 056dd9f..3df3dd7 100644 +--- a/bus/services.h ++++ b/bus/services.h +@@ -50,8 +50,9 @@ void bus_registry_foreach (BusRegistry *registry + dbus_bool_t bus_registry_list_services (BusRegistry *registry, + char ***listp, + int *array_len); +-dbus_bool_t bus_registry_acquire_service (BusRegistry *registry, ++BusResult bus_registry_acquire_service (BusRegistry *registry, + DBusConnection *connection, ++ DBusMessage *message, + const DBusString *service_name, + dbus_uint32_t flags, + dbus_uint32_t *result, +diff --git a/bus/stats.c b/bus/stats.c +index 1582255..c25be98 100644 +--- a/bus/stats.c ++++ b/bus/stats.c +@@ -36,7 +36,7 @@ + + #ifdef DBUS_ENABLE_STATS + +-dbus_bool_t ++BusResult + bus_stats_handle_get_stats (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -51,6 +51,9 @@ bus_stats_handle_get_stats (DBusConnection *connection, + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + ++ if (!bus_driver_check_message_is_for_us (message, error)) ++ return BUS_RESULT_FALSE; ++ + context = bus_transaction_get_context (transaction); + connections = bus_context_get_connections (context); + +@@ -104,17 +107,17 @@ bus_stats_handle_get_stats (DBusConnection *connection, + goto oom; + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + if (reply != NULL) + dbus_message_unref (reply); + + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + +-dbus_bool_t ++BusResult + bus_stats_handle_get_connection_stats (DBusConnection *caller_connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -209,7 +212,7 @@ bus_stats_handle_get_connection_stats (DBusConnection *caller_connection, + goto oom; + + dbus_message_unref (reply); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + BUS_SET_OOM (error); +@@ -218,11 +221,11 @@ failed: + if (reply != NULL) + dbus_message_unref (reply); + +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + +-dbus_bool_t ++BusResult + bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, + BusTransaction *transaction, + DBusMessage *message, +@@ -246,7 +249,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, + matchmaker = bus_context_get_matchmaker (context); + + if (!bus_registry_list_services (registry, &services, &services_len)) +- return FALSE; ++ return BUS_RESULT_FALSE; + + reply = dbus_message_new_method_return (message); + if (reply == NULL) +@@ -325,7 +328,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, + + dbus_message_unref (reply); + dbus_free_string_array (services); +- return TRUE; ++ return BUS_RESULT_TRUE; + + oom: + if (reply != NULL) +@@ -334,7 +337,7 @@ oom: + dbus_free_string_array (services); + + BUS_SET_OOM (error); +- return FALSE; ++ return BUS_RESULT_FALSE; + } + + #endif +diff --git a/bus/stats.h b/bus/stats.h +index dcb022c..683fa17 100644 +--- a/bus/stats.h ++++ b/bus/stats.h +@@ -25,17 +25,17 @@ + + #define BUS_INTERFACE_STATS "org.freedesktop.DBus.Debug.Stats" + +-dbus_bool_t bus_stats_handle_get_stats (DBusConnection *connection, ++BusResult bus_stats_handle_get_stats (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); + +-dbus_bool_t bus_stats_handle_get_connection_stats (DBusConnection *connection, ++BusResult bus_stats_handle_get_connection_stats (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); + +-dbus_bool_t bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, ++BusResult bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error); +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch new file mode 100644 index 000000000..5f7e96a3b --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch @@ -0,0 +1,180 @@ +From 1f7ba56c9ced669951061d13b06e31d96a170e37 Mon Sep 17 00:00:00 2001 +From: Jacek Bukarewicz +Date: Tue, 23 Jun 2015 11:08:48 +0200 +Subject: [PATCH 5/8] Perform Cynara runtime policy checks by default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This change introduces http://tizen.org/privilege/internal/dbus privilege +which is supposed to be available only to trusted system resources. +Checks for this privilege are used in place of certain allow rules to +make security policy more strict. + +For system bus sending and receiving signals now requires +http://tizen.org/privilege/internal/dbus privilege. Requesting name +ownership and sending methods is still denied by default. + +For session bus http://tizen.org/privilege/internal/dbus privilege +is now required for requesting name, calling methods, sending and receiving +signals. + +Services are supposed to override these default settings to implement their +own security policy. + +Cherry picked from e8610297cf7031e94eb314a2e8c11246f4405403 by Jose Bollo + +Updated for dbus 1.10.20 by Scott Murray and José Bollo + +Signed-off-by: Jacek Bukarewicz +Signed-off-by: José Bollo +Signed-off-by: Scott Murray +--- + bus/activation.c | 42 ++++++++++++++++++++++++++---------------- + bus/session.conf.in | 32 ++++++++++++++++++++++++++------ + bus/system.conf.in | 19 +++++++++++++++---- + 3 files changed, 67 insertions(+), 26 deletions(-) + +diff --git a/bus/activation.c b/bus/activation.c +index d4b597c..8aabeaa 100644 +--- a/bus/activation.c ++++ b/bus/activation.c +@@ -1840,22 +1840,32 @@ bus_activation_activate_service (BusActivation *activation, + } + + if (auto_activation && +- entry != NULL && +- BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context, +- transaction, +- connection, /* sender */ +- NULL, /* addressed recipient */ +- NULL, /* proposed recipient */ +- activation_message, +- entry, +- error, +- NULL)) +- { +- _DBUS_ASSERT_ERROR_IS_SET (error); +- _dbus_verbose ("activation not authorized: %s: %s\n", +- error != NULL ? error->name : "(error ignored)", +- error != NULL ? error->message : "(error ignored)"); +- return FALSE; ++ entry != NULL) ++ { ++ BusResult result; ++ ++ result = bus_context_check_security_policy (activation->context, ++ transaction, ++ connection, /* sender */ ++ NULL, /* addressed recipient */ ++ NULL, /* proposed recipient */ ++ activation_message, ++ entry, ++ error, ++ NULL); ++ if (result == BUS_RESULT_FALSE) ++ { ++ _DBUS_ASSERT_ERROR_IS_SET (error); ++ _dbus_verbose ("activation not authorized: %s: %s\n", ++ error != NULL ? error->name : "(error ignored)", ++ error != NULL ? error->message : "(error ignored)"); ++ return FALSE; ++ } ++ if (result == BUS_RESULT_LATER) ++ { ++ /* TODO */ ++ _dbus_verbose ("ALERT FIX ME!!!!!!!!!!!!!!!"); ++ } + } + + /* Bypass the registry lookup if we're auto-activating, bus_dispatch would not +diff --git a/bus/session.conf.in b/bus/session.conf.in +index affa7f1..157dfb4 100644 +--- a/bus/session.conf.in ++++ b/bus/session.conf.in +@@ -27,12 +27,32 @@ + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/bus/system.conf.in b/bus/system.conf.in +index f139b55..19d0c04 100644 +--- a/bus/system.conf.in ++++ b/bus/system.conf.in +@@ -50,17 +50,20 @@ + + + +- ++ ++ ++ ++ +- + + + +- ++ + + + +- + + + + ++ ++ ++ + + +Date: Fri, 16 Aug 2019 13:29:23 +0200 +Subject: [PATCH 6/8] Fix SIGSEGV on disconnections +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Sometime, at start of the system, dbus-daemon was crashing +because a pending authorisation were reactivating a closed +connection. + +Also, clean unused function. + +Signed-off-by: José Bollo +--- + bus/check.c | 5 +++++ + bus/check.h | 1 + + bus/connection.c | 14 +++----------- + bus/connection.h | 3 --- + 4 files changed, 9 insertions(+), 14 deletions(-) + +diff --git a/bus/check.c b/bus/check.c +index f3d283f..b73d08b 100644 +--- a/bus/check.c ++++ b/bus/check.c +@@ -617,3 +617,8 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message, + } + } + ++void ++bus_deferred_message_abort (BusDeferredMessage *deferred_message) ++{ ++ deferred_message->response_callback = NULL; ++} +diff --git a/bus/check.h b/bus/check.h +index 9c13c18..d718a69 100644 +--- a/bus/check.h ++++ b/bus/check.h +@@ -93,6 +93,7 @@ void bus_deferred_message_set_policy_check_info (BusDeferredMessa + const char *privilege); + dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, + DBusError *error); ++void bus_deferred_message_abort (BusDeferredMessage *deferred_message); + + + #ifdef DBUS_ENABLE_EMBEDDED_TESTS +diff --git a/bus/connection.c b/bus/connection.c +index ee93384..b520d57 100644 +--- a/bus/connection.c ++++ b/bus/connection.c +@@ -47,6 +47,7 @@ + #define MAX_LOG_COMMAND_LEN 50 + + static void bus_connection_remove_transactions (DBusConnection *connection); ++static void bus_connection_clear_deferred_messages (DBusConnection *connection); + + typedef struct + { +@@ -2821,17 +2822,7 @@ bus_connection_pop_deferred_message (DBusConnection *connection) + return NULL; + } + +-dbus_bool_t +-bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message) +-{ +- BusConnectionData *d = BUS_CONNECTION_DATA(connection); +- if (_dbus_list_prepend(&d->deferred_messages, message)) +- { +- return TRUE; +- } +- return FALSE; +-} +- ++static + void + bus_connection_clear_deferred_messages (DBusConnection *connection) + { +@@ -2846,6 +2837,7 @@ bus_connection_clear_deferred_messages (DBusConnection *connection) + next = _dbus_list_get_next_link (&d->deferred_messages, link); + message = link->data; + ++ bus_deferred_message_abort(message); + bus_deferred_message_unref(message); + _dbus_list_remove_link(&d->deferred_messages, link); + +diff --git a/bus/connection.h b/bus/connection.h +index 97dae96..6af7bf1 100644 +--- a/bus/connection.h ++++ b/bus/connection.h +@@ -90,15 +90,12 @@ dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *con + BusDeferredMessage *message, + dbus_bool_t prepend); + BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection); +-dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection, +- BusDeferredMessage *message); + void bus_connection_remove_deferred_message (DBusConnection *connection, + BusDeferredMessage *message); + dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection, + BusDeferredMessage *oldMessage, + BusDeferredMessage *newMessage); + void bus_connection_dispatch_deferred (DBusConnection *connection); +-void bus_connection_clear_deferred_messages (DBusConnection *connection); + + + /* called by signals.c */ +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch new file mode 100644 index 000000000..7a69efcd2 --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch @@ -0,0 +1,1048 @@ +From 43cc361a5c32c81c0f93451bdb0ef781cd19a1cb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Tue, 4 Feb 2020 12:23:36 +0100 +Subject: [PATCH 7/8] Switch from cynara to cynagora +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: José Bollo +--- + bus/Makefile.am | 8 +- + bus/bus.h | 2 +- + bus/check.c | 26 +- + bus/check.h | 2 +- + bus/connection.c | 27 --- + bus/connection.h | 3 - + bus/cynagora-check.c | 330 +++++++++++++++++++++++++ + bus/{cynara.h => cynagora-check.h} | 10 +- + bus/cynara.c | 373 ----------------------------- + bus/system.conf.in | 6 +- + configure.ac | 18 +- + 11 files changed, 366 insertions(+), 439 deletions(-) + create mode 100644 bus/cynagora-check.c + rename bus/{cynara.h => cynagora-check.h} (81%) + delete mode 100644 bus/cynara.c + +diff --git a/bus/Makefile.am b/bus/Makefile.am +index 2a8a72c..1720048 100644 +--- a/bus/Makefile.am ++++ b/bus/Makefile.am +@@ -13,7 +13,7 @@ DBUS_BUS_LIBS = \ + $(THREAD_LIBS) \ + $(ADT_LIBS) \ + $(NETWORK_libs) \ +- $(CYNARA_LIBS) \ ++ $(CYNAGORA_LIBS) \ + $(NULL) + + DBUS_LAUNCHER_LIBS = \ +@@ -31,7 +31,7 @@ AM_CPPFLAGS = \ + $(APPARMOR_CFLAGS) \ + -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \ + -DDBUS_COMPILATION \ +- $(CYNARA_CFLAGS) \ ++ $(CYNAGORA_CFLAGS) \ + $(NULL) + + # if assertions are enabled, improve backtraces +@@ -101,8 +101,8 @@ BUS_SOURCES= \ + config-parser-common.h \ + connection.c \ + connection.h \ +- cynara.c \ +- cynara.h \ ++ cynagora-check.c \ ++ cynagora-check.h \ + desktop-file.c \ + desktop-file.h \ + $(DIR_WATCH_SOURCE) \ +diff --git a/bus/bus.h b/bus/bus.h +index 1b08f7c..e167d9e 100644 +--- a/bus/bus.h ++++ b/bus/bus.h +@@ -47,7 +47,7 @@ typedef struct BusMatchRule BusMatchRule; + typedef struct BusActivationEntry BusActivationEntry; + typedef struct BusCheck BusCheck; + typedef struct BusDeferredMessage BusDeferredMessage; +-typedef struct BusCynara BusCynara; ++typedef struct BusCynagora BusCynagora; + + /** + * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches. +diff --git a/bus/check.c b/bus/check.c +index b73d08b..ec30770 100644 +--- a/bus/check.c ++++ b/bus/check.c +@@ -26,7 +26,7 @@ + #include "check.h" + #include "connection.h" + #include "dispatch.h" +-#include "cynara.h" ++#include "cynagora-check.h" + #include "utils.h" + #include + #include +@@ -38,7 +38,7 @@ typedef struct BusCheck + int refcount; + + BusContext *context; +- BusCynara *cynara; ++ BusCynagora *cynagora; + } BusCheck; + + typedef struct BusDeferredMessage +@@ -81,7 +81,7 @@ bus_check_new (BusContext *context, DBusError *error) + + check->refcount = 1; + check->context = context; +- check->cynara = bus_cynara_new(check, error); ++ check->cynagora = bus_cynagora_new(check, error); + if (dbus_error_is_set(error)) + { + dbus_message_free_data_slot(&deferred_message_data_slot); +@@ -110,7 +110,7 @@ bus_check_unref (BusCheck *check) + + if (check->refcount == 0) + { +- bus_cynara_unref(check->cynara); ++ bus_cynagora_unref(check->cynagora); + dbus_message_free_data_slot(&deferred_message_data_slot); + dbus_free(check); + } +@@ -122,10 +122,10 @@ bus_check_get_context (BusCheck *check) + return check->context; + } + +-BusCynara * +-bus_check_get_cynara (BusCheck *check) ++BusCynagora * ++bus_check_get_cynagora (BusCheck *check) + { +- return check->cynara; ++ return check->cynagora; + } + + static void +@@ -276,8 +276,8 @@ bus_check_privilege (BusCheck *check, + { + BusDeferredMessage *previous_deferred_message; + BusResult result = BUS_RESULT_FALSE; +-#ifdef DBUS_ENABLE_CYNARA +- BusCynara *cynara; ++#ifdef DBUS_ENABLE_CYNAGORA ++ BusCynagora *cynagora; + #endif + DBusConnection *connection; + +@@ -304,7 +304,7 @@ bus_check_privilege (BusCheck *check, + * Message has been deferred due to receive or own rule which means that sending this message + * is allowed - it must have been checked previously. + * This might happen when client calls RequestName method which depending on security +- * policy might result in both "can_send" and "can_own" Cynara checks. ++ * policy might result in both "can_send" and "can_own" Cynagora checks. + */ + result = BUS_RESULT_TRUE; + } +@@ -327,9 +327,9 @@ bus_check_privilege (BusCheck *check, + else + { + /* ask policy checkers */ +-#ifdef DBUS_ENABLE_CYNARA +- cynara = bus_check_get_cynara(check); +- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, ++#ifdef DBUS_ENABLE_CYNAGORA ++ cynagora = bus_check_get_cynagora(check); ++ result = bus_cynagora_check_privilege(cynagora, message, sender, addressed_recipient, + proposed_recipient, privilege, check_type, deferred_message); + #endif + if (result == BUS_RESULT_LATER && deferred_message != NULL) +diff --git a/bus/check.h b/bus/check.h +index d718a69..ab63c18 100644 +--- a/bus/check.h ++++ b/bus/check.h +@@ -45,7 +45,7 @@ BusCheck *bus_check_ref (BusCheck *check); + void bus_check_unref (BusCheck *check); + + BusContext *bus_check_get_context (BusCheck *check); +-BusCynara *bus_check_get_cynara (BusCheck *check); ++BusCynagora *bus_check_get_cynagora (BusCheck *check); + BusResult bus_check_privilege (BusCheck *check, + DBusMessage *message, + DBusConnection *sender, +diff --git a/bus/connection.c b/bus/connection.c +index b520d57..48910e0 100644 +--- a/bus/connection.c ++++ b/bus/connection.c +@@ -38,10 +38,6 @@ + #include + #include + #include +-#ifdef DBUS_ENABLE_CYNARA +-#include +-#include +-#endif + + /* Trim executed commands to this length; we want to keep logs readable */ + #define MAX_LOG_COMMAND_LEN 50 +@@ -124,9 +120,6 @@ typedef struct + + /** non-NULL if and only if this is a monitor */ + DBusList *link_in_monitors; +-#ifdef DBUS_ENABLE_CYNARA +- char *cynara_session_id; +-#endif + } BusConnectionData; + + static dbus_bool_t bus_pending_reply_expired (BusExpireList *list, +@@ -461,10 +454,6 @@ free_connection_data (void *data) + + dbus_free (d->name); + +-#ifdef DBUS_ENABLE_CYNARA +- free (d->cynara_session_id); +-#endif +- + dbus_free (d); + } + +@@ -1095,22 +1084,6 @@ bus_connection_get_policy (DBusConnection *connection) + return d->policy; + } + +-#ifdef DBUS_ENABLE_CYNARA +-const char *bus_connection_get_cynara_session_id (DBusConnection *connection) +-{ +- BusConnectionData *d = BUS_CONNECTION_DATA (connection); +- _dbus_assert (d != NULL); +- +- if (d->cynara_session_id == NULL) +- { +- unsigned long pid; +- if (dbus_connection_get_unix_process_id(connection, &pid)) +- d->cynara_session_id = cynara_session_from_pid(pid); +- } +- return d->cynara_session_id; +-} +-#endif +- + static dbus_bool_t + foreach_active (BusConnections *connections, + BusConnectionForeachFunction function, +diff --git a/bus/connection.h b/bus/connection.h +index 6af7bf1..3116bcf 100644 +--- a/bus/connection.h ++++ b/bus/connection.h +@@ -138,9 +138,6 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection, + BusTransaction *transaction, + DBusList **rules, + DBusError *error); +-#ifdef DBUS_ENABLE_CYNARA +-const char *bus_connection_get_cynara_session_id (DBusConnection *connection); +-#endif + + /* transaction API so we can send or not send a block of messages as a whole */ + +diff --git a/bus/cynagora-check.c b/bus/cynagora-check.c +new file mode 100644 +index 0000000..6c0c635 +--- /dev/null ++++ b/bus/cynagora-check.c +@@ -0,0 +1,330 @@ ++/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ ++/* cynagora.c Cynagora runtime privilege checking ++ * ++ * Copyright (c) 2014 Samsung Electronics, Ltd. ++ * ++ * Licensed under the Academic Free License version 2.1 ++ * ++ * 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 ++ * ++ */ ++ ++#include ++#include "cynagora-check.h" ++#include "check.h" ++#include "utils.h" ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#ifndef DBUS_ENABLE_CYNAGORA ++ ++BusCynagora * ++bus_cynagora_new(BusCheck *check, DBusError *error) ++{ ++ return NULL; ++} ++ ++BusCynagora * ++bus_cynagora_ref (BusCynagora *cynagora) ++{ ++ return NULL; ++} ++ ++void ++bus_cynagora_unref (BusCynagora *cynagora) ++{ ++} ++ ++BusResult ++bus_cynagora_check_privilege (BusCynagora *cynagora, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *privilege, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message_param) ++{ ++ return BUS_RESULT_FALSE; ++} ++ ++#endif ++ ++#ifdef DBUS_ENABLE_CYNAGORA ++ ++#include ++#include ++ ++#include ++ ++#ifndef CYNAGORA_CACHE_SIZE ++#define CYNAGORA_CACHE_SIZE 8000 ++#endif ++ ++typedef struct BusCynagora ++{ ++ int refcount; ++ ++ BusContext *context; ++ BusCheck *check; ++ cynagora_t *cynagora; ++ DBusWatch *cynagora_watch; ++} BusCynagora; ++ ++static int async_callback(void *closure, ++ int op, ++ int fd, ++ uint32_t events); ++ ++BusCynagora * ++bus_cynagora_new(BusCheck *check, DBusError *error) ++{ ++ BusContext *context; ++ BusCynagora *cynagora; ++ int ret; ++ ++ cynagora = dbus_new(BusCynagora, 1); ++ if (cynagora == NULL) ++ { ++ BUS_SET_OOM(error); ++ return NULL; ++ } ++ ++ context = bus_check_get_context(check); ++ ++ cynagora->refcount = 1; ++ cynagora->check = check; ++ cynagora->context = context; ++ cynagora->cynagora_watch = NULL; ++ ++ ret = cynagora_create(&cynagora->cynagora, cynagora_Check, CYNAGORA_CACHE_SIZE, NULL); ++ if (ret < 0) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynagora configuration"); ++ } ++ else ++ { ++ ret = cynagora_async_setup(cynagora->cynagora, async_callback, cynagora); ++ if (ret < 0) ++ { ++ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynagora client"); ++ } ++ else ++ { ++ return cynagora; ++ } ++ cynagora_destroy(cynagora->cynagora); ++ } ++ ++ dbus_free(cynagora); ++ return NULL; ++} ++ ++BusCynagora * ++bus_cynagora_ref (BusCynagora *cynagora) ++{ ++ _dbus_assert (cynagora->refcount > 0); ++ cynagora->refcount += 1; ++ ++ return cynagora; ++} ++ ++void ++bus_cynagora_unref (BusCynagora *cynagora) ++{ ++ _dbus_assert (cynagora->refcount > 0); ++ ++ cynagora->refcount -= 1; ++ ++ if (cynagora->refcount == 0) ++ { ++ cynagora_destroy(cynagora->cynagora); ++ dbus_free(cynagora); ++ } ++} ++ ++static void ++async_check_callback (void *closure, int status) ++{ ++ BusDeferredMessage *deferred_message = closure; ++ BusResult result; ++ ++ if (deferred_message == NULL) ++ return; ++ ++ if (status == 1) ++ result = BUS_RESULT_TRUE; ++ else ++ result = BUS_RESULT_FALSE; ++ ++ bus_deferred_message_response_received(deferred_message, result); ++ bus_deferred_message_unref(deferred_message); ++} ++ ++BusResult ++bus_cynagora_check_privilege (BusCynagora *cynagora, ++ DBusMessage *message, ++ DBusConnection *sender, ++ DBusConnection *addressed_recipient, ++ DBusConnection *proposed_recipient, ++ const char *permission, ++ BusDeferredMessageStatus check_type, ++ BusDeferredMessage **deferred_message_param) ++{ ++ int result; ++ unsigned long uid; ++ unsigned long pid; ++ char *label; ++ char user[32]; ++ char session[32]; ++ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; ++ BusDeferredMessage *deferred_message; ++ BusResult ret; ++ cynagora_key_t key; ++ ++ _dbus_assert(connection != NULL); ++ ++ if (dbus_connection_get_unix_user(connection, &uid) == FALSE) ++ return BUS_RESULT_FALSE; ++ ++ if (dbus_connection_get_unix_process_id(connection, &pid) == FALSE) ++ return BUS_RESULT_FALSE; ++ ++ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) ++ { ++ _dbus_warn("Failed to obtain security label for connection\n"); ++ return BUS_RESULT_FALSE; ++ } ++ ++ snprintf(user, sizeof(user), "%lu", uid); ++ snprintf(session, sizeof(session), "%lu", pid); ++ ++ key.client = label; ++ key.session = session; ++ key.user = user; ++ key.permission = permission; ++ ++ result = cynagora_cache_check(cynagora->cynagora, &key); ++ switch (result) ++ { ++ case 1: ++ _dbus_verbose("Cynagora: got ALLOWED answer from cache (client=%s session_id=%s user=%s permission=%s)\n", ++ label, session_id, user, permission); ++ ret = BUS_RESULT_TRUE; ++ break; ++ ++ case 0: ++ _dbus_verbose("Cynagora: got DENIED answer from cache (client=%s session_id=%s user=%s permission=%s)\n", ++ label, session_id, user, permission); ++ ret = BUS_RESULT_FALSE; ++ break; ++ ++ default: ++ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, ++ proposed_recipient, BUS_RESULT_LATER); ++ if (deferred_message == NULL) ++ { ++ _dbus_verbose("Failed to allocate memory for deferred message\n"); ++ ret = BUS_RESULT_FALSE; ++ goto out; ++ } ++ ++ /* callback is supposed to unref deferred_message*/ ++ result = cynagora_async_check(cynagora->cynagora, &key, 1, 0, async_check_callback, deferred_message); ++ if (result == 0) ++ { ++ _dbus_verbose("Created Cynagora request: client=%s session_id=%s user=%s permission=%s " ++ "deferred_message=%p\n", label, session_id, user, permission, deferred_message); ++ if (deferred_message_param != NULL) ++ *deferred_message_param = deferred_message; ++ ret = BUS_RESULT_LATER; ++ } ++ else ++ { ++ _dbus_verbose("Error on cynagora request create: %i\n", result); ++ bus_deferred_message_unref(deferred_message); ++ ret = BUS_RESULT_FALSE; ++ } ++ break; ++ } ++out: ++ dbus_free(label); ++ return ret; ++} ++ ++static dbus_bool_t ++watch_handler_callback(DBusWatch *watch, ++ unsigned int flags, ++ void *data) ++{ ++ BusCynagora *cynagora = (BusCynagora *)data; ++ int result = cynagora_async_process(cynagora->cynagora); ++ if (result < 0) ++ _dbus_verbose("cynagora_async_process returned %d\n", result); ++ ++ return result != -ENOMEM ? TRUE : FALSE; ++} ++ ++static int ++async_callback(void *closure, int op, int fd, uint32_t events) ++{ ++ BusCynagora *cynagora = (BusCynagora *)closure; ++ DBusLoop *loop = bus_context_get_loop(cynagora->context); ++ unsigned int flags; ++ DBusWatch *watch; ++ ++ /* compute flags */ ++ flags = 0; ++ if (events & EPOLLIN) ++ flags |= DBUS_WATCH_READABLE; ++ if (events & EPOLLOUT) ++ flags |= DBUS_WATCH_WRITABLE; ++ ++ /* remove the watch if needed */ ++ watch = cynagora->cynagora_watch; ++ if (watch != NULL) ++ { ++ cynagora->cynagora_watch = NULL; ++ _dbus_loop_remove_watch(loop, watch); ++ _dbus_watch_invalidate(watch); ++ _dbus_watch_unref(watch); ++ } ++ ++ /* create the watch if needed */ ++ watch = cynagora->cynagora_watch; ++ if (op != EPOLL_CTL_DEL) ++ { ++ watch = _dbus_watch_new(fd, flags, TRUE, watch_handler_callback, cynagora, NULL); ++ if (watch == NULL) ++ return -ENOMEM; ++ if (_dbus_loop_add_watch(loop, watch) != TRUE) ++ { ++ _dbus_watch_invalidate(watch); ++ _dbus_watch_unref(watch); ++ return -ENOMEM; ++ } ++ cynagora->cynagora_watch = watch; ++ } ++ return 0; ++} ++ ++#endif /* DBUS_ENABLE_CYNAGORA */ +diff --git a/bus/cynara.h b/bus/cynagora-check.h +similarity index 81% +rename from bus/cynara.h +rename to bus/cynagora-check.h +index c4728bb..c0892c3 100644 +--- a/bus/cynara.h ++++ b/bus/cynagora-check.h +@@ -1,5 +1,5 @@ + /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +-/* cynara.h Cynara runtime privilege checking ++/* cynagora.h Cynagora runtime privilege checking + * + * Copyright (c) 2014 Samsung Electronics, Ltd. + * +@@ -24,10 +24,10 @@ + #include "bus.h" + #include "check.h" + +-BusCynara *bus_cynara_new (BusCheck *check, DBusError *error); +-BusCynara *bus_cynara_ref (BusCynara *cynara); +-void bus_cynara_unref (BusCynara *cynara); +-BusResult bus_cynara_check_privilege (BusCynara *cynara, ++BusCynagora *bus_cynagora_new (BusCheck *check, DBusError *error); ++BusCynagora *bus_cynagora_ref (BusCynagora *cynagora); ++void bus_cynagora_unref (BusCynagora *cynagora); ++BusResult bus_cynagora_check_privilege (BusCynagora *cynagora, + DBusMessage *message, + DBusConnection *sender, + DBusConnection *addressed_recipient, +diff --git a/bus/cynara.c b/bus/cynara.c +deleted file mode 100644 +index 77aed62..0000000 +--- a/bus/cynara.c ++++ /dev/null +@@ -1,373 +0,0 @@ +-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +-/* cynara.c Cynara runtime privilege checking +- * +- * Copyright (c) 2014 Samsung Electronics, Ltd. +- * +- * Licensed under the Academic Free License version 2.1 +- * +- * 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 +- * +- */ +- +-#include +-#include "cynara.h" +-#include "check.h" +-#include "utils.h" +- +-#include +- +-#include +-#include +-#include +-#include +-#ifdef DBUS_ENABLE_CYNARA +-#include +-#endif +- +-#ifdef DBUS_ENABLE_CYNARA +-typedef struct BusCynara +-{ +- int refcount; +- +- BusContext *context; +- BusCheck *check; +- cynara_async *cynara; +- DBusWatch *cynara_watch; +-} BusCynara; +- +-#define USE_CYNARA_CACHE 1 +-#ifdef USE_CYNARA_CACHE +-#define CYNARA_CACHE_SIZE 1000 +-#endif +- +-static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch, +- unsigned int flags, +- void *data); +- +-static void status_callback(int old_fd, +- int new_fd, +- cynara_async_status status, +- void *user_status_data); +-static void bus_cynara_check_response_callback (cynara_check_id check_id, +- cynara_async_call_cause cause, +- int response, +- void *user_response_data); +-#endif +- +- +-BusCynara * +-bus_cynara_new(BusCheck *check, DBusError *error) +-{ +-#ifdef DBUS_ENABLE_CYNARA +- BusContext *context; +- BusCynara *cynara; +- cynara_async_configuration *conf = NULL; +- int ret; +- +- cynara = dbus_new(BusCynara, 1); +- if (cynara == NULL) +- { +- BUS_SET_OOM(error); +- return NULL; +- } +- +- context = bus_check_get_context(check); +- +- cynara->refcount = 1; +- cynara->check = check; +- cynara->context = context; +- cynara->cynara_watch = NULL; +- +- ret = cynara_async_configuration_create(&conf); +- if (ret != CYNARA_API_SUCCESS) +- { +- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration"); +- goto out; +- } +- +-#ifdef CYNARA_CACHE_SIZE +- ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE); +- if (ret != CYNARA_API_SUCCESS) +- { +- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size"); +- goto out; +- } +-#endif +- +- ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara); +- if (ret != CYNARA_API_SUCCESS) +- { +- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client"); +- goto out; +- } +- +-out: +- cynara_async_configuration_destroy(conf); +- if (ret != CYNARA_API_SUCCESS) +- { +- dbus_free(cynara); +- return NULL; +- } +- +- return cynara; +-#else +- return NULL; +-#endif +-} +- +-BusCynara * +-bus_cynara_ref (BusCynara *cynara) +-{ +-#ifdef DBUS_ENABLE_CYNARA +- _dbus_assert (cynara->refcount > 0); +- cynara->refcount += 1; +- +- return cynara; +-#else +- return NULL; +-#endif +-} +- +-void +-bus_cynara_unref (BusCynara *cynara) +-{ +-#ifdef DBUS_ENABLE_CYNARA +- _dbus_assert (cynara->refcount > 0); +- +- cynara->refcount -= 1; +- +- if (cynara->refcount == 0) +- { +- cynara_async_finish(cynara->cynara); +- dbus_free(cynara); +- } +-#endif +-} +- +-BusResult +-bus_cynara_check_privilege (BusCynara *cynara, +- DBusMessage *message, +- DBusConnection *sender, +- DBusConnection *addressed_recipient, +- DBusConnection *proposed_recipient, +- const char *privilege, +- BusDeferredMessageStatus check_type, +- BusDeferredMessage **deferred_message_param) +-{ +-#ifdef DBUS_ENABLE_CYNARA +- int result; +- unsigned long uid; +- char *label; +- const char *session_id; +- char user[32]; +- cynara_check_id check_id; +- DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; +- BusDeferredMessage *deferred_message; +- BusResult ret; +- +- _dbus_assert(connection != NULL); +- +- if (dbus_connection_get_unix_user(connection, &uid) == FALSE) +- return BUS_RESULT_FALSE; +- +- if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) +- { +- _dbus_warn("Failed to obtain security label for connection\n"); +- return BUS_RESULT_FALSE; +- } +- +- session_id = bus_connection_get_cynara_session_id (connection); +- if (session_id == NULL) +- { +- ret = BUS_RESULT_FALSE; +- goto out; +- } +- +- snprintf(user, sizeof(user), "%lu", uid); +- +-#if USE_CYNARA_CACHE +- result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege); +-#else +- result = CYNARA_API_CACHE_MISS; +-#endif +- +- switch (result) +- { +- case CYNARA_API_ACCESS_ALLOWED: +- _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", +- label, session_id, user, privilege); +- ret = BUS_RESULT_TRUE; +- break; +- +- case CYNARA_API_ACCESS_DENIED: +- _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", +- label, session_id, user, privilege); +- ret = BUS_RESULT_FALSE; +- break; +- +- case CYNARA_API_CACHE_MISS: +- deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, +- proposed_recipient, BUS_RESULT_LATER); +- if (deferred_message == NULL) +- { +- _dbus_verbose("Failed to allocate memory for deferred message\n"); +- ret = BUS_RESULT_FALSE; +- goto out; +- } +- +- /* callback is supposed to unref deferred_message*/ +- result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id, +- &bus_cynara_check_response_callback, deferred_message); +- if (result == CYNARA_API_SUCCESS) +- { +- _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u " +- "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message); +- if (deferred_message_param != NULL) +- *deferred_message_param = deferred_message; +- ret = BUS_RESULT_LATER; +- } +- else +- { +- _dbus_verbose("Error on cynara request create: %i\n", result); +- bus_deferred_message_unref(deferred_message); +- ret = BUS_RESULT_FALSE; +- } +- break; +- default: +- _dbus_verbose("Error when accessing Cynara cache: %i\n", result); +- ret = BUS_RESULT_FALSE; +- } +-out: +- dbus_free(label); +- return ret; +- +-#else +- return BUS_RESULT_FALSE; +-#endif +-} +- +- +- +-#ifdef DBUS_ENABLE_CYNARA +-static void +-status_callback(int old_fd, int new_fd, cynara_async_status status, +- void *user_status_data) +-{ +- BusCynara *cynara = (BusCynara *)user_status_data; +- DBusLoop *loop = bus_context_get_loop(cynara->context); +- +- if (cynara->cynara_watch != NULL) +- { +- _dbus_loop_remove_watch(loop, cynara->cynara_watch); +- _dbus_watch_invalidate(cynara->cynara_watch); +- _dbus_watch_unref(cynara->cynara_watch); +- cynara->cynara_watch = NULL; +- } +- +- if (new_fd != -1) +- { +- unsigned int flags; +- DBusWatch *watch; +- +- switch (status) +- { +- case CYNARA_STATUS_FOR_READ: +- flags = DBUS_WATCH_READABLE; +- break; +- case CYNARA_STATUS_FOR_RW: +- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; +- break; +- default: +- /* Cynara passed unknown status - warn and add RW watch */ +- _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status); +- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; +- break; +- } +- +- watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL); +- if (watch != NULL) +- { +- if (_dbus_loop_add_watch(loop, watch) == TRUE) +- { +- cynara->cynara_watch = watch; +- return; +- } +- +- _dbus_watch_invalidate(watch); +- _dbus_watch_unref(watch); +- } +- +- /* It seems like not much can be done at this point. Cynara events won't be processed +- * until next Cynara function call triggering status callback */ +- _dbus_verbose("Failed to add dbus watch\n"); +- } +-} +- +-static dbus_bool_t +-bus_cynara_watch_callback(DBusWatch *watch, +- unsigned int flags, +- void *data) +-{ +- BusCynara *cynara = (BusCynara *)data; +- int result = cynara_async_process(cynara->cynara); +- if (result != CYNARA_API_SUCCESS) +- _dbus_verbose("cynara_async_process returned %d\n", result); +- +- return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE; +-} +- +-static inline const char * +-call_cause_to_string(cynara_async_call_cause cause) +-{ +- switch (cause) +- { +- case CYNARA_CALL_CAUSE_ANSWER: +- return "ANSWER"; +- case CYNARA_CALL_CAUSE_CANCEL: +- return "CANCEL"; +- case CYNARA_CALL_CAUSE_FINISH: +- return "FINSIH"; +- case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE: +- return "SERVICE NOT AVAILABLE"; +- default: +- return "INVALID"; +- } +-} +- +-static void +-bus_cynara_check_response_callback (cynara_check_id check_id, +- cynara_async_call_cause cause, +- int response, +- void *user_response_data) +-{ +- BusDeferredMessage *deferred_message = user_response_data; +- BusResult result; +- +- _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n", +- (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data); +- +- if (deferred_message == NULL) +- return; +- +- if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED) +- result = BUS_RESULT_TRUE; +- else +- result = BUS_RESULT_FALSE; +- +- bus_deferred_message_response_received(deferred_message, result); +- bus_deferred_message_unref(deferred_message); +-} +- +-#endif /* DBUS_ENABLE_CYNARA */ +diff --git a/bus/system.conf.in b/bus/system.conf.in +index 19d0c04..81c39c8 100644 +--- a/bus/system.conf.in ++++ b/bus/system.conf.in +@@ -72,10 +72,10 @@ + send_interface="org.freedesktop.DBus.Introspectable"/> + +- + +diff --git a/configure.ac b/configure.ac +index 11b5ffd..df9341c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1742,16 +1742,16 @@ AC_ARG_ENABLE([user-session], + AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION], + [test "x$enable_user_session" = xyes]) + +-#enable cynara integration +-AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no]) +-if test "x$enable_cynara" = xyes; then +- PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0], +- [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])], +- [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])]) ++#enable cynagora integration ++AC_ARG_ENABLE([cynagora], [AS_HELP_STRING([--enable-cynagora], [enable Cynagora integration])], [], [enable_cynagora=no]) ++if test "x$enable_cynagora" = xyes; then ++ PKG_CHECK_MODULES([CYNAGORA], [cynagora], ++ [AC_DEFINE([DBUS_ENABLE_CYNAGORA], [1], [Define to enable Cynagora privilege checks in dbus-daemon])], ++ [AC_MSG_ERROR([libcynagora is required to enable Cynagora integration])]) + fi + +-AC_SUBST([CYNARA_CFLAGS]) +-AC_SUBST([CYNARA_LIBS]) ++AC_SUBST([CYNAGORA_CFLAGS]) ++AC_SUBST([CYNAGORA_LIBS]) + + AC_CONFIG_FILES([ + Doxyfile +@@ -1835,7 +1835,7 @@ echo " + Building bus stats API: ${enable_stats} + Building SELinux support: ${have_selinux} + Building AppArmor support: ${have_apparmor} +- Building Cynara support: ${enable_cynara} ++ Building Cynagora support: ${enable_cynagora} + Building inotify support: ${have_inotify} + Building kqueue support: ${have_kqueue} + Building systemd support: ${have_systemd} +-- +2.21.1 + diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend b/meta-app-framework/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend new file mode 100644 index 000000000..028c734aa --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'dbus_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-core/dbus-cynagora/dbus_appfw.inc b/meta-app-framework/recipes-core/dbus-cynagora/dbus_appfw.inc new file mode 100644 index 000000000..177a117b8 --- /dev/null +++ b/meta-app-framework/recipes-core/dbus-cynagora/dbus_appfw.inc @@ -0,0 +1,15 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/dbus-cynagora:" + +SRC_URI_append_class-target = "\ + file://0001-Integration-of-Cynara-asynchronous-security-checks.patch \ + file://0002-Disable-message-dispatching-when-send-rule-result-is.patch \ + file://0003-Handle-unavailability-of-policy-results-for-broadcas.patch \ + file://0004-Add-own-rule-result-unavailability-handling.patch \ + file://0005-Perform-Cynara-runtime-policy-checks-by-default.patch \ + file://0006-Fix-SIGSEGV-on-disconnections.patch \ + file://0007-Switch-from-cynara-to-cynagora.patch \ +" + +DEPENDS_append_class-target = " cynagora smack" +EXTRA_OECONF_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','smack','--enable-cynagora --disable-selinux','',d)}" + diff --git a/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend deleted file mode 100644 index fc73e8f3d..000000000 --- a/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -RDEPENDS_${PN} =+ "nativesdk-af-main-tools nativesdk-af-binder-devtools" - diff --git a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb b/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb deleted file mode 100644 index 7ba909162..000000000 --- a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb +++ /dev/null @@ -1,14 +0,0 @@ -SUMMARY = "AGL Application Framework examples" -DESCRIPTION = "The set of examples associated to the AGL Application Framework" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-app-framework-examples \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - " diff --git a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb b/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb deleted file mode 100644 index 854835d4c..000000000 --- a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "AGL Application Framework core packages" -DESCRIPTION = "The set of packages required by the AGL Application Framework" -LICENSE = "MIT" - -inherit packagegroup - -PACKAGES = "\ - packagegroup-agl-app-framework \ - " - -ALLOW_EMPTY_${PN} = "1" - -RDEPENDS_${PN} += "\ - af-binder \ - libafbwsc \ - af-main \ - nss-localuser \ - systemd-agl-sync \ - af-platform-setup \ - " diff --git a/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch b/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch deleted file mode 100644 index 4c91f7fa3..000000000 --- a/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 935e4e4e746b5ffcda80c80097dc75c2581c1a89 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Wed, 19 Oct 2016 13:45:54 +0200 -Subject: [PATCH] Adapt rules to AGL -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -AGL distribution uses the repository https://github.com/01org/meta-intel-iot-security.git -as basis for the integration of security framework. The security framework -that it provides is an evolution of the security framework of tizen refited -to the distribution Ostro of Intel. This refit took the decision to simplify -the model by removing the running label "User". More can be viewed here: -https://github.com/01org/meta-intel-iot-security/pull/116 - -This commits adapt the template to the rules that are now needed -after this evolution. - -It also integrates one other evolutions: the shared label becomes User::App-Shared instead -of User::App::Shared to avoid collision with application of id "Shared". - -Change-Id: Ieb566b63f8c8e691b5f75e06499a3b576d042546 -Signed-off-by: José Bollo ---- - policy/app-rules-template.smack | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/policy/app-rules-template.smack b/policy/app-rules-template.smack -index 1311169..b4cd2e3 100644 ---- a/policy/app-rules-template.smack -+++ b/policy/app-rules-template.smack -@@ -1,12 +1,10 @@ --System ~APP~ rwx -+System ~APP~ rwxa -+System ~PKG~ rwxat - ~APP~ System wx - ~APP~ System::Shared rx - ~APP~ System::Run rwxat - ~APP~ System::Log rwxa - ~APP~ _ l --User ~APP~ rwxa --User ~PKG~ rwxat --~APP~ User wx - ~APP~ User::Home rxl --~APP~ User::App::Shared rwxat -+~APP~ User::App-Shared rwxat - ~APP~ ~PKG~ rwxat --- -2.7.4 - diff --git a/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend b/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend deleted file mode 100644 index 3306d4c72..000000000 --- a/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/security-manager:" - -EXTRA_OECMAKE =+ " -DGLOBALUSER=afm" -SRC_URI += " \ - file://0001-Adapt-rules-to-AGL.patch \ -" - diff --git a/meta-app-framework/recipes-core/shadow/shadow_%.bbappend b/meta-app-framework/recipes-core/shadow/shadow_%.bbappend index 4f594d47c..70a0c3c82 100644 --- a/meta-app-framework/recipes-core/shadow/shadow_%.bbappend +++ b/meta-app-framework/recipes-core/shadow/shadow_%.bbappend @@ -1,6 +1,3 @@ - -do_install_append() { - sed -i '/^UMASK/s:^.*$:UMASK 077:' ${D}${sysconfdir}/login.defs -} +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'shadow_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-core/shadow/shadow_appfw.inc b/meta-app-framework/recipes-core/shadow/shadow_appfw.inc new file mode 100644 index 000000000..472ffef2c --- /dev/null +++ b/meta-app-framework/recipes-core/shadow/shadow_appfw.inc @@ -0,0 +1,3 @@ +do_install_append() { + sed -i '/^UMASK/s:^.*$:UMASK 077:' ${D}${sysconfdir}/login.defs +} diff --git a/meta-app-framework/recipes-core/smack-system-setup/files/55-udev-smack-default.rules b/meta-app-framework/recipes-core/smack-system-setup/files/55-udev-smack-default.rules new file mode 100644 index 000000000..eca65292f --- /dev/null +++ b/meta-app-framework/recipes-core/smack-system-setup/files/55-udev-smack-default.rules @@ -0,0 +1,27 @@ +# do not edit this file, it will be overwritten on update + +KERNEL=="null", SECLABEL{smack}="*" +KERNEL=="zero", SECLABEL{smack}="*" +KERNEL=="console", SECLABEL{smack}="*" +KERNEL=="kmsg", SECLABEL{smack}="*" +KERNEL=="video*", SECLABEL{smack}="*" +KERNEL=="card*", SECLABEL{smack}="*" +KERNEL=="ptmx", SECLABEL{smack}="*" +KERNEL=="tty", SECLABEL{smack}="*" +KERNEL=="rfkill", SECLABEL{smack}="*" + +SUBSYSTEM=="most_cdev_aim", SECLABEL{smack}="*" + +SUBSYSTEM=="graphics", GROUP="video", SECLABEL{smack}="*" +SUBSYSTEM=="drm", GROUP="video", SECLABEL{smack}="*" +SUBSYSTEM=="dvb", GROUP="video", SECLABEL{smack}="*" +SUBSYSTEM=="sound", GROUP="audio", SECLABEL{smack}="*" + +SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666", SECLABEL{smack}="*" +SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666", SECLABEL{smack}="*" +SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", SECLABEL{smack}="*" +SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty", SECLABEL{smack}="*" +KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", SECLABEL{smack}="*" + +SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640", SECLABEL{smack}="*" +SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640", SECLABEL{smack}="*" diff --git a/meta-app-framework/recipes-core/smack-system-setup/files/systemd-journald.service.conf b/meta-app-framework/recipes-core/smack-system-setup/files/systemd-journald.service.conf new file mode 100644 index 000000000..7035a1410 --- /dev/null +++ b/meta-app-framework/recipes-core/smack-system-setup/files/systemd-journald.service.conf @@ -0,0 +1,16 @@ +# Run systemd-journald with the hat ("^") Smack label. +# +# The journal daemon needs global read access to gather information +# about the services spawned by systemd. The hat label is intended +# for this purpose. The journal daemon is the only part of the +# System domain that needs read access to the User domain. Giving +# the journal daemon the hat label means that we can remove the +# System domain's read access to the User domain and we can avoid +# hard-coding a specific label name for that domain. +# +# Original author: Casey Schaufler +# +# This is considered a configuration change and thus distro specific. +[Service] +SmackProcessLabel=^ + diff --git a/meta-app-framework/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf b/meta-app-framework/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf new file mode 100644 index 000000000..db43c8c51 --- /dev/null +++ b/meta-app-framework/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf @@ -0,0 +1,2 @@ +[Service] +ExecStartPost=/bin/sh -c '([ ! -d /var/tmp ] || chsmack -L -a \"*\" /var/tmp) && ([ ! -d /var/log ] || chsmack -L -a System::Log /var/log && chsmack -L -t /var/log)' diff --git a/meta-app-framework/recipes-core/smack-system-setup/files/tmp.mount.conf b/meta-app-framework/recipes-core/smack-system-setup/files/tmp.mount.conf new file mode 100644 index 000000000..388986e82 --- /dev/null +++ b/meta-app-framework/recipes-core/smack-system-setup/files/tmp.mount.conf @@ -0,0 +1,12 @@ +# Mount /tmp publicly accessable. Based on patch by Michael Demeter . +# Upstream systemd temporarily had SmackFileSystemRoot for this (https://github.com/systemd/systemd/pull/1664), +# but it was removed again (https://github.com/systemd/systemd/issues/1696) because +# util-linux mount will ignore smackfsroot when Smack is not active. However, +# busybox is not that intelligent. +# +# When using busybox mount, adding smackfsroot=* and booting without +# Smack (i.e. security=none), tmp.mount will fail with an error about +# "Bad mount option smackfsroot". +[Mount] +Options=smackfsroot=* + diff --git a/meta-app-framework/recipes-core/smack-system-setup/smack-system-setup_1.bb b/meta-app-framework/recipes-core/smack-system-setup/smack-system-setup_1.bb new file mode 100644 index 000000000..49b12ad3f --- /dev/null +++ b/meta-app-framework/recipes-core/smack-system-setup/smack-system-setup_1.bb @@ -0,0 +1,28 @@ +DESCRIPTION = "setup of a system using smack" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" + +SRC_URI = "\ + file://55-udev-smack-default.rules \ + file://systemd-journald.service.conf \ + file://systemd-tmpfiles-setup.service.conf \ + file://tmp.mount.conf \ +" + +RDEPENDS_${PN}_append_with-lsm-smack = " smack" + +do_install_append_with-lsm-smack() { + # tuning systemd units + install -Dm0644 ${WORKDIR}/systemd-tmpfiles-setup.service.conf \ + ${D}${systemd_unitdir}/system/systemd-tmpfiles-setup.service.d/smack.conf + install -Dm0644 ${WORKDIR}/systemd-journald.service.conf \ + ${D}${systemd_unitdir}/system/systemd-journald.service.d/smack.conf + install -Dm0644 ${WORKDIR}/tmp.mount.conf \ + ${D}${systemd_unitdir}/system/tmp.mount.d/smack.conf + + # add udev rules + install -Dm0644 ${WORKDIR}/55-udev-smack-default.rules \ + ${D}${sysconfdir}/udev/rules.d/55-udev-smack-default.rules +} + +FILES_${PN} += "${systemd_unitdir}" diff --git a/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb b/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb deleted file mode 100644 index 389ab2424..000000000 --- a/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb +++ /dev/null @@ -1,39 +0,0 @@ -SUMMARY = "Systemd synchronization script" -DESCRIPTION = "\ -Systemd synchronization script \ -reload daemon at the first boot. \ -" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -#This script should be the last to be execute at the first boot -POST_INSTALL_LEVEL = "X0" -POST_INSTALL_SCRIPT ?= "${POST_INSTALL_LEVEL}-${PN}.sh" - -do_install() { - install -d ${D}/${sysconfdir}/agl-postinsts - cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} < +Date: Thu, 12 Oct 2017 17:17:56 +0200 +Subject: [PATCH] Switch Smack label earlier +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Switching label after removing capability isn't +possible. + +Change-Id: Ib7dac8f071f36119520ed3205d743c1e3df3cd5e +Signed-off-by: José Bollo +--- + src/core/execute.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/core/execute.c b/src/core/execute.c +index d72e5bf08..0abffd569 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -2707,6 +2707,13 @@ static int exec_child( + } + } + ++ r = setup_smack(context, command); ++ if (r < 0) { ++ *exit_status = EXIT_SMACK_PROCESS_LABEL; ++ *error_message = strdup("Failed to set SMACK process label"); ++ return r; ++ } ++ + if (!cap_test_all(context->capability_bounding_set)) { + r = capability_bounding_set_drop(context->capability_bounding_set, false); + if (r < 0) { +@@ -2775,13 +2782,6 @@ static int exec_child( + } + #endif + +- r = setup_smack(context, command); +- if (r < 0) { +- *exit_status = EXIT_SMACK_PROCESS_LABEL; +- *error_message = strdup("Failed to set SMACK process label"); +- return r; +- } +- + #ifdef HAVE_APPARMOR + if (context->apparmor_profile && mac_apparmor_use()) { + r = aa_change_onexec(context->apparmor_profile); +-- +2.14.3 + diff --git a/meta-app-framework/recipes-core/systemd/systemd_2%.bbappend b/meta-app-framework/recipes-core/systemd/systemd_2%.bbappend new file mode 100644 index 000000000..11b1df9bb --- /dev/null +++ b/meta-app-framework/recipes-core/systemd/systemd_2%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'systemd_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-core/systemd/systemd_appfw.inc b/meta-app-framework/recipes-core/systemd/systemd_appfw.inc new file mode 100644 index 000000000..a5e1ae840 --- /dev/null +++ b/meta-app-framework/recipes-core/systemd/systemd_appfw.inc @@ -0,0 +1,40 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/systemd:" + +# Ensures systemd runs with label "System" +EXTRA_OEMESON_append_with-lsm-smack = " -Dsmack-run-label=System" + +################################################################################## +# Maintaining trivial, non-upstreamable configuration changes as patches +# is tedious. But in same cases (like early mounting of special directories) +# the configuration has to be in code. We make these changes here directly. +################################################################################## +do_patch[prefuncs] += "patch_systemd" +do_patch[vardeps] += "patch_systemd" +patch_systemd() { + # Handling of /run and /sys/fs/cgroup. Make /run a transmuting directory to + # enable systemd communications with services in the User domain. + # Original patch by Michael Demeter . + # + # We simplify the patching by touching only lines which check the result of + # mac_smack_use(). Those are the ones which are used when Smack is active. + # + # smackfsroot=* on /sys/fs/cgroup may be upstreamable, but smackfstransmute=System::Run + # is too distro specific (depends on Smack rules) and thus has to remain here. + sed -i -e 's;\("/sys/fs/cgroup", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfsroot=*\2;' \ + -e 's;\("/run", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfstransmute=System::Run\2;' \ + ${S}/src/core/mount-setup.c +} + +################################################################################## +# What follows is temporary. +# This is a solution to the Bug-AGL SPEC-539 +# (see https://jira.automotivelinux.org/browse/SPEC-539). +# +# It renames the file "touchscreen.rules" to "55-touchscreen.rules" +# This comes with the recipe systemd_230/234 of poky (meta/recipes-core/systemd) +# It should be removed when poky changes. +################################################################################## +do_install_prepend() { + mv ${WORKDIR}/touchscreen.rules ${WORKDIR}/55-touchscreen.rules || true +} + diff --git a/meta-app-framework/recipes-core/util-linux/util-linux_%.bbappend b/meta-app-framework/recipes-core/util-linux/util-linux_%.bbappend new file mode 100644 index 000000000..3894f57cc --- /dev/null +++ b/meta-app-framework/recipes-core/util-linux/util-linux_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'util-linux_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-core/util-linux/util-linux_appfw.inc b/meta-app-framework/recipes-core/util-linux/util-linux_appfw.inc new file mode 100644 index 000000000..05286f80d --- /dev/null +++ b/meta-app-framework/recipes-core/util-linux/util-linux_appfw.inc @@ -0,0 +1,8 @@ +# Enabling Smack support in util-linux enables special support +# in [lib]mount for Smack mount options: they get removed if +# Smack is not active in the current kernel. Important for +# booting with "security=none" when userspace otherwise is +# compiled to use Smack. + +PACKAGECONFIG_append_with-lsm-smack_class-target = " smack" +PACKAGECONFIG[smack] = "--with-smack, --without-smack" diff --git a/meta-app-framework/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb b/meta-app-framework/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb new file mode 100644 index 000000000..3fea2ed91 --- /dev/null +++ b/meta-app-framework/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb @@ -0,0 +1,20 @@ +SUMMARY = "CMake module to ease development of apps" +DESCRIPTION = "This is a migration of former app-templates git submodule which let you \ +ease the development of apps and widget building." +HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/cmake-apps-module" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +SECTION = "apps" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cmake-apps-module;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "7c03348d9c2de43684fa69c3c9e227b25daceaaa" + +PV = "${AGLVERSION}" +S = "${WORKDIR}/git" + +inherit cmake + +FILES_${PN} += " ${datadir}/*/Modules/CMakeAfbTemplates*" + +BBCLASSEXTEND = "native nativesdk" + diff --git a/meta-app-framework/recipes-devtools/json-c/json-c_%.bbappend b/meta-app-framework/recipes-devtools/json-c/json-c_%.bbappend new file mode 100644 index 000000000..051f66aaf --- /dev/null +++ b/meta-app-framework/recipes-devtools/json-c/json-c_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'json-c_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-devtools/json-c/json-c_appfw.inc b/meta-app-framework/recipes-devtools/json-c/json-c_appfw.inc new file mode 100644 index 000000000..f1547e14b --- /dev/null +++ b/meta-app-framework/recipes-devtools/json-c/json-c_appfw.inc @@ -0,0 +1 @@ +EXTRA_OECONF_append = " --enable-threading" diff --git a/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.bb b/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.bb new file mode 100644 index 000000000..1174ac4d7 --- /dev/null +++ b/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.bb @@ -0,0 +1,8 @@ +require libafb-helpers_git.inc + +inherit cmake + +RDEPENDS_${PN}_append = " af-binder" + +ALLOW_EMPTY_${PN} = "1" + diff --git a/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.inc b/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.inc new file mode 100644 index 000000000..6753225b4 --- /dev/null +++ b/meta-app-framework/recipes-devtools/libafb-helpers/libafb-helpers_git.inc @@ -0,0 +1,14 @@ +SUMMARY = "AFB helpers library" +DESCRIPTION = "AFB helpers library to ease JSON object manipulation and binding interaction" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libafb-helpers;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "1d1c6cef6039effd4c045a76d30414b589336d0e" + +PV = "${AGLVERSION}" +S = "${WORKDIR}/git" + +DEPENDS_append = " af-binder jq" + diff --git a/meta-app-framework/recipes-devtools/libappcontroller/libappcontroller_git.bb b/meta-app-framework/recipes-devtools/libappcontroller/libappcontroller_git.bb new file mode 100644 index 000000000..0ee9c5e84 --- /dev/null +++ b/meta-app-framework/recipes-devtools/libappcontroller/libappcontroller_git.bb @@ -0,0 +1,19 @@ +SUMMARY = "Controller library for an Application Framework" +DESCRIPTION = "Controller library to be used to easily create a binding for AGL App Framework" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libappcontroller;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "1bef31c8bbad27f4914484c5007b2e199fb073d4" + +PV = "${AGLVERSION}" +S = "${WORKDIR}/git" + +DEPENDS_append = " af-binder libafb-helpers lua" +RDEPENDS_${PN}_append = " af-binder lua" + +inherit cmake + +ALLOW_EMPTY_${PN} = "1" + diff --git a/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend new file mode 100644 index 000000000..837b85392 --- /dev/null +++ b/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'nativesdk-packagegroup-sdk-host_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host_appfw.inc b/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host_appfw.inc new file mode 100644 index 000000000..8d6ffb5b3 --- /dev/null +++ b/meta-app-framework/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host_appfw.inc @@ -0,0 +1,5 @@ +RDEPENDS_${PN}_append = " \ + nativesdk-af-main-tools \ + nativesdk-af-binder-devtools \ + nativesdk-cmake-apps-module \ +" diff --git a/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend b/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend deleted file mode 100644 index 590ab708a..000000000 --- a/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend +++ /dev/null @@ -1 +0,0 @@ -SYSTEMD_SERVICE_AFTER_append = " afm-system-daemon.service" diff --git a/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf new file mode 100644 index 000000000..d706cc5f7 --- /dev/null +++ b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf @@ -0,0 +1,2 @@ +[Unit] +After=ldconfig.service diff --git a/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_%.bbappend b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_%.bbappend new file mode 100644 index 000000000..6b9025dc5 --- /dev/null +++ b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'run-postinsts_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_appfw.inc b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_appfw.inc new file mode 100644 index 000000000..2f3effce6 --- /dev/null +++ b/meta-app-framework/recipes-devtools/run-postinsts/run-postinsts_appfw.inc @@ -0,0 +1,14 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/run-postinsts:" + +SRC_URI_append = " file://ldconfig-wait.conf" + +do_configure_append() { + if ! grep -q StandardOutput= ${WORKDIR}/run-postinsts.service; then + sed -i '/ExecStart=/iStandardOutput=journal+console' ${WORKDIR}/run-postinsts.service + fi +} + +do_install_append() { + install -d ${D}${sysconfdir}/systemd/system/run-postinsts.service.d + install -m 0644 ${WORKDIR}/ldconfig-wait.conf ${D}${sysconfdir}/systemd/system/run-postinsts.service.d +} diff --git a/meta-app-framework/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch b/meta-app-framework/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch new file mode 100644 index 000000000..d0dcb45af --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch @@ -0,0 +1,29 @@ +From 9162f7d4cfeec7103474e8703218b3679ca9ed10 Mon Sep 17 00:00:00 2001 +From: Ronan Le Martret +Date: Tue, 18 Apr 2017 13:53:26 +0200 +Subject: [PATCH] Change socket mode:add rw for group + +Signed-off-by: Ronan Le Martret +[Updated for 1.18.0 to remove fuzz] +Signed-off-by: Scott Murray + +--- + src/wayland-server.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/wayland-server.c b/src/wayland-server.c +index 3f48dfe..fbccb45 100644 +--- a/src/wayland-server.c ++++ b/src/wayland-server.c +@@ -1528,7 +1528,10 @@ _wl_display_add_socket(struct wl_display *display, struct wl_socket *s) + wl_log("bind() failed with error: %s\n", strerror(errno)); + return -1; + } +- ++ if (chmod(s->addr.sun_path, 0660) < 0) { ++ wl_log("chmod() failed with error: %m\n"); ++ return -1; ++ } + if (listen(s->fd, 128) < 0) { + wl_log("listen() failed with error: %s\n", strerror(errno)); + return -1; diff --git a/meta-app-framework/recipes-graphics/wayland/wayland_%.bbappend b/meta-app-framework/recipes-graphics/wayland/wayland_%.bbappend new file mode 100644 index 000000000..50cad0354 --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/wayland_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'wayland_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-graphics/wayland/wayland_appfw.inc b/meta-app-framework/recipes-graphics/wayland/wayland_appfw.inc new file mode 100644 index 000000000..f39122de2 --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/wayland_appfw.inc @@ -0,0 +1,5 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/wayland:" + +SRC_URI_append = "\ + file://0001-Change-socket-mode-add-rw-for-group.patch \ + " diff --git a/meta-app-framework/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch b/meta-app-framework/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch new file mode 100644 index 000000000..362f6b064 --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch @@ -0,0 +1,51 @@ +Allow regular users to launch Weston + +Signed-off-by: Ronan Le Martret +[Reworked for Weston 7.0.0 switch to meson] +Signed-off-by: Scott Murray + +diff --git a/libweston/launcher-direct.c b/libweston/launcher-direct.c +index 9fa329b6..8e218804 100644 +--- a/libweston/launcher-direct.c ++++ b/libweston/launcher-direct.c +@@ -291,8 +291,10 @@ launcher_direct_connect(struct weston_launcher **out, struct weston_compositor * + { + struct launcher_direct *launcher; + ++#ifndef ENABLE_USER_START + if (geteuid() != 0) + return -EINVAL; ++#endif + + launcher = zalloc(sizeof(*launcher)); + if (launcher == NULL) +diff --git a/libweston/meson.build b/libweston/meson.build +index d8d3fc07..0d39ebf1 100644 +--- a/libweston/meson.build ++++ b/libweston/meson.build +@@ -216,6 +216,10 @@ if get_option('weston-launch') + meson.add_install_script('echo', 'REMINDER: You are installing weston-launch, please make it setuid-root.') + endif + ++if get_option('enable-user-start') ++ config_h.set('ENABLE_USER_START', '1') ++endif ++ + subdir('renderer-gl') + subdir('backend-drm') + subdir('backend-fbdev') +diff --git a/meson_options.txt b/meson_options.txt +index d5bf1d54..c93f31d1 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -217,3 +217,10 @@ option( + value: false, + description: 'Generate documentation' + ) ++ ++option( ++ 'enable-user-start', ++ type: 'boolean', ++ value: true, ++ description: 'Tests: enable start as non-root user' ++) diff --git a/meta-app-framework/recipes-graphics/wayland/weston/smack-weston b/meta-app-framework/recipes-graphics/wayland/weston/smack-weston new file mode 100644 index 000000000..63a32405a --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/weston/smack-weston @@ -0,0 +1,8 @@ +System System::Weston rwxa-- +System::Weston System rwx--- +System::Weston System::Shared rwx--- +System::Weston System::Run rwxat- +System::Weston System::Log rwxa-- +System::Weston _ r-x--l +System::Weston User::Home r-x--l +System::Weston User::App-Shared rwxat- diff --git a/meta-app-framework/recipes-graphics/wayland/weston_8.0.%.bbappend b/meta-app-framework/recipes-graphics/wayland/weston_8.0.%.bbappend new file mode 100644 index 000000000..00bb510bf --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/weston_8.0.%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'weston_8.0_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-graphics/wayland/weston_8.0_appfw.inc b/meta-app-framework/recipes-graphics/wayland/weston_8.0_appfw.inc new file mode 100644 index 000000000..219ed1aef --- /dev/null +++ b/meta-app-framework/recipes-graphics/wayland/weston_8.0_appfw.inc @@ -0,0 +1,19 @@ +FILESEXTRAPATHS_append := ":${THISDIR}/weston" + +SRC_URI_append = "\ + file://0001-Allow-regular-users-to-launch-Weston_7.0.0.patch \ + file://smack-weston \ + " + +EXTRA_OEMESON_append = " -Denable-user-start=true" + +do_install_append() { + if ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'true', 'false', d)}; then + # Install SMACK rules + install -D -m 0644 ${WORKDIR}/smack-weston ${D}${sysconfdir}/smack/accesses.d/weston + fi +} + +FILES_${PN}_append = "\ + ${sysconfdir}/smack/accesses.d/* \ +" diff --git a/meta-app-framework/recipes-kernel/linux/linux-%.bbappend b/meta-app-framework/recipes-kernel/linux/linux-%.bbappend index fba5bf13d..acce6cc1b 100644 --- a/meta-app-framework/recipes-kernel/linux/linux-%.bbappend +++ b/meta-app-framework/recipes-kernel/linux/linux-%.bbappend @@ -1,3 +1,2 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" -SRC_URI_append_with-lsm-smack = " file://audit.cfg" +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'linux-appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-kernel/linux/linux-appfw.inc b/meta-app-framework/recipes-kernel/linux/linux-appfw.inc new file mode 100644 index 000000000..cbf6567e0 --- /dev/null +++ b/meta-app-framework/recipes-kernel/linux/linux-appfw.inc @@ -0,0 +1,21 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" + +IS_KERNEL_RECIPE := "${@bb.data.inherits_class('kernel', d) and 'yes' or 'no'}" +SMACK_KERNEL_SRC_URI_no = "" +SMACK_KERNEL_SRC_URI_yes = "" + +# Kernel config fragment enabling Smack, without making it the default explicitly. +SMACK_KERNEL_SRC_URI_yes += "file://smack.cfg" + +# When added, set Smack as the default LSM. +SMACK_DEFAULT_SECURITY_CFG = "file://smack-default-lsm.cfg" +# Add it by default, can be overridden by changing this variable here. +SMACK_DEFAULT_SECURITY ??= "${SMACK_DEFAULT_SECURITY_CFG}" +SMACK_KERNEL_SRC_URI_yes += " ${SMACK_DEFAULT_SECURITY}" + +# add audit.cfg +SMACK_KERNEL_SRC_URI_yes += " file://audit.cfg" + + +SRC_URI_append_with-lsm-smack = "${SMACK_KERNEL_SRC_URI_${IS_KERNEL_RECIPE}}" + diff --git a/meta-app-framework/recipes-kernel/linux/linux/smack-default-lsm.cfg b/meta-app-framework/recipes-kernel/linux/linux/smack-default-lsm.cfg new file mode 100644 index 000000000..b5c48454e --- /dev/null +++ b/meta-app-framework/recipes-kernel/linux/linux/smack-default-lsm.cfg @@ -0,0 +1,2 @@ +CONFIG_DEFAULT_SECURITY="smack" +CONFIG_DEFAULT_SECURITY_SMACK=y diff --git a/meta-app-framework/recipes-kernel/linux/linux/smack.cfg b/meta-app-framework/recipes-kernel/linux/linux/smack.cfg new file mode 100644 index 000000000..45a92f148 --- /dev/null +++ b/meta-app-framework/recipes-kernel/linux/linux/smack.cfg @@ -0,0 +1,9 @@ +CONFIG_IP_NF_SECURITY=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_SECURITY=y +CONFIG_SECURITY_SMACK=y +CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y +CONFIG_TMPFS_XATTR=y diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework-examples.bb b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework-examples.bb new file mode 100644 index 000000000..7ba909162 --- /dev/null +++ b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework-examples.bb @@ -0,0 +1,14 @@ +SUMMARY = "AGL Application Framework examples" +DESCRIPTION = "The set of examples associated to the AGL Application Framework" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-app-framework-examples \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + " diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework.bb b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework.bb new file mode 100644 index 000000000..d15607a40 --- /dev/null +++ b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-app-framework.bb @@ -0,0 +1,19 @@ +SUMMARY = "AGL Application Framework core packages" +DESCRIPTION = "The set of packages required by the AGL Application Framework" +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES_${PN} = "\ + packagegroup-agl-app-framework \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} = "\ + af-binder \ + libafbwsc \ + af-main \ + nss-localuser \ + af-platform-setup \ + " diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-appfw-native.bb b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-appfw-native.bb new file mode 100644 index 000000000..750fe678d --- /dev/null +++ b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-appfw-native.bb @@ -0,0 +1,16 @@ +SUMMARY = "The software for application framework of AGL IVI profile" +DESCRIPTION = "A set of packages belong to AGL application framework which required by \ +Native App Fw Subsystem" + +LICENSE = "MIT" + +inherit packagegroup + +PACKAGES = "\ + packagegroup-agl-appfw-native \ + " + +ALLOW_EMPTY_${PN} = "1" + +RDEPENDS_${PN} += "\ + " diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend deleted file mode 100644 index 8445a9edd..000000000 --- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend +++ /dev/null @@ -1,9 +0,0 @@ -RDEPENDS_${PN} += "\ - smack-system-setup \ - xmlsec1 \ - cynagora \ - security-manager \ - security-manager-policy \ - agl-users \ - " - diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend deleted file mode 100644 index ad09e5ddf..000000000 --- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -RDEPENDS_${PN} += "\ - packagegroup-agl-app-framework \ - " diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend deleted file mode 100644 index ad09e5ddf..000000000 --- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -RDEPENDS_${PN} += "\ - packagegroup-agl-app-framework \ - " diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-security-framework.bb b/meta-app-framework/recipes-platform/packagegroups/packagegroup-security-framework.bb new file mode 100644 index 000000000..bc708600f --- /dev/null +++ b/meta-app-framework/recipes-platform/packagegroups/packagegroup-security-framework.bb @@ -0,0 +1,23 @@ +SUMMARY = "Security middleware components" +LICENSE = "MIT" + +inherit packagegroup + +# Install Cynara and security-manager by default if (and only if) +# Smack is enabled. +# +# Cynara does not have a hard dependency on Smack security, +# but is meant to be used with it. security-manager however +# links against smack and expects Smack to be active, +# so we do not have any choice. +# +# Without configuration, security-manager is not usable. We use +# the policy packaged from the upstream source code here. Adapting +# it for the distro can be done by patching that source. +RDEPENDS_${PN}_append_with-lsm-smack = " \ + cynagora \ + security-manager \ + security-manager-policy \ + smacknet \ + smack-system-setup \ +" diff --git a/meta-app-framework/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch b/meta-app-framework/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch new file mode 100644 index 000000000..6e1827c08 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch @@ -0,0 +1,42 @@ +From df878b92e01f4d1c3de7f7d8229cea6a431509eb Mon Sep 17 00:00:00 2001 +From: Mingli Yu +Date: Wed, 19 Feb 2020 15:23:40 +0800 +Subject: [PATCH] lib/i386_table.h: add new syscall + +On 32bit system, +After upgrade glibc to 2.31 + # strace -o /tmp/test.log date -s 09:16:45 + # tail -f /tmp/test.log + close(3) = 0 + stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=114, ...}) = 0 + clock_settime64(CLOCK_REALTIME, {tv_sec=1582103805, tv_nsec=0}) = 0 + fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(0x4, 0x40), ...}) = 0 + ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0 + write(1, "Wed Feb 19 09:16:45 UTC 2020\n", 29) = 29 + close(1) = 0 + close(2) = 0 + exit_group(0) = ? + +++ exited with 0 +++ + +It means the clock_settime64 syscall is used, so +add the syscall. + +Upstream-Status: Submitted [https://github.com/linux-audit/audit-userspace/pull/116] + +Signed-off-by: Mingli Yu +--- + lib/i386_table.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/i386_table.h b/lib/i386_table.h +index 1a64c88..65fd4d9 100644 +--- a/lib/i386_table.h ++++ b/lib/i386_table.h +@@ -405,3 +405,4 @@ _S(383, "statx") + _S(384, "arch_prctl") + _S(385, "io_pgetevents") + _S(386, "rseq") ++_S(404, "clock_settime64") +-- +2.7.4 + diff --git a/meta-app-framework/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch b/meta-app-framework/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch new file mode 100644 index 000000000..bb6c61e80 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch @@ -0,0 +1,133 @@ +From bdcdc3dff4469aac88e718bd15958d5ed4b9392a Mon Sep 17 00:00:00 2001 +From: Steve Grubb +Date: Tue, 26 Feb 2019 18:33:33 -0500 +Subject: [PATCH] Add substitue functions for strndupa & rawmemchr + +Upstream-Status: Backport +[https://github.com/linux-audit/audit-userspace/commit/d579a08bb1cde71f939c13ac6b2261052ae9f77e] +--- + auparse/auparse.c | 12 +++++++++++- + auparse/interpret.c | 9 ++++++++- + configure.ac | 14 +++++++++++++- + src/ausearch-lol.c | 12 +++++++++++- + 4 files changed, 43 insertions(+), 4 deletions(-) + +diff --git a/auparse/auparse.c b/auparse/auparse.c +index 650db02..2e1c737 100644 +--- a/auparse/auparse.c ++++ b/auparse/auparse.c +@@ -1,5 +1,5 @@ + /* auparse.c -- +- * Copyright 2006-08,2012-17 Red Hat Inc., Durham, North Carolina. ++ * Copyright 2006-08,2012-19 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This library is free software; you can redistribute it and/or +@@ -1118,6 +1118,16 @@ static int str2event(char *s, au_event_t *e) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* Returns 0 on success and 1 on error */ + static int extract_timestamp(const char *b, au_event_t *e) + { +diff --git a/auparse/interpret.c b/auparse/interpret.c +index 51c4a5e..67b7b77 100644 +--- a/auparse/interpret.c ++++ b/auparse/interpret.c +@@ -853,6 +853,13 @@ err_out: + return print_escaped(id->val); + } + ++// rawmemchr is faster. Let's use it if we have it. ++#ifdef HAVE_RAWMEMCHR ++#define STRCHR rawmemchr ++#else ++#define STRCHR strchr ++#endif ++ + static const char *print_proctitle(const char *val) + { + char *out = (char *)print_escaped(val); +@@ -863,7 +870,7 @@ static const char *print_proctitle(const char *val) + // Proctitle has arguments separated by NUL bytes + // We need to write over the NUL bytes with a space + // so that we can see the arguments +- while ((ptr = rawmemchr(ptr, '\0'))) { ++ while ((ptr = STRCHR(ptr, '\0'))) { + if (ptr >= end) + break; + *ptr = ' '; +diff --git a/configure.ac b/configure.ac +index 54bdbf1..aef07fb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + dnl + define([AC_INIT_NOTICE], + [### Generated automatically using autoconf version] AC_ACVERSION [ +-### Copyright 2005-18 Steve Grubb ++### Copyright 2005-19 Steve Grubb + ### + ### Permission is hereby granted, free of charge, to any person obtaining a + ### copy of this software and associated documentation files (the "Software"), +@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote + AC_CHECK_FUNCS([posix_fallocate]) + dnl; signalfd is needed for libev + AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ]) ++dnl; check if rawmemchr is available ++AC_CHECK_FUNCS([rawmemchr]) ++dnl; check if strndupa is available ++AC_LINK_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ ++ #define _GNU_SOURCE ++ #include ++ int main() { (void) strndupa("test", 10); return 0; }]])], ++ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])], ++ [] ++) + + ALLWARNS="" + ALLDEBUG="-g" +diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c +index 5d17a72..758c33e 100644 +--- a/src/ausearch-lol.c ++++ b/src/ausearch-lol.c +@@ -1,6 +1,6 @@ + /* + * ausearch-lol.c - linked list of linked lists library +-* Copyright (c) 2008,2010,2014,2016 Red Hat Inc., Durham, North Carolina. ++* Copyright (c) 2008,2010,2014,2016,2019 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This software may be freely redistributed and/or modified under the +@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* + * This function will look at the line and pick out pieces of it. + */ +-- +2.7.4 + diff --git a/meta-app-framework/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch b/meta-app-framework/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch new file mode 100644 index 000000000..7c2699540 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch @@ -0,0 +1,57 @@ +From a07271f1cce82122610b622bcea4a8a37528f321 Mon Sep 17 00:00:00 2001 +From: Li xin +Date: Sun, 19 Jul 2015 02:42:58 +0900 +Subject: [PATCH] audit: Fixed swig host contamination issue + +The audit build uses swig to generate a python wrapper. +Unfortunately, the swig info file references host include +directories. Some of these were previously noticed and +eliminated, but the one fixed here was not. + +Upstream-Status: Inappropriate [embedded specific] + +Signed-off-by: Anders Hedlund +Signed-off-by: Joe Slater +Signed-off-by: Yi Zhao +--- + bindings/swig/python3/Makefile.am | 3 ++- + bindings/swig/src/auditswig.i | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/bindings/swig/python3/Makefile.am b/bindings/swig/python3/Makefile.am +index 9938418..fa46aac 100644 +--- a/bindings/swig/python3/Makefile.am ++++ b/bindings/swig/python3/Makefile.am +@@ -22,6 +22,7 @@ + CONFIG_CLEAN_FILES = *.loT *.rej *.orig + AM_CFLAGS = -fPIC -DPIC -fno-strict-aliasing $(PYTHON3_CFLAGS) + AM_CPPFLAGS = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES) ++STDINC ?= /usr/include + LIBS = $(top_builddir)/lib/libaudit.la + SWIG_FLAGS = -python -py3 -modern + SWIG_INCLUDES = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES) +@@ -37,7 +38,7 @@ _audit_la_DEPENDENCIES =${top_srcdir}/lib/libaudit.h ${top_builddir}/lib/libaudi + _audit_la_LIBADD = ${top_builddir}/lib/libaudit.la + nodist__audit_la_SOURCES = audit_wrap.c + audit.py audit_wrap.c: ${srcdir}/../src/auditswig.i +- swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} ${srcdir}/../src/auditswig.i ++ swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} -I$(STDINC) ${srcdir}/../src/auditswig.i + + CLEANFILES = audit.py* audit_wrap.c *~ + +diff --git a/bindings/swig/src/auditswig.i b/bindings/swig/src/auditswig.i +index 7ebb373..424fb68 100644 +--- a/bindings/swig/src/auditswig.i ++++ b/bindings/swig/src/auditswig.i +@@ -39,7 +39,7 @@ signed + #define __attribute(X) /*nothing*/ + typedef unsigned __u32; + typedef unsigned uid_t; +-%include "/usr/include/linux/audit.h" ++%include "linux/audit.h" + #define __extension__ /*nothing*/ + #include + %include "../lib/libaudit.h" +-- +2.7.4 + diff --git a/meta-app-framework/recipes-security/audit/audit/audit-volatile.conf b/meta-app-framework/recipes-security/audit/audit/audit-volatile.conf new file mode 100644 index 000000000..9cbe1547a --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/audit-volatile.conf @@ -0,0 +1 @@ +d /var/log/audit 0750 root root - diff --git a/meta-app-framework/recipes-security/audit/audit/auditd b/meta-app-framework/recipes-security/audit/audit/auditd new file mode 100755 index 000000000..cda2e43d4 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/auditd @@ -0,0 +1,153 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: auditd +# Required-Start: $local_fs +# Required-Stop: $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Audit Daemon +# Description: Collects audit information from Linux 2.6 Kernels. +### END INIT INFO + +# Author: Philipp Matthias Hahn +# Based on Debians /etc/init.d/skeleton and Auditds init.d/auditd.init + +# June, 2012: Adopted for yocto + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DESC="audit daemon" +NAME=auditd +DAEMON=/sbin/auditd +PIDFILE=/var/run/"$NAME".pid +SCRIPTNAME=/etc/init.d/"$NAME" + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME" + +. /etc/default/rcS + +. /etc/init.d/functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null \ + || return 1 + start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- \ + $EXTRAOPTIONS \ + || return 2 + if [ -f /etc/audit/audit.rules ] + then + /sbin/auditctl -R /etc/audit/audit.rules >/dev/null + fi +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon -K --quiet --pidfile "$PIDFILE" --name "$NAME" + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f "$PIDFILE" + rm -f /var/run/audit_events + # Remove watches so shutdown works cleanly + case "$AUDITD_CLEAN_STOP" in + no|NO) ;; + *) /sbin/auditctl -D >/dev/null ;; + esac + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + start-stop-daemon -K --signal HUP --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +if [ ! -e /var/log/audit ]; then + mkdir -p /var/log/audit + [ -x /sbin/restorecon ] && /sbin/restorecon -F /var/log/audit +fi + +case "$1" in + start) + [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && echo 0 ;; + 2) [ "$VERBOSE" != no ] && echo 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && echo 0 ;; + 2) [ "$VERBOSE" != no ] && echo 1 ;; + esac + ;; + reload|force-reload) + echo "Reloading $DESC" "$NAME" + do_reload + echo $? + ;; + restart) + echo "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) echo 0 ;; + 1) echo 1 ;; # Old process is still running + *) echo 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + echo 1 + ;; + esac + ;; + rotate) + echo "Rotating $DESC logs" "$NAME" + start-stop-daemon -K --signal USR1 --quiet --pidfile "$PIDFILE" --name "$NAME" + echo $? + ;; + status) + pidofproc "$DAEMON" >/dev/null + status=$? + if [ $status -eq 0 ]; then + echo "$NAME is running." + else + echo "$NAME is not running." + fi + exit $status + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|rotate|status}" >&2 + exit 3 + ;; +esac + +: diff --git a/meta-app-framework/recipes-security/audit/audit/auditd.service b/meta-app-framework/recipes-security/audit/audit/auditd.service new file mode 100644 index 000000000..ebc079897 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit/auditd.service @@ -0,0 +1,20 @@ +[Unit] +Description=Security Auditing Service +DefaultDependencies=no +After=local-fs.target +Conflicts=shutdown.target +Before=sysinit.target shutdown.target +After=systemd-tmpfiles-setup.service + +[Service] +ExecStart=/sbin/auditd -n +## To use augenrules, copy this file to /etc/systemd/system/auditd.service +## and uncomment the next line and delete/comment out the auditctl line. +## Then copy existing rules to /etc/audit/rules.d/ +## Not doing this last step can cause loss of existing rules +#ExecStartPost=-/sbin/augenrules --load +ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/meta-app-framework/recipes-security/audit/audit_2.8.5.bb b/meta-app-framework/recipes-security/audit/audit_2.8.5.bb new file mode 100644 index 000000000..af36ed5e2 --- /dev/null +++ b/meta-app-framework/recipes-security/audit/audit_2.8.5.bb @@ -0,0 +1,106 @@ +SUMMARY = "User space tools for kernel auditing" +DESCRIPTION = "The audit package contains the user space utilities for \ +storing and searching the audit records generated by the audit subsystem \ +in the Linux kernel." +HOMEPAGE = "http://people.redhat.com/sgrubb/audit/" +SECTION = "base" +LICENSE = "GPLv2+ & LGPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" + +SRC_URI = "git://github.com/linux-audit/${BPN}-userspace.git;branch=2.8_maintenance \ + file://Add-substitue-functions-for-strndupa-rawmemchr.patch \ + file://Fixed-swig-host-contamination-issue.patch \ + file://0001-lib-i386_table.h-add-new-syscall.patch \ + file://auditd \ + file://auditd.service \ + file://audit-volatile.conf \ +" + +S = "${WORKDIR}/git" +SRCREV = "5fae55c1ad15b3cefe6890eba7311af163e9133c" + +inherit autotools python3native update-rc.d systemd + +UPDATERCPN = "auditd" +INITSCRIPT_NAME = "auditd" +INITSCRIPT_PARAMS = "defaults" + +SYSTEMD_PACKAGES = "auditd" +SYSTEMD_SERVICE_auditd = "auditd.service" + +DEPENDS += "python3 tcp-wrappers libcap-ng linux-libc-headers swig-native" + +EXTRA_OECONF += "--without-prelude \ + --with-libwrap \ + --enable-gssapi-krb5=no \ + --with-libcap-ng=yes \ + --with-python3=yes \ + --libdir=${base_libdir} \ + --sbindir=${base_sbindir} \ + --without-python \ + --without-golang \ + --disable-zos-remote \ + " +EXTRA_OECONF_append_arm = " --with-arm=yes" +EXTRA_OECONF_append_aarch64 = " --with-aarch64=yes" + +EXTRA_OEMAKE += "PYLIBVER='python${PYTHON_BASEVERSION}' \ + PYINC='${STAGING_INCDIR}/$(PYLIBVER)' \ + pyexecdir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \ + STDINC='${STAGING_INCDIR}' \ + pkgconfigdir=${libdir}/pkgconfig \ + " + +SUMMARY_audispd-plugins = "Plugins for the audit event dispatcher" +DESCRIPTION_audispd-plugins = "The audispd-plugins package provides plugins for the real-time \ +interface to the audit system, audispd. These plugins can do things \ +like relay events to remote machines or analyze events for suspicious \ +behavior." + +PACKAGES =+ "audispd-plugins" +PACKAGES += "auditd ${PN}-python" + +FILES_${PN} = "${sysconfdir}/libaudit.conf ${base_libdir}/libaudit.so.1* ${base_libdir}/libauparse.so.*" +FILES_auditd += "${bindir}/* ${base_sbindir}/* ${sysconfdir}/*" +FILES_audispd-plugins += "${sysconfdir}/audisp/audisp-remote.conf \ + ${sysconfdir}/audisp/plugins.d/au-remote.conf \ + ${sbindir}/audisp-remote ${localstatedir}/spool/audit \ + " +FILES_${PN}-dbg += "${libdir}/python${PYTHON_BASEVERSION}/*/.debug" +FILES_${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}" + +CONFFILES_auditd += "${sysconfdir}/audit/audit.rules" +RDEPENDS_auditd += "bash" + +do_install_append() { + rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.a + rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.la + + # reuse auditd config + [ ! -e ${D}/etc/default ] && mkdir ${D}/etc/default + mv ${D}/etc/sysconfig/auditd ${D}/etc/default + rmdir ${D}/etc/sysconfig/ + + # replace init.d + install -D -m 0755 ${WORKDIR}/auditd ${D}/etc/init.d/auditd + rm -rf ${D}/etc/rc.d + + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${sysconfdir}/tmpfiles.d/ + install -m 0644 ${WORKDIR}/audit-volatile.conf ${D}${sysconfdir}/tmpfiles.d/ + fi + + # install systemd unit files + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/auditd.service ${D}${systemd_unitdir}/system + + # audit-2.5 doesn't install any rules by default, so we do that here + mkdir -p ${D}/etc/audit ${D}/etc/audit/rules.d + cp ${S}/rules/10-base-config.rules ${D}/etc/audit/rules.d/audit.rules + + chmod 750 ${D}/etc/audit ${D}/etc/audit/rules.d + chmod 640 ${D}/etc/audit/auditd.conf ${D}/etc/audit/rules.d/audit.rules + + # Based on the audit.spec "Copy default rules into place on new installation" + cp ${D}/etc/audit/rules.d/audit.rules ${D}/etc/audit/audit.rules +} diff --git a/meta-app-framework/recipes-security/cynagoauth/cynagoauth_0.1.bb b/meta-app-framework/recipes-security/cynagoauth/cynagoauth_0.1.bb new file mode 100644 index 000000000..c77c99189 --- /dev/null +++ b/meta-app-framework/recipes-security/cynagoauth/cynagoauth_0.1.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "OAuth server using cynagora backend" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagoauth.git;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "26a5dbddf3a9bfde481a6fcd2aae16c7ecba665f" +PV = "0.1+git${SRCPV}" + +S = "${WORKDIR}/git" + +DEPENDS = "json-c libmicrohttpd openssl cynagora" + +inherit cmake + +EXTRA_OECMAKE += " \ + -DDEFAULTHOSTS=:7777 \ + -DDEFAULTURL=http://localhost:7777/tok \ + -DUNITDIR_SYSTEM=${systemd_system_unitdir} \ +" + +FILES_${PN} += "${systemd_system_unitdir}" + + diff --git a/meta-app-framework/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb b/meta-app-framework/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb new file mode 100644 index 000000000..f146051cd --- /dev/null +++ b/meta-app-framework/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "Cynara service with client libraries" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "7d7907651c42c5c32deabc17b639e0e1765eae60" +PV = "2.1+git${SRCPV}" + +S = "${WORKDIR}/git" + +inherit cmake + +PROVIDES = "cynara" +RPROVIDES_${PN} = "cynara" +DEPENDS = "libcap" +RDEPENDS_${PN} = "cynagora" + +EXTRA_OECMAKE += " \ + -DWITH_SYSTEMD=OFF \ + -DWITH_CYNARA_COMPAT=ON \ + -DDIRECT_CYNARA_COMPAT=ON \ +" + +do_install_append() { + # remove cynagora stuff + rm $(find ${D} -name '*cynagora*') + # remove stupid test + rm -r ${D}${bindir} +} + diff --git a/meta-app-framework/recipes-security/cynagora/cynagora/run-ptest b/meta-app-framework/recipes-security/cynagora/cynagora/run-ptest new file mode 100755 index 000000000..f95f0725b --- /dev/null +++ b/meta-app-framework/recipes-security/cynagora/cynagora/run-ptest @@ -0,0 +1,4 @@ +#!/bin/sh + +# test access to cynagora server +cynagora-admin list > /dev/null diff --git a/meta-app-framework/recipes-security/cynagora/cynagora_2.1.bb b/meta-app-framework/recipes-security/cynagora/cynagora_2.1.bb new file mode 100644 index 000000000..73f2f0949 --- /dev/null +++ b/meta-app-framework/recipes-security/cynagora/cynagora_2.1.bb @@ -0,0 +1,38 @@ +DESCRIPTION = "Cynagora service and client libraries" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "7d7907651c42c5c32deabc17b639e0e1765eae60" +PV = "2.1+git${SRCPV}" + +S = "${WORKDIR}/git" + +DEPENDS = "systemd libcap" + +inherit cmake + +EXTRA_OECMAKE += " \ + -DSYSTEMD_UNIT_DIR=${systemd_system_unitdir} \ + -DWITH_SYSTEMD=ON \ + -DWITH_CYNARA_COMPAT=OFF \ +" + +inherit useradd +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "-r cynagora" +USERADD_PARAM_${PN} = "\ +--system --home ${localstatedir}/lib/empty \ +--no-create-home --shell /bin/false \ +--gid cynagora cynagora \ +" + +FILES_${PN} += "${systemd_system_unitdir}" + +PACKAGES =+ "${PN}-tools" +FILES_${PN}-tools += "${bindir}/cynagora-admin ${bindir}/cynagora-agent" +RDEPENDS_${PN}_append_agl-devel = " ${PN}-tools" + +inherit ptest +SRC_URI_append = " file://run-ptest" +RDEPENDS_${PN}-ptest_append = " ${PN}-tools" diff --git a/meta-app-framework/recipes-security/security-manager/security-manager.inc b/meta-app-framework/recipes-security/security-manager/security-manager.inc new file mode 100644 index 000000000..e1d1f4011 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager.inc @@ -0,0 +1,83 @@ +DESCRIPTION = "Security manager and utilities" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327;beginline=3" + +inherit cmake + +B = "${S}" + +DEPENDS = " \ + attr \ + boost \ + cynara \ + icu \ + libcap \ + smack \ + sqlite3 \ + systemd \ +" + +PACKAGECONFIG ??= "" +PACKAGECONFIG[debug] = "-DCMAKE_BUILD_TYPE=DEBUG,-DCMAKE_BUILD_TYPE=RELEASE" + +TZ_SYS_DB ?= "/var/db/security-manager" + +EXTRA_OECMAKE = " \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DVERSION=${PV} \ + -DSYSTEMD_INSTALL_DIR=${systemd_unitdir}/system \ + -DBIN_INSTALL_DIR=${bindir} \ + -DDB_INSTALL_DIR=${TZ_SYS_DB} \ + -DLIB_INSTALL_DIR=${libdir} \ + -DSHARE_INSTALL_PREFIX=${datadir} \ + -DINCLUDE_INSTALL_DIR=${includedir} \ +" + +inherit systemd +SYSTEMD_SERVICE_${PN} = "security-manager.service" + +inherit features_check +REQUIRED_DISTRO_FEATURES += "smack" + +# The upstream source code contains the Tizen-specific policy configuration files. +# To replace them, create a security-manager.bbappend and set the following variable to a +# space-separated list of policy file names (not URIs!), for example: +# SECURITY_MANAGER_POLICY = "privilege-group.list usertype-system.profile" +# +# Leave it empty to use the upstream Tizen policy. +SECURITY_MANAGER_POLICY ?= "" +SRC_URI_append = " ${@' '.join(['file://' + x for x in d.getVar('SECURITY_MANAGER_POLICY', True).split()])}" +python do_patch_append () { + import os + import shutil + import glob + files = d.getVar('SECURITY_MANAGER_POLICY', True).split() + if files: + s = d.getVar('S', True) + workdir = d.getVar('WORKDIR', True) + for pattern in ['*.profile', '*.list']: + for old_file in glob.glob(s + '/policy/' + pattern): + os.unlink(old_file) + for file in files: + shutil.copy(file, s + '/policy') +} + +do_install_append () { + install -d ${D}/${systemd_unitdir}/system/multi-user.target.wants + ln -s ../security-manager.service ${D}/${systemd_unitdir}/system/multi-user.target.wants/security-manager.service + install -d ${D}/${systemd_unitdir}/system/sockets.target.wants + ln -s ../security-manager.socket ${D}/${systemd_unitdir}/system/sockets.target.wants/security-manager.socket +} + +RDEPENDS_${PN} += "sqlite3 cynara" +FILES_${PN} += " \ + ${systemd_unitdir} \ + ${TZ_SYS_DB} \ + ${bindir}/.security-manager-setup \ +" + +PACKAGES =+ "${PN}-policy" +FILES_${PN}-policy = " \ + ${datadir}/${PN} \ + ${bindir}/security-manager-policy-reload \ +" diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch new file mode 100644 index 000000000..4c91f7fa3 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch @@ -0,0 +1,50 @@ +From 935e4e4e746b5ffcda80c80097dc75c2581c1a89 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Wed, 19 Oct 2016 13:45:54 +0200 +Subject: [PATCH] Adapt rules to AGL +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +AGL distribution uses the repository https://github.com/01org/meta-intel-iot-security.git +as basis for the integration of security framework. The security framework +that it provides is an evolution of the security framework of tizen refited +to the distribution Ostro of Intel. This refit took the decision to simplify +the model by removing the running label "User". More can be viewed here: +https://github.com/01org/meta-intel-iot-security/pull/116 + +This commits adapt the template to the rules that are now needed +after this evolution. + +It also integrates one other evolutions: the shared label becomes User::App-Shared instead +of User::App::Shared to avoid collision with application of id "Shared". + +Change-Id: Ieb566b63f8c8e691b5f75e06499a3b576d042546 +Signed-off-by: José Bollo +--- + policy/app-rules-template.smack | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/policy/app-rules-template.smack b/policy/app-rules-template.smack +index 1311169..b4cd2e3 100644 +--- a/policy/app-rules-template.smack ++++ b/policy/app-rules-template.smack +@@ -1,12 +1,10 @@ +-System ~APP~ rwx ++System ~APP~ rwxa ++System ~PKG~ rwxat + ~APP~ System wx + ~APP~ System::Shared rx + ~APP~ System::Run rwxat + ~APP~ System::Log rwxa + ~APP~ _ l +-User ~APP~ rwxa +-User ~PKG~ rwxat +-~APP~ User wx + ~APP~ User::Home rxl +-~APP~ User::App::Shared rwxat ++~APP~ User::App-Shared rwxat + ~APP~ ~PKG~ rwxat +-- +2.7.4 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch new file mode 100644 index 000000000..91ce81963 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch @@ -0,0 +1,47 @@ +From 3d9d1d83fe298a364f51ad752c17aad461beded3 Mon Sep 17 00:00:00 2001 +From: Patrick Ohly +Date: Tue, 24 Mar 2015 04:54:03 -0700 +Subject: [PATCH 01/14] systemd: stop using compat libs + +libsystemd-journal and libsystemd-daemon are considered obsolete +in systemd since 2.09 and may not be available (not compiled +by default). + +The code works fine with the current libsystemd, so just +use that. + +Signed-off-by: Patrick Ohly +Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1 +--- + src/common/CMakeLists.txt | 2 +- + src/server/CMakeLists.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index 2da9c3e..968c7c1 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -3,7 +3,7 @@ SET(COMMON_VERSION ${COMMON_VERSION_MAJOR}.0.2) + + PKG_CHECK_MODULES(COMMON_DEP + REQUIRED +- libsystemd-journal ++ libsystemd + libsmack + db-util + cynara-admin +diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt +index 753eb96..6849d76 100644 +--- a/src/server/CMakeLists.txt ++++ b/src/server/CMakeLists.txt +@@ -1,6 +1,6 @@ + PKG_CHECK_MODULES(SERVER_DEP + REQUIRED +- libsystemd-daemon ++ libsystemd + ) + + FIND_PACKAGE(Boost REQUIRED) +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch new file mode 100644 index 000000000..b6346480b --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch @@ -0,0 +1,36 @@ +From a90515613f09140049b2bdf471fa83d5dd7bad1c Mon Sep 17 00:00:00 2001 +From: Patrick Ohly +Date: Wed, 19 Aug 2015 15:02:32 +0200 +Subject: [PATCH 02/14] security-manager-policy-reload: do not depend on GNU + sed + +\U (= make replacement uppercase) is a GNU sed extension which is not +supported by other sed implementation's (like the one from +busybox). When using busybox, the bucket for user profiles became +USER_TYPE_Uadmin instead USER_TYPE_ADMIN. + +To make SecurityManager more portable, better use tr to turn the +bucket name into uppercase. + +Signed-off-by: Patrick Ohly +Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1 +--- + policy/security-manager-policy-reload | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload +index 274c49c..6f211c6 100755 +--- a/policy/security-manager-policy-reload ++++ b/policy/security-manager-policy-reload +@@ -33,7 +33,7 @@ END + find "$POLICY_PATH" -name "usertype-*.profile" | + while read file + do +- bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\U\1|'`" ++ bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\1|' | tr '[:lower:]' '[:upper:]'`" + + # Re-create the bucket with empty contents + cyad --delete-bucket=$bucket || true +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch new file mode 100644 index 000000000..d79345e01 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch @@ -0,0 +1,117 @@ +From a80e33bc0a10fa4bed5d0b7bf29f45dd2565d309 Mon Sep 17 00:00:00 2001 +From: Alejandro Joya +Date: Wed, 4 Nov 2015 19:01:35 -0600 +Subject: [PATCH 03/14] Smack-rules: create two new functions + +It let to smack-rules to create multiple set of rules +related with the privileges. + +It runs from the same bases than for a static set of rules on the +template, but let you add 1 or many templates for different cases. + +Change-Id: I14f8d4e914ad5a7ba34c96f3cb5589f0b15292de +Signed-off-by: Alejandro Joya +--- + src/common/include/smack-rules.h | 15 +++++++++++ + src/common/smack-rules.cpp | 44 ++++++++++++++++++++++++++++++++ + 2 files changed, 59 insertions(+) + +diff --git a/src/common/include/smack-rules.h b/src/common/include/smack-rules.h +index 91446a7..3ad9dd4 100644 +--- a/src/common/include/smack-rules.h ++++ b/src/common/include/smack-rules.h +@@ -47,6 +47,8 @@ public: + void addFromTemplate(const std::vector &templateRules, + const std::string &appId, const std::string &pkgId); + void addFromTemplateFile(const std::string &appId, const std::string &pkgId); ++ void addFromTemplateFile(const std::string &appId, const std::string &pkgId, ++ const std::string &path); + + void apply() const; + void clear() const; +@@ -74,6 +76,19 @@ public: + */ + static void installApplicationRules(const std::string &appId, const std::string &pkgId, + const std::vector &pkgContents); ++ /** ++ * Install privileges-specific smack rules. ++ * ++ * Function creates smack rules using predefined template. Rules are applied ++ * to the kernel and saved on persistent storage so they are loaded on system boot. ++ * ++ * @param[in] appId - application id that is beeing installed ++ * @param[in] pkgId - package id that the application is in ++ * @param[in] pkgContents - a list of all applications in the package ++ * @param[in] privileges - a list of all prvileges ++ */ ++ static void installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, ++ const std::vector &pkgContents, const std::vector &privileges); + /** + * Uninstall package-specific smack rules. + * +diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp +index 3629e0f..922a56f 100644 +--- a/src/common/smack-rules.cpp ++++ b/src/common/smack-rules.cpp +@@ -135,6 +135,29 @@ void SmackRules::saveToFile(const std::string &path) const + } + } + ++void SmackRules::addFromTemplateFile(const std::string &appId, ++ const std::string &pkgId, const std::string &path) ++{ ++ std::vector templateRules; ++ std::string line; ++ std::ifstream templateRulesFile(path); ++ ++ if (!templateRulesFile.is_open()) { ++ LogError("Cannot open rules template file: " << path); ++ ThrowMsg(SmackException::FileError, "Cannot open rules template file: " << path); ++ } ++ ++ while (std::getline(templateRulesFile, line)) { ++ templateRules.push_back(line); ++ } ++ ++ if (templateRulesFile.bad()) { ++ LogError("Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH); ++ ThrowMsg(SmackException::FileError, "Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH); ++ } ++ ++ addFromTemplate(templateRules, appId, pkgId); ++} + + void SmackRules::addFromTemplateFile(const std::string &appId, + const std::string &pkgId) +@@ -223,7 +246,28 @@ std::string SmackRules::getApplicationRulesFilePath(const std::string &appId) + std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str())); + return path; + } ++void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, ++ const std::vector &pkgContents, const std::vector &privileges) ++{ ++ SmackRules smackRules; ++ std::string appPath = getApplicationRulesFilePath(appId); ++ smackRules.loadFromFile(appPath); ++ struct stat buffer; ++ for (auto privilege : privileges) { ++ if (privilege.empty()) ++ continue; ++ std::string fprivilege ( privilege + "-template.smack"); ++ std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str())); ++ if( stat(path.c_str(), &buffer) == 0) ++ smackRules.addFromTemplateFile(appId, pkgId, path); ++ } ++ ++ if (smack_smackfs_path() != NULL) ++ smackRules.apply(); + ++ smackRules.saveToFile(appPath); ++ updatePackageRules(pkgId, pkgContents); ++} + void SmackRules::installApplicationRules(const std::string &appId, const std::string &pkgId, + const std::vector &pkgContents) + { +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch new file mode 100644 index 000000000..59d4971ff --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch @@ -0,0 +1,34 @@ +From a5979d9d674e400ecd7fcdf5d7589cfa0cfeb492 Mon Sep 17 00:00:00 2001 +From: Alejandro Joya +Date: Wed, 4 Nov 2015 19:06:23 -0600 +Subject: [PATCH 04/14] app-install: implement multiple set of smack-rules + +If it's need it could create load multiple set of smack rules +related with the privileges. +It wouldn't affect the case that only the default set of rules is need it. + +Signed-off-by: Alejandro Joya +--- + src/common/service_impl.cpp | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp +index 7fd621c..ae305d3 100644 +--- a/src/common/service_impl.cpp ++++ b/src/common/service_impl.cpp +@@ -338,6 +338,12 @@ int appInstall(const app_inst_req &req, uid_t uid) + LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: " + << req.pkgId << ". Applications in package: " << pkgContents.size()); + SmackRules::installApplicationRules(req.appId, req.pkgId, pkgContents); ++ /*Setup for privileges custom rules*/ ++ LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: " ++ << req.pkgId << ". Applications in package: " << pkgContents.size() ++ << " and Privileges"); ++ SmackRules::installApplicationPrivilegesRules(req.appId, req.pkgId, ++ pkgContents,req.privileges); + } catch (const SmackException::Base &e) { + LogError("Error while applying Smack policy for application: " << e.DumpToString()); + return SECURITY_MANAGER_API_ERROR_SETTING_FILE_LABEL_FAILED; +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch new file mode 100644 index 000000000..0739f28c7 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch @@ -0,0 +1,32 @@ +From 198ba9b9782fda19803e94d2afeff91189ac27af Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Wed, 13 Jan 2016 17:30:06 +0100 +Subject: [PATCH 05/14] c++11: replace deprecated auto_ptr +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Upstream-Status: Submitted [https://review.tizen.org/gerrit/#/c/56940/] + +Change-Id: Id793c784c9674eef48f346226c094bdd9f7bbda8 +Signed-off-by: José Bollo +--- + src/dpl/core/include/dpl/binary_queue.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dpl/core/include/dpl/binary_queue.h b/src/dpl/core/include/dpl/binary_queue.h +index dd03f5e..185b6c7 100644 +--- a/src/dpl/core/include/dpl/binary_queue.h ++++ b/src/dpl/core/include/dpl/binary_queue.h +@@ -33,7 +33,7 @@ namespace SecurityManager { + * Binary queue auto pointer + */ + class BinaryQueue; +-typedef std::auto_ptr BinaryQueueAutoPtr; ++typedef std::unique_ptr BinaryQueueAutoPtr; + + /** + * Binary stream implemented as constant size bucket list +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch new file mode 100644 index 000000000..3b8aad98c --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch @@ -0,0 +1,47 @@ +From ec098bf03cea23350ca7d1ea2ad88b9c88228943 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Fri, 8 Jan 2016 16:53:46 +0100 +Subject: [PATCH 06/14] socket-manager: removes tizen specific call +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The function 'smack_fgetlabel' is specific to Tizen +and is no more maintained upstream. + +Upstream-Status: Accepted [https://review.tizen.org/gerrit/#/c/56507/] + +Change-Id: I3802742b1758efe37b33e6d968ff727d68f2fd1f +Signed-off-by: José Bollo +--- + src/server/main/socket-manager.cpp | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/server/main/socket-manager.cpp b/src/server/main/socket-manager.cpp +index 94c54c6..5e1a79b 100644 +--- a/src/server/main/socket-manager.cpp ++++ b/src/server/main/socket-manager.cpp +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -493,9 +494,9 @@ int SocketManager::CreateDomainSocketHelp( + if (smack_check()) { + LogInfo("Set up smack label: " << desc.smackLabel); + +- if (0 != smack_fsetlabel(sockfd, desc.smackLabel.c_str(), SMACK_LABEL_IPIN)) { +- LogError("Error in smack_fsetlabel"); +- ThrowMsg(Exception::InitFailed, "Error in smack_fsetlabel"); ++ if (0 != smack_set_label_for_file(sockfd, XATTR_NAME_SMACKIPIN, desc.smackLabel.c_str())) { ++ LogError("Error in smack_set_label_for_file"); ++ ThrowMsg(Exception::InitFailed, "Error in smack_set_label_for_file"); + } + } else { + LogInfo("No smack on platform. Socket won't be securied with smack label!"); +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch new file mode 100644 index 000000000..bad99d25a --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch @@ -0,0 +1,78 @@ +From 9d0791dab4b4df086374c5c0ba2a6558e10e81c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Mon, 16 Nov 2015 15:56:27 +0100 +Subject: [PATCH 07/14] removes dependency to libslp-db-utils + +Change-Id: I90471e77d20e04bae58cc42eb2639e4aef97fdec +--- + src/common/CMakeLists.txt | 3 ++- + src/dpl/db/src/sql_connection.cpp | 17 +---------------- + 2 files changed, 3 insertions(+), 17 deletions(-) + +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index 968c7c1..9ae376f 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -5,7 +5,8 @@ PKG_CHECK_MODULES(COMMON_DEP + REQUIRED + libsystemd + libsmack +- db-util ++ sqlite3 ++ icu-i18n + cynara-admin + cynara-client + ) +diff --git a/src/dpl/db/src/sql_connection.cpp b/src/dpl/db/src/sql_connection.cpp +index fdb4fe4..f49a6dc 100644 +--- a/src/dpl/db/src/sql_connection.cpp ++++ b/src/dpl/db/src/sql_connection.cpp +@@ -26,7 +26,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -606,16 +605,7 @@ void SqlConnection::Connect(const std::string &address, + + // Connect to database + int result; +- if (type & Flag::UseLucene) { +- result = db_util_open_with_options( +- address.c_str(), +- &m_connection, +- flag, +- NULL); +- +- m_usingLucene = true; +- LogPedantic("Lucene index enabled"); +- } else { ++ (void)type; + result = sqlite3_open_v2( + address.c_str(), + &m_connection, +@@ -624,7 +614,6 @@ void SqlConnection::Connect(const std::string &address, + + m_usingLucene = false; + LogPedantic("Lucene index disabled"); +- } + + if (result == SQLITE_OK) { + LogPedantic("Connected to DB"); +@@ -653,11 +642,7 @@ void SqlConnection::Disconnect() + + int result; + +- if (m_usingLucene) { +- result = db_util_close(m_connection); +- } else { + result = sqlite3_close(m_connection); +- } + + if (result != SQLITE_OK) { + const char *error = sqlite3_errmsg(m_connection); +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch new file mode 100644 index 000000000..5ece7ef4f --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch @@ -0,0 +1,38 @@ +From a1d9b40b4fa2e73d31a53e398c286bffeaae1732 Mon Sep 17 00:00:00 2001 +From: Ronan +Date: Wed, 12 Oct 2016 17:48:55 +0200 +Subject: [PATCH 08/14] Fix gcc6 build + +Signed-off-by: ronan +--- + src/client/client-security-manager.cpp | 1 + + src/common/include/privilege_db.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/src/client/client-security-manager.cpp b/src/client/client-security-manager.cpp +index 74a6b30..347cddd 100644 +--- a/src/client/client-security-manager.cpp ++++ b/src/client/client-security-manager.cpp +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + + static const char *EMPTY = ""; + +diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h +index 4d73d90..08fb9d6 100644 +--- a/src/common/include/privilege_db.h ++++ b/src/common/include/privilege_db.h +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + + #include + #include +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch new file mode 100644 index 000000000..706eb1a93 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch @@ -0,0 +1,40 @@ +From 382379d74221bcc60a0ab70d63430a1c0587b2ec Mon Sep 17 00:00:00 2001 +From: Ronan +Date: Thu, 13 Oct 2016 11:37:47 +0200 +Subject: [PATCH 09/14] Fix Cmake conf for gcc6 build + +Signed-off-by: Ronan +--- + src/cmd/CMakeLists.txt | 4 +--- + src/server/CMakeLists.txt | 1 - + 2 files changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt +index ee9a160..aa7a12c 100644 +--- a/src/cmd/CMakeLists.txt ++++ b/src/cmd/CMakeLists.txt +@@ -1,8 +1,6 @@ + FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options) + +-INCLUDE_DIRECTORIES(SYSTEM +- ${Boost_INCLUDE_DIRS} +- ) ++ + + INCLUDE_DIRECTORIES( + ${INCLUDE_PATH} +diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt +index 6849d76..9598037 100644 +--- a/src/server/CMakeLists.txt ++++ b/src/server/CMakeLists.txt +@@ -8,7 +8,6 @@ FIND_PACKAGE(Threads REQUIRED) + + INCLUDE_DIRECTORIES(SYSTEM + ${SERVER_DEP_INCLUDE_DIRS} +- ${Boost_INCLUDE_DIRS} + ${Threads_INCLUDE_DIRS} + ) + +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch new file mode 100644 index 000000000..0f48c5f68 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch @@ -0,0 +1,51 @@ +From 8e93699c0f225716f3cd5eff790270ae9e3880f9 Mon Sep 17 00:00:00 2001 +From: Changhyeok Bae +Date: Sun, 17 Dec 2017 15:40:58 +0000 +Subject: [PATCH 10/14] gcc-7 requires include for std::function + +Signed-off-by: Changhyeok Bae +--- + src/client/client-common.cpp | 1 + + src/common/smack-labels.cpp | 1 + + src/dpl/core/src/binary_queue.cpp | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/src/client/client-common.cpp b/src/client/client-common.cpp +index 883ab8d..1babdf7 100644 +--- a/src/client/client-common.cpp ++++ b/src/client/client-common.cpp +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + #include + #include +diff --git a/src/common/smack-labels.cpp b/src/common/smack-labels.cpp +index 0294a42..1598099 100644 +--- a/src/common/smack-labels.cpp ++++ b/src/common/smack-labels.cpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/src/dpl/core/src/binary_queue.cpp b/src/dpl/core/src/binary_queue.cpp +index 72817a6..838409f 100644 +--- a/src/dpl/core/src/binary_queue.cpp ++++ b/src/dpl/core/src/binary_queue.cpp +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + namespace SecurityManager { + BinaryQueue::BinaryQueue() : +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch new file mode 100644 index 000000000..5c679fc26 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch @@ -0,0 +1,32 @@ +From 243b7ffee16558d7cb9b411f49380138efeffca9 Mon Sep 17 00:00:00 2001 +From: Stephane Desneux +Date: Fri, 1 Feb 2019 12:26:17 +0000 +Subject: [PATCH 11/14] Fix gcc8 warning/error [-Werror=catch-value=] + +Fixes the following warning/error during compile: + +src/dpl/core/src/assert.cpp:61:14: error: catching polymorphic type 'class SecurityManager::Exception' by value [-Werror=catch-value=] +| } catch (Exception) { +| ^~~~~~~~~ + +Signed-off-by: Stephane Desneux +--- + src/dpl/core/src/assert.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dpl/core/src/assert.cpp b/src/dpl/core/src/assert.cpp +index 63538a2..fc60ce9 100644 +--- a/src/dpl/core/src/assert.cpp ++++ b/src/dpl/core/src/assert.cpp +@@ -58,7 +58,7 @@ void AssertProc(const char *condition, + INTERNAL_LOG("### Function: " << function); + INTERNAL_LOG( + "################################################################################"); +- } catch (Exception) { ++ } catch (Exception const&) { + // Just ignore possible double errors + } + +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch new file mode 100644 index 000000000..91ccf9ee2 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch @@ -0,0 +1,122 @@ +From 5ee51d38575f289c2bf37ed817ef680ed47bb320 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Fri, 1 Feb 2019 15:37:44 +0100 +Subject: [PATCH 12/14] Avoid casting from "const T&" to "void*" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Latest version of g++ refuse the cast + + reinterpret_cast(serviceFunction) + +I made no investigation to know if the problem +is coming from the const or not. + +Signed-off-by: José Bollo +--- + src/server/main/include/service-thread.h | 42 ++++++++++-------------- + 1 file changed, 18 insertions(+), 24 deletions(-) + +diff --git a/src/server/main/include/service-thread.h b/src/server/main/include/service-thread.h +index 964d168..61fdda8 100644 +--- a/src/server/main/include/service-thread.h ++++ b/src/server/main/include/service-thread.h +@@ -94,7 +94,7 @@ public: + Join(); + while (!m_eventQueue.empty()){ + auto front = m_eventQueue.front(); +- delete front.eventPtr; ++ delete front; + m_eventQueue.pop(); + } + } +@@ -104,34 +104,28 @@ public: + Service *servicePtr, + void (Service::*serviceFunction)(const T &)) + { +- EventDescription description; +- description.serviceFunctionPtr = +- reinterpret_cast(serviceFunction); +- description.servicePtr = servicePtr; +- description.eventFunctionPtr = &ServiceThread::EventCall; +- description.eventPtr = new T(event); ++ EventCallerBase *ec = new EventCaller(event, servicePtr, serviceFunction); + { + std::lock_guard lock(m_eventQueueMutex); +- m_eventQueue.push(description); ++ m_eventQueue.push(ec); + } + m_waitCondition.notify_one(); + } + + protected: + +- struct EventDescription { +- void (Service::*serviceFunctionPtr)(void *); +- Service *servicePtr; +- void (ServiceThread::*eventFunctionPtr)(const EventDescription &event); +- GenericEvent* eventPtr; ++ struct EventCallerBase { ++ virtual void fire() = 0; ++ virtual ~EventCallerBase() {} + }; + + template +- void EventCall(const EventDescription &desc) { +- auto fun = reinterpret_cast(desc.serviceFunctionPtr); +- const T& eventLocale = *(static_cast(desc.eventPtr)); +- (desc.servicePtr->*fun)(eventLocale); +- } ++ struct EventCaller : public EventCallerBase { ++ T *event; Service *target; void (Service::*function)(const T&); ++ EventCaller(const T &e, Service *c, void (Service::*f)(const T&)) : event(new T(e)), target(c), function(f) {} ++ ~EventCaller() { delete event; } ++ void fire() { (target->*function)(*event); } ++ }; + + static void ThreadLoopStatic(ServiceThread *ptr) { + ptr->ThreadLoop(); +@@ -139,33 +133,33 @@ protected: + + void ThreadLoop(){ + for (;;) { +- EventDescription description = {NULL, NULL, NULL, NULL}; ++ EventCallerBase *ec = NULL; + { + std::unique_lock ulock(m_eventQueueMutex); + if (m_quit) + return; + if (!m_eventQueue.empty()) { +- description = m_eventQueue.front(); ++ ec = m_eventQueue.front(); + m_eventQueue.pop(); + } else { + m_waitCondition.wait(ulock); + } + } + +- if (description.eventPtr != NULL) { ++ if (ec != NULL) { + UNHANDLED_EXCEPTION_HANDLER_BEGIN + { +- (this->*description.eventFunctionPtr)(description); +- delete description.eventPtr; ++ ec->fire(); + } + UNHANDLED_EXCEPTION_HANDLER_END ++ delete ec; + } + } + } + + std::thread m_thread; + std::mutex m_eventQueueMutex; +- std::queue m_eventQueue; ++ std::queue m_eventQueue; + std::condition_variable m_waitCondition; + + State m_state; +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch new file mode 100644 index 000000000..fb6215923 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch @@ -0,0 +1,259 @@ +From 6c96a39ba7a7763ccd47e379dbfd8d376164985f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Mon, 16 Nov 2015 14:26:25 +0100 +Subject: [PATCH 13/14] Removing tizen-platform-config + +Change-Id: Ic832a2b75229517b09faba969c27fb1a4b490121 +--- + CMakeLists.txt | 16 +++++++- + db/CMakeLists.txt | 2 +- + policy/CMakeLists.txt | 1 + + ...load => security-manager-policy-reload.in} | 4 +- + src/common/file-lock.cpp | 4 +- + src/common/include/file-lock.h | 1 - + src/common/include/privilege_db.h | 3 +- + src/common/service_impl.cpp | 39 ++++++------------- + src/common/smack-rules.cpp | 12 ++---- + 9 files changed, 37 insertions(+), 45 deletions(-) + rename policy/{security-manager-policy-reload => security-manager-policy-reload.in} (94%) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 28790d8..37a43cc 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -49,7 +49,7 @@ ADD_DEFINITIONS("-Wall") # Generate all warnings + ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings + + STRING(REGEX MATCH "([^.]*)" API_VERSION "${VERSION}") +-ADD_DEFINITIONS("-DAPI_VERSION=\"$(API_VERSION)\"") ++ADD_DEFINITIONS("-DAPI_VERSION=\"${API_VERSION}\"") + + ADD_DEFINITIONS("-DSMACK_ENABLED") + +@@ -58,6 +58,20 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG") + ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG") + ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG") + ++SET(DATADIR "/usr/share/security-manager" CACHE STRING "path to data directory") ++SET(SMACKRULESDIR "/etc/smack/accesses.d" CACHE STRING "path to Smack rules directory") ++SET(LOCKDIR "/var/run/lock" CACHE STRING "path to lock directory") ++SET(DB_INSTALL_DIR "/var/db/security-manager" CACHE STRING "path to database directory") ++SET(DB_FILENAME ".security-manager.db" CACHE STRING "basename of database") ++SET(GLOBALUSER "userapp" CACHE STRING "name of the global user") ++ ++ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") ++ADD_DEFINITIONS("-DSMACKRULESDIR=\"${SMACKRULESDIR}\"") ++ADD_DEFINITIONS("-DLOCKDIR=\"${LOCKDIR}\"") ++ADD_DEFINITIONS("-DDB_INSTALL_DIR=\"${DB_INSTALL_DIR}\"") ++ADD_DEFINITIONS("-DDB_FILENAME=\"${DB_FILENAME}\"") ++ADD_DEFINITIONS("-DGLOBALUSER=\"${GLOBALUSER}\"") ++ + ADD_SUBDIRECTORY(src) + ADD_SUBDIRECTORY(pc) + ADD_SUBDIRECTORY(systemd) +diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt +index 9e8ffcc..d7af1a0 100644 +--- a/db/CMakeLists.txt ++++ b/db/CMakeLists.txt +@@ -1,4 +1,4 @@ +-SET(TARGET_DB ".security-manager.db") ++SET(TARGET_DB "$(DB_FILENAME)") + + ADD_CUSTOM_COMMAND( + OUTPUT ${TARGET_DB} ${TARGET_DB}-journal +diff --git a/policy/CMakeLists.txt b/policy/CMakeLists.txt +index bd08edc..626a2bd 100644 +--- a/policy/CMakeLists.txt ++++ b/policy/CMakeLists.txt +@@ -1,4 +1,5 @@ + FILE(GLOB USERTYPE_POLICY_FILES usertype-*.profile) ++CONFIGURE_FILE(security-manager-policy-reload.in security-manager-policy-reload @ONLY) + INSTALL(FILES ${USERTYPE_POLICY_FILES} DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) + INSTALL(FILES "app-rules-template.smack" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) + INSTALL(FILES "privilege-group.list" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) +diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload.in +similarity index 94% +rename from policy/security-manager-policy-reload +rename to policy/security-manager-policy-reload.in +index 6f211c6..c1bc4e2 100755 +--- a/policy/security-manager-policy-reload ++++ b/policy/security-manager-policy-reload.in +@@ -1,8 +1,8 @@ + #!/bin/sh -e + +-POLICY_PATH=/usr/share/security-manager/policy ++POLICY_PATH=@DATADIR@/policy + PRIVILEGE_GROUP_MAPPING=$POLICY_PATH/privilege-group.list +-DB_FILE=`tzplatform-get TZ_SYS_DB | cut -d= -f2`/.security-manager.db ++DB_FILE=@DB_INSTALL_DIR@/@DB_FILENAME@ + + # Create default buckets + while read bucket default_policy +diff --git a/src/common/file-lock.cpp b/src/common/file-lock.cpp +index 6f3996c..88d2092 100644 +--- a/src/common/file-lock.cpp ++++ b/src/common/file-lock.cpp +@@ -30,9 +30,7 @@ + + namespace SecurityManager { + +-char const * const SERVICE_LOCK_FILE = tzplatform_mkpath3(TZ_SYS_RUN, +- "lock", +- "security-manager.lock"); ++char const * const SERVICE_LOCK_FILE = LOCKDIR "/security-manager.lock"; + + FileLocker::FileLocker(const std::string &lockFile, bool blocking) + { +diff --git a/src/common/include/file-lock.h b/src/common/include/file-lock.h +index 604b019..21a86a0 100644 +--- a/src/common/include/file-lock.h ++++ b/src/common/include/file-lock.h +@@ -29,7 +29,6 @@ + + #include + #include +-#include + + namespace SecurityManager { + +diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h +index 08fb9d6..3344987 100644 +--- a/src/common/include/privilege_db.h ++++ b/src/common/include/privilege_db.h +@@ -35,14 +35,13 @@ + #include + + #include +-#include + + #ifndef PRIVILEGE_DB_H_ + #define PRIVILEGE_DB_H_ + + namespace SecurityManager { + +-const char *const PRIVILEGE_DB_PATH = tzplatform_mkpath(TZ_SYS_DB, ".security-manager.db"); ++const char *const PRIVILEGE_DB_PATH = DB_INSTALL_DIR "/" DB_FILENAME; + + enum class QueryType { + EGetPkgPrivileges, +diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp +index ae305d3..42150fe 100644 +--- a/src/common/service_impl.cpp ++++ b/src/common/service_impl.cpp +@@ -32,7 +32,6 @@ + #include + + #include +-#include + + #include "protocols.h" + #include "privilege_db.h" +@@ -131,7 +130,13 @@ static inline int validatePolicy(policy_entry &policyEntry, std::string uidStr, + + static uid_t getGlobalUserId(void) + { +- static uid_t globaluid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); ++ static uid_t globaluid = 0; ++ if (!globaluid) { ++ struct passwd pw, *p; ++ char buf[4096]; ++ int rc = getpwnam_r(GLOBALUSER, &pw, buf, sizeof buf, &p); ++ globaluid = (rc || p == NULL) ? 555 : p->pw_uid; ++ } + return globaluid; + } + +@@ -161,37 +166,17 @@ static inline bool isSubDir(const char *parent, const char *subdir) + + static bool getUserAppDir(const uid_t &uid, std::string &userAppDir) + { +- struct tzplatform_context *tz_ctx = nullptr; +- +- if (tzplatform_context_create(&tz_ctx)) +- return false; +- +- if (tzplatform_context_set_user(tz_ctx, uid)) { +- tzplatform_context_destroy(tz_ctx); +- tz_ctx = nullptr; ++ struct passwd pw, *p; ++ char buf[4096]; ++ int rc = getpwuid_r(uid, &pw, buf, sizeof buf, &p); ++ if (rc || p == NULL) + return false; +- } +- +- enum tzplatform_variable id = +- (uid == getGlobalUserId()) ? TZ_SYS_RW_APP : TZ_USER_APP; +- const char *appDir = tzplatform_context_getenv(tz_ctx, id); +- if (!appDir) { +- tzplatform_context_destroy(tz_ctx); +- tz_ctx = nullptr; +- return false; +- } +- +- userAppDir = appDir; +- +- tzplatform_context_destroy(tz_ctx); +- tz_ctx = nullptr; +- ++ userAppDir = p->pw_dir; + return true; + } + + static inline bool installRequestAuthCheck(const app_inst_req &req, uid_t uid, bool &isCorrectPath, std::string &appPath) + { +- std::string userHome; + std::string userAppDir; + std::stringstream correctPath; + +diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp +index 922a56f..c2e0041 100644 +--- a/src/common/smack-rules.cpp ++++ b/src/common/smack-rules.cpp +@@ -34,7 +34,6 @@ + #include + + #include +-#include + + #include "smack-labels.h" + #include "smack-rules.h" +@@ -43,7 +42,7 @@ namespace SecurityManager { + + const char *const SMACK_APP_LABEL_TEMPLATE = "~APP~"; + const char *const SMACK_PKG_LABEL_TEMPLATE = "~PKG~"; +-const char *const APP_RULES_TEMPLATE_FILE_PATH = tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", "app-rules-template.smack"); ++const char *const APP_RULES_TEMPLATE_FILE_PATH = DATADIR "/policy/app-rules-template.smack"; + const char *const SMACK_APP_IN_PACKAGE_PERMS = "rwxat"; + + SmackRules::SmackRules() +@@ -237,14 +236,12 @@ void SmackRules::generatePackageCrossDeps(const std::vector &pkgCon + + std::string SmackRules::getPackageRulesFilePath(const std::string &pkgId) + { +- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("pkg_" + pkgId).c_str())); +- return path; ++ return SMACKRULESDIR "/pkg_" + pkgId; + } + + std::string SmackRules::getApplicationRulesFilePath(const std::string &appId) + { +- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str())); +- return path; ++ return SMACKRULESDIR "/app_" + appId; + } + void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, + const std::vector &pkgContents, const std::vector &privileges) +@@ -256,8 +253,7 @@ void SmackRules::installApplicationPrivilegesRules(const std::string &appId, con + for (auto privilege : privileges) { + if (privilege.empty()) + continue; +- std::string fprivilege ( privilege + "-template.smack"); +- std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str())); ++ std::string path = DATADIR "/policy/" + privilege + "-template.smack"; + if( stat(path.c_str(), &buffer) == 0) + smackRules.addFromTemplateFile(appId, pkgId, path); + } +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch new file mode 100644 index 000000000..542a387d2 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch @@ -0,0 +1,78 @@ +From c7f9d14e38a1b6d40b2fffa01433a3025eff9abd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Tue, 26 Nov 2019 12:34:39 +0100 +Subject: [PATCH 14/14] Ensure post install initialization of database +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Creation of the database was made during image creation, +leading to issue with SOTA. This adds the creation on +need before launching the service. + +Change-Id: Idfd0676bd87d39f7c10eaafd63f3a318f675c972 +Signed-off-by: José Bollo +--- + db/CMakeLists.txt | 14 ++++++-------- + db/security-manager-setup | 14 ++++++++++++++ + systemd/security-manager.service.in | 1 + + 3 files changed, 21 insertions(+), 8 deletions(-) + create mode 100644 db/security-manager-setup + +diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt +index d7af1a0..dcf5bc8 100644 +--- a/db/CMakeLists.txt ++++ b/db/CMakeLists.txt +@@ -1,12 +1,10 @@ +-SET(TARGET_DB "$(DB_FILENAME)") +- + ADD_CUSTOM_COMMAND( +- OUTPUT ${TARGET_DB} ${TARGET_DB}-journal +- COMMAND sqlite3 ${TARGET_DB} .security-manager-setup ++ DEPENDS security-manager-setup db.sql ++) + + # Add a dummy build target to trigger building of ${TARGET_DB} +-ADD_CUSTOM_TARGET(DB ALL DEPENDS ${TARGET_DB}) ++ADD_CUSTOM_TARGET(DB ALL DEPENDS .security-manager-setup) + +-INSTALL(FILES ${TARGET_DB} DESTINATION ${DB_INSTALL_DIR}) +-INSTALL(FILES ${TARGET_DB}-journal DESTINATION ${DB_INSTALL_DIR}) ++INSTALL(PROGRAMS .security-manager-setup DESTINATION ${BIN_INSTALL_DIR}) +diff --git a/db/security-manager-setup b/db/security-manager-setup +new file mode 100644 +index 0000000..5675baf +--- /dev/null ++++ b/db/security-manager-setup +@@ -0,0 +1,14 @@ ++#!/bin/sh ++ ++if test -f "$1"; then exit; fi ++set -e ++dbdir="$(dirname "$1")" ++dbfile="$(basename "$1")" ++test -n "$dbfile" ++test -n "$dbdir" ++mkdir -p "$dbdir" ++cd "$dbdir" ++sqlite3 "$dbfile" << END-OF-CAT ++--DB.SQL-- ++END-OF-CAT ++ +diff --git a/systemd/security-manager.service.in b/systemd/security-manager.service.in +index 23fd1b2..2bf97d7 100644 +--- a/systemd/security-manager.service.in ++++ b/systemd/security-manager.service.in +@@ -3,5 +3,6 @@ Description=Start the security manager + + [Service] + Type=notify ++ExecStartPre=@BIN_INSTALL_DIR@/.security-manager-setup @DB_INSTALL_DIR@/@DB_FILENAME@ + ExecStart=@BIN_INSTALL_DIR@/security-manager + Sockets=security-manager.socket +-- +2.21.0 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch b/meta-app-framework/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch new file mode 100644 index 000000000..d9949193b --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch @@ -0,0 +1,34 @@ +From 7cffcd61378a9d7c0e7db5691b2da3a37448c969 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Bollo?= +Date: Thu, 30 Jan 2020 09:19:25 +0100 +Subject: [PATCH 15/15] Restrict socket accesses +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Ensure that only members of the group and the owner can access +the security manager. + +Bug-AGL: SPEC-3146 + +Change-Id: I68ce6523db4bfd4707c3680555c3cb0cf8858ef2 +Signed-off-by: José Bollo +--- + systemd/security-manager.socket | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/systemd/security-manager.socket b/systemd/security-manager.socket +index af1c1da..b401f77 100644 +--- a/systemd/security-manager.socket ++++ b/systemd/security-manager.socket +@@ -1,6 +1,6 @@ + [Socket] + ListenStream=/run/security-manager.socket +-SocketMode=0777 ++SocketMode=0660 + SmackLabelIPIn=* + SmackLabelIPOut=@ + +-- +2.21.1 + diff --git a/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend b/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend new file mode 100644 index 000000000..ec8435369 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend @@ -0,0 +1,13 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/security-manager:" + +EXTRA_OECMAKE =+ " -DGLOBALUSER=afm" + +SRC_URI += " \ + file://0001-Adapt-rules-to-AGL.patch \ +" + +do_install_append() { + # Needed for wayland-0 socket access and memfd usage + echo "~APP~ System::Weston rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack + echo "System::Weston ~APP~ rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack +} diff --git a/meta-app-framework/recipes-security/security-manager/security-manager_git.bb b/meta-app-framework/recipes-security/security-manager/security-manager_git.bb new file mode 100644 index 000000000..b34973519 --- /dev/null +++ b/meta-app-framework/recipes-security/security-manager/security-manager_git.bb @@ -0,0 +1,27 @@ +require security-manager.inc + +PV = "1.0.2+git${SRCPV}" +SRCREV = "860305a595d681d650024ad07b3b0977e1fcb0a6" +SRC_URI += "git://github.com/Samsung/security-manager.git" +S = "${WORKDIR}/git" + +SRC_URI += " \ + file://0001-systemd-stop-using-compat-libs.patch \ + file://0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch \ + file://0003-Smack-rules-create-two-new-functions.patch \ + file://0004-app-install-implement-multiple-set-of-smack-rules.patch \ + file://0005-c-11-replace-deprecated-auto_ptr.patch \ + file://0006-socket-manager-removes-tizen-specific-call.patch \ + file://0007-removes-dependency-to-libslp-db-utils.patch \ + file://0008-Fix-gcc6-build.patch \ + file://0009-Fix-Cmake-conf-for-gcc6-build.patch \ + file://0010-gcc-7-requires-include-functional-for-std-function.patch \ + file://0011-Fix-gcc8-warning-error-Werror-catch-value.patch \ + file://0012-Avoid-casting-from-const-T-to-void.patch \ + file://0013-Removing-tizen-platform-config.patch \ + file://0014-Ensure-post-install-initialization-of-database.patch \ + file://0015-Restrict-socket-accesses.patch \ +" + +# Use make with cmake and not ninja +OECMAKE_GENERATOR = "Unix Makefiles" diff --git a/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend b/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend index 09820be2f..afbc16c30 100644 --- a/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend +++ b/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend @@ -1,4 +1 @@ -# Disable nss to avoid build issues on native -PACKAGECONFIG = "gnutls libgcrypt openssl des" - -BBCLASSEXTEND = "native nativesdk" +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'xmlsec1_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-security/xmlsec1/xmlsec1_appfw.inc b/meta-app-framework/recipes-security/xmlsec1/xmlsec1_appfw.inc new file mode 100644 index 000000000..09820be2f --- /dev/null +++ b/meta-app-framework/recipes-security/xmlsec1/xmlsec1_appfw.inc @@ -0,0 +1,4 @@ +# Disable nss to avoid build issues on native +PACKAGECONFIG = "gnutls libgcrypt openssl des" + +BBCLASSEXTEND = "native nativesdk" diff --git a/meta-app-framework/recipes-support/libcap/libcap_%.bbappend b/meta-app-framework/recipes-support/libcap/libcap_%.bbappend index ac909a64c..6107ee7f6 100644 --- a/meta-app-framework/recipes-support/libcap/libcap_%.bbappend +++ b/meta-app-framework/recipes-support/libcap/libcap_%.bbappend @@ -1,3 +1 @@ -FILESEXTRAPATHS_append_class-native := ":${THISDIR}/${PN}" -# FIXME: It needs to be determined if this is still required -#SRC_URI_append_class-native = " file://removing-capability-enforcement.patch" +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'libcap_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-support/libcap/libcap_appfw.inc b/meta-app-framework/recipes-support/libcap/libcap_appfw.inc new file mode 100644 index 000000000..9ece5ce27 --- /dev/null +++ b/meta-app-framework/recipes-support/libcap/libcap_appfw.inc @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_append_class-native := ":${THISDIR}/libcap" +# FIXME: It needs to be determined if this is still required +#SRC_URI_append_class-native = " file://removing-capability-enforcement.patch" diff --git a/meta-app-framework/recipes-support/libzip/libzip_%.bbappend b/meta-app-framework/recipes-support/libzip/libzip_%.bbappend index 5174650b1..d559c2fbe 100644 --- a/meta-app-framework/recipes-support/libzip/libzip_%.bbappend +++ b/meta-app-framework/recipes-support/libzip/libzip_%.bbappend @@ -1 +1 @@ -BBCLASSEXTEND += "native nativesdk" +require ${@bb.utils.contains('APPFW_ENABLED', '1', 'libzip_appfw.inc', '', d)} diff --git a/meta-app-framework/recipes-support/libzip/libzip_appfw.inc b/meta-app-framework/recipes-support/libzip/libzip_appfw.inc new file mode 100644 index 000000000..5174650b1 --- /dev/null +++ b/meta-app-framework/recipes-support/libzip/libzip_appfw.inc @@ -0,0 +1 @@ +BBCLASSEXTEND += "native nativesdk" diff --git a/meta-app-framework/recipes-test/afb-test/afb-test_git.bb b/meta-app-framework/recipes-test/afb-test/afb-test_git.bb new file mode 100644 index 000000000..5246abb00 --- /dev/null +++ b/meta-app-framework/recipes-test/afb-test/afb-test_git.bb @@ -0,0 +1,25 @@ +SUMMARY = "Binding embedding test framework to test others binding" +DESCRIPTION = "This make testing binding running with Application Framework binder \ +easier by simply test verb return as well as event reception." +HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/app-afb-test" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" +SECTION = "apps" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/app-afb-test;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "${AGL_APP_REVISION}" + +DEPENDS += "lua libafb-helpers libappcontroller" +RDEPENDS_${PN} += "lua bash jq" +RDEPENDS_${PN}-ptest += "af-binder" + +PV = "${AGLVERSION}" +S = "${WORKDIR}/git" + +inherit cmake aglwgt pkgconfig ptest + +do_install_append() { + install -d ${D}${bindir} + install -m 775 ${S}/afm-test.target.sh ${D}${bindir}/afm-test +} + diff --git a/meta-app-framework/recipes-test/afb-test/files/run-ptest b/meta-app-framework/recipes-test/afb-test/files/run-ptest new file mode 100644 index 000000000..883939a83 --- /dev/null +++ b/meta-app-framework/recipes-test/afb-test/files/run-ptest @@ -0,0 +1,3 @@ +#!/bin/sh + +afm-test /usr/AGL/apps/testwgt/aftest-test.wgt diff --git a/meta-app-framework/scripts/run-yocto-check-layer-enabled-flags.sh b/meta-app-framework/scripts/run-yocto-check-layer-enabled-flags.sh new file mode 100755 index 000000000..37d2f5615 --- /dev/null +++ b/meta-app-framework/scripts/run-yocto-check-layer-enabled-flags.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -x +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT="/tmp" + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# skip unnecessary in yocto-check-layer - aka FIXME upstream +BBMASK += "meta-security/recipes-mac/smack/smack-test_1.0.bb" +BBMASK += "packagegroup-core-security-ptest.bb" + +# missing in upstream recipes ... aka FIXME upstream +BBCLASSEXTEND_pn-libzip = "native nativesdk" +BBCLASSEXTEND_pn-xmlsec1 = "native nativesdk" + +DISTRO_FEATURES_append = " appfw smack " + +EOF + + +yocto-check-layer \ + --dependency $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-security \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ + $AGLROOT/external/meta-openembedded/meta-perl \ + $AGLROOT/external/meta-qt5/ \ + -- \ + $AGLROOT/meta-agl/meta-app-framework/ + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl + + diff --git a/meta-app-framework/scripts/run-yocto-check-layer.sh b/meta-app-framework/scripts/run-yocto-check-layer.sh new file mode 100755 index 000000000..3b19cd012 --- /dev/null +++ b/meta-app-framework/scripts/run-yocto-check-layer.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -x +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT="/tmp" + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# skip unnecessary in yocto-check-layer - aka FIXME upstream +BBMASK += "meta-security/recipes-mac/smack/smack-test_1.0.bb" +BBMASK += "packagegroup-core-security-ptest.bb" + +# missing in upstream recipes ... aka FIXME upstream +BBCLASSEXTEND_pn-libzip = "native nativesdk" +BBCLASSEXTEND_pn-xmlsec1 = "native nativesdk" + +EOF + + +yocto-check-layer \ + --dependency $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-security \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ + $AGLROOT/external/meta-openembedded/meta-perl \ + $AGLROOT/external/meta-qt5/ \ + -- \ + $AGLROOT/meta-agl/meta-app-framework/ + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl + + diff --git a/meta-netboot/README.renesas-gen3 b/meta-netboot/README.renesas-gen3 deleted file mode 100644 index 496141eef..000000000 --- a/meta-netboot/README.renesas-gen3 +++ /dev/null @@ -1,90 +0,0 @@ -Below are the environment variables that can be set in the u-boot console to boot the Renesas Gen3 ULCB boards. - -Adjust board type with the following identifiers: - -* 'm3ulcb' for Renesas Gen3 Starter Kit Pro -* 'h3ulcb' for Renesas Gen3 Starter Kit Premium - -################## Common options ##################### -# these options are common to all configurations: - -##### board info - -# choose board -setenv board m3ulcb -setenv soc r8a7796 -# or -setenv board h3ulcb -setenv soc r8a7795 - -##### boot mode -# choose bootmode: -# netboot -setenv bootmode net -# or sdcard -setenv bootmode sd -# or sdcard with initrd -setenv bootmode sdi - -##### sdcard options -# which sdcard slot to use -setenv bootmmc '0:1' - -##### netboot options -# replace and by appropriate addresses -setenv ipaddr '' -setenv serverip '' -setenv ethact ravb -setenv ethaddr DE:AD:C0:FF:EE: - -################## Internal variables ##################### - -# kernel file -setenv set_bootkfile 'setenv bootkfile Image' -setenv bootkaddr 0x48080000 - -# dtb file -setenv set_bootdfile 'setenv bootdfile Image-${soc}-${board}.dtb' -setenv bootdaddr 0x48000000 - -# initrd -setenv set_bootifile 'setenv bootifile initramfs-netboot-image-${board}.ext4.gz' -setenv bootiaddr 0x5C3F9520 -setenv bootisize 3A6AB6 - -# kernel args -setenv bootargs_console 'console=ttySC0,115200 ignore_loglevel' -setenv bootargs_video 'vmalloc=384M video=HDMI-A-1:1920x1080-32@60' -setenv bootargs_extra 'rw rootfstype=ext4 rootwait rootdelay=2' - -# final boot command -setenv bootcmd 'run bootcmd_${bootmode}' - -################ Boot on MMC (SDcard) ################# - -setenv bootkload_sd 'ext4load mmc ${bootmmc} ${bootkaddr} boot/${bootkfile}' -setenv bootiload_sd 'ext4load mmc ${bootmmc} ${bootiaddr} boot/${bootifile}' -setenv bootdload_sd 'ext4load mmc ${bootmmc} ${bootdaddr} boot/${bootdfile}' - -# without initrd -setenv bootargs_root_sd 'root=/dev/mmcblk1p1' -setenv bootload_sd 'run set_bootkfile; run bootkload_sd; run set_bootdfile; run bootdload_sd' -setenv bootcmd_sd 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_sd} ${bootargs_extra}; run bootload_sd; booti ${bootkaddr} - ${bootdaddr}' - -# with initrd -setenv bootargs_root_sdi 'root=/dev/ram0 ramdisk_size=16384' -setenv bootload_sdi 'run set_bootkfile; run bootkload_sd; run set_bootdfile; run bootdload_sd; run set_bootifile; run bootiload_sd' -setenv bootcmd_sdi 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_sdi} ${bootargs_extra}; run bootload_sdi; booti ${bootkaddr} ${bootiaddr}:${bootisize} ${bootdaddr}' - -################ Netboot through TFTP+NBD ################## - -setenv bootkload_net 'tftp ${bootkaddr} ${board}/${bootkfile}' -setenv bootdload_net 'tftp ${bootdaddr} ${board}/${bootdfile}' -setenv bootiload_net 'tftp ${bootiaddr} ${board}/${bootifile}' - -setenv bootargs_root_net 'root=/dev/ram0 ramdisk_size=16384 ip=dhcp' -setenv bootload_net 'run set_bootkfile; run bootkload_net; run set_bootdfile; run bootdload_net; run set_bootifile; run bootiload_net' - -setenv bootcmd_net 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_net} ${bootargs_extra} nbd.server=${serverip}; run bootload_net; booti ${bootkaddr} ${bootiaddr}:${bootisize} ${bootdaddr}' - - diff --git a/meta-netboot/classes/netboot.bbclass b/meta-netboot/classes/netboot.bbclass index 63369285f..a18d64f5b 100644 --- a/meta-netboot/classes/netboot.bbclass +++ b/meta-netboot/classes/netboot.bbclass @@ -1,5 +1,10 @@ # Enable network bootable image and initrd/initramfs +OVERRIDES .= ":netboot" +# add 512MB of extra space in ext4 output image +IMAGE_ROOTFS_EXTRA_SPACE = "524288" +NETBOOT_ENABLED ??= "1" + python () { if (bb.utils.contains("IMAGE_FSTYPES","live",True,False,d)): # typical case for Minnowboard Max diff --git a/meta-netboot/conf/include/agl-netboot.inc b/meta-netboot/conf/include/agl-netboot.inc index fcff8c318..ca6d9df12 100644 --- a/meta-netboot/conf/include/agl-netboot.inc +++ b/meta-netboot/conf/include/agl-netboot.inc @@ -1,5 +1,2 @@ INHERIT += "netboot" -OVERRIDES .= ":netboot" -# add 512MB of extra space in ext4 output image -IMAGE_ROOTFS_EXTRA_SPACE = "524288" diff --git a/meta-netboot/conf/layer.conf b/meta-netboot/conf/layer.conf index 50def90fc..2af752805 100644 --- a/meta-netboot/conf/layer.conf +++ b/meta-netboot/conf/layer.conf @@ -1,6 +1,3 @@ -# Added for futur conditionnals tests -DISTRO_FEATURES_append = " netboot" - # We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" @@ -13,3 +10,4 @@ BBFILE_PATTERN_meta-netboot = "^${LAYERDIR}/" BBFILE_PRIORITY_meta-netboot = "60" LAYERSERIES_COMPAT_meta-netboot = "dunfell" +LAYERDEPENDS_meta-netboot = "core networking-layer" diff --git a/meta-netboot/recipes-core/busybox/busybox_%.bbappend b/meta-netboot/recipes-core/busybox/busybox_%.bbappend index 358913448..fcf6acfd1 100644 --- a/meta-netboot/recipes-core/busybox/busybox_%.bbappend +++ b/meta-netboot/recipes-core/busybox/busybox_%.bbappend @@ -1,6 +1 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI += " \ - file://enable_nbd.cfg \ - " - +require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'busybox_netboot.inc', '', d)} diff --git a/meta-netboot/recipes-core/busybox/busybox_netboot.inc b/meta-netboot/recipes-core/busybox/busybox_netboot.inc new file mode 100644 index 000000000..0bcd5afa5 --- /dev/null +++ b/meta-netboot/recipes-core/busybox/busybox_netboot.inc @@ -0,0 +1,6 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI_append = " \ + file://enable_nbd.cfg \ + " + diff --git a/meta-netboot/recipes-core/images/initramfs-netboot-image.bb b/meta-netboot/recipes-core/images/initramfs-netboot-image.bb index 965a0bd37..b5610f30d 100644 --- a/meta-netboot/recipes-core/images/initramfs-netboot-image.bb +++ b/meta-netboot/recipes-core/images/initramfs-netboot-image.bb @@ -1,23 +1,2 @@ -# Netboot initramfs image. -DESCRIPTION = "Netboot initrd image" - -PACKAGE_INSTALL = "initramfs-netboot busybox base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}" - -# Do not pollute the initrd image with rootfs features -IMAGE_FEATURES = "" - -export IMAGE_BASENAME = "initramfs-netboot-image" -IMAGE_LINGUAS = "" - LICENSE = "MIT" - -IMAGE_FSTYPES := "${NETBOOT_FSTYPES}" -inherit core-image - -# hotfix for dragonboard (which uses _append in the bsp) -IMAGE_FSTYPES_remove += "wic.gz" - -IMAGE_ROOTFS_SIZE = "8192" -IMAGE_ROOTFS_EXTRA_SPACE = "256" - -BAD_RECOMMENDATIONS += "busybox-syslog" +require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'initramfs-netboot-image_netboot.inc', '', d)} diff --git a/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc b/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc new file mode 100644 index 000000000..0c97b0f93 --- /dev/null +++ b/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc @@ -0,0 +1,23 @@ +# Netboot initramfs image. +DESCRIPTION = "Netboot initrd image" + +PACKAGE_INSTALL = "initramfs-netboot busybox base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}" + +# Do not pollute the initrd image with rootfs features +IMAGE_FEATURES = "" + +export IMAGE_BASENAME = "initramfs-netboot-image" +IMAGE_LINGUAS = "" + +LICENSE = "MIT" + +IMAGE_FSTYPES := "${NETBOOT_FSTYPES}" +inherit core-image + +# hotfix for dragonboard (which uses _append in the bsp) +IMAGE_FSTYPES_remove = "wic.gz" + +IMAGE_ROOTFS_SIZE = "8192" +IMAGE_ROOTFS_EXTRA_SPACE = "256" + +BAD_RECOMMENDATIONS += "busybox-syslog" diff --git a/meta-netboot/recipes-support/nbd/nbd_%.bbappend b/meta-netboot/recipes-support/nbd/nbd_%.bbappend index fb11ef9c2..e67e591ff 100644 --- a/meta-netboot/recipes-support/nbd/nbd_%.bbappend +++ b/meta-netboot/recipes-support/nbd/nbd_%.bbappend @@ -1,6 +1 @@ - -do_install_append() { - mv ${D}/${sbindir}/${BPN}-client ${D}/${sbindir}/${BPN}3-client -} - -FILES_${PN}-client = "${sbindir}/${BPN}3-client" +require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'nbd_netboot.inc', '', d)} diff --git a/meta-netboot/recipes-support/nbd/nbd_netboot.inc b/meta-netboot/recipes-support/nbd/nbd_netboot.inc new file mode 100644 index 000000000..f2286616f --- /dev/null +++ b/meta-netboot/recipes-support/nbd/nbd_netboot.inc @@ -0,0 +1,5 @@ +do_install_append() { + mv ${D}/${sbindir}/nbd-client ${D}/${sbindir}/nbd3-client +} + +FILES_${PN}-client_append = " ${sbindir}/nbd3-client" diff --git a/meta-netboot/scripts/run-yocto-check-layer-flags-enabled.sh b/meta-netboot/scripts/run-yocto-check-layer-flags-enabled.sh new file mode 100755 index 000000000..c64afa714 --- /dev/null +++ b/meta-netboot/scripts/run-yocto-check-layer-flags-enabled.sh @@ -0,0 +1,46 @@ +#!/bin/bash +#set -x + +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT=`mktemp -d` + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# workaround +# ERROR: Nothing PROVIDES 'smack' (but meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb DEPENDS on or otherwise requires it) +BBMASK += "meta-oe/recipes-extended/ostree/ostree_2020.3.bb" + +NETBOOT_ENABLED = "1" +NETBOOT_FSTYPES ??= "ext4.gz" + +EOF + + +yocto-check-layer \ + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ + -- \ + $AGLROOT/meta-agl/meta-netboot/ + + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl diff --git a/meta-netboot/scripts/run-yocto-check-layer.sh b/meta-netboot/scripts/run-yocto-check-layer.sh new file mode 100755 index 000000000..b3b8e08e1 --- /dev/null +++ b/meta-netboot/scripts/run-yocto-check-layer.sh @@ -0,0 +1,44 @@ +#!/bin/bash +#set -x + +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT=`mktemp -d` + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +# workaround +# ERROR: Nothing PROVIDES 'smack' (but meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb DEPENDS on or otherwise requires it) +BBMASK += "meta-oe/recipes-extended/ostree/ostree_2020.3.bb" + + +EOF + + +yocto-check-layer \ + --dependency \ + $AGLROOT/external/meta-openembedded/meta-oe \ + $AGLROOT/external/meta-openembedded/meta-python \ + $AGLROOT/external/meta-openembedded/meta-networking \ + -- \ + $AGLROOT/meta-agl/meta-netboot/ + + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl diff --git a/meta-pipewire/conf/layer.conf b/meta-pipewire/conf/layer.conf index 68113221d..5fe2ee2fd 100644 --- a/meta-pipewire/conf/layer.conf +++ b/meta-pipewire/conf/layer.conf @@ -10,3 +10,8 @@ BBFILE_PATTERN_meta-pipewire = "^${LAYERDIR}/" BBFILE_PRIORITY_meta-pipewire = "71" LAYERSERIES_COMPAT_meta-pipewire = "dunfell" + +BBFILES_DYNAMIC += " \ + app-framework:${LAYERDIR}/dynamic-layers/meta-app-framework/*/*/*.bb \ + app-framework:${LAYERDIR}/dynamic-layers/meta-app-framework/*/*/*.bbappend \ +" diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-apis/agl-service-audiomixer/agl-service-audiomixer_git.bb b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-apis/agl-service-audiomixer/agl-service-audiomixer_git.bb new file mode 100644 index 000000000..2a8261195 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-apis/agl-service-audiomixer/agl-service-audiomixer_git.bb @@ -0,0 +1,17 @@ +SUMMARY = "Audio Mixer Service Binding" +DESCRIPTION = "AGL Audio Mixer Service Binding" +SECTION = "apps" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264" + +PV = "0.1+git${SRCPV}" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-audiomixer.git;protocol=https;branch=${AGL_BRANCH}" +SRCREV = "${AGL_APP_REVISION}" + +S = "${WORKDIR}/git" + +inherit cmake aglwgt pkgconfig + +DEPENDS += "pipewire wireplumber json-c" +RDEPENDS_${PN} = "agl-service-signal-composer" diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-core/packagegroups/packagegroup-pipewire.bbappend b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-core/packagegroups/packagegroup-pipewire.bbappend new file mode 100644 index 000000000..d87bd581e --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-core/packagegroups/packagegroup-pipewire.bbappend @@ -0,0 +1,4 @@ +RDEPENDS_${PN} += " \ + agl-service-audiomixer \ + bluez-alsa-pipewire \ + " diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/client.env b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/client.env new file mode 100644 index 000000000..9b44cee01 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/client.env @@ -0,0 +1,10 @@ +# This file contains environment variables that will apply +# to pipewire clients started by the application framework + +# libpipewire by default tries to obtain real-time scheduling +# for the streaming thread. This is only useful on the desktop, disable here. +DISABLE_RTKIT=1 + +# Uncomment to enable libpipewire debug for clients +# 1=error, 2=warning, 3=info, 4=debug, 5=trace +#PIPEWIRE_DEBUG=4 diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in new file mode 100644 index 000000000..6c055bcff --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in @@ -0,0 +1,17 @@ +# daemon config file for PipeWire version "0.2.9" +# distributed by Automotive Grade Linux + +add-spa-lib audio.convert* audioconvert/libspa-audioconvert +add-spa-lib api.alsa.* alsa/libspa-alsa +add-spa-lib api.v4l2.* v4l2/libspa-v4l2 +add-spa-lib api.bluez5.* bluez5/libspa-bluez5 + +load-module libpipewire-module-protocol-native +load-module libpipewire-module-spa-node-factory +load-module libpipewire-module-client-node +load-module libpipewire-module-client-device +load-module libpipewire-module-access same-sec-label-mode=1 +load-module libpipewire-module-adapter +load-module libpipewire-module-link-factory +load-module libpipewire-module-session-manager +exec /usr/bin/wireplumber diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/server.env b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/server.env new file mode 100644 index 000000000..c74b941d6 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl/server.env @@ -0,0 +1,12 @@ +# This file contains environment variables that will apply +# to the pipewire daemon as well as its session manager + +# Disable rtkit for wireplumber, which is also a client +DISABLE_RTKIT=1 + +# Uncomment to enable wireplumber debug +#G_MESSAGES_DEBUG=all + +# Uncomment to enable pipewire debug +# 1=error, 2=warning, 3=info, 4=debug, 5=trace +#PIPEWIRE_DEBUG=4 diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb new file mode 100644 index 000000000..a28c6534e --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb @@ -0,0 +1,43 @@ +SUMMARY = "AGL configuration file for pipewire" +HOMEPAGE = "https://pipewire.org" +BUGTRACKER = "https://jira.automotivelinux.org" +AUTHOR = "George Kiagiadakis " +SECTION = "multimedia" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +SRC_URI = " \ + file://pipewire.conf.in \ + file://client.env \ + file://server.env \ + " + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install_append() { + # enable optional features in the config + BLUEZ5=${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', '', '#', d)} + sed -e "s/#IF_BLUEZ5 /${BLUEZ5}/" ${WORKDIR}/pipewire.conf.in > ${WORKDIR}/pipewire.conf + + # install our custom config + install -d ${D}/${sysconfdir}/pipewire/ + install -m 0644 ${WORKDIR}/pipewire.conf ${D}${sysconfdir}/pipewire/pipewire.conf + + # install environment variable files + install -d ${D}/${sysconfdir}/afm/unit.env.d/ + install -m 0644 ${WORKDIR}/client.env ${D}/${sysconfdir}/afm/unit.env.d/pipewire + install -m 0644 ${WORKDIR}/server.env ${D}${sysconfdir}/pipewire/environment +} + +FILES_${PN} = "\ + ${sysconfdir}/pipewire/* \ + ${sysconfdir}/afm/unit.env.d/* \ +" +CONFFILES_${PN} += "\ + ${sysconfdir}/pipewire/* \ + ${sysconfdir}/afm/unit.env.d/* \ +" + +RPROVIDES_${PN} += "virtual/pipewire-config" diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.service b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.service new file mode 100644 index 000000000..e116dc1fa --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.service @@ -0,0 +1,24 @@ +[Unit] +Description=Multimedia Service for user %i +Requires=pipewire@%i.socket + +[Install] +Also=pipewire@%i.socket + +[Service] +Type=simple +Restart=on-failure +ExecStart=/usr/bin/pipewire + +Environment=XDG_RUNTIME_DIR=/run/user/%i +Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus +EnvironmentFile=-/etc/pipewire/environment + +User=%i +Slice=user-%i.slice +SmackProcessLabel=System::Pipewire +SupplementaryGroups=audio +UMask=0077 +CapabilityBoundingSet= +SystemCallFilter=@basic-io @file-system @io-event @ipc \ + @memlock @network-io @process @resources @signal diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.socket b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.socket new file mode 100644 index 000000000..10cb32276 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/pipewire@.socket @@ -0,0 +1,19 @@ +[Unit] +Description=Multimedia Service socket for user %i +Requires=afm-user-setup@%i.service +After=afm-user-setup@%i.service + +[Socket] +Priority=6 +Backlog=5 +ListenStream=/run/user/%i/pipewire-0 +Service=pipewire@%i.service +SmackLabel=* +SmackLabelIPIn=System +SmackLabelIPOut=System +SocketUser=%i +SocketGroup=%i +SocketMode=0660 + +[Install] +WantedBy=afm-user-session@%i.target diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/smack-pipewire b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/smack-pipewire new file mode 100644 index 000000000..8d5b541ff --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire/smack-pipewire @@ -0,0 +1,8 @@ +System System::Pipewire rwxa-- +System::Pipewire System -wx--- +System::Pipewire System::Shared r-x--- +System::Pipewire System::Run rwxat- +System::Pipewire System::Log rwxa-- +System::Pipewire _ r-x--l +System::Pipewire User::Home r-x--l +System::Pipewire User::App-Shared rwxat- diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire_git.bbappend b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire_git.bbappend new file mode 100644 index 000000000..8c9abf23e --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-multimedia/pipewire/pipewire_git.bbappend @@ -0,0 +1,32 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/pipewire:" + +SRC_URI_append= "\ + file://pipewire@.service \ + file://pipewire@.socket \ + file://smack-pipewire \ + " + +do_install_append() { + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + # remove the original user unit files shipped by pipewire + rm -rf ${D}${systemd_unitdir} + + # install our own system-level templates + mkdir -p ${D}${systemd_system_unitdir}/ + install -m 0644 ${WORKDIR}/pipewire@.service ${D}${systemd_system_unitdir}/pipewire@.service + install -m 0644 ${WORKDIR}/pipewire@.socket ${D}${systemd_system_unitdir}/pipewire@.socket + + # enable the socket to start together with afm-user-session + mkdir -p ${D}${systemd_system_unitdir}/afm-user-session@.target.wants + ln -sf ../pipewire@.socket ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/pipewire@.socket + + # install smack rules + mkdir -p ${D}${sysconfdir}/smack/accesses.d + install -m 0644 ${WORKDIR}/smack-pipewire ${D}${sysconfdir}/smack/accesses.d/pipewire + fi +} + +FILES_${PN}_append = "\ + ${systemd_system_unitdir}/* \ + ${sysconfdir}/smack/accesses.d/* \ +" diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/cynagora/cynagora_%.bbappend b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/cynagora/cynagora_%.bbappend new file mode 100644 index 000000000..ccb6c4137 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/cynagora/cynagora_%.bbappend @@ -0,0 +1,4 @@ +do_install_append() { + echo "System::Pipewire * * http://tizen.org/privilege/internal/dbus yes forever" >> ${D}${sysconfdir}/security/cynagora.initial +} + diff --git a/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend new file mode 100644 index 000000000..47c9b9149 --- /dev/null +++ b/meta-pipewire/dynamic-layers/meta-app-framework/recipes-security/security-manager/security-manager_%.bbappend @@ -0,0 +1,3 @@ +do_install_append() { + echo "~APP~ System::Pipewire rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack +} diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch deleted file mode 100644 index 6c9a388c8..000000000 --- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch +++ /dev/null @@ -1,517 +0,0 @@ -From f2e6a0a324106b40195f88953e55a355875d2b1b Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Fri, 4 Oct 2019 20:51:24 +0300 -Subject: [PATCH] utils: add a gstreamer helper application for interconnection - with pipewire - -Unfortunately, the bluez-alsa PCM plugin does not work correctly -when it is used through pipewire (or gstreamer, or anywhere really...). - -Thanfully, the bluez-alsa PCM plugin is only a simple client that -reads/writes on a file descriptor that was opened by bluealsa. -This allows us to use bluealsa without the PCM plugin, just like it -is done in the aplay.c util. - -This one uses GStreamer to implement the plumbing between pipewire -and the file descriptor. On the reading side we are also doing some -tricks to ensure a smooth stream, which is not the case for the -stream that is coming out of bluealsa. - -This helper is implemented as a patch to bluez-alsa so that it can -use its internal private API. In the future this needs some re-thinking. - -Upstream-Status: Inappropriate ---- - configure.ac | 7 + - utils/Makefile.am | 20 +++ - utils/gst-helper.c | 432 +++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 459 insertions(+) - create mode 100644 utils/gst-helper.c - -diff --git a/configure.ac b/configure.ac -index 4825afa..9125871 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -141,6 +141,13 @@ AM_COND_IF([ENABLE_HCITOP], [ - PKG_CHECK_MODULES([NCURSES], [ncurses]) - ]) - -+AC_ARG_ENABLE([gsthelper], -+ [AS_HELP_STRING([--enable-gsthelper], [enable building of gsthelper tool])]) -+AM_CONDITIONAL([ENABLE_GSTHELPER], [test "x$enable_gsthelper" = "xyes"]) -+AM_COND_IF([ENABLE_GSTHELPER], [ -+ PKG_CHECK_MODULES([GST], [gstreamer-1.0 glib-2.0]) -+]) -+ - AC_ARG_ENABLE([test], - [AS_HELP_STRING([--enable-test], [enable unit test])]) - AM_CONDITIONAL([ENABLE_TEST], [test "x$enable_test" = "xyes"]) -diff --git a/utils/Makefile.am b/utils/Makefile.am -index 9057f2c..9790474 100644 ---- a/utils/Makefile.am -+++ b/utils/Makefile.am -@@ -47,3 +47,23 @@ hcitop_LDADD = \ - @LIBBSD_LIBS@ \ - @NCURSES_LIBS@ - endif -+ -+if ENABLE_GSTHELPER -+bin_PROGRAMS += bluealsa-gst-helper -+bluealsa_gst_helper_SOURCES = \ -+ ../src/shared/dbus-client.c \ -+ ../src/shared/ffb.c \ -+ ../src/shared/log.c \ -+ gst-helper.c -+bluealsa_gst_helper_CFLAGS = \ -+ -I$(top_srcdir)/src \ -+ @ALSA_CFLAGS@ \ -+ @BLUEZ_CFLAGS@ \ -+ @DBUS1_CFLAGS@ \ -+ @GST_CFLAGS@ -+bluealsa_gst_helper_LDADD = \ -+ @ALSA_LIBS@ \ -+ @BLUEZ_LIBS@ \ -+ @DBUS1_LIBS@ \ -+ @GST_LIBS@ -+endif -diff --git a/utils/gst-helper.c b/utils/gst-helper.c -new file mode 100644 -index 0000000..de1d47c ---- /dev/null -+++ b/utils/gst-helper.c -@@ -0,0 +1,432 @@ -+/* Bluez-Alsa PipeWire integration GStreamer helper -+ * -+ * Copyright © 2016-2019 Arkadiusz Bokowy -+ * Copyright © 2019 Collabora Ltd. -+ * @author George Kiagiadakis -+ * -+ * SPDX-License-Identifier: MIT -+ */ -+ -+#if HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include "shared/dbus-client.h" -+#include "shared/defs.h" -+#include "shared/ffb.h" -+#include "shared/log.h" -+ -+struct worker { -+ /* used BlueALSA PCM device */ -+ struct ba_pcm ba_pcm; -+ /* file descriptor of PCM FIFO */ -+ int ba_pcm_fd; -+ /* file descriptor of PCM control */ -+ int ba_pcm_ctrl_fd; -+ /* the gstreamer pipelines (sink & source) */ -+ GstElement *pipeline[2]; -+ /* the queue & pwaudiosink of the sink pipeline */ -+ GstElement *queue; -+ GstElement *pwelem; -+}; -+ -+static struct ba_dbus_ctx dbus_ctx; -+static GHashTable *workers; -+static bool main_loop_on = true; -+ -+static void -+main_loop_stop(int sig) -+{ -+ /* Call to this handler restores the default action, so on the -+ * second call the program will be forcefully terminated. */ -+ -+ struct sigaction sigact = { .sa_handler = SIG_DFL }; -+ sigaction(sig, &sigact, NULL); -+ -+ main_loop_on = false; -+} -+ -+static GstBusSyncReply -+bus_sync_handler(GstBus *bus, GstMessage *message, gpointer user_data) -+{ -+ struct worker *w = user_data; -+ GstState s; -+ -+ switch (GST_MESSAGE_TYPE (message)) { -+ case GST_MESSAGE_REQUEST_STATE: -+ gst_message_parse_request_state (message, &s); -+ -+ debug ("corked: %d", (s == GST_STATE_PAUSED)); -+ -+ /* drop queue data when corked */ -+ g_object_set (w->queue, -+ "leaky", (s == GST_STATE_PAUSED) ? 2 /* downstream */ : 0 /* no */, -+ NULL); -+ gst_element_set_state (w->pwelem, s); -+ -+ /* flush the queue when resuming */ -+ if (s == GST_STATE_PLAYING) { -+ gst_element_send_event (w->queue, gst_event_new_flush_start ()); -+ gst_element_send_event (w->queue, gst_event_new_flush_stop (FALSE)); -+ } -+ break; -+ default: -+ break; -+ } -+ -+ gst_message_unref (message); -+ return GST_BUS_DROP; -+} -+ -+static int -+worker_start_pipeline(struct worker *w, int id, int mode, int profile) -+{ -+ GError *gerr = NULL; -+ DBusError err = DBUS_ERROR_INIT; -+ const gchar * role = NULL; -+ -+ if (w->pipeline[id]) -+ return 0; -+ -+ if (!bluealsa_dbus_pcm_open(&dbus_ctx, w->ba_pcm.pcm_path, mode, -+ &w->ba_pcm_fd, &w->ba_pcm_ctrl_fd, &err)) { -+ error("Couldn't open PCM: %s", err.message); -+ dbus_error_free(&err); -+ goto fail; -+ } -+ -+ if (mode == BA_PCM_FLAG_SINK) { -+ debug("sink start"); -+ w->pipeline[id] = gst_parse_launch( -+ /* add a silent live source to ensure a perfect live stream on the -+ output, even when the bt device is not sending or has gaps; -+ this also effectively changes the clock to be the system clock, -+ which is the same clock used by bluez-alsa on the sending side */ -+ "audiotestsrc is-live=true wave=silence ! capsfilter name=capsf " -+ "! audiomixer name=m " -+ /* mix the input from bluez-alsa using fdsrc; rawaudioparse -+ is necessary to convert bytes to time and align the buffers */ -+ "fdsrc name=fdelem do-timestamp=true ! capsfilter name=capsf2 " -+ "! rawaudioparse use-sink-caps=true ! m. " -+ /* take the mixer output, convert and push to pipewire */ -+ "m.src ! capsfilter name=capsf3 ! audioconvert ! audioresample " -+ "! audio/x-raw,format=F32LE,rate=48000 ! identity sync=true " -+ "! queue name=queue leaky=no max-size-time=0 max-size-buffers=0 max-size-bytes=192000 " -+ "! pwaudiosink name=pwelem", -+ &gerr); -+ -+ /* a2dp is for music, sco is for calls */ -+ role = (profile == BA_PCM_FLAG_PROFILE_A2DP) ? "Multimedia" : "Communication"; -+ } -+ else if (mode == BA_PCM_FLAG_SOURCE && profile == BA_PCM_FLAG_PROFILE_SCO) { -+ debug("source start"); -+ w->pipeline[id] = gst_parse_launch( -+ /* read from pipewire and put the buffers on a leaky queue, which -+ will essentially allow pwaudiosrc to continue working while -+ the fdsink is blocked (when there is no phone call in progress). -+ 9600 bytes = 50ms @ F32LE/1ch/48000 -+ */ -+ "pwaudiosrc name=pwelem ! audio/x-raw,format=F32LE,rate=48000 " -+ "! queue name=queue leaky=downstream max-size-time=0 max-size-buffers=0 max-size-bytes=9600 " -+ "! audioconvert ! audioresample ! capsfilter name=capsf " -+ "! fdsink name=fdelem", &gerr); -+ -+ role = "Communication"; -+ } -+ -+ if (gerr) { -+ error("Failed to start pipeline: %s", gerr->message); -+ g_error_free(gerr); -+ goto fail; -+ } -+ -+ if (w->pipeline[id]) { -+ g_autofree gchar *capsstr = NULL; -+ g_autoptr (GstElement) fdelem = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "fdelem"); -+ g_autoptr (GstElement) pwelem = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "pwelem"); -+ g_autoptr (GstElement) queue = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "queue"); -+ g_autoptr (GstElement) capsf = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf"); -+ g_autoptr (GstElement) capsf2 = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf2"); -+ g_autoptr (GstElement) capsf3 = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf3"); -+ g_autoptr (GstCaps) caps = gst_caps_new_simple("audio/x-raw", -+ "format", G_TYPE_STRING, "S16LE", -+ "layout", G_TYPE_STRING, "interleaved", -+ "channels", G_TYPE_INT, w->ba_pcm.channels, -+ "rate", G_TYPE_INT, w->ba_pcm.sampling, -+ NULL); -+ g_autoptr (GstStructure) stream_props = gst_structure_new("props", -+ "media.role", G_TYPE_STRING, role, -+ "bluealsa.profile", G_TYPE_STRING, -+ (profile == BA_PCM_FLAG_PROFILE_SCO) ? "sco" : "a2dp", -+ NULL); -+ -+ g_object_set(capsf, "caps", caps, NULL); -+ if (capsf2) -+ g_object_set(capsf2, "caps", caps, NULL); -+ if (capsf3) -+ g_object_set(capsf3, "caps", caps, NULL); -+ -+ capsstr = gst_caps_to_string (caps); -+ debug(" caps: %s", capsstr); -+ -+ g_object_set(fdelem, "fd", w->ba_pcm_fd, NULL); -+ g_object_set(pwelem, "stream-properties", stream_props, NULL); -+ -+ if (mode == BA_PCM_FLAG_SINK) { -+ g_autoptr (GstBus) bus = gst_pipeline_get_bus(GST_PIPELINE(w->pipeline[id])); -+ gst_bus_set_sync_handler(bus, bus_sync_handler, w, NULL); -+ w->queue = queue; -+ w->pwelem = pwelem; -+ } -+ -+ gst_element_set_state(w->pipeline[id], GST_STATE_PLAYING); -+ } -+ -+ return 0; -+fail: -+ g_clear_object(&w->pipeline[id]); -+ return -1; -+} -+ -+static int -+worker_start(struct worker *w) -+{ -+ int mode = w->ba_pcm.flags & (BA_PCM_FLAG_SOURCE | BA_PCM_FLAG_SINK); -+ int profile = w->ba_pcm.flags & (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO); -+ /* human-readable BT address */ -+ char addr[18]; -+ -+ g_return_val_if_fail (profile != 0 && profile != (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO), -1); -+ -+ ba2str(&w->ba_pcm.addr, addr); -+ debug("%p: worker start addr:%s, mode:0x%x, profile:0x%x", w, addr, mode, profile); -+ -+ if (mode & BA_PCM_FLAG_SINK) -+ worker_start_pipeline(w, 0, BA_PCM_FLAG_SINK, profile); -+ if (mode & BA_PCM_FLAG_SOURCE) -+ worker_start_pipeline(w, 1, BA_PCM_FLAG_SOURCE, profile); -+} -+ -+static int -+worker_stop(struct worker *w) -+{ -+ debug("stop worker %p", w); -+ if (w->pipeline[0]) { -+ gst_element_set_state(w->pipeline[0], GST_STATE_NULL); -+ g_clear_object(&w->pipeline[0]); -+ } -+ if (w->pipeline[1]) { -+ gst_element_set_state(w->pipeline[1], GST_STATE_NULL); -+ g_clear_object(&w->pipeline[1]); -+ } -+ if (w->ba_pcm_fd != -1) { -+ close(w->ba_pcm_fd); -+ w->ba_pcm_fd = -1; -+ } -+ if (w->ba_pcm_ctrl_fd != -1) { -+ close(w->ba_pcm_ctrl_fd); -+ w->ba_pcm_ctrl_fd = -1; -+ } -+ return 0; -+} -+ -+static int -+supervise_pcm_worker(struct worker *worker) -+{ -+ if (worker == NULL) -+ return -1; -+ -+ /* no mode? */ -+ if (worker->ba_pcm.flags & (BA_PCM_FLAG_SOURCE | BA_PCM_FLAG_SINK) == 0) -+ goto stop; -+ -+ /* no profile? */ -+ if (worker->ba_pcm.flags & (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO) == 0) -+ goto stop; -+ -+ /* check whether SCO has selected codec */ -+ if (worker->ba_pcm.flags & BA_PCM_FLAG_PROFILE_SCO && -+ worker->ba_pcm.codec == 0) { -+ debug("Skipping SCO with codec not selected"); -+ goto stop; -+ } -+ -+start: -+ return worker_start(worker); -+stop: -+ return worker_stop(worker); -+} -+ -+static void -+worker_new(struct ba_pcm *pcm) -+{ -+ struct worker *w = g_slice_new0 (struct worker); -+ memcpy(&w->ba_pcm, pcm, sizeof(struct ba_pcm)); -+ w->ba_pcm_fd = -1; -+ w->ba_pcm_ctrl_fd = -1; -+ g_hash_table_insert(workers, w->ba_pcm.pcm_path, w); -+ supervise_pcm_worker(w); -+} -+ -+static DBusHandlerResult -+dbus_signal_handler(DBusConnection *conn, DBusMessage *message, void *data) -+{ -+ (void)conn; -+ (void)data; -+ -+ const char *path = dbus_message_get_path(message); -+ const char *interface = dbus_message_get_interface(message); -+ const char *signal = dbus_message_get_member(message); -+ -+ DBusMessageIter iter; -+ struct worker *worker; -+ -+ if (strcmp(interface, BLUEALSA_INTERFACE_MANAGER) == 0) { -+ -+ if (strcmp(signal, "PCMAdded") == 0) { -+ struct ba_pcm pcm; -+ if (!dbus_message_iter_init(message, &iter) || -+ !bluealsa_dbus_message_iter_get_pcm(&iter, NULL, &pcm)) { -+ error("Couldn't add new PCM: %s", "Invalid signal signature"); -+ goto fail; -+ } -+ worker_new(&pcm); -+ return DBUS_HANDLER_RESULT_HANDLED; -+ } -+ -+ if (strcmp(signal, "PCMRemoved") == 0) { -+ if (!dbus_message_iter_init(message, &iter) || -+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH) { -+ error("Couldn't remove PCM: %s", "Invalid signal signature"); -+ goto fail; -+ } -+ dbus_message_iter_get_basic(&iter, &path); -+ g_hash_table_remove(workers, path); -+ return DBUS_HANDLER_RESULT_HANDLED; -+ } -+ -+ } -+ -+ if (strcmp(interface, DBUS_INTERFACE_PROPERTIES) == 0) { -+ worker = g_hash_table_lookup(workers, path); -+ if (!worker) -+ goto fail; -+ if (!dbus_message_iter_init(message, &iter) || -+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) { -+ error("Couldn't update PCM: %s", "Invalid signal signature"); -+ goto fail; -+ } -+ dbus_message_iter_get_basic(&iter, &interface); -+ dbus_message_iter_next(&iter); -+ if (!bluealsa_dbus_message_iter_get_pcm_props(&iter, NULL, &worker->ba_pcm)) -+ goto fail; -+ supervise_pcm_worker(worker); -+ return DBUS_HANDLER_RESULT_HANDLED; -+ } -+ -+fail: -+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -+} -+ -+static void -+destroy_worker(void *worker) -+{ -+ struct worker *w = worker; -+ worker_stop(w); -+ g_slice_free(struct worker, w); -+} -+ -+int -+main(int argc, char *argv[]) -+{ -+ int ret = EXIT_SUCCESS; -+ -+ log_open(argv[0], false, false); -+ gst_init(&argc, &argv); -+ dbus_threads_init_default(); -+ -+ DBusError err = DBUS_ERROR_INIT; -+ if (!bluealsa_dbus_connection_ctx_init(&dbus_ctx, BLUEALSA_SERVICE, &err)) { -+ error("Couldn't initialize D-Bus context: %s", err.message); -+ return EXIT_FAILURE; -+ } -+ -+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx, -+ BLUEALSA_SERVICE, NULL, BLUEALSA_INTERFACE_MANAGER, "PCMAdded", NULL); -+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx, -+ BLUEALSA_SERVICE, NULL, BLUEALSA_INTERFACE_MANAGER, "PCMRemoved", NULL); -+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx, -+ BLUEALSA_SERVICE, NULL, DBUS_INTERFACE_PROPERTIES, "PropertiesChanged", -+ "arg0='"BLUEALSA_INTERFACE_PCM"'"); -+ -+ if (!dbus_connection_add_filter(dbus_ctx.conn, dbus_signal_handler, NULL, NULL)) { -+ error("Couldn't add D-Bus filter: %s", err.message); -+ return EXIT_FAILURE; -+ } -+ -+ workers = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, destroy_worker); -+ -+ { -+ struct ba_pcm *pcms = NULL; -+ size_t pcms_count = 0, i; -+ -+ if (!bluealsa_dbus_get_pcms(&dbus_ctx, &pcms, &pcms_count, &err)) -+ warn("Couldn't get BlueALSA PCM list: %s", err.message); -+ -+ for (i = 0; i < pcms_count; i++) { -+ worker_new(&pcms[i]); -+ } -+ -+ free(pcms); -+ } -+ -+ struct sigaction sigact = { .sa_handler = main_loop_stop }; -+ sigaction(SIGTERM, &sigact, NULL); -+ sigaction(SIGINT, &sigact, NULL); -+ -+ /* Ignore SIGPIPE, which may be received when writing to the bluealsa -+ socket when it is closed on the remote end */ -+ signal(SIGPIPE, SIG_IGN); -+ -+ debug("Starting main loop"); -+ while (main_loop_on) { -+ -+ struct pollfd pfds[10]; -+ nfds_t pfds_len = ARRAYSIZE(pfds); -+ -+ if (!bluealsa_dbus_connection_poll_fds(&dbus_ctx, pfds, &pfds_len)) { -+ error("Couldn't get D-Bus connection file descriptors"); -+ ret = EXIT_FAILURE; -+ goto out; -+ } -+ -+ if (poll(pfds, pfds_len, -1) == -1 && -+ errno == EINTR) -+ continue; -+ -+ if (bluealsa_dbus_connection_poll_dispatch(&dbus_ctx, pfds, pfds_len)) -+ while (dbus_connection_dispatch(dbus_ctx.conn) == DBUS_DISPATCH_DATA_REMAINS) -+ continue; -+ -+ } -+ -+out: -+ g_hash_table_unref(workers); -+ return ret; -+} --- -2.24.0 - diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service deleted file mode 100644 index 495ab6222..000000000 --- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service +++ /dev/null @@ -1,18 +0,0 @@ -[Unit] -Description=Bluetooth audio helper for user %i -Requires=pipewire@%i.socket bluez-alsa.service -After=pipewire@%i.socket bluez-alsa.service - -[Service] -Type=simple -Restart=on-failure -ExecStart=/usr/bin/bluealsa-gst-helper - -Environment=XDG_RUNTIME_DIR=/run/user/%i -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus - -User=%i -Slice=user-%i.slice -SupplementaryGroups=audio -UMask=0077 -CapabilityBoundingSet= diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend deleted file mode 100644 index 2f9699a83..000000000 --- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend +++ /dev/null @@ -1,35 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "\ - file://0001-utils-add-a-gstreamer-helper-application-for-interco.patch \ - file://bluealsa-gst-helper@.service \ - " - -PACKAGECONFIG += "gsthelper" -PACKAGECONFIG[gsthelper] = "--enable-gsthelper, --disable-gsthelper, gstreamer1.0" - -do_install_append() { - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - # install the service file - mkdir -p ${D}${systemd_system_unitdir}/ - install -m 0644 ${WORKDIR}/bluealsa-gst-helper@.service ${D}${systemd_system_unitdir}/bluealsa-gst-helper@.service - - # enable the helper to start together with afm-user-session - mkdir -p ${D}${systemd_system_unitdir}/afm-user-session@.target.wants - ln -sf ../bluealsa-gst-helper@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/bluealsa-gst-helper@.service - fi -} - -PACKAGES =+ "${PN}-pipewire" - -FILES_${PN}-pipewire = "\ - ${bindir}/bluealsa-gst-helper \ - ${systemd_system_unitdir}/bluealsa-gst-helper@.service \ - ${systemd_system_unitdir}/afm-user-session@.target.wants/bluealsa-gst-helper@.service \ - " -RDEPENDS_${PN}-pipewire += "\ - bluez-alsa \ - pipewire \ - gstreamer1.0-plugins-base \ - gstreamer1.0-pipewire \ - " diff --git a/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb index 4020f1e24..a20f8a4f7 100644 --- a/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb +++ b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb @@ -9,9 +9,7 @@ PACKAGES = "\ " RDEPENDS_${PN} += "\ - agl-service-audiomixer \ pipewire \ pipewire-alsa \ gstreamer1.0-pipewire \ - bluez-alsa-pipewire \ " diff --git a/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb b/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb deleted file mode 100644 index 2a8261195..000000000 --- a/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb +++ /dev/null @@ -1,17 +0,0 @@ -SUMMARY = "Audio Mixer Service Binding" -DESCRIPTION = "AGL Audio Mixer Service Binding" -SECTION = "apps" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264" - -PV = "0.1+git${SRCPV}" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-audiomixer.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "${AGL_APP_REVISION}" - -S = "${WORKDIR}/git" - -inherit cmake aglwgt pkgconfig - -DEPENDS += "pipewire wireplumber json-c" -RDEPENDS_${PN} = "agl-service-signal-composer" diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env deleted file mode 100644 index 9b44cee01..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env +++ /dev/null @@ -1,10 +0,0 @@ -# This file contains environment variables that will apply -# to pipewire clients started by the application framework - -# libpipewire by default tries to obtain real-time scheduling -# for the streaming thread. This is only useful on the desktop, disable here. -DISABLE_RTKIT=1 - -# Uncomment to enable libpipewire debug for clients -# 1=error, 2=warning, 3=info, 4=debug, 5=trace -#PIPEWIRE_DEBUG=4 diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in deleted file mode 100644 index 6c055bcff..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in +++ /dev/null @@ -1,17 +0,0 @@ -# daemon config file for PipeWire version "0.2.9" -# distributed by Automotive Grade Linux - -add-spa-lib audio.convert* audioconvert/libspa-audioconvert -add-spa-lib api.alsa.* alsa/libspa-alsa -add-spa-lib api.v4l2.* v4l2/libspa-v4l2 -add-spa-lib api.bluez5.* bluez5/libspa-bluez5 - -load-module libpipewire-module-protocol-native -load-module libpipewire-module-spa-node-factory -load-module libpipewire-module-client-node -load-module libpipewire-module-client-device -load-module libpipewire-module-access same-sec-label-mode=1 -load-module libpipewire-module-adapter -load-module libpipewire-module-link-factory -load-module libpipewire-module-session-manager -exec /usr/bin/wireplumber diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env deleted file mode 100644 index c74b941d6..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env +++ /dev/null @@ -1,12 +0,0 @@ -# This file contains environment variables that will apply -# to the pipewire daemon as well as its session manager - -# Disable rtkit for wireplumber, which is also a client -DISABLE_RTKIT=1 - -# Uncomment to enable wireplumber debug -#G_MESSAGES_DEBUG=all - -# Uncomment to enable pipewire debug -# 1=error, 2=warning, 3=info, 4=debug, 5=trace -#PIPEWIRE_DEBUG=4 diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb deleted file mode 100644 index a28c6534e..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb +++ /dev/null @@ -1,43 +0,0 @@ -SUMMARY = "AGL configuration file for pipewire" -HOMEPAGE = "https://pipewire.org" -BUGTRACKER = "https://jira.automotivelinux.org" -AUTHOR = "George Kiagiadakis " -SECTION = "multimedia" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" - -SRC_URI = " \ - file://pipewire.conf.in \ - file://client.env \ - file://server.env \ - " - -do_configure[noexec] = "1" -do_compile[noexec] = "1" - -do_install_append() { - # enable optional features in the config - BLUEZ5=${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', '', '#', d)} - sed -e "s/#IF_BLUEZ5 /${BLUEZ5}/" ${WORKDIR}/pipewire.conf.in > ${WORKDIR}/pipewire.conf - - # install our custom config - install -d ${D}/${sysconfdir}/pipewire/ - install -m 0644 ${WORKDIR}/pipewire.conf ${D}${sysconfdir}/pipewire/pipewire.conf - - # install environment variable files - install -d ${D}/${sysconfdir}/afm/unit.env.d/ - install -m 0644 ${WORKDIR}/client.env ${D}/${sysconfdir}/afm/unit.env.d/pipewire - install -m 0644 ${WORKDIR}/server.env ${D}${sysconfdir}/pipewire/environment -} - -FILES_${PN} = "\ - ${sysconfdir}/pipewire/* \ - ${sysconfdir}/afm/unit.env.d/* \ -" -CONFFILES_${PN} += "\ - ${sysconfdir}/pipewire/* \ - ${sysconfdir}/afm/unit.env.d/* \ -" - -RPROVIDES_${PN} += "virtual/pipewire-config" diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service b/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service deleted file mode 100644 index e116dc1fa..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service +++ /dev/null @@ -1,24 +0,0 @@ -[Unit] -Description=Multimedia Service for user %i -Requires=pipewire@%i.socket - -[Install] -Also=pipewire@%i.socket - -[Service] -Type=simple -Restart=on-failure -ExecStart=/usr/bin/pipewire - -Environment=XDG_RUNTIME_DIR=/run/user/%i -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus -EnvironmentFile=-/etc/pipewire/environment - -User=%i -Slice=user-%i.slice -SmackProcessLabel=System::Pipewire -SupplementaryGroups=audio -UMask=0077 -CapabilityBoundingSet= -SystemCallFilter=@basic-io @file-system @io-event @ipc \ - @memlock @network-io @process @resources @signal diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket b/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket deleted file mode 100644 index 10cb32276..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=Multimedia Service socket for user %i -Requires=afm-user-setup@%i.service -After=afm-user-setup@%i.service - -[Socket] -Priority=6 -Backlog=5 -ListenStream=/run/user/%i/pipewire-0 -Service=pipewire@%i.service -SmackLabel=* -SmackLabelIPIn=System -SmackLabelIPOut=System -SocketUser=%i -SocketGroup=%i -SocketMode=0660 - -[Install] -WantedBy=afm-user-session@%i.target diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire b/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire deleted file mode 100644 index 8d5b541ff..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire +++ /dev/null @@ -1,8 +0,0 @@ -System System::Pipewire rwxa-- -System::Pipewire System -wx--- -System::Pipewire System::Shared r-x--- -System::Pipewire System::Run rwxat- -System::Pipewire System::Log rwxa-- -System::Pipewire _ r-x--l -System::Pipewire User::Home r-x--l -System::Pipewire User::App-Shared rwxat- diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend b/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend deleted file mode 100644 index 8a0b0741f..000000000 --- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend +++ /dev/null @@ -1,30 +0,0 @@ -SRC_URI += "\ - file://pipewire@.service \ - file://pipewire@.socket \ - file://smack-pipewire \ - " - -do_install_append() { - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - # remove the original user unit files shipped by pipewire - rm -rf ${D}${systemd_unitdir} - - # install our own system-level templates - mkdir -p ${D}${systemd_system_unitdir}/ - install -m 0644 ${WORKDIR}/pipewire@.service ${D}${systemd_system_unitdir}/pipewire@.service - install -m 0644 ${WORKDIR}/pipewire@.socket ${D}${systemd_system_unitdir}/pipewire@.socket - - # enable the socket to start together with afm-user-session - mkdir -p ${D}${systemd_system_unitdir}/afm-user-session@.target.wants - ln -sf ../pipewire@.socket ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/pipewire@.socket - - # install smack rules - mkdir -p ${D}${sysconfdir}/smack/accesses.d - install -m 0644 ${WORKDIR}/smack-pipewire ${D}${sysconfdir}/smack/accesses.d/pipewire - fi -} - -FILES_${PN} += "\ - ${systemd_system_unitdir}/* \ - ${sysconfdir}/smack/accesses.d/* \ -" diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint index 4405f7b7a..afc4303eb 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint @@ -3,7 +3,6 @@ priority = 30 properties = [ { name = "media.class", value = "Audio/Sink" }, { name = "api.alsa.card.id", value = "ak4613" }, - { name = "api.alsa.pcm.device", value = "0" }, ] [endpoint] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint index 0c7b20805..53f9d0df7 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint @@ -3,7 +3,6 @@ priority = 30 properties = [ { name = "media.class", value = "Audio/Sink" }, { name = "api.alsa.card.id", value = "rcarsound" }, - { name = "api.alsa.pcm.device", value = "0" }, ] [endpoint] diff --git a/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend b/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend deleted file mode 100644 index 9395c90c7..000000000 --- a/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend +++ /dev/null @@ -1,5 +0,0 @@ - -do_install_append() { - echo "System::Pipewire * * http://tizen.org/privilege/internal/dbus yes forever" >> ${D}${sysconfdir}/security/cynagora.initial -} - diff --git a/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend b/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend deleted file mode 100644 index 594494463..000000000 --- a/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend +++ /dev/null @@ -1,4 +0,0 @@ - -do_install_append() { - echo "~APP~ System::Pipewire rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack -} diff --git a/meta-pipewire/scripts/run-yocto-check-layer.sh b/meta-pipewire/scripts/run-yocto-check-layer.sh new file mode 100755 index 000000000..15b4de0e1 --- /dev/null +++ b/meta-pipewire/scripts/run-yocto-check-layer.sh @@ -0,0 +1,35 @@ +#!/bin/bash +#set -x + +SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )" +echo $SCRIPTPATH +AGLROOT="$SCRIPTPATH/../../.." +POKYDIR="$AGLROOT/external/poky" +TMPROOT=`mktemp -d` + +rm -rf ${TMPROOT}/testbuild-ycl || true +mkdir -p ${TMPROOT}/testbuild-ycl +cd ${TMPROOT}/testbuild-ycl + +source $POKYDIR/oe-init-build-env . + +cat << EOF >> conf/local.conf +# just define defaults +AGL_FEATURES ?= "" +AGL_EXTRA_IMAGE_FSTYPES ?= "" + +# important settings imported from poky-agl.conf +# we do not import +DISTRO_FEATURES_append = " systemd smack" +DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " sysvinit" +VIRTUAL-RUNTIME_init_manager = "systemd" + +EOF + + +yocto-check-layer \ + -- \ + $AGLROOT/meta-agl/meta-pipewire + + +[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl diff --git a/meta-security/COPYING.MIT b/meta-security/COPYING.MIT deleted file mode 100644 index 89de35479..000000000 --- a/meta-security/COPYING.MIT +++ /dev/null @@ -1,17 +0,0 @@ -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. diff --git a/meta-security/README.md b/meta-security/README.md deleted file mode 100644 index 6a8024bc6..000000000 --- a/meta-security/README.md +++ /dev/null @@ -1,31 +0,0 @@ -This README file contains information on the contents of the -meta-security layer. - -Please see the corresponding sections below for details. - - -Dependencies -============ - -This layer depends on: - - URI: git://git.openembedded.org/bitbake - branch: master - - URI: git://git.openembedded.org/openembedded-core - layers: meta - branch: master - - URI: git://git.yoctoproject.org/meta-security - branch: master - - -Patches -======= - -Please submit any patches against the meta-security layer via gerrit -reviews. - -For discussion use the discussion mailing list -https://lists.automotivelinux.org/g/agl-dev-community - diff --git a/meta-security/conf/layer.conf b/meta-security/conf/layer.conf deleted file mode 100644 index 6024d2847..000000000 --- a/meta-security/conf/layer.conf +++ /dev/null @@ -1,14 +0,0 @@ -# We have a conf and classes directory, add to BBPATH -BBPATH =. "${LAYERDIR}:" - -# We have a packages directory, add to BBFILES -BBFILES += " ${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend \ - " - -# Must prioritize our rpm recipe over the default ones. -BBFILE_COLLECTIONS += "security-smack" -BBFILE_PATTERN_security-smack := "^${LAYERDIR}/" -BBFILE_PRIORITY_security-smack = "60" - -LAYERSERIES_COMPAT_security-smack = "dunfell" diff --git a/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend deleted file mode 100644 index 3767681b0..000000000 --- a/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend +++ /dev/null @@ -1,55 +0,0 @@ -# Recent bluez5 releases started limiting the capabilities of -# bluetoothd. When running on a Smack-enabled system, that change has the -# effect that bluetoothd can no longer create the input device under -# /sys because bluez5 running with label "System" has no write -# access to that. -# -# It works when running as normal root with unrestricted capabilities -# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows -# the process to ignore Smack rules. -# -# We need to ensure that bluetoothd still has that capability. -# -# To fix the issue, Patick and Casey(the Smack architect) had a talk -# about it in Ostro dev mail list. Casey has some ideas about the issue: -# "Turning off privilege is a great thing to do *so long as you don't -# really need the privilege*. In this case you really need it. -# The application package isn't written to account for Smack's use of -# CAP_MAC_OVERRIDE as the mechanism for controlling this dangerous operation. -# Yes, it would be possible to change /proc to change the Smack label on -# that particular file, but that might open other paths for exploit. -# I say give the program the required capability. The program maintainer -# may well say change the kernel handling of /proc. You're stuck in the -# middle, as both work the way they're intended and hence the system -# doesn't work. :( There isn't a way to make this work without "loosening" -# something." -# Therefore, when we we run the program with CAP_MAC_OVERRIDE, -# the whole reason for having capabilities is so the we can give a -# process the ability to bypass one kind of check without giving it the -# ability to bypass other, unrelated checks. A process with -# CAP_MAC_OVERRIDE is still constrained by the file mode bits. -# We was overly worried about granting that capability. -# When it has no other effect than excluding a process from Smack MAC enforcement, -# then adding to the process seems like the right solution for now. -# -# The conclusion from Patick and Casey is that the Smack architect give the key point -# that this is the solution preferred. -# -# Because the solution is to some extend specific to the environment -# in which connmand runs, this change is not submitted upstream -# and it can be overridden by a distro via FIX_BLUEZ5_CAPABILITIES. -# -# The related patch has been submitted to upstream too. -# upstream link: http://permalink.gmane.org/gmane.linux.bluez.kernel/67993 - -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI_append_with-lsm-smack = "\ - file://bluetooth.service.conf \ -" - -FILES_${PN} += "${systemd_unitdir}" - -do_install_append_with-lsm-smack() { - install -Dm0644 ${WORKDIR}/bluetooth.service.conf ${D}${systemd_unitdir}/system/bluetooth.service.d/smack.conf -} diff --git a/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf b/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf deleted file mode 100644 index b93ab4fee..000000000 --- a/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -CapabilityBoundingSet=CAP_MAC_OVERRIDE diff --git a/meta-security/recipes-connectivity/connman/connman_%.bbappend b/meta-security/recipes-connectivity/connman/connman_%.bbappend deleted file mode 100644 index 3b010490d..000000000 --- a/meta-security/recipes-connectivity/connman/connman_%.bbappend +++ /dev/null @@ -1,34 +0,0 @@ -# Recent ConnMan releases started limiting the capabilities of -# ConnMan. When running on a Smack-enabled system, that change has the -# effect that connmand can no longer change network settings under -# /proc/net because the Smack label of /proc is "_", and connmand -# running with label "System" has no write access to that. -# -# It works when running as normal root with unrestricted capabilities -# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows -# the process to ignore Smack rules. -# -# We need to ensure that connmand still has that capability. -# -# The alternative would be to set up fine-grained labelling of -# /proc with corresponding rules, which is considerably more work -# and also may depend on kernel changes (like supporting smackfsroot -# for procfs, which seems to be missing at the moment). -# -# Because the solution is to some extend specific to the environment -# in which connmand runs, this change is not submitted upstream -# and it can be overridden by a distro via FIX_CONNMAN_CAPABILITIES. - -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" - -SRC_URI_append_with-lsm-smack = "\ - file://connman.service.conf \ -" - -RDEPENDS_${PN}_append_with-lsm-smack = " smack" - -FILES_${PN} += "${systemd_unitdir}" - -do_install_append_with-lsm-smack() { - install -Dm0644 ${WORKDIR}/connman.service.conf ${D}${systemd_unitdir}/system/connman.service.d/smack.conf -} diff --git a/meta-security/recipes-connectivity/connman/files/connman.service.conf b/meta-security/recipes-connectivity/connman/files/connman.service.conf deleted file mode 100644 index 6ebbf6ad1..000000000 --- a/meta-security/recipes-connectivity/connman/files/connman.service.conf +++ /dev/null @@ -1,4 +0,0 @@ -[Service] -CapabilityBoundingSet=CAP_MAC_OVERRIDE -ExecStartPre=+-/bin/mkdir -p /run/connman -ExecStartPre=+-/usr/bin/chsmack -t -a System::Shared /run/connman diff --git a/meta-security/recipes-core/base-files/base-files_%.bbappend b/meta-security/recipes-core/base-files/base-files_%.bbappend deleted file mode 100644 index f0e340f5b..000000000 --- a/meta-security/recipes-core/base-files/base-files_%.bbappend +++ /dev/null @@ -1,79 +0,0 @@ -# Install default Smack rules, copied from a running Tizen IVI 3.0. -# Corresponds to manifest file from default-access-domains in Tizen: -# https://review.tizen.org/git?p=platform/core/security/default-ac-domains.git;a=blob;f=packaging/default-ac-domains.manifest -do_install_append_with-lsm-smack () { - install -d ${D}/${sysconfdir}/smack/accesses.d - cat >${D}/${sysconfdir}/smack/accesses.d/default-access-domains <${D}/${libdir}/tmpfiles.d/packet-forwarding.conf <${D}/${base_libdir}/udev/rules.d/85-netdev-ipconf-smacklabel.rules < - install -d $D${sysconfdir} - # This has no effect on files installed into /etc during image construction - # because pseudo does not know the special semantic of SMACK::TRANSMUTE. - # To avoid having different xattrs on files inside /etc when pre-installed - # in an image vs. installed on a device, the xattr-images.bbclass has - # a workaround for this deficiency in pseudo. - chsmack -t $D${sysconfdir} - chsmack -a 'System::Shared' $D${sysconfdir} - - # Same for /media. Any daemon running as "System" will get write access - # to everything. - install -d $D/media - chsmack -t $D/media - chsmack -a 'System::Shared' $D/media - - # Same for /var. Any daemon running as "System" will get write access - # to everything. - install -d $D${localstatedir} - chsmack -t $D${localstatedir} - chsmack -a 'System::Shared' $D${localstatedir} - - # - mkdir -p $D/tmp - chsmack -a '*' $D/tmp - - # - # - # These are in a file system mounted by systemd. We patch the systemd service - # to set these attributes. -} diff --git a/meta-security/recipes-core/coreutils/coreutils_%.bbappend b/meta-security/recipes-core/coreutils/coreutils_%.bbappend deleted file mode 100644 index 1b9b722ec..000000000 --- a/meta-security/recipes-core/coreutils/coreutils_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Smack patches are included in coreutils v8.22, we just need to enable them. -# The default is not deterministic (enabled if libsmack found), so disable -# explicitly otherwise. -EXTRA_OECONF_SMACK_class-target = "--disable-libsmack" -EXTRA_OECONF_SMACK_with-lsm-smack_class-target = "--enable-libsmack" -EXTRA_OECONF_append_class-target = " ${EXTRA_OECONF_SMACK}" -DEPENDS_append_with-lsm-smack_class-target = " smack" diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch deleted file mode 100644 index 55cedb9c7..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch +++ /dev/null @@ -1,2309 +0,0 @@ -From ea4b650366261e4257e4b0fb95e7f48e30ef36f0 Mon Sep 17 00:00:00 2001 -From: Jacek Bukarewicz -Date: Thu, 27 Nov 2014 18:11:05 +0100 -Subject: [PATCH 1/8] Integration of Cynara asynchronous security checks -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This commit introduces basic framework for asynchronous policy -checks and Cynara integration code. Functions for checking security -policy can now return third value - BUS_RESULT_LATER denoting check -result unavailability. Whenever policy checker cannot decide on the -result of the check it is supposed to allocate DeferredMessage structure -that will be passed to the upper layers which can decide what should be -done in such situation. -Proper handling of such case will be implemented in subsequent commits. -Currently such return value results in message denial. - -Cherry picked from 4dcfb02f17247ff9de966b62182cd2e08f301238 -by José Bollo. - -Updated for dbus 1.10.20 by Scott Murray and José Bollo -Updated for dbus 1.12.16 by José Bollo - -Change-Id: I9bcbce34577e5dc2a3cecf6233a0a2b0e43e1108 -Signed-off-by: José Bollo -Signed-off-by: Scott Murray ---- - bus/Makefile.am | 6 + - bus/activation.c | 5 +- - bus/bus.c | 124 ++++-- - bus/bus.h | 22 +- - bus/check.c | 217 ++++++++++ - bus/check.h | 68 ++++ - bus/config-parser-common.c | 6 + - bus/config-parser-common.h | 1 + - bus/config-parser-trivial.c | 2 + - bus/config-parser.c | 72 +++- - bus/connection.c | 57 ++- - bus/connection.h | 4 + - bus/cynara.c | 374 ++++++++++++++++++ - bus/cynara.h | 37 ++ - bus/dispatch.c | 46 ++- - bus/driver.h | 2 + - bus/policy.c | 195 ++++++--- - bus/policy.h | 29 +- - configure.ac | 12 + - test/Makefile.am | 1 + - .../data/invalid-config-files/badcheck-1.conf | 9 + - .../data/invalid-config-files/badcheck-2.conf | 9 + - test/data/valid-config-files/check-1.conf | 9 + - .../debug-check-some.conf.in | 18 + - 24 files changed, 1181 insertions(+), 144 deletions(-) - create mode 100644 bus/check.c - create mode 100644 bus/check.h - create mode 100644 bus/cynara.c - create mode 100644 bus/cynara.h - create mode 100644 test/data/invalid-config-files/badcheck-1.conf - create mode 100644 test/data/invalid-config-files/badcheck-2.conf - create mode 100644 test/data/valid-config-files/check-1.conf - create mode 100644 test/data/valid-config-files/debug-check-some.conf.in - -diff --git a/bus/Makefile.am b/bus/Makefile.am -index c917063..2a8a72c 100644 ---- a/bus/Makefile.am -+++ b/bus/Makefile.am -@@ -13,6 +13,7 @@ DBUS_BUS_LIBS = \ - $(THREAD_LIBS) \ - $(ADT_LIBS) \ - $(NETWORK_libs) \ -+ $(CYNARA_LIBS) \ - $(NULL) - - DBUS_LAUNCHER_LIBS = \ -@@ -30,6 +31,7 @@ AM_CPPFLAGS = \ - $(APPARMOR_CFLAGS) \ - -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \ - -DDBUS_COMPILATION \ -+ $(CYNARA_CFLAGS) \ - $(NULL) - - # if assertions are enabled, improve backtraces -@@ -90,6 +92,8 @@ BUS_SOURCES= \ - audit.h \ - bus.c \ - bus.h \ -+ check.c \ -+ check.h \ - config-loader-expat.c \ - config-parser.c \ - config-parser.h \ -@@ -97,6 +101,8 @@ BUS_SOURCES= \ - config-parser-common.h \ - connection.c \ - connection.h \ -+ cynara.c \ -+ cynara.h \ - desktop-file.c \ - desktop-file.h \ - $(DIR_WATCH_SOURCE) \ -diff --git a/bus/activation.c b/bus/activation.c -index 99404b9..f9c6c62 100644 ---- a/bus/activation.c -+++ b/bus/activation.c -@@ -1789,14 +1789,15 @@ bus_activation_activate_service (BusActivation *activation, - - if (auto_activation && - entry != NULL && -- !bus_context_check_security_policy (activation->context, -+ BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context, - transaction, - connection, /* sender */ - NULL, /* addressed recipient */ - NULL, /* proposed recipient */ - activation_message, - entry, -- error)) -+ error, -+ NULL)) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - _dbus_verbose ("activation not authorized: %s: %s\n", -diff --git a/bus/bus.c b/bus/bus.c -index 2ad8e78..6fc45d0 100644 ---- a/bus/bus.c -+++ b/bus/bus.c -@@ -38,6 +38,7 @@ - #include "apparmor.h" - #include "audit.h" - #include "dir-watch.h" -+#include "check.h" - #include - #include - #include -@@ -67,6 +68,7 @@ struct BusContext - BusRegistry *registry; - BusPolicy *policy; - BusMatchmaker *matchmaker; -+ BusCheck *check; - BusLimits limits; - DBusRLimit *initial_fd_limit; - unsigned int fork : 1; -@@ -1003,6 +1005,10 @@ bus_context_new (const DBusString *config_file, - parser = NULL; - } - -+ context->check = bus_check_new(context, error); -+ if (context->check == NULL) -+ goto failed; -+ - dbus_server_free_data_slot (&server_data_slot); - - return context; -@@ -1127,6 +1133,12 @@ bus_context_unref (BusContext *context) - - bus_context_shutdown (context); - -+ if (context->check) -+ { -+ bus_check_unref(context->check); -+ context->check = NULL; -+ } -+ - if (context->connections) - { - bus_connections_unref (context->connections); -@@ -1256,6 +1268,12 @@ bus_context_get_loop (BusContext *context) - return context->loop; - } - -+BusCheck* -+bus_context_get_check (BusContext *context) -+{ -+ return context->check; -+} -+ - dbus_bool_t - bus_context_allow_unix_user (BusContext *context, - unsigned long uid) -@@ -1451,6 +1469,7 @@ complain_about_message (BusContext *context, - DBusConnection *proposed_recipient, - dbus_bool_t requested_reply, - dbus_bool_t log, -+ const char *privilege, - DBusError *error) - { - DBusError stack_error = DBUS_ERROR_INIT; -@@ -1480,7 +1499,8 @@ complain_about_message (BusContext *context, - dbus_set_error (&stack_error, error_name, - "%s, %d matched rules; type=\"%s\", sender=\"%s\" (%s) " - "interface=\"%s\" member=\"%s\" error name=\"%s\" " -- "requested_reply=\"%d\" destination=\"%s\" (%s)", -+ "requested_reply=\"%d\" destination=\"%s\" (%s) " -+ "privilege=\"%s\"", - complaint, - matched_rules, - dbus_message_type_to_string (dbus_message_get_type (message)), -@@ -1491,7 +1511,8 @@ complain_about_message (BusContext *context, - nonnull (dbus_message_get_error_name (message), "(unset)"), - requested_reply, - nonnull (dbus_message_get_destination (message), DBUS_SERVICE_DBUS), -- proposed_recipient_loginfo); -+ proposed_recipient_loginfo, -+ nonnull (privilege, "(n/a)")); - - /* If we hit OOM while setting the error, this will syslog "out of memory" - * which is itself an indication that something is seriously wrong */ -@@ -1519,7 +1540,7 @@ complain_about_message (BusContext *context, - * NULL for addressed_recipient may mean the bus driver, or may mean - * no destination was specified in the message (e.g. a signal). - */ --dbus_bool_t -+BusResult - bus_context_check_security_policy (BusContext *context, - BusTransaction *transaction, - DBusConnection *sender, -@@ -1527,7 +1548,8 @@ bus_context_check_security_policy (BusContext *context, - DBusConnection *proposed_recipient, - DBusMessage *message, - BusActivationEntry *activation_entry, -- DBusError *error) -+ DBusError *error, -+ BusDeferredMessage **deferred_message) - { - const char *src, *dest; - BusClientPolicy *sender_policy; -@@ -1536,6 +1558,7 @@ bus_context_check_security_policy (BusContext *context, - dbus_bool_t log; - int type; - dbus_bool_t requested_reply; -+ const char *privilege; - - type = dbus_message_get_type (message); - src = dbus_message_get_sender (message); -@@ -1565,7 +1588,7 @@ bus_context_check_security_policy (BusContext *context, - dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, - "Message bus will not accept messages of unknown type\n"); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - requested_reply = FALSE; -@@ -1595,7 +1618,7 @@ bus_context_check_security_policy (BusContext *context, - if (dbus_error_is_set (&error2)) - { - dbus_move_error (&error2, error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - } - } -@@ -1624,11 +1647,11 @@ bus_context_check_security_policy (BusContext *context, - complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, - "An SELinux policy prevents this sender from sending this " - "message to this recipient", -- 0, message, sender, proposed_recipient, FALSE, FALSE, error); -+ 0, message, sender, proposed_recipient, FALSE, FALSE, NULL, error); - _dbus_verbose ("SELinux security check denying send to service\n"); - } - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - /* next verify AppArmor access controls. If allowed then -@@ -1646,7 +1669,7 @@ bus_context_check_security_policy (BusContext *context, - src ? src : DBUS_SERVICE_DBUS, - activation_entry, - error)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - if (!bus_connection_is_active (sender)) - { -@@ -1660,7 +1683,7 @@ bus_context_check_security_policy (BusContext *context, - { - _dbus_verbose ("security check allowing %s message\n", - "Hello"); -- return TRUE; -+ return BUS_RESULT_TRUE; - } - else - { -@@ -1671,7 +1694,7 @@ bus_context_check_security_policy (BusContext *context, - "Client tried to send a message other than %s without being registered", - "Hello"); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - } - } -@@ -1720,20 +1743,29 @@ bus_context_check_security_policy (BusContext *context, - (proposed_recipient == NULL && recipient_policy == NULL)); - - log = FALSE; -- if (sender_policy && -- !bus_client_policy_check_can_send (sender_policy, -- context->registry, -- requested_reply, -- proposed_recipient, -- message, &toggles, &log)) -- { -- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, -- "Rejected send message", toggles, -- message, sender, proposed_recipient, requested_reply, -- (addressed_recipient == proposed_recipient), error); -- _dbus_verbose ("security policy disallowing message due to sender policy\n"); -- return FALSE; -- } -+ if (sender_policy) -+ { -+ BusResult res = bus_client_policy_check_can_send (sender, -+ sender_policy, -+ context->registry, -+ requested_reply, -+ addressed_recipient, -+ proposed_recipient, -+ message, &toggles, &log, &privilege, -+ deferred_message); -+ if (res == BUS_RESULT_FALSE) -+ { -+ complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, -+ "Rejected send message", toggles, -+ message, sender, proposed_recipient, requested_reply, -+ (addressed_recipient == proposed_recipient), privilege, -+ error); -+ _dbus_verbose ("security policy disallowing message due to sender policy\n"); -+ return BUS_RESULT_FALSE; -+ } -+ else if (res == BUS_RESULT_LATER) -+ return BUS_RESULT_LATER; -+ } - - if (log) - { -@@ -1742,23 +1774,29 @@ bus_context_check_security_policy (BusContext *context, - complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, - "Would reject message", toggles, - message, sender, proposed_recipient, requested_reply, -- TRUE, NULL); -+ TRUE, privilege, NULL); - } - -- if (recipient_policy && -- !bus_client_policy_check_can_receive (recipient_policy, -- context->registry, -- requested_reply, -- sender, -- addressed_recipient, proposed_recipient, -- message, &toggles)) -+ if (recipient_policy) - { -- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED, -- "Rejected receive message", toggles, -- message, sender, proposed_recipient, requested_reply, -- (addressed_recipient == proposed_recipient), error); -- _dbus_verbose ("security policy disallowing message due to recipient policy\n"); -- return FALSE; -+ BusResult res; -+ res = bus_client_policy_check_can_receive (recipient_policy, -+ context->registry, -+ requested_reply, -+ sender, -+ addressed_recipient, proposed_recipient, -+ message, &toggles, &privilege, deferred_message); -+ if (res == BUS_RESULT_FALSE) -+ { -+ complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected receive message", -+ toggles, message, sender, proposed_recipient, requested_reply, -+ (addressed_recipient == proposed_recipient), privilege, error); -+ _dbus_verbose( -+ "security policy disallowing message due to recipient policy\n"); -+ return BUS_RESULT_FALSE; -+ } -+ else if (res == BUS_RESULT_LATER) -+ return BUS_RESULT_LATER; - } - - /* See if limits on size have been exceeded */ -@@ -1768,10 +1806,10 @@ bus_context_check_security_policy (BusContext *context, - { - complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, - "Rejected: destination has a full message queue", -- 0, message, sender, proposed_recipient, requested_reply, TRUE, -+ 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL, - error); - _dbus_verbose ("security policy disallowing message due to full message queue\n"); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - /* Record that we will allow a reply here in the future (don't -@@ -1792,11 +1830,11 @@ bus_context_check_security_policy (BusContext *context, - message, error)) - { - _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n"); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - _dbus_verbose ("security policy allowing message\n"); -- return TRUE; -+ return BUS_RESULT_TRUE; - } - - void -diff --git a/bus/bus.h b/bus/bus.h -index 2e0de82..82c32c8 100644 ---- a/bus/bus.h -+++ b/bus/bus.h -@@ -45,6 +45,22 @@ typedef struct BusTransaction BusTransaction; - typedef struct BusMatchmaker BusMatchmaker; - typedef struct BusMatchRule BusMatchRule; - typedef struct BusActivationEntry BusActivationEntry; -+typedef struct BusCheck BusCheck; -+typedef struct BusDeferredMessage BusDeferredMessage; -+typedef struct BusCynara BusCynara; -+ -+/** -+ * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches. -+ * The disadvantage of such solution is that now BusResult variables cannot be used in switch -+ * statement. -+ * Additionally, BUS_RESULT_TRUE is defined as 0 instead of 1 to help detect type mismatches -+ * at runtime. -+ */ -+typedef const struct BusResultStruct { int dummy; } *BusResult; -+ -+static const BusResult BUS_RESULT_TRUE = (BusResult)0x0; -+static const BusResult BUS_RESULT_FALSE = (BusResult)0x1; -+static const BusResult BUS_RESULT_LATER = (BusResult)0x2; - - typedef struct - { -@@ -101,6 +117,7 @@ BusConnections* bus_context_get_connections (BusContext - BusActivation* bus_context_get_activation (BusContext *context); - BusMatchmaker* bus_context_get_matchmaker (BusContext *context); - DBusLoop* bus_context_get_loop (BusContext *context); -+BusCheck * bus_context_get_check (BusContext *context); - dbus_bool_t bus_context_allow_unix_user (BusContext *context, - unsigned long uid); - dbus_bool_t bus_context_allow_windows_user (BusContext *context, -@@ -136,14 +153,15 @@ void bus_context_log_and_set_error (BusContext - const char *name, - const char *msg, - ...) _DBUS_GNUC_PRINTF (5, 6); --dbus_bool_t bus_context_check_security_policy (BusContext *context, -+BusResult bus_context_check_security_policy (BusContext *context, - BusTransaction *transaction, - DBusConnection *sender, - DBusConnection *addressed_recipient, - DBusConnection *proposed_recipient, - DBusMessage *message, - BusActivationEntry *activation_entry, -- DBusError *error); -+ DBusError *error, -+ BusDeferredMessage **deferred_message); - void bus_context_check_all_watches (BusContext *context); - - #endif /* BUS_BUS_H */ -diff --git a/bus/check.c b/bus/check.c -new file mode 100644 -index 0000000..5b72d31 ---- /dev/null -+++ b/bus/check.c -@@ -0,0 +1,217 @@ -+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -+/* check.c Bus security policy runtime check -+ * -+ * Copyright (C) 2014 Intel, Inc. -+ * Copyright (c) 2014 Samsung Electronics, Ltd. -+ * -+ * Licensed under the Academic Free License version 2.1 -+ * -+ * 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 -+ * -+ */ -+ -+#include -+#include "check.h" -+#include "connection.h" -+#include "dispatch.h" -+#include "cynara.h" -+#include "utils.h" -+#include -+#include -+#include -+ -+ -+typedef struct BusCheck -+{ -+ int refcount; -+ -+ BusContext *context; -+ BusCynara *cynara; -+} BusCheck; -+ -+typedef struct BusDeferredMessage -+{ -+ int refcount; -+ -+ DBusMessage *message; -+ DBusConnection *sender; -+ DBusConnection *proposed_recipient; -+ DBusConnection *addressed_recipient; -+ dbus_bool_t full_dispatch; -+ BusDeferredMessageStatus status; -+ BusResult response; -+ BusCheckResponseFunc response_callback; -+} BusDeferredMessage; -+ -+BusCheck * -+bus_check_new (BusContext *context, DBusError *error) -+{ -+ BusCheck *check; -+ -+ check = dbus_new(BusCheck, 1); -+ if (check == NULL) -+ { -+ BUS_SET_OOM(error); -+ return NULL; -+ } -+ -+ check->refcount = 1; -+ check->context = context; -+ check->cynara = bus_cynara_new(check, error); -+ if (dbus_error_is_set(error)) -+ { -+ dbus_free(check); -+ return NULL; -+ } -+ -+ return check; -+} -+ -+BusCheck * -+bus_check_ref (BusCheck *check) -+{ -+ _dbus_assert (check->refcount > 0); -+ check->refcount += 1; -+ -+ return check; -+} -+ -+void -+bus_check_unref (BusCheck *check) -+{ -+ _dbus_assert (check->refcount > 0); -+ -+ check->refcount -= 1; -+ -+ if (check->refcount == 0) -+ { -+ bus_cynara_unref(check->cynara); -+ dbus_free(check); -+ } -+} -+ -+BusContext * -+bus_check_get_context (BusCheck *check) -+{ -+ return check->context; -+} -+ -+BusCynara * -+bus_check_get_cynara (BusCheck *check) -+{ -+ return check->cynara; -+} -+ -+BusResult -+bus_check_privilege (BusCheck *check, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *privilege, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message) -+{ -+ BusResult result = BUS_RESULT_FALSE; -+#ifdef DBUS_ENABLE_CYNARA -+ BusCynara *cynara; -+#endif -+ DBusConnection *connection; -+ -+ connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; -+ -+ if (!dbus_connection_get_is_connected(connection)) -+ { -+ return BUS_RESULT_FALSE; -+ } -+ -+ /* ask policy checkers */ -+#ifdef DBUS_ENABLE_CYNARA -+ cynara = bus_check_get_cynara(check); -+ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, -+ proposed_recipient, privilege, check_type, deferred_message); -+#endif -+ -+ if (result == BUS_RESULT_LATER && deferred_message != NULL) -+ { -+ (*deferred_message)->status |= check_type; -+ } -+ return result; -+} -+ -+BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ BusResult response) -+{ -+ BusDeferredMessage *deferred_message; -+ -+ deferred_message = dbus_new(BusDeferredMessage, 1); -+ if (deferred_message == NULL) -+ { -+ return NULL; -+ } -+ -+ deferred_message->refcount = 1; -+ deferred_message->sender = sender != NULL ? dbus_connection_ref(sender) : NULL; -+ deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL; -+ deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL; -+ deferred_message->message = dbus_message_ref(message); -+ deferred_message->response = response; -+ deferred_message->status = 0; -+ deferred_message->full_dispatch = FALSE; -+ deferred_message->response_callback = NULL; -+ -+ return deferred_message; -+} -+ -+BusDeferredMessage * -+bus_deferred_message_ref (BusDeferredMessage *deferred_message) -+{ -+ _dbus_assert (deferred_message->refcount > 0); -+ deferred_message->refcount += 1; -+ return deferred_message; -+} -+ -+void -+bus_deferred_message_unref (BusDeferredMessage *deferred_message) -+{ -+ _dbus_assert (deferred_message->refcount > 0); -+ -+ deferred_message->refcount -= 1; -+ -+ if (deferred_message->refcount == 0) -+ { -+ dbus_message_unref(deferred_message->message); -+ if (deferred_message->sender != NULL) -+ dbus_connection_unref(deferred_message->sender); -+ if (deferred_message->addressed_recipient != NULL) -+ dbus_connection_unref(deferred_message->addressed_recipient); -+ if (deferred_message->proposed_recipient != NULL) -+ dbus_connection_unref(deferred_message->proposed_recipient); -+ dbus_free(deferred_message); -+ } -+} -+ -+void -+bus_deferred_message_response_received (BusDeferredMessage *deferred_message, -+ BusResult result) -+{ -+ if (deferred_message->response_callback != NULL) -+ { -+ deferred_message->response_callback(deferred_message, result); -+ } -+} -diff --git a/bus/check.h b/bus/check.h -new file mode 100644 -index 0000000..c3fcaf9 ---- /dev/null -+++ b/bus/check.h -@@ -0,0 +1,68 @@ -+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -+/* check.h Bus security policy runtime check -+ * -+ * Copyright (C) 2014 Intel, Inc. -+ * Copyright (c) 2014 Samsung Electronics, Ltd. -+ * -+ * Licensed under the Academic Free License version 2.1 -+ * -+ * 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 -+ * -+ */ -+ -+#ifndef BUS_CHECK_H -+#define BUS_CHECK_H -+ -+#include "bus.h" -+#include "policy.h" -+ -+ -+typedef void (*BusCheckResponseFunc) (BusDeferredMessage *message, -+ BusResult result); -+ -+typedef enum { -+ BUS_DEFERRED_MESSAGE_CHECK_SEND = 1 << 0, -+ BUS_DEFERRED_MESSAGE_CHECK_RECEIVE = 1 << 1, -+ BUS_DEFERRED_MESSAGE_CHECK_OWN = 1 << 2, -+} BusDeferredMessageStatus; -+ -+ -+BusCheck *bus_check_new (BusContext *context, -+ DBusError *error); -+BusCheck *bus_check_ref (BusCheck *check); -+void bus_check_unref (BusCheck *check); -+ -+BusContext *bus_check_get_context (BusCheck *check); -+BusCynara *bus_check_get_cynara (BusCheck *check); -+BusResult bus_check_privilege (BusCheck *check, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *privilege, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message); -+ -+BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ BusResult response); -+ -+BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message); -+void bus_deferred_message_unref (BusDeferredMessage *deferred_message); -+void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, -+ BusResult result); -+#endif /* BUS_CHECK_H */ -diff --git a/bus/config-parser-common.c b/bus/config-parser-common.c -index c1c4191..e2f253d 100644 ---- a/bus/config-parser-common.c -+++ b/bus/config-parser-common.c -@@ -75,6 +75,10 @@ bus_config_parser_element_name_to_type (const char *name) - { - return ELEMENT_DENY; - } -+ else if (strcmp (name, "check") == 0) -+ { -+ return ELEMENT_CHECK; -+ } - else if (strcmp (name, "servicehelper") == 0) - { - return ELEMENT_SERVICEHELPER; -@@ -159,6 +163,8 @@ bus_config_parser_element_type_to_name (ElementType type) - return "allow"; - case ELEMENT_DENY: - return "deny"; -+ case ELEMENT_CHECK: -+ return "check"; - case ELEMENT_FORK: - return "fork"; - case ELEMENT_PIDFILE: -diff --git a/bus/config-parser-common.h b/bus/config-parser-common.h -index 382a014..9e026d1 100644 ---- a/bus/config-parser-common.h -+++ b/bus/config-parser-common.h -@@ -36,6 +36,7 @@ typedef enum - ELEMENT_LIMIT, - ELEMENT_ALLOW, - ELEMENT_DENY, -+ ELEMENT_CHECK, - ELEMENT_FORK, - ELEMENT_PIDFILE, - ELEMENT_SERVICEDIR, -diff --git a/bus/config-parser-trivial.c b/bus/config-parser-trivial.c -index dd65c6d..23dedb4 100644 ---- a/bus/config-parser-trivial.c -+++ b/bus/config-parser-trivial.c -@@ -194,6 +194,7 @@ bus_config_parser_start_element (BusConfigParser *parser, - case ELEMENT_POLICY: - case ELEMENT_LIMIT: - case ELEMENT_ALLOW: -+ case ELEMENT_CHECK: - case ELEMENT_DENY: - case ELEMENT_FORK: - case ELEMENT_PIDFILE: -@@ -316,6 +317,7 @@ bus_config_parser_content (BusConfigParser *parser, - case ELEMENT_POLICY: - case ELEMENT_LIMIT: - case ELEMENT_ALLOW: -+ case ELEMENT_CHECK: - case ELEMENT_DENY: - case ELEMENT_FORK: - case ELEMENT_PIDFILE: -diff --git a/bus/config-parser.c b/bus/config-parser.c -index be27d38..7f91469 100644 ---- a/bus/config-parser.c -+++ b/bus/config-parser.c -@@ -1318,7 +1318,7 @@ append_rule_from_element (BusConfigParser *parser, - const char *element_name, - const char **attribute_names, - const char **attribute_values, -- dbus_bool_t allow, -+ BusPolicyRuleAccess access, - DBusError *error) - { - const char *log; -@@ -1360,6 +1360,7 @@ append_rule_from_element (BusConfigParser *parser, - const char *own_prefix; - const char *user; - const char *group; -+ const char *privilege; - - BusPolicyRule *rule; - -@@ -1390,6 +1391,7 @@ append_rule_from_element (BusConfigParser *parser, - "user", &user, - "group", &group, - "log", &log, -+ "privilege", &privilege, - NULL)) - return FALSE; - -@@ -1422,6 +1424,7 @@ append_rule_from_element (BusConfigParser *parser, - - if (!(any_send_attribute || - any_receive_attribute || -+ privilege || - own || own_prefix || user || group)) - { - dbus_set_error (error, DBUS_ERROR_FAILED, -@@ -1438,7 +1441,30 @@ append_rule_from_element (BusConfigParser *parser, - element_name); - return FALSE; - } -- -+ -+ if (access == BUS_POLICY_RULE_ACCESS_CHECK) -+ { -+ if (privilege == NULL || !*privilege) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, -+ "On element <%s>, you must specify the privilege to be checked.", -+ element_name); -+ return FALSE; -+ } -+ } -+ else -+ { -+ if (privilege != NULL && *privilege) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, -+ "On element <%s>, privilege %s is used outside of a check rule.", -+ element_name, privilege); -+ return FALSE; -+ } -+ else -+ privilege = NULL; /* replace (potentially) empty string with NULL pointer, it wouldn't be used anyway */ -+ } -+ - /* Allowed combinations of elements are: - * - * base, must be all send or all receive: -@@ -1589,7 +1615,7 @@ append_rule_from_element (BusConfigParser *parser, - error)) - return FALSE; - -- rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, access); - if (rule == NULL) - goto nomem; - -@@ -1694,7 +1720,7 @@ append_rule_from_element (BusConfigParser *parser, - error)) - return FALSE; - -- rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, access); - if (rule == NULL) - goto nomem; - -@@ -1726,7 +1752,7 @@ append_rule_from_element (BusConfigParser *parser, - } - else if (own || own_prefix) - { -- rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, access); - if (rule == NULL) - goto nomem; - -@@ -1752,7 +1778,7 @@ append_rule_from_element (BusConfigParser *parser, - { - if (IS_WILDCARD (user)) - { -- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access); - if (rule == NULL) - goto nomem; - -@@ -1767,7 +1793,7 @@ append_rule_from_element (BusConfigParser *parser, - - if (_dbus_parse_unix_user_from_config (&username, &uid)) - { -- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access); - if (rule == NULL) - goto nomem; - -@@ -1784,7 +1810,7 @@ append_rule_from_element (BusConfigParser *parser, - { - if (IS_WILDCARD (group)) - { -- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access); - if (rule == NULL) - goto nomem; - -@@ -1799,7 +1825,7 @@ append_rule_from_element (BusConfigParser *parser, - - if (_dbus_parse_unix_group_from_config (&groupname, &gid)) - { -- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow); -+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access); - if (rule == NULL) - goto nomem; - -@@ -1823,6 +1849,10 @@ append_rule_from_element (BusConfigParser *parser, - _dbus_assert (pe != NULL); - _dbus_assert (pe->type == ELEMENT_POLICY); - -+ rule->privilege = _dbus_strdup (privilege); -+ if (privilege && !rule->privilege) -+ goto nomem; -+ - switch (pe->d.policy.type) - { - case POLICY_IGNORED: -@@ -1898,7 +1928,7 @@ start_policy_child (BusConfigParser *parser, - { - if (!append_rule_from_element (parser, element_name, - attribute_names, attribute_values, -- TRUE, error)) -+ BUS_POLICY_RULE_ACCESS_ALLOW, error)) - return FALSE; - - if (push_element (parser, ELEMENT_ALLOW) == NULL) -@@ -1913,7 +1943,7 @@ start_policy_child (BusConfigParser *parser, - { - if (!append_rule_from_element (parser, element_name, - attribute_names, attribute_values, -- FALSE, error)) -+ BUS_POLICY_RULE_ACCESS_DENY, error)) - return FALSE; - - if (push_element (parser, ELEMENT_DENY) == NULL) -@@ -1922,6 +1952,21 @@ start_policy_child (BusConfigParser *parser, - return FALSE; - } - -+ return TRUE; -+ } -+ else if (strcmp (element_name, "check") == 0) -+ { -+ if (!append_rule_from_element (parser, element_name, -+ attribute_names, attribute_values, -+ BUS_POLICY_RULE_ACCESS_CHECK, error)) -+ return FALSE; -+ -+ if (push_element (parser, ELEMENT_CHECK) == NULL) -+ { -+ BUS_SET_OOM (error); -+ return FALSE; -+ } -+ - return TRUE; - } - else -@@ -2284,6 +2329,7 @@ bus_config_parser_end_element (BusConfigParser *parser, - case ELEMENT_POLICY: - case ELEMENT_ALLOW: - case ELEMENT_DENY: -+ case ELEMENT_CHECK: - case ELEMENT_FORK: - case ELEMENT_SYSLOG: - case ELEMENT_KEEP_UMASK: -@@ -2600,6 +2646,7 @@ bus_config_parser_content (BusConfigParser *parser, - case ELEMENT_POLICY: - case ELEMENT_ALLOW: - case ELEMENT_DENY: -+ case ELEMENT_CHECK: - case ELEMENT_FORK: - case ELEMENT_SYSLOG: - case ELEMENT_KEEP_UMASK: -@@ -3127,6 +3174,8 @@ do_load (const DBusString *full_path, - dbus_error_init (&error); - - parser = bus_config_load (full_path, TRUE, NULL, &error); -+ if (dbus_error_is_set (&error)) -+ _dbus_verbose ("Failed to load file: %s\n", error.message); - if (parser == NULL) - { - _DBUS_ASSERT_ERROR_IS_SET (&error); -@@ -3359,6 +3408,7 @@ elements_equal (const Element *a, - case ELEMENT_LISTEN: - case ELEMENT_AUTH: - case ELEMENT_ALLOW: -+ case ELEMENT_CHECK: - case ELEMENT_DENY: - case ELEMENT_FORK: - case ELEMENT_PIDFILE: -diff --git a/bus/connection.c b/bus/connection.c -index 53605fa..b348d42 100644 ---- a/bus/connection.c -+++ b/bus/connection.c -@@ -36,6 +36,10 @@ - #include - #include - #include -+#ifdef DBUS_ENABLE_CYNARA -+#include -+#include -+#endif - - /* Trim executed commands to this length; we want to keep logs readable */ - #define MAX_LOG_COMMAND_LEN 50 -@@ -116,6 +120,9 @@ typedef struct - - /** non-NULL if and only if this is a monitor */ - DBusList *link_in_monitors; -+#ifdef DBUS_ENABLE_CYNARA -+ char *cynara_session_id; -+#endif - } BusConnectionData; - - static dbus_bool_t bus_pending_reply_expired (BusExpireList *list, -@@ -129,8 +136,8 @@ static dbus_bool_t expire_incomplete_timeout (void *data); - - #define BUS_CONNECTION_DATA(connection) (dbus_connection_get_data ((connection), connection_data_slot)) - --static DBusLoop* --connection_get_loop (DBusConnection *connection) -+DBusLoop* -+bus_connection_get_loop (DBusConnection *connection) - { - BusConnectionData *d; - -@@ -354,7 +361,7 @@ add_connection_watch (DBusWatch *watch, - { - DBusConnection *connection = data; - -- return _dbus_loop_add_watch (connection_get_loop (connection), watch); -+ return _dbus_loop_add_watch (bus_connection_get_loop (connection), watch); - } - - static void -@@ -363,7 +370,7 @@ remove_connection_watch (DBusWatch *watch, - { - DBusConnection *connection = data; - -- _dbus_loop_remove_watch (connection_get_loop (connection), watch); -+ _dbus_loop_remove_watch (bus_connection_get_loop (connection), watch); - } - - static void -@@ -372,7 +379,7 @@ toggle_connection_watch (DBusWatch *watch, - { - DBusConnection *connection = data; - -- _dbus_loop_toggle_watch (connection_get_loop (connection), watch); -+ _dbus_loop_toggle_watch (bus_connection_get_loop (connection), watch); - } - - static dbus_bool_t -@@ -381,7 +388,7 @@ add_connection_timeout (DBusTimeout *timeout, - { - DBusConnection *connection = data; - -- return _dbus_loop_add_timeout (connection_get_loop (connection), timeout); -+ return _dbus_loop_add_timeout (bus_connection_get_loop (connection), timeout); - } - - static void -@@ -390,7 +397,7 @@ remove_connection_timeout (DBusTimeout *timeout, - { - DBusConnection *connection = data; - -- _dbus_loop_remove_timeout (connection_get_loop (connection), timeout); -+ _dbus_loop_remove_timeout (bus_connection_get_loop (connection), timeout); - } - - static void -@@ -448,6 +455,10 @@ free_connection_data (void *data) - - dbus_free (d->name); - -+#ifdef DBUS_ENABLE_CYNARA -+ free (d->cynara_session_id); -+#endif -+ - dbus_free (d); - } - -@@ -1078,6 +1089,22 @@ bus_connection_get_policy (DBusConnection *connection) - return d->policy; - } - -+#ifdef DBUS_ENABLE_CYNARA -+const char *bus_connection_get_cynara_session_id (DBusConnection *connection) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA (connection); -+ _dbus_assert (d != NULL); -+ -+ if (d->cynara_session_id == NULL) -+ { -+ unsigned long pid; -+ if (dbus_connection_get_unix_process_id(connection, &pid)) -+ d->cynara_session_id = cynara_session_from_pid(pid); -+ } -+ return d->cynara_session_id; -+} -+#endif -+ - static dbus_bool_t - foreach_active (BusConnections *connections, - BusConnectionForeachFunction function, -@@ -2333,6 +2360,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - DBusMessage *message) - { - DBusError error = DBUS_ERROR_INIT; -+ BusResult res; - - /* We have to set the sender to the driver, and have - * to check security policy since it was not done in -@@ -2370,10 +2398,11 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - * if we're actively capturing messages, it's nice to log that we - * tried to send it and did not allow ourselves to do so. - */ -- if (!bus_context_check_security_policy (bus_transaction_get_context (transaction), -- transaction, -- NULL, connection, connection, -- message, NULL, &error)) -+ res = bus_context_check_security_policy (bus_transaction_get_context (transaction), -+ transaction, -+ NULL, connection, connection, message, NULL, -+ &error, NULL); -+ if (res == BUS_RESULT_FALSE) - { - if (!bus_transaction_capture_error_reply (transaction, connection, - &error, message)) -@@ -2388,6 +2417,12 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - dbus_error_free (&error); - return TRUE; - } -+ else if (res == BUS_RESULT_LATER) -+ { -+ _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n"); -+ dbus_error_free (&error); -+ return TRUE; -+ } - - return bus_transaction_send (transaction, connection, message); - } -diff --git a/bus/connection.h b/bus/connection.h -index 9e253ae..71078ea 100644 ---- a/bus/connection.h -+++ b/bus/connection.h -@@ -31,6 +31,7 @@ - typedef dbus_bool_t (* BusConnectionForeachFunction) (DBusConnection *connection, - void *data); - -+DBusLoop* bus_connection_get_loop (DBusConnection *connection); - - BusConnections* bus_connections_new (BusContext *context); - BusConnections* bus_connections_ref (BusConnections *connections); -@@ -124,6 +125,9 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection, - BusTransaction *transaction, - DBusList **rules, - DBusError *error); -+#ifdef DBUS_ENABLE_CYNARA -+const char *bus_connection_get_cynara_session_id (DBusConnection *connection); -+#endif - - /* transaction API so we can send or not send a block of messages as a whole */ - -diff --git a/bus/cynara.c b/bus/cynara.c -new file mode 100644 -index 0000000..57a4c45 ---- /dev/null -+++ b/bus/cynara.c -@@ -0,0 +1,374 @@ -+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -+/* cynara.c Cynara runtime privilege checking -+ * -+ * Copyright (c) 2014 Samsung Electronics, Ltd. -+ * -+ * Licensed under the Academic Free License version 2.1 -+ * -+ * 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 -+ * -+ */ -+ -+#include -+#include "cynara.h" -+#include "check.h" -+#include "utils.h" -+ -+#include -+ -+#include -+#include -+#include -+#include -+#ifdef DBUS_ENABLE_CYNARA -+#include -+#endif -+ -+ -+#ifdef DBUS_ENABLE_CYNARA -+typedef struct BusCynara -+{ -+ int refcount; -+ -+ BusContext *context; -+ BusCheck *check; -+ cynara_async *cynara; -+ DBusWatch *cynara_watch; -+} BusCynara; -+ -+#define USE_CYNARA_CACHE 1 -+#ifdef USE_CYNARA_CACHE -+#define CYNARA_CACHE_SIZE 1000 -+#endif -+ -+static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch, -+ unsigned int flags, -+ void *data); -+ -+static void status_callback(int old_fd, -+ int new_fd, -+ cynara_async_status status, -+ void *user_status_data); -+static void bus_cynara_check_response_callback (cynara_check_id check_id, -+ cynara_async_call_cause cause, -+ int response, -+ void *user_response_data); -+#endif -+ -+ -+BusCynara * -+bus_cynara_new(BusCheck *check, DBusError *error) -+{ -+#ifdef DBUS_ENABLE_CYNARA -+ BusContext *context; -+ BusCynara *cynara; -+ cynara_async_configuration *conf = NULL; -+ int ret; -+ -+ cynara = dbus_new(BusCynara, 1); -+ if (cynara == NULL) -+ { -+ BUS_SET_OOM(error); -+ return NULL; -+ } -+ -+ context = bus_check_get_context(check); -+ -+ cynara->refcount = 1; -+ cynara->check = check; -+ cynara->context = context; -+ cynara->cynara_watch = NULL; -+ -+ ret = cynara_async_configuration_create(&conf); -+ if (ret != CYNARA_API_SUCCESS) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration"); -+ goto out; -+ } -+ -+#ifdef CYNARA_CACHE_SIZE -+ ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE); -+ if (ret != CYNARA_API_SUCCESS) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size"); -+ goto out; -+ } -+#endif -+ -+ ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara); -+ if (ret != CYNARA_API_SUCCESS) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client"); -+ goto out; -+ } -+ -+out: -+ cynara_async_configuration_destroy(conf); -+ if (ret != CYNARA_API_SUCCESS) -+ { -+ dbus_free(cynara); -+ return NULL; -+ } -+ -+ return cynara; -+#else -+ return NULL; -+#endif -+} -+ -+BusCynara * -+bus_cynara_ref (BusCynara *cynara) -+{ -+#ifdef DBUS_ENABLE_CYNARA -+ _dbus_assert (cynara->refcount > 0); -+ cynara->refcount += 1; -+ -+ return cynara; -+#else -+ return NULL; -+#endif -+} -+ -+void -+bus_cynara_unref (BusCynara *cynara) -+{ -+#ifdef DBUS_ENABLE_CYNARA -+ _dbus_assert (cynara->refcount > 0); -+ -+ cynara->refcount -= 1; -+ -+ if (cynara->refcount == 0) -+ { -+ cynara_async_finish(cynara->cynara); -+ dbus_free(cynara); -+ } -+#endif -+} -+ -+BusResult -+bus_cynara_check_privilege (BusCynara *cynara, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *privilege, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message_param) -+{ -+#ifdef DBUS_ENABLE_CYNARA -+ int result; -+ unsigned long uid; -+ char *label; -+ const char *session_id; -+ char user[32]; -+ cynara_check_id check_id; -+ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; -+ BusDeferredMessage *deferred_message; -+ BusResult ret; -+ -+ _dbus_assert(connection != NULL); -+ -+ if (dbus_connection_get_unix_user(connection, &uid) == FALSE) -+ return BUS_RESULT_FALSE; -+ -+ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) -+ { -+ _dbus_warn("Failed to obtain security label for connection\n"); -+ return BUS_RESULT_FALSE; -+ } -+ -+ session_id = bus_connection_get_cynara_session_id (connection); -+ if (session_id == NULL) -+ { -+ ret = BUS_RESULT_FALSE; -+ goto out; -+ } -+ -+ snprintf(user, sizeof(user), "%lu", uid); -+ -+#if USE_CYNARA_CACHE -+ result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege); -+#else -+ result = CYNARA_API_CACHE_MISS; -+#endif -+ -+ switch (result) -+ { -+ case CYNARA_API_ACCESS_ALLOWED: -+ _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", -+ label, session_id, user, privilege); -+ ret = BUS_RESULT_TRUE; -+ break; -+ -+ case CYNARA_API_ACCESS_DENIED: -+ _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", -+ label, session_id, user, privilege); -+ ret = BUS_RESULT_FALSE; -+ break; -+ -+ case CYNARA_API_CACHE_MISS: -+ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, -+ proposed_recipient, BUS_RESULT_LATER); -+ if (deferred_message == NULL) -+ { -+ _dbus_verbose("Failed to allocate memory for deferred message\n"); -+ ret = BUS_RESULT_FALSE; -+ goto out; -+ } -+ -+ /* callback is supposed to unref deferred_message*/ -+ result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id, -+ &bus_cynara_check_response_callback, deferred_message); -+ if (result == CYNARA_API_SUCCESS) -+ { -+ _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u " -+ "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message); -+ if (deferred_message_param != NULL) -+ *deferred_message_param = deferred_message; -+ ret = BUS_RESULT_LATER; -+ } -+ else -+ { -+ _dbus_verbose("Error on cynara request create: %i\n", result); -+ bus_deferred_message_unref(deferred_message); -+ ret = BUS_RESULT_FALSE; -+ } -+ break; -+ default: -+ _dbus_verbose("Error when accessing Cynara cache: %i\n", result); -+ ret = BUS_RESULT_FALSE; -+ } -+out: -+ dbus_free(label); -+ return ret; -+ -+#else -+ return BUS_RESULT_FALSE; -+#endif -+} -+ -+ -+ -+#ifdef DBUS_ENABLE_CYNARA -+static void -+status_callback(int old_fd, int new_fd, cynara_async_status status, -+ void *user_status_data) -+{ -+ BusCynara *cynara = (BusCynara *)user_status_data; -+ DBusLoop *loop = bus_context_get_loop(cynara->context); -+ -+ if (cynara->cynara_watch != NULL) -+ { -+ _dbus_loop_remove_watch(loop, cynara->cynara_watch); -+ _dbus_watch_invalidate(cynara->cynara_watch); -+ _dbus_watch_unref(cynara->cynara_watch); -+ cynara->cynara_watch = NULL; -+ } -+ -+ if (new_fd != -1) -+ { -+ unsigned int flags; -+ DBusWatch *watch; -+ -+ switch (status) -+ { -+ case CYNARA_STATUS_FOR_READ: -+ flags = DBUS_WATCH_READABLE; -+ break; -+ case CYNARA_STATUS_FOR_RW: -+ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; -+ break; -+ default: -+ /* Cynara passed unknown status - warn and add RW watch */ -+ _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status); -+ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; -+ break; -+ } -+ -+ watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL); -+ if (watch != NULL) -+ { -+ if (_dbus_loop_add_watch(loop, watch) == TRUE) -+ { -+ cynara->cynara_watch = watch; -+ return; -+ } -+ -+ _dbus_watch_invalidate(watch); -+ _dbus_watch_unref(watch); -+ } -+ -+ /* It seems like not much can be done at this point. Cynara events won't be processed -+ * until next Cynara function call triggering status callback */ -+ _dbus_verbose("Failed to add dbus watch\n"); -+ } -+} -+ -+static dbus_bool_t -+bus_cynara_watch_callback(DBusWatch *watch, -+ unsigned int flags, -+ void *data) -+{ -+ BusCynara *cynara = (BusCynara *)data; -+ int result = cynara_async_process(cynara->cynara); -+ if (result != CYNARA_API_SUCCESS) -+ _dbus_verbose("cynara_async_process returned %d\n", result); -+ -+ return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE; -+} -+ -+static inline const char * -+call_cause_to_string(cynara_async_call_cause cause) -+{ -+ switch (cause) -+ { -+ case CYNARA_CALL_CAUSE_ANSWER: -+ return "ANSWER"; -+ case CYNARA_CALL_CAUSE_CANCEL: -+ return "CANCEL"; -+ case CYNARA_CALL_CAUSE_FINISH: -+ return "FINSIH"; -+ case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE: -+ return "SERVICE NOT AVAILABLE"; -+ default: -+ return "INVALID"; -+ } -+} -+ -+static void -+bus_cynara_check_response_callback (cynara_check_id check_id, -+ cynara_async_call_cause cause, -+ int response, -+ void *user_response_data) -+{ -+ BusDeferredMessage *deferred_message = user_response_data; -+ BusResult result; -+ -+ _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n", -+ (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data); -+ -+ if (deferred_message == NULL) -+ return; -+ -+ if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED) -+ result = BUS_RESULT_TRUE; -+ else -+ result = BUS_RESULT_FALSE; -+ -+ bus_deferred_message_response_received(deferred_message, result); -+ bus_deferred_message_unref(deferred_message); -+} -+ -+#endif /* DBUS_ENABLE_CYNARA */ -diff --git a/bus/cynara.h b/bus/cynara.h -new file mode 100644 -index 0000000..c4728bb ---- /dev/null -+++ b/bus/cynara.h -@@ -0,0 +1,37 @@ -+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -+/* cynara.h Cynara runtime privilege checking -+ * -+ * Copyright (c) 2014 Samsung Electronics, Ltd. -+ * -+ * Licensed under the Academic Free License version 2.1 -+ * -+ * 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 -+ * -+ */ -+ -+#include "bus.h" -+#include "check.h" -+ -+BusCynara *bus_cynara_new (BusCheck *check, DBusError *error); -+BusCynara *bus_cynara_ref (BusCynara *cynara); -+void bus_cynara_unref (BusCynara *cynara); -+BusResult bus_cynara_check_privilege (BusCynara *cynara, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *privilege, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message); -diff --git a/bus/dispatch.c b/bus/dispatch.c -index 19228be..d3867f7 100644 ---- a/bus/dispatch.c -+++ b/bus/dispatch.c -@@ -25,6 +25,7 @@ - - #include - #include "dispatch.h" -+#include "check.h" - #include "connection.h" - #include "driver.h" - #include "services.h" -@@ -64,14 +65,18 @@ send_one_message (DBusConnection *connection, - DBusError *error) - { - DBusError stack_error = DBUS_ERROR_INIT; -+ BusDeferredMessage *deferred_message; -+ BusResult result; - -- if (!bus_context_check_security_policy (context, transaction, -+ result = bus_context_check_security_policy (context, transaction, - sender, - addressed_recipient, - connection, - message, - NULL, -- &stack_error)) -+ &stack_error, -+ &deferred_message); -+ if (result != BUS_RESULT_TRUE) - { - if (!bus_transaction_capture_error_reply (transaction, sender, - &stack_error, message)) -@@ -130,6 +135,8 @@ bus_dispatch_matches (BusTransaction *transaction, - BusMatchmaker *matchmaker; - DBusList *link; - BusContext *context; -+ BusDeferredMessage *deferred_message; -+ BusResult res; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - -@@ -145,11 +152,20 @@ bus_dispatch_matches (BusTransaction *transaction, - /* First, send the message to the addressed_recipient, if there is one. */ - if (addressed_recipient != NULL) - { -- if (!bus_context_check_security_policy (context, transaction, -- sender, addressed_recipient, -- addressed_recipient, -- message, NULL, error)) -+ res = bus_context_check_security_policy (context, transaction, -+ sender, addressed_recipient, -+ addressed_recipient, -+ message, NULL, error, -+ &deferred_message); -+ if (res == BUS_RESULT_FALSE) - return FALSE; -+ else if (res == BUS_RESULT_LATER) -+ { -+ dbus_set_error (error, -+ DBUS_ERROR_ACCESS_DENIED, -+ "Rejecting message because time is needed to check security policy"); -+ return FALSE; -+ } - - if (dbus_message_contains_unix_fds (message) && - !dbus_connection_can_send_type (addressed_recipient, -@@ -374,19 +390,31 @@ bus_dispatch (DBusConnection *connection, - if (service_name && - strcmp (service_name, DBUS_SERVICE_DBUS) == 0) /* to bus driver */ - { -+ BusDeferredMessage *deferred_message; -+ BusResult res; -+ - if (!bus_transaction_capture (transaction, connection, NULL, message)) - { - BUS_SET_OOM (&error); - goto out; - } - -- if (!bus_context_check_security_policy (context, transaction, -- connection, NULL, NULL, message, -- NULL, &error)) -+ res = bus_context_check_security_policy (context, transaction, -+ connection, NULL, NULL, message, NULL, -+ &error, &deferred_message); -+ if (res == BUS_RESULT_FALSE) - { - _dbus_verbose ("Security policy rejected message\n"); - goto out; - } -+ else if (res == BUS_RESULT_LATER) -+ { -+ dbus_set_error (&error, -+ DBUS_ERROR_ACCESS_DENIED, -+ "Rejecting message because time is needed to check security policy"); -+ _dbus_verbose ("Security policy needs time to check policy. Dropping message\n"); -+ goto out; -+ } - - _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS); - if (!bus_driver_handle_message (connection, transaction, message, &error)) -diff --git a/bus/driver.h b/bus/driver.h -index ac1289d..a7297ad 100644 ---- a/bus/driver.h -+++ b/bus/driver.h -@@ -66,5 +66,7 @@ dbus_bool_t bus_driver_send_ack_reply (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); -+dbus_bool_t bus_driver_check_message_is_for_us (DBusMessage *message, -+ DBusError *error); - - #endif /* BUS_DRIVER_H */ -diff --git a/bus/policy.c b/bus/policy.c -index a37be80..7de92c6 100644 ---- a/bus/policy.c -+++ b/bus/policy.c -@@ -22,6 +22,7 @@ - */ - - #include -+#include "check.h" - #include "policy.h" - #include "services.h" - #include "test.h" -@@ -33,7 +34,7 @@ - - BusPolicyRule* - bus_policy_rule_new (BusPolicyRuleType type, -- dbus_bool_t allow) -+ BusPolicyRuleAccess access) - { - BusPolicyRule *rule; - -@@ -43,7 +44,7 @@ bus_policy_rule_new (BusPolicyRuleType type, - - rule->type = type; - rule->refcount = 1; -- rule->allow = allow; -+ rule->access = access; - - switch (rule->type) - { -@@ -55,18 +56,19 @@ bus_policy_rule_new (BusPolicyRuleType type, - break; - case BUS_POLICY_RULE_SEND: - rule->d.send.message_type = DBUS_MESSAGE_TYPE_INVALID; -- - /* allow rules default to TRUE (only requested replies allowed) -+ * check rules default to TRUE (only requested replies are checked) - * deny rules default to FALSE (only unrequested replies denied) - */ -- rule->d.send.requested_reply = rule->allow; -+ rule->d.send.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY; - break; - case BUS_POLICY_RULE_RECEIVE: - rule->d.receive.message_type = DBUS_MESSAGE_TYPE_INVALID; - /* allow rules default to TRUE (only requested replies allowed) -+ * check rules default to TRUE (only requested replies are checked) - * deny rules default to FALSE (only unrequested replies denied) - */ -- rule->d.receive.requested_reply = rule->allow; -+ rule->d.receive.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY; - break; - case BUS_POLICY_RULE_OWN: - break; -@@ -122,7 +124,8 @@ bus_policy_rule_unref (BusPolicyRule *rule) - default: - _dbus_assert_not_reached ("invalid rule"); - } -- -+ -+ dbus_free (rule->privilege); - dbus_free (rule); - } - } -@@ -435,7 +438,10 @@ list_allows_user (dbus_bool_t def, - else - continue; - -- allowed = rule->allow; -+ /* We don't intend to support and -+ rules. They are treated like deny. -+ */ -+ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; - } - - return allowed; -@@ -873,18 +879,23 @@ bus_client_policy_append_rule (BusClientPolicy *policy, - return TRUE; - } - --dbus_bool_t --bus_client_policy_check_can_send (BusClientPolicy *policy, -- BusRegistry *registry, -- dbus_bool_t requested_reply, -- DBusConnection *receiver, -- DBusMessage *message, -- dbus_int32_t *toggles, -- dbus_bool_t *log) -+BusResult -+bus_client_policy_check_can_send (DBusConnection *sender, -+ BusClientPolicy *policy, -+ BusRegistry *registry, -+ dbus_bool_t requested_reply, -+ DBusConnection *addressed_recipient, -+ DBusConnection *receiver, -+ DBusMessage *message, -+ dbus_int32_t *toggles, -+ dbus_bool_t *log, -+ const char **privilege_param, -+ BusDeferredMessage **deferred_message) - { - DBusList *link; -- dbus_bool_t allowed; -- -+ BusResult result; -+ const char *privilege; -+ - /* policy->rules is in the order the rules appeared - * in the config file, i.e. last rule that applies wins - */ -@@ -892,7 +903,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, - _dbus_verbose (" (policy) checking send rules\n"); - *toggles = 0; - -- allowed = FALSE; -+ result = BUS_RESULT_FALSE; - link = _dbus_list_get_first_link (&policy->rules); - while (link != NULL) - { -@@ -923,13 +934,14 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, - /* If it's a reply, the requested_reply flag kicks in */ - if (dbus_message_get_reply_serial (message) != 0) - { -- /* for allow, requested_reply=true means the rule applies -- * only when reply was requested. requested_reply=false means -- * always allow. -+ /* for allow or check requested_reply=true means the rule applies -+ * only when reply was requested. requested_reply=false means the -+ * rule always applies - */ -- if (!requested_reply && rule->allow && rule->d.send.requested_reply && !rule->d.send.eavesdrop) -+ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop) - { -- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n"); -+ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n", -+ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check"); - continue; - } - -@@ -937,7 +949,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, - * when the reply was not requested. requested_reply=true means the - * rule always applies. - */ -- if (requested_reply && !rule->allow && !rule->d.send.requested_reply) -+ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.send.requested_reply) - { - _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n"); - continue; -@@ -960,13 +972,15 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, - /* The interface is optional in messages. For allow rules, if the message - * has no interface we want to skip the rule (and thus not allow); - * for deny rules, if the message has no interface we want to use the -- * rule (and thus deny). -+ * rule (and thus deny). Check rules are meant to be used like allow -+ * rules (they can grant access, but not remove it), so we treat it like -+ * allow here. - */ - dbus_bool_t no_interface; - - no_interface = dbus_message_get_interface (message) == NULL; - -- if ((no_interface && rule->allow) || -+ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) || - (!no_interface && - strcmp (dbus_message_get_interface (message), - rule->d.send.interface) != 0)) -@@ -1079,33 +1093,64 @@ bus_client_policy_check_can_send (BusClientPolicy *policy, - } - - /* Use this rule */ -- allowed = rule->allow; -+ switch (rule->access) -+ { -+ case BUS_POLICY_RULE_ACCESS_ALLOW: -+ result = BUS_RESULT_TRUE; -+ break; -+ case BUS_POLICY_RULE_ACCESS_DENY: -+ default: -+ result = BUS_RESULT_FALSE; -+ break; -+ case BUS_POLICY_RULE_ACCESS_CHECK: -+ result = BUS_RESULT_LATER; -+ privilege = rule->privilege; -+ break; -+ } -+ - *log = rule->d.send.log; - (*toggles)++; - -- _dbus_verbose (" (policy) used rule, allow now = %d\n", -- allowed); -+ _dbus_verbose (" (policy) used rule, result now = %d\n", -+ (int)(intptr_t)result); - } - -- return allowed; -+ if (result == BUS_RESULT_LATER) -+ { -+ BusContext *context = bus_connection_get_context(sender); -+ BusCheck *check = bus_context_get_check(context); -+ -+ result = bus_check_privilege(check, message, sender, addressed_recipient, receiver, -+ privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message); -+ } -+ else -+ privilege = NULL; -+ -+ if (privilege_param != NULL) -+ *privilege_param = privilege; -+ -+ return result; - } - - /* See docs on what the args mean on bus_context_check_security_policy() - * comment - */ --dbus_bool_t --bus_client_policy_check_can_receive (BusClientPolicy *policy, -- BusRegistry *registry, -- dbus_bool_t requested_reply, -- DBusConnection *sender, -- DBusConnection *addressed_recipient, -- DBusConnection *proposed_recipient, -- DBusMessage *message, -- dbus_int32_t *toggles) -+BusResult -+bus_client_policy_check_can_receive (BusClientPolicy *policy, -+ BusRegistry *registry, -+ dbus_bool_t requested_reply, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ DBusMessage *message, -+ dbus_int32_t *toggles, -+ const char **privilege_param, -+ BusDeferredMessage **deferred_message) - { - DBusList *link; -- dbus_bool_t allowed; - dbus_bool_t eavesdropping; -+ BusResult result; -+ const char *privilege; - - eavesdropping = - addressed_recipient != proposed_recipient && -@@ -1118,7 +1163,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - _dbus_verbose (" (policy) checking receive rules, eavesdropping = %d\n", eavesdropping); - *toggles = 0; - -- allowed = FALSE; -+ result = BUS_RESULT_FALSE; - link = _dbus_list_get_first_link (&policy->rules); - while (link != NULL) - { -@@ -1141,19 +1186,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - } - } - -- /* for allow, eavesdrop=false means the rule doesn't apply when -- * eavesdropping. eavesdrop=true means always allow. -+ -+ /* for allow or check, eavesdrop=false means the rule doesn't apply when -+ * eavesdropping. eavesdrop=true means the rule always applies - */ -- if (eavesdropping && rule->allow && !rule->d.receive.eavesdrop) -+ if (eavesdropping && rule->access != BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.eavesdrop) - { -- _dbus_verbose (" (policy) skipping allow rule since it doesn't apply to eavesdropping\n"); -+ _dbus_verbose (" (policy) skipping %s rule since it doesn't apply to eavesdropping\n", -+ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check"); - continue; - } - - /* for deny, eavesdrop=true means the rule applies only when - * eavesdropping; eavesdrop=false means always deny. - */ -- if (!eavesdropping && !rule->allow && rule->d.receive.eavesdrop) -+ if (!eavesdropping && rule->access == BUS_POLICY_RULE_ACCESS_DENY && rule->d.receive.eavesdrop) - { - _dbus_verbose (" (policy) skipping deny rule since it only applies to eavesdropping\n"); - continue; -@@ -1162,13 +1209,14 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - /* If it's a reply, the requested_reply flag kicks in */ - if (dbus_message_get_reply_serial (message) != 0) - { -- /* for allow, requested_reply=true means the rule applies -- * only when reply was requested. requested_reply=false means -- * always allow. -+ /* for allow or check requested_reply=true means the rule applies -+ * only when reply was requested. requested_reply=false means the -+ * rule always applies - */ -- if (!requested_reply && rule->allow && rule->d.receive.requested_reply && !rule->d.receive.eavesdrop) -+ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop) - { -- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n"); -+ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n", -+ rule->access == BUS_POLICY_RULE_ACCESS_DENY ? "allow" : "deny"); - continue; - } - -@@ -1176,7 +1224,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - * when the reply was not requested. requested_reply=true means the - * rule always applies. - */ -- if (requested_reply && !rule->allow && !rule->d.receive.requested_reply) -+ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.requested_reply) - { - _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n"); - continue; -@@ -1199,13 +1247,13 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - /* The interface is optional in messages. For allow rules, if the message - * has no interface we want to skip the rule (and thus not allow); - * for deny rules, if the message has no interface we want to use the -- * rule (and thus deny). -+ * rule (and thus deny). Check rules are treated like allow rules. - */ - dbus_bool_t no_interface; - - no_interface = dbus_message_get_interface (message) == NULL; - -- if ((no_interface && rule->allow) || -+ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) || - (!no_interface && - strcmp (dbus_message_get_interface (message), - rule->d.receive.interface) != 0)) -@@ -1295,14 +1343,43 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - } - - /* Use this rule */ -- allowed = rule->allow; -+ switch (rule->access) -+ { -+ case BUS_POLICY_RULE_ACCESS_ALLOW: -+ result = BUS_RESULT_TRUE; -+ break; -+ case BUS_POLICY_RULE_ACCESS_DENY: -+ default: -+ result = BUS_RESULT_FALSE; -+ break; -+ case BUS_POLICY_RULE_ACCESS_CHECK: -+ result = BUS_RESULT_LATER; -+ privilege = rule->privilege; -+ break; -+ } -+ - (*toggles)++; - -- _dbus_verbose (" (policy) used rule, allow now = %d\n", -- allowed); -+ _dbus_verbose (" (policy) used rule, result now = %d\n", -+ (int)(intptr_t)result); - } - -- return allowed; -+ -+ if (result == BUS_RESULT_LATER) -+ { -+ BusContext *context = bus_connection_get_context(proposed_recipient); -+ BusCheck *check = bus_context_get_check(context); -+ -+ result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient, -+ privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message); -+ } -+ else -+ privilege = NULL; -+ -+ if (privilege_param != NULL) -+ *privilege_param = privilege; -+ -+ return result; - } - - -@@ -1354,7 +1431,7 @@ bus_rules_check_can_own (DBusList *rules, - } - - /* Use this rule */ -- allowed = rule->allow; -+ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; - } - - return allowed; -diff --git a/bus/policy.h b/bus/policy.h -index ec43ffa..f839d23 100644 ---- a/bus/policy.h -+++ b/bus/policy.h -@@ -46,6 +46,14 @@ typedef enum - BUS_POLICY_TRISTATE_TRUE - } BusPolicyTristate; - -+typedef enum -+{ -+ BUS_POLICY_RULE_ACCESS_DENY, -+ BUS_POLICY_RULE_ACCESS_ALLOW, -+ /** runtime check resulting in allow or deny */ -+ BUS_POLICY_RULE_ACCESS_CHECK -+} BusPolicyRuleAccess; -+ - /** determines whether the rule affects a connection, or some global item */ - #define BUS_POLICY_RULE_IS_PER_CLIENT(rule) (!((rule)->type == BUS_POLICY_RULE_USER || \ - (rule)->type == BUS_POLICY_RULE_GROUP)) -@@ -56,8 +64,9 @@ struct BusPolicyRule - - BusPolicyRuleType type; - -- unsigned int allow : 1; /**< #TRUE if this allows, #FALSE if it denies */ -- -+ unsigned int access : 2; /**< BusPolicyRuleAccess */ -+ char *privilege; /**< for BUS_POLICY_RULE_ACCESS_CHECK */ -+ - union - { - struct -@@ -118,7 +127,7 @@ struct BusPolicyRule - }; - - BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type, -- dbus_bool_t allow); -+ BusPolicyRuleAccess access); - BusPolicyRule* bus_policy_rule_ref (BusPolicyRule *rule); - void bus_policy_rule_unref (BusPolicyRule *rule); - -@@ -152,21 +161,27 @@ dbus_bool_t bus_policy_merge (BusPolicy *policy, - BusClientPolicy* bus_client_policy_new (void); - BusClientPolicy* bus_client_policy_ref (BusClientPolicy *policy); - void bus_client_policy_unref (BusClientPolicy *policy); --dbus_bool_t bus_client_policy_check_can_send (BusClientPolicy *policy, -+BusResult bus_client_policy_check_can_send (DBusConnection *sender, -+ BusClientPolicy *policy, - BusRegistry *registry, - dbus_bool_t requested_reply, -+ DBusConnection *addressed_recipient, - DBusConnection *receiver, - DBusMessage *message, - dbus_int32_t *toggles, -- dbus_bool_t *log); --dbus_bool_t bus_client_policy_check_can_receive (BusClientPolicy *policy, -+ dbus_bool_t *log, -+ const char **privilege_param, -+ BusDeferredMessage **deferred_message); -+BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy, - BusRegistry *registry, - dbus_bool_t requested_reply, - DBusConnection *sender, - DBusConnection *addressed_recipient, - DBusConnection *proposed_recipient, - DBusMessage *message, -- dbus_int32_t *toggles); -+ dbus_int32_t *toggles, -+ const char **privilege_param, -+ BusDeferredMessage **deferred_message); - dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy, - const DBusString *service_name); - dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy, -diff --git a/configure.ac b/configure.ac -index d1e3a29..11b5ffd 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1742,6 +1742,17 @@ AC_ARG_ENABLE([user-session], - AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION], - [test "x$enable_user_session" = xyes]) - -+#enable cynara integration -+AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no]) -+if test "x$enable_cynara" = xyes; then -+ PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0], -+ [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])], -+ [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])]) -+fi -+ -+AC_SUBST([CYNARA_CFLAGS]) -+AC_SUBST([CYNARA_LIBS]) -+ - AC_CONFIG_FILES([ - Doxyfile - dbus/Version -@@ -1824,6 +1835,7 @@ echo " - Building bus stats API: ${enable_stats} - Building SELinux support: ${have_selinux} - Building AppArmor support: ${have_apparmor} -+ Building Cynara support: ${enable_cynara} - Building inotify support: ${have_inotify} - Building kqueue support: ${have_kqueue} - Building systemd support: ${have_systemd} -diff --git a/test/Makefile.am b/test/Makefile.am -index af1e13b..e6f50e1 100644 ---- a/test/Makefile.am -+++ b/test/Makefile.am -@@ -439,6 +439,7 @@ in_data = \ - data/valid-config-files/debug-allow-all.conf.in \ - data/valid-config-files/finite-timeout.conf.in \ - data/valid-config-files/forbidding.conf.in \ -+ data/valid-config-files/debug-check-some.conf.in \ - data/valid-config-files/incoming-limit.conf.in \ - data/valid-config-files/max-completed-connections.conf.in \ - data/valid-config-files/max-connections-per-user.conf.in \ -diff --git a/test/data/invalid-config-files/badcheck-1.conf b/test/data/invalid-config-files/badcheck-1.conf -new file mode 100644 -index 0000000..fad9f50 ---- /dev/null -+++ b/test/data/invalid-config-files/badcheck-1.conf -@@ -0,0 +1,9 @@ -+ -+ -+ mybususer -+ unix:path=/foo/bar -+ -+ -+ -+ -diff --git a/test/data/invalid-config-files/badcheck-2.conf b/test/data/invalid-config-files/badcheck-2.conf -new file mode 100644 -index 0000000..63c7ef2 ---- /dev/null -+++ b/test/data/invalid-config-files/badcheck-2.conf -@@ -0,0 +1,9 @@ -+ -+ -+ mybususer -+ unix:path=/foo/bar -+ -+ -+ -+ -diff --git a/test/data/valid-config-files/check-1.conf b/test/data/valid-config-files/check-1.conf -new file mode 100644 -index 0000000..ad71473 ---- /dev/null -+++ b/test/data/valid-config-files/check-1.conf -@@ -0,0 +1,9 @@ -+ -+ -+ mybususer -+ unix:path=/foo/bar -+ -+ -+ -+ -diff --git a/test/data/valid-config-files/debug-check-some.conf.in b/test/data/valid-config-files/debug-check-some.conf.in -new file mode 100644 -index 0000000..47ee854 ---- /dev/null -+++ b/test/data/valid-config-files/debug-check-some.conf.in -@@ -0,0 +1,18 @@ -+ -+ -+ -+ -+ debug-pipe:name=test-server -+ @TEST_LISTEN@ -+ @DBUS_TEST_DATA@/valid-service-files -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch deleted file mode 100644 index bac8cf97f..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch +++ /dev/null @@ -1,967 +0,0 @@ -From c2f4ba585c777b731df6b6b8a165b6cc4dc5d639 Mon Sep 17 00:00:00 2001 -From: Jacek Bukarewicz -Date: Fri, 28 Nov 2014 12:07:39 +0100 -Subject: [PATCH 2/8] Disable message dispatching when send rule result is not - known -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When unicast message is sent to addressed recipient and policy result -is not available message dispatch from the sender is disabled. -This also means that any further messages from the given connection are -put into the incoming queue without being processed. If response is received -message dispatching is resumed. This time answer is attached to the message -which is now processed synchronously. -Receive rule result unavailability is not yet handled - such messages are -rejected. Also, if message is sent to non-addressed recipient and policy result -is unknown, message is silently dropped. - -Cherry-picked from b1b87ad9f20b2052c28431b48e81073078a745ce -by Jose Bollo. - -Updated for dbus 1.10.20 by Scott Murray and José Bollo - -Signed-off-by: José Bollo -Signed-off-by: Scott Murray ---- - bus/activation.c | 76 +++++++++++-- - bus/check.c | 109 +++++++++++++++++-- - bus/check.h | 10 ++ - bus/cynara.c | 1 - - bus/dispatch.c | 184 ++++++++++++++++++++++++++++---- - bus/dispatch.h | 2 +- - bus/driver.c | 12 ++- - dbus/dbus-connection-internal.h | 15 +++ - dbus/dbus-connection.c | 125 +++++++++++++++++++++- - dbus/dbus-list.c | 29 +++++ - dbus/dbus-list.h | 3 + - dbus/dbus-shared.h | 3 +- - 12 files changed, 528 insertions(+), 41 deletions(-) - -diff --git a/bus/activation.c b/bus/activation.c -index f9c6c62..8301b59 100644 ---- a/bus/activation.c -+++ b/bus/activation.c -@@ -32,6 +32,7 @@ - #include "services.h" - #include "test.h" - #include "utils.h" -+#include - #include - #include - #include -@@ -94,6 +95,8 @@ struct BusPendingActivationEntry - DBusConnection *connection; - - dbus_bool_t auto_activation; -+ -+ dbus_bool_t is_put_back; - }; - - typedef struct -@@ -1241,20 +1244,23 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation - BusPendingActivationEntry *entry = link->data; - DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link); - -- if (entry->auto_activation && (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection))) -+ if (entry->auto_activation && !entry->is_put_back && -+ (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection))) - { - DBusConnection *addressed_recipient; - DBusError error; -+ BusResult res; - - dbus_error_init (&error); - - addressed_recipient = bus_service_get_primary_owners_connection (service); - - /* Resume dispatching where we left off in bus_dispatch() */ -- if (!bus_dispatch_matches (transaction, -- entry->connection, -- addressed_recipient, -- entry->activation_message, &error)) -+ res = bus_dispatch_matches (transaction, -+ entry->connection, -+ addressed_recipient, -+ entry->activation_message, &error); -+ if (res == BUS_RESULT_FALSE) - { - /* If permission is denied, we just want to return the error - * to the original method invoker; in particular, we don't -@@ -1266,11 +1272,44 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation - bus_connection_send_oom_error (entry->connection, - entry->activation_message); - } -- - dbus_error_free (&error); - link = next; - continue; - } -+ else if (res == BUS_RESULT_LATER) -+ { -+ DBusList *putback_message_link = link; -+ DBusMessage *last_inserted_message = NULL; -+ -+ /* NULL entry->connection implies sending pending ActivationRequest message to systemd */ -+ if (entry->connection == NULL) -+ { -+ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly when sender is NULL"); -+ link = next; -+ continue; -+ } -+ -+ /** -+ * Getting here means that policy check result is not yet available and dispatching -+ * messages from entry->connection has been disabled. -+ * Let's put back all messages for the given connection in the incoming queue and mark -+ * this entry as put back so they are not handled twice. -+ */ -+ while (putback_message_link != NULL) -+ { -+ BusPendingActivationEntry *putback_message = putback_message_link->data; -+ if (putback_message->connection == entry->connection) -+ { -+ if (!_dbus_connection_putback_message (putback_message->connection, last_inserted_message, -+ putback_message->activation_message, &error)) -+ goto error; -+ last_inserted_message = putback_message->activation_message; -+ putback_message->is_put_back = TRUE; -+ } -+ -+ putback_message_link = _dbus_list_get_next_link(&pending_activation->entries, putback_message_link); -+ } -+ } - } - - link = next; -@@ -1287,6 +1326,19 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation - return TRUE; - - error: -+ /* remove all messages that have been put to connections' incoming queues */ -+ link = _dbus_list_get_first_link (&pending_activation->entries); -+ while (link != NULL) -+ { -+ BusPendingActivationEntry *entry = link->data; -+ if (entry->is_put_back) -+ { -+ _dbus_connection_remove_message(entry->connection, entry->activation_message); -+ entry->is_put_back = FALSE; -+ } -+ link = _dbus_list_get_next_link(&pending_activation->entries, link); -+ } -+ - return FALSE; - } - -@@ -2079,6 +2131,7 @@ bus_activation_activate_service (BusActivation *activation, - - if (service != NULL) - { -+ BusResult res; - bus_context_log (activation->context, - DBUS_SYSTEM_LOG_INFO, "Activating via systemd: service name='%s' unit='%s' requested by '%s' (%s)", - service_name, -@@ -2086,8 +2139,17 @@ bus_activation_activate_service (BusActivation *activation, - bus_connection_get_name (connection), - bus_connection_get_loginfo (connection)); - /* Wonderful, systemd is connected, let's just send the msg */ -- retval = bus_dispatch_matches (activation_transaction, NULL, -+ res = bus_dispatch_matches (activation_transaction, NULL, - systemd, message, error); -+ -+ if (res == BUS_RESULT_TRUE) -+ retval = TRUE; -+ else -+ { -+ retval = FALSE; -+ if (res == BUS_RESULT_LATER) -+ _dbus_verbose("Unexpectedly need time to check message from bus driver to systemd - dropping the message.\n"); -+ } - } - else - { -diff --git a/bus/check.c b/bus/check.c -index 5b72d31..4b8a699 100644 ---- a/bus/check.c -+++ b/bus/check.c -@@ -55,6 +55,8 @@ typedef struct BusDeferredMessage - BusCheckResponseFunc response_callback; - } BusDeferredMessage; - -+static dbus_int32_t deferred_message_data_slot = -1; -+ - BusCheck * - bus_check_new (BusContext *context, DBusError *error) - { -@@ -67,11 +69,19 @@ bus_check_new (BusContext *context, DBusError *error) - return NULL; - } - -+ if (!dbus_message_allocate_data_slot(&deferred_message_data_slot)) -+ { -+ dbus_free(check); -+ BUS_SET_OOM(error); -+ return NULL; -+ } -+ - check->refcount = 1; - check->context = context; - check->cynara = bus_cynara_new(check, error); - if (dbus_error_is_set(error)) - { -+ dbus_message_free_data_slot(&deferred_message_data_slot); - dbus_free(check); - return NULL; - } -@@ -98,6 +108,7 @@ bus_check_unref (BusCheck *check) - if (check->refcount == 0) - { - bus_cynara_unref(check->cynara); -+ dbus_message_free_data_slot(&deferred_message_data_slot); - dbus_free(check); - } - } -@@ -114,6 +125,45 @@ bus_check_get_cynara (BusCheck *check) - return check->cynara; - } - -+static void -+bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message, -+ BusResult result) -+{ -+ _dbus_verbose("bus_check_enable_dispatch_callback called deferred_message=%p\n", deferred_message); -+ -+ deferred_message->response = result; -+ _dbus_connection_enable_dispatch(deferred_message->sender); -+} -+ -+static void -+deferred_message_free_function(void *data) -+{ -+ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data; -+ bus_deferred_message_unref(deferred_message); -+} -+ -+void -+bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message) -+{ -+ _dbus_assert(deferred_message != NULL); -+ _dbus_assert(deferred_message->sender != NULL); -+ -+ if (dbus_message_get_data(deferred_message->message, deferred_message_data_slot) == NULL) -+ { -+ if (dbus_message_set_data(deferred_message->message, deferred_message_data_slot, deferred_message, -+ deferred_message_free_function)) -+ bus_deferred_message_ref(deferred_message); -+ } -+ -+ _dbus_connection_disable_dispatch(deferred_message->sender); -+ deferred_message->response_callback = bus_check_enable_dispatch_callback; -+} -+ -+#ifdef DBUS_ENABLE_EMBEDDED_TESTS -+BusResult (*bus_check_test_override) (DBusConnection *connection, -+ const char *privilege); -+#endif -+ - BusResult - bus_check_privilege (BusCheck *check, - DBusMessage *message, -@@ -124,6 +174,7 @@ bus_check_privilege (BusCheck *check, - BusDeferredMessageStatus check_type, - BusDeferredMessage **deferred_message) - { -+ BusDeferredMessage *previous_deferred_message; - BusResult result = BUS_RESULT_FALSE; - #ifdef DBUS_ENABLE_CYNARA - BusCynara *cynara; -@@ -137,16 +188,54 @@ bus_check_privilege (BusCheck *check, - return BUS_RESULT_FALSE; - } - -- /* ask policy checkers */ --#ifdef DBUS_ENABLE_CYNARA -- cynara = bus_check_get_cynara(check); -- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, -- proposed_recipient, privilege, check_type, deferred_message); -+#ifdef DBUS_ENABLE_EMBEDDED_TESTS -+ if (bus_check_test_override) -+ return bus_check_test_override (connection, privilege); - #endif - -- if (result == BUS_RESULT_LATER && deferred_message != NULL) -+ previous_deferred_message = dbus_message_get_data(message, deferred_message_data_slot); -+ /* check if message blocked at sender's queue is being processed */ -+ if (previous_deferred_message != NULL) -+ { -+ if ((check_type & BUS_DEFERRED_MESSAGE_CHECK_SEND) && -+ !(previous_deferred_message->status & BUS_DEFERRED_MESSAGE_CHECK_SEND)) -+ { -+ /** -+ * Message has been deferred due to receive or own rule which means that sending this message -+ * is allowed - it must have been checked previously. -+ * This might happen when client calls RequestName method which depending on security -+ * policy might result in both "can_send" and "can_own" Cynara checks. -+ */ -+ result = BUS_RESULT_TRUE; -+ } -+ else -+ { -+ result = previous_deferred_message->response; -+ if (result == BUS_RESULT_LATER) -+ { -+ /* result is still not known - reuse deferred message object */ -+ if (deferred_message != NULL) -+ *deferred_message = previous_deferred_message; -+ } -+ else -+ { -+ /* result is available - we can remove deferred message from the processed message */ -+ dbus_message_set_data(message, deferred_message_data_slot, NULL, NULL); -+ } -+ } -+ } -+ else - { -- (*deferred_message)->status |= check_type; -+ /* ask policy checkers */ -+#ifdef DBUS_ENABLE_CYNARA -+ cynara = bus_check_get_cynara(check); -+ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, -+ proposed_recipient, privilege, check_type, deferred_message); -+#endif -+ if (result == BUS_RESULT_LATER && deferred_message != NULL) -+ { -+ (*deferred_message)->status |= check_type; -+ } - } - return result; - } -@@ -206,6 +295,12 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message) - } - } - -+BusDeferredMessageStatus -+bus_deferred_message_get_status (BusDeferredMessage *deferred_message) -+{ -+ return deferred_message->status; -+} -+ - void - bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - BusResult result) -diff --git a/bus/check.h b/bus/check.h -index c3fcaf9..d177549 100644 ---- a/bus/check.h -+++ b/bus/check.h -@@ -55,6 +55,7 @@ BusResult bus_check_privilege (BusCheck *check, - BusDeferredMessageStatus check_type, - BusDeferredMessage **deferred_message); - -+ - BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, - DBusConnection *sender, - DBusConnection *addressed_recipient, -@@ -65,4 +66,13 @@ BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage - void bus_deferred_message_unref (BusDeferredMessage *deferred_message); - void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - BusResult result); -+void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message); -+ -+BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message); -+ -+#ifdef DBUS_ENABLE_EMBEDDED_TESTS -+extern BusResult (*bus_check_test_override) (DBusConnection *connection, -+ const char *privilege); -+#endif -+ - #endif /* BUS_CHECK_H */ -diff --git a/bus/cynara.c b/bus/cynara.c -index 57a4c45..77aed62 100644 ---- a/bus/cynara.c -+++ b/bus/cynara.c -@@ -36,7 +36,6 @@ - #include - #endif - -- - #ifdef DBUS_ENABLE_CYNARA - typedef struct BusCynara - { -diff --git a/bus/dispatch.c b/bus/dispatch.c -index d3867f7..50a22a3 100644 ---- a/bus/dispatch.c -+++ b/bus/dispatch.c -@@ -35,6 +35,7 @@ - #include "signals.h" - #include "test.h" - #include -+#include - #include - #include - -@@ -122,7 +123,7 @@ send_one_message (DBusConnection *connection, - return TRUE; - } - --dbus_bool_t -+BusResult - bus_dispatch_matches (BusTransaction *transaction, - DBusConnection *sender, - DBusConnection *addressed_recipient, -@@ -158,13 +159,29 @@ bus_dispatch_matches (BusTransaction *transaction, - message, NULL, error, - &deferred_message); - if (res == BUS_RESULT_FALSE) -- return FALSE; -+ return BUS_RESULT_FALSE; - else if (res == BUS_RESULT_LATER) - { -- dbus_set_error (error, -- DBUS_ERROR_ACCESS_DENIED, -- "Rejecting message because time is needed to check security policy"); -- return FALSE; -+ BusDeferredMessageStatus status; -+ status = bus_deferred_message_get_status(deferred_message); -+ -+ if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND) -+ { -+ /* send rule result not available - disable dispatching messages from the sender */ -+ bus_deferred_message_disable_sender(deferred_message); -+ return BUS_RESULT_LATER; -+ } -+ else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE) -+ { -+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, -+ "Rejecting message because time is needed to check security policy"); -+ return BUS_RESULT_FALSE; -+ } -+ else -+ { -+ _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n"); -+ return BUS_RESULT_FALSE; -+ } - } - - if (dbus_message_contains_unix_fds (message) && -@@ -175,14 +192,14 @@ bus_dispatch_matches (BusTransaction *transaction, - DBUS_ERROR_NOT_SUPPORTED, - "Tried to send message with Unix file descriptors" - "to a client that doesn't support that."); -- return FALSE; -- } -+ return BUS_RESULT_FALSE; -+ } - - /* Dispatch the message */ - if (!bus_transaction_send (transaction, addressed_recipient, message)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - } - -@@ -197,7 +214,7 @@ bus_dispatch_matches (BusTransaction *transaction, - &recipients)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - link = _dbus_list_get_first_link (&recipients); -@@ -219,10 +236,10 @@ bus_dispatch_matches (BusTransaction *transaction, - if (dbus_error_is_set (&tmp_error)) - { - dbus_move_error (&tmp_error, error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - else -- return TRUE; -+ return BUS_RESULT_TRUE; - } - - static DBusHandlerResult -@@ -409,10 +426,12 @@ bus_dispatch (DBusConnection *connection, - } - else if (res == BUS_RESULT_LATER) - { -- dbus_set_error (&error, -- DBUS_ERROR_ACCESS_DENIED, -- "Rejecting message because time is needed to check security policy"); -- _dbus_verbose ("Security policy needs time to check policy. Dropping message\n"); -+ /* Disable dispatching messages from the sender, -+ * roll back and dispatch the message once the policy result is available */ -+ bus_deferred_message_disable_sender(deferred_message); -+ bus_transaction_cancel_and_free (transaction); -+ transaction = NULL; -+ result = DBUS_HANDLER_RESULT_LATER; - goto out; - } - -@@ -514,8 +533,14 @@ bus_dispatch (DBusConnection *connection, - * addressed_recipient == NULL), and match it against other connections' - * match rules. - */ -- if (!bus_dispatch_matches (transaction, connection, addressed_recipient, message, &error)) -- goto out; -+ if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient, -+ message, &error)) -+ { -+ /* Roll back and dispatch the message once the policy result is available */ -+ bus_transaction_cancel_and_free (transaction); -+ transaction = NULL; -+ result = DBUS_HANDLER_RESULT_LATER; -+ } - - out: - if (dbus_error_is_set (&error)) -@@ -5060,9 +5085,132 @@ bus_dispatch_test_conf_fail (const DBusString *test_data_dir, - } - #endif - -+typedef struct { -+ DBusTimeout *timeout; -+ DBusConnection *connection; -+ dbus_bool_t timedout; -+ int check_counter; -+} BusTestCheckData; -+ -+static BusTestCheckData *cdata; -+ -+static dbus_bool_t -+bus_dispatch_test_check_timeout (void *data) -+{ -+ _dbus_verbose ("timeout triggered - pretend that privilege check result is available\n"); -+ -+ /* should only happen once during the test */ -+ _dbus_assert (!cdata->timedout); -+ cdata->timedout = TRUE; -+ _dbus_connection_enable_dispatch (cdata->connection); -+ -+ /* don't call this again */ -+ _dbus_loop_remove_timeout (bus_connection_get_loop (cdata->connection), -+ cdata->timeout); -+ dbus_connection_unref (cdata->connection); -+ cdata->connection = NULL; -+ return TRUE; -+} -+ -+static BusResult -+bus_dispatch_test_check_override (DBusConnection *connection, -+ const char *privilege) -+{ -+ _dbus_verbose ("overriding privilege check %s #%d\n", privilege, cdata->check_counter); -+ cdata->check_counter++; -+ if (!cdata->timedout) -+ { -+ dbus_bool_t added; -+ -+ /* Should be the first privilege check for the "Echo" method. */ -+ _dbus_assert (cdata->check_counter == 1); -+ cdata->timeout = _dbus_timeout_new (1, bus_dispatch_test_check_timeout, -+ NULL, NULL); -+ _dbus_assert (cdata->timeout); -+ added = _dbus_loop_add_timeout (bus_connection_get_loop (connection), -+ cdata->timeout); -+ _dbus_assert (added); -+ cdata->connection = connection; -+ dbus_connection_ref (connection); -+ _dbus_connection_disable_dispatch (connection); -+ return BUS_RESULT_LATER; -+ } -+ else -+ { -+ /* Should only be checked one more time, and this time succeeds. */ -+ _dbus_assert (cdata->check_counter == 2); -+ return BUS_RESULT_TRUE; -+ } -+} -+ -+static dbus_bool_t -+bus_dispatch_test_check (const DBusString *test_data_dir) -+{ -+ const char *filename = "valid-config-files/debug-check-some.conf"; -+ BusContext *context; -+ DBusConnection *foo; -+ DBusError error; -+ dbus_bool_t result = TRUE; -+ BusTestCheckData data; -+ -+ /* save the config name for the activation helper */ -+ if (!setenv_TEST_LAUNCH_HELPER_CONFIG (test_data_dir, filename)) -+ _dbus_assert_not_reached ("no memory setting TEST_LAUNCH_HELPER_CONFIG"); -+ -+ dbus_error_init (&error); -+ -+ context = bus_context_new_test (test_data_dir, filename); -+ if (context == NULL) -+ return FALSE; -+ -+ foo = dbus_connection_open_private (TEST_DEBUG_PIPE, &error); -+ if (foo == NULL) -+ _dbus_assert_not_reached ("could not alloc connection"); -+ -+ if (!bus_setup_debug_client (foo)) -+ _dbus_assert_not_reached ("could not set up connection"); -+ -+ spin_connection_until_authenticated (context, foo); -+ -+ if (!check_hello_message (context, foo)) -+ _dbus_assert_not_reached ("hello message failed"); -+ -+ if (!check_double_hello_message (context, foo)) -+ _dbus_assert_not_reached ("double hello message failed"); -+ -+ if (!check_add_match (context, foo, "")) -+ _dbus_assert_not_reached ("AddMatch message failed"); -+ -+ /* -+ * Cause bus_check_send_privilege() to return BUS_RESULT_LATER in the -+ * first call, then BUS_RESULT_TRUE. -+ */ -+ cdata = &data; -+ memset (cdata, 0, sizeof(*cdata)); -+ bus_check_test_override = bus_dispatch_test_check_override; -+ -+ result = check_existent_service_auto_start (context, foo); -+ -+ _dbus_assert (cdata->check_counter == 2); -+ _dbus_assert (cdata->timedout); -+ _dbus_assert (cdata->timeout); -+ _dbus_assert (!cdata->connection); -+ _dbus_timeout_unref (cdata->timeout); -+ -+ kill_client_connection_unchecked (foo); -+ -+ bus_context_unref (context); -+ -+ return result; -+} -+ - dbus_bool_t - bus_dispatch_test (const DBusString *test_data_dir) - { -+ _dbus_verbose (" tests\n"); -+ if (!bus_dispatch_test_check (test_data_dir)) -+ return FALSE; -+ - /* run normal activation tests */ - _dbus_verbose ("Normal activation tests\n"); - if (!bus_dispatch_test_conf (test_data_dir, -diff --git a/bus/dispatch.h b/bus/dispatch.h -index fb5ba7a..afba6a2 100644 ---- a/bus/dispatch.h -+++ b/bus/dispatch.h -@@ -29,7 +29,7 @@ - - dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection); - void bus_dispatch_remove_connection (DBusConnection *connection); --dbus_bool_t bus_dispatch_matches (BusTransaction *transaction, -+BusResult bus_dispatch_matches (BusTransaction *transaction, - DBusConnection *sender, - DBusConnection *recipient, - DBusMessage *message, -diff --git a/bus/driver.c b/bus/driver.c -index cd0a714..f414f64 100644 ---- a/bus/driver.c -+++ b/bus/driver.c -@@ -218,6 +218,7 @@ bus_driver_send_service_owner_changed (const char *service_name, - { - DBusMessage *message; - dbus_bool_t retval; -+ BusResult res; - const char *null_service; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -253,7 +254,16 @@ bus_driver_send_service_owner_changed (const char *service_name, - if (!bus_transaction_capture (transaction, NULL, NULL, message)) - goto oom; - -- retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); -+ res = bus_dispatch_matches (transaction, NULL, NULL, message, error); -+ if (res == BUS_RESULT_TRUE) -+ retval = TRUE; -+ else -+ { -+ retval = FALSE; -+ if (res == BUS_RESULT_LATER) -+ /* should never happen */ -+ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly"); -+ } - dbus_message_unref (message); - - return retval; -diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h -index 4835732..94b1c95 100644 ---- a/dbus/dbus-connection-internal.h -+++ b/dbus/dbus-connection-internal.h -@@ -118,6 +118,21 @@ DBUS_PRIVATE_EXPORT - dbus_bool_t _dbus_connection_get_linux_security_label (DBusConnection *connection, - char **label_p); - -+DBUS_PRIVATE_EXPORT -+void _dbus_connection_enable_dispatch (DBusConnection *connection); -+DBUS_PRIVATE_EXPORT -+void _dbus_connection_disable_dispatch (DBusConnection *connection); -+ -+DBUS_PRIVATE_EXPORT -+dbus_bool_t _dbus_connection_putback_message (DBusConnection *connection, -+ DBusMessage *after_message, -+ DBusMessage *message, -+ DBusError *error); -+ -+DBUS_PRIVATE_EXPORT -+dbus_bool_t _dbus_connection_remove_message (DBusConnection *connection, -+ DBusMessage *message); -+ - /* if DBUS_ENABLE_STATS */ - DBUS_PRIVATE_EXPORT - void _dbus_connection_get_stats (DBusConnection *connection, -diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c -index c525b6d..958968c 100644 ---- a/dbus/dbus-connection.c -+++ b/dbus/dbus-connection.c -@@ -311,7 +311,8 @@ struct DBusConnection - */ - dbus_bool_t dispatch_acquired; /**< Someone has dispatch path (can drain incoming queue) */ - dbus_bool_t io_path_acquired; /**< Someone has transport io path (can use the transport to read/write messages) */ -- -+ -+ unsigned int dispatch_disabled : 1; /**< if true, then dispatching incoming messages is stopped until enabled again */ - unsigned int shareable : 1; /**< #TRUE if libdbus owns a reference to the connection and can return it from dbus_connection_open() more than once */ - - unsigned int exit_on_disconnect : 1; /**< If #TRUE, exit after handling disconnect signal */ -@@ -439,6 +440,39 @@ _dbus_connection_wakeup_mainloop (DBusConnection *connection) - (*connection->wakeup_main_function) (connection->wakeup_main_data); - } - -+static void -+_dbus_connection_set_dispatch(DBusConnection *connection, -+ dbus_bool_t disabled) -+{ -+ CONNECTION_LOCK (connection); -+ if (connection->dispatch_disabled != disabled) -+ { -+ DBusDispatchStatus status; -+ -+ connection->dispatch_disabled = disabled; -+ status = _dbus_connection_get_dispatch_status_unlocked (connection); -+ _dbus_connection_update_dispatch_status_and_unlock (connection, status); -+ } -+ else -+ { -+ CONNECTION_UNLOCK (connection); -+ } -+} -+ -+ -+void -+_dbus_connection_enable_dispatch (DBusConnection *connection) -+{ -+ _dbus_connection_set_dispatch (connection, FALSE); -+} -+ -+void -+ _dbus_connection_disable_dispatch (DBusConnection *connection) -+{ -+ _dbus_connection_set_dispatch (connection, TRUE); -+} -+ -+ - #ifdef DBUS_ENABLE_EMBEDDED_TESTS - /** - * Gets the locks so we can examine them -@@ -4069,6 +4103,82 @@ _dbus_connection_putback_message_link_unlocked (DBusConnection *connection, - "_dbus_connection_putback_message_link_unlocked"); - } - -+dbus_bool_t -+_dbus_connection_putback_message (DBusConnection *connection, -+ DBusMessage *after_message, -+ DBusMessage *message, -+ DBusError *error) -+{ -+ DBusDispatchStatus status; -+ DBusList *message_link = _dbus_list_alloc_link (message); -+ DBusList *after_link; -+ if (message_link == NULL) -+ { -+ _DBUS_SET_OOM (error); -+ return FALSE; -+ } -+ dbus_message_ref (message); -+ -+ CONNECTION_LOCK (connection); -+ _dbus_connection_acquire_dispatch (connection); -+ HAVE_LOCK_CHECK (connection); -+ -+ after_link = _dbus_list_find_first(&connection->incoming_messages, after_message); -+ _dbus_list_insert_after_link (&connection->incoming_messages, after_link, message_link); -+ connection->n_incoming += 1; -+ -+ _dbus_verbose ("Message %p (%s %s %s '%s') put back into queue %p, %d incoming\n", -+ message_link->data, -+ dbus_message_type_to_string (dbus_message_get_type (message_link->data)), -+ dbus_message_get_interface (message_link->data) ? -+ dbus_message_get_interface (message_link->data) : -+ "no interface", -+ dbus_message_get_member (message_link->data) ? -+ dbus_message_get_member (message_link->data) : -+ "no member", -+ dbus_message_get_signature (message_link->data), -+ connection, connection->n_incoming); -+ -+ _dbus_message_trace_ref (message_link->data, -1, -1, -+ "_dbus_connection_putback_message"); -+ -+ _dbus_connection_release_dispatch (connection); -+ -+ status = _dbus_connection_get_dispatch_status_unlocked (connection); -+ _dbus_connection_update_dispatch_status_and_unlock (connection, status); -+ -+ return TRUE; -+} -+ -+dbus_bool_t -+_dbus_connection_remove_message (DBusConnection *connection, -+ DBusMessage *message) -+{ -+ DBusDispatchStatus status; -+ dbus_bool_t removed; -+ -+ CONNECTION_LOCK (connection); -+ _dbus_connection_acquire_dispatch (connection); -+ HAVE_LOCK_CHECK (connection); -+ -+ removed = _dbus_list_remove(&connection->incoming_messages, message); -+ -+ if (removed) -+ { -+ connection->n_incoming -= 1; -+ dbus_message_unref(message); -+ _dbus_verbose ("Message %p removed from incoming queue\n", message); -+ } -+ else -+ _dbus_verbose ("Message %p not found in the incoming queue\n", message); -+ -+ _dbus_connection_release_dispatch (connection); -+ -+ status = _dbus_connection_get_dispatch_status_unlocked (connection); -+ _dbus_connection_update_dispatch_status_and_unlock (connection, status); -+ return removed; -+} -+ - /** - * Returns the first-received message from the incoming message queue, - * removing it from the queue. The caller owns a reference to the -@@ -4252,8 +4362,9 @@ static DBusDispatchStatus - _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection) - { - HAVE_LOCK_CHECK (connection); -- -- if (connection->n_incoming > 0) -+ if (connection->dispatch_disabled && _dbus_connection_get_is_connected_unlocked(connection)) -+ return DBUS_DISPATCH_COMPLETE; -+ else if (connection->n_incoming > 0) - return DBUS_DISPATCH_DATA_REMAINS; - else if (!_dbus_transport_queue_messages (connection->transport)) - return DBUS_DISPATCH_NEED_MEMORY; -@@ -4716,6 +4827,8 @@ dbus_connection_dispatch (DBusConnection *connection) - - CONNECTION_LOCK (connection); - -+ if (result == DBUS_HANDLER_RESULT_LATER) -+ goto out; - if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) - { - _dbus_verbose ("No memory\n"); -@@ -4838,9 +4951,11 @@ dbus_connection_dispatch (DBusConnection *connection) - connection); - - out: -- if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) -+ if (result == DBUS_HANDLER_RESULT_LATER || -+ result == DBUS_HANDLER_RESULT_NEED_MEMORY) - { -- _dbus_verbose ("out of memory\n"); -+ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY) -+ _dbus_verbose ("out of memory\n"); - - /* Put message back, and we'll start over. - * Yes this means handlers must be idempotent if they -diff --git a/dbus/dbus-list.c b/dbus/dbus-list.c -index 8e713c0..32ea871 100644 ---- a/dbus/dbus-list.c -+++ b/dbus/dbus-list.c -@@ -458,6 +458,35 @@ _dbus_list_remove_last (DBusList **list, - return FALSE; - } - -+/** -+ * Finds a value in the list. Returns the first link -+ * with value equal to the given data pointer. -+ * This is a linear-time operation. -+ * Returns #NULL if no value found that matches. -+ * -+ * @param list address of the list head. -+ * @param data the value to find. -+ * @returns the link if found -+ */ -+DBusList* -+_dbus_list_find_first (DBusList **list, -+ void *data) -+{ -+ DBusList *link; -+ -+ link = _dbus_list_get_first_link (list); -+ -+ while (link != NULL) -+ { -+ if (link->data == data) -+ return link; -+ -+ link = _dbus_list_get_next_link (list, link); -+ } -+ -+ return NULL; -+} -+ - /** - * Finds a value in the list. Returns the last link - * with value equal to the given data pointer. -diff --git a/dbus/dbus-list.h b/dbus/dbus-list.h -index 9350a0d..fee9f1b 100644 ---- a/dbus/dbus-list.h -+++ b/dbus/dbus-list.h -@@ -68,6 +68,9 @@ DBUS_PRIVATE_EXPORT - void _dbus_list_remove_link (DBusList **list, - DBusList *link); - DBUS_PRIVATE_EXPORT -+DBusList* _dbus_list_find_first (DBusList **list, -+ void *data); -+DBUS_PRIVATE_EXPORT - DBusList* _dbus_list_find_last (DBusList **list, - void *data); - DBUS_PRIVATE_EXPORT -diff --git a/dbus/dbus-shared.h b/dbus/dbus-shared.h -index 7ab9103..e5bfbed 100644 ---- a/dbus/dbus-shared.h -+++ b/dbus/dbus-shared.h -@@ -67,7 +67,8 @@ typedef enum - { - DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */ - DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */ -- DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */ -+ DBUS_HANDLER_RESULT_NEED_MEMORY, /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */ -+ DBUS_HANDLER_RESULT_LATER /**< Message dispatch deferred due to pending policy check */ - } DBusHandlerResult; - - /* Bus names */ --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch deleted file mode 100644 index 7d89a7496..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch +++ /dev/null @@ -1,1095 +0,0 @@ -From 9d39aa9dd55680529d721a0389ce9ef579bb669a Mon Sep 17 00:00:00 2001 -From: Jacek Bukarewicz -Date: Fri, 28 Nov 2014 12:39:33 +0100 -Subject: [PATCH 3/8] Handle unavailability of policy results for broadcasts - and receive rules -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When message is sent to the addressed recipient and receive rule -result is unavailable we don't want to block the sender -as it most likely will be the privileged service, so instead we queue -it at the recipient. Any further messages sent to it will be queued to -maintain message order. Once the answer from Cynara arrives messages are -dispatched from the recipient queue. In such case full dispatch is -performed - messages are sent to addressed recipient and other -interested connections. -Messages sent to non-addressed recipients (eavesdroppers or broadcast -message recipients) are handled in a similar way. The difference is -that it is not full dispatch meaning message is sent to a single recipient. - -Cherry picked from 1e231194610892dd4360224998d91336097b05a1 by Jose Bollo - -Updated for dbus 1.10.20 by Scott Murray and José Bollo - -Signed-off-by: José Bollo -Signed-off-by: Scott Murray ---- - bus/activation.c | 4 +- - bus/bus.c | 50 ++++++-- - bus/bus.h | 19 +++ - bus/check.c | 307 +++++++++++++++++++++++++++++++++++++++++++++++ - bus/check.h | 25 ++++ - bus/connection.c | 168 ++++++++++++++++++++++++-- - bus/connection.h | 19 ++- - bus/dispatch.c | 115 +++++++++++++++--- - bus/dispatch.h | 11 +- - bus/driver.c | 2 +- - bus/policy.c | 6 + - 11 files changed, 683 insertions(+), 43 deletions(-) - -diff --git a/bus/activation.c b/bus/activation.c -index 8301b59..d4b597c 100644 ---- a/bus/activation.c -+++ b/bus/activation.c -@@ -1259,7 +1259,7 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation - res = bus_dispatch_matches (transaction, - entry->connection, - addressed_recipient, -- entry->activation_message, &error); -+ entry->activation_message, NULL, &error); - if (res == BUS_RESULT_FALSE) - { - /* If permission is denied, we just want to return the error -@@ -2140,7 +2140,7 @@ bus_activation_activate_service (BusActivation *activation, - bus_connection_get_loginfo (connection)); - /* Wonderful, systemd is connected, let's just send the msg */ - res = bus_dispatch_matches (activation_transaction, NULL, -- systemd, message, error); -+ systemd, message, NULL, error); - - if (res == BUS_RESULT_TRUE) - retval = TRUE; -diff --git a/bus/bus.c b/bus/bus.c -index 6fc45d0..0aa700b 100644 ---- a/bus/bus.c -+++ b/bus/bus.c -@@ -1800,17 +1800,9 @@ bus_context_check_security_policy (BusContext *context, - } - - /* See if limits on size have been exceeded */ -- if (proposed_recipient && -- ((dbus_connection_get_outgoing_size (proposed_recipient) > context->limits.max_outgoing_bytes) || -- (dbus_connection_get_outgoing_unix_fds (proposed_recipient) > context->limits.max_outgoing_unix_fds))) -- { -- complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, -- "Rejected: destination has a full message queue", -- 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL, -- error); -- _dbus_verbose ("security policy disallowing message due to full message queue\n"); -+ if (!bus_context_check_recipient_message_limits(context, proposed_recipient, sender, message, -+ requested_reply, error)) - return BUS_RESULT_FALSE; -- } - - /* Record that we will allow a reply here in the future (don't - * bother if the recipient is the bus or this is an eavesdropping -@@ -1869,3 +1861,41 @@ bus_context_check_all_watches (BusContext *context) - _dbus_server_toggle_all_watches (server, enabled); - } - } -+ -+void -+bus_context_complain_about_message (BusContext *context, -+ const char *error_name, -+ const char *complaint, -+ int matched_rules, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *proposed_recipient, -+ dbus_bool_t requested_reply, -+ dbus_bool_t log, -+ const char *privilege, -+ DBusError *error) -+{ -+ complain_about_message(context, error_name, complaint, matched_rules, message, sender, -+ proposed_recipient, requested_reply, log, privilege, error); -+} -+ -+dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context, -+ DBusConnection *recipient, -+ DBusConnection *sender, -+ DBusMessage *message, -+ dbus_bool_t requested_reply, -+ DBusError *error) -+{ -+ if (recipient && -+ ((dbus_connection_get_outgoing_size (recipient) > context->limits.max_outgoing_bytes) || -+ (dbus_connection_get_outgoing_unix_fds (recipient) > context->limits.max_outgoing_unix_fds))) -+ { -+ complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED, -+ "Rejected: destination has a full message queue", -+ 0, message, sender, recipient, requested_reply, TRUE, NULL, -+ error); -+ _dbus_verbose ("security policy disallowing message due to full message queue\n"); -+ return FALSE; -+ } -+ return TRUE; -+} -diff --git a/bus/bus.h b/bus/bus.h -index 82c32c8..1b08f7c 100644 ---- a/bus/bus.h -+++ b/bus/bus.h -@@ -164,4 +164,23 @@ BusResult bus_context_check_security_policy (BusContext - BusDeferredMessage **deferred_message); - void bus_context_check_all_watches (BusContext *context); - -+dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context, -+ DBusConnection *recipient, -+ DBusConnection *sender, -+ DBusMessage *message, -+ dbus_bool_t requested_reply, -+ DBusError *error); -+void bus_context_complain_about_message (BusContext *context, -+ const char *error_name, -+ const char *complaint, -+ int matched_rules, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *proposed_recipient, -+ dbus_bool_t requested_reply, -+ dbus_bool_t log, -+ const char *privilege, -+ DBusError *error); -+ -+ - #endif /* BUS_BUS_H */ -diff --git a/bus/check.c b/bus/check.c -index 4b8a699..f3d283f 100644 ---- a/bus/check.c -+++ b/bus/check.c -@@ -49,6 +49,9 @@ typedef struct BusDeferredMessage - DBusConnection *sender; - DBusConnection *proposed_recipient; - DBusConnection *addressed_recipient; -+ dbus_bool_t requested_reply; -+ int matched_rules; -+ const char *privilege; - dbus_bool_t full_dispatch; - BusDeferredMessageStatus status; - BusResult response; -@@ -135,6 +138,89 @@ bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message, - _dbus_connection_enable_dispatch(deferred_message->sender); - } - -+static void -+bus_check_queued_message_reply_callback (BusDeferredMessage *deferred_message, -+ BusResult result) -+{ -+ int status; -+ -+ _dbus_verbose("bus_check_queued_message_reply_callback called message=%p\n", deferred_message); -+ -+ if (!bus_connection_is_active(deferred_message->proposed_recipient)) -+ return; -+ -+ status = deferred_message->status; -+ -+ deferred_message->status = 0; /* mark message as not waiting for response */ -+ deferred_message->response = result; -+ -+ /* -+ * If send rule allows us to send message we still need to check receive rules. -+ */ -+ if ((status & BUS_DEFERRED_MESSAGE_CHECK_SEND) && (result == BUS_RESULT_TRUE)) -+ { -+ int toggles; -+ BusContext *context; -+ BusRegistry *registry; -+ BusClientPolicy *recipient_policy; -+ BusDeferredMessage *deferred_message_receive; -+ -+ context = bus_connection_get_context(deferred_message->proposed_recipient); -+ registry = bus_context_get_registry(context); -+ recipient_policy = bus_connection_get_policy(deferred_message->proposed_recipient); -+ -+ deferred_message->response = bus_client_policy_check_can_receive(recipient_policy, registry, -+ deferred_message->requested_reply, deferred_message->sender, -+ deferred_message->addressed_recipient, deferred_message->proposed_recipient, deferred_message->message, -+ &toggles, NULL, &deferred_message_receive); -+ if (deferred_message->response == BUS_RESULT_LATER) -+ { -+ /* replace deferred message associated with send check with the one associated with -+ * receive check */ -+ if (!bus_deferred_message_replace(deferred_message, deferred_message_receive)) -+ { -+ /* failed to replace deferred message (due to oom). Set it to rejected */ -+ deferred_message->response = BUS_RESULT_FALSE; -+ } -+ } -+ } -+ -+ bus_connection_dispatch_deferred(deferred_message->proposed_recipient); -+} -+ -+static void -+queue_deferred_message_cancel_transaction_hook (void *data) -+{ -+ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data; -+ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message); -+} -+ -+ -+dbus_bool_t -+bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message, -+ BusTransaction *transaction, -+ dbus_bool_t full_dispatch, -+ dbus_bool_t prepend) -+{ -+ _dbus_assert(deferred_message != NULL); -+ _dbus_assert(deferred_message->proposed_recipient != NULL); -+ -+ if (!bus_connection_queue_deferred_message(deferred_message->proposed_recipient, -+ deferred_message, prepend)) -+ return FALSE; -+ -+ if (!bus_transaction_add_cancel_hook(transaction, queue_deferred_message_cancel_transaction_hook, -+ deferred_message, NULL)) -+ { -+ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message); -+ return FALSE; -+ } -+ deferred_message->response_callback = bus_check_queued_message_reply_callback; -+ deferred_message->full_dispatch = full_dispatch; -+ -+ return TRUE; -+} -+ - static void - deferred_message_free_function(void *data) - { -@@ -159,6 +245,20 @@ bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message) - deferred_message->response_callback = bus_check_enable_dispatch_callback; - } - -+void -+bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message, -+ dbus_bool_t requested_reply, -+ int matched_rules, -+ const char *privilege) -+{ -+ _dbus_assert(deferred_message != NULL); -+ -+ deferred_message->requested_reply = requested_reply; -+ deferred_message->matched_rules = matched_rules; -+ deferred_message->privilege = privilege; -+} -+ -+ - #ifdef DBUS_ENABLE_EMBEDDED_TESTS - BusResult (*bus_check_test_override) (DBusConnection *connection, - const char *privilege); -@@ -259,6 +359,9 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *message, - deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL; - deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL; - deferred_message->message = dbus_message_ref(message); -+ deferred_message->requested_reply = FALSE; -+ deferred_message->matched_rules = 0; -+ deferred_message->privilege = NULL; - deferred_message->response = response; - deferred_message->status = 0; - deferred_message->full_dispatch = FALSE; -@@ -295,12 +398,215 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message) - } - } - -+dbus_bool_t -+bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, DBusError *error) -+{ -+ BusContext *context = bus_connection_get_context(deferred_message->proposed_recipient); -+ -+ return bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient, -+ deferred_message->sender, deferred_message->message, deferred_message->requested_reply, -+ error); -+} -+ -+dbus_bool_t -+bus_deferred_message_expect_method_reply(BusDeferredMessage *deferred_message, BusTransaction *transaction, DBusError *error) -+{ -+ int type = dbus_message_get_type(deferred_message->message); -+ if (type == DBUS_MESSAGE_TYPE_METHOD_CALL && -+ deferred_message->sender && -+ deferred_message->addressed_recipient && -+ deferred_message->addressed_recipient == deferred_message->proposed_recipient && /* not eavesdropping */ -+ !bus_connections_expect_reply (bus_connection_get_connections (deferred_message->sender), -+ transaction, -+ deferred_message->sender, deferred_message->addressed_recipient, -+ deferred_message->message, error)) -+ { -+ _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n"); -+ return FALSE; -+ } -+ return TRUE; -+} -+ -+void -+bus_deferred_message_create_error(BusDeferredMessage *deferred_message, -+ const char *error_message, DBusError *error) -+{ -+ BusContext *context; -+ _dbus_assert (deferred_message->status == 0 && deferred_message->response == BUS_RESULT_FALSE); -+ -+ if (deferred_message->sender == NULL) -+ return; /* error won't be sent to bus driver anyway */ -+ -+ context = bus_connection_get_context(deferred_message->sender); -+ bus_context_complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected message", -+ deferred_message->matched_rules, deferred_message->message, deferred_message->sender, -+ deferred_message->proposed_recipient, deferred_message->requested_reply, FALSE, -+ deferred_message->privilege, error); -+} -+ -+BusResult -+bus_deferred_message_dispatch (BusDeferredMessage *deferred_message) -+{ -+ BusContext *context = bus_connection_get_context (deferred_message->proposed_recipient); -+ BusTransaction *transaction = bus_transaction_new (context); -+ BusResult result = BUS_RESULT_TRUE; -+ DBusError error; -+ -+ if (transaction == NULL) -+ { -+ return BUS_RESULT_FALSE; -+ } -+ -+ dbus_error_init(&error); -+ -+ if (!deferred_message->full_dispatch) -+ { -+ result = deferred_message->response; -+ if (result == BUS_RESULT_TRUE) -+ { -+ if (!bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient, -+ deferred_message->sender, deferred_message->message, deferred_message->requested_reply, &error)) -+ result = BUS_RESULT_FALSE; -+ } -+ else if (result == BUS_RESULT_LATER) -+ { -+ BusDeferredMessage *deferred_message2; -+ result = bus_context_check_security_policy (context, transaction, -+ deferred_message->sender, -+ deferred_message->addressed_recipient, -+ deferred_message->proposed_recipient, -+ deferred_message->message, NULL, NULL, -+ &deferred_message2); -+ -+ if (result == BUS_RESULT_LATER) -+ { -+ /* prepend at recipient */ -+ if (!bus_deferred_message_queue_at_recipient(deferred_message2, transaction, -+ FALSE, TRUE)) -+ result = BUS_RESULT_FALSE; -+ } -+ } -+ -+ /* silently drop messages on access denial */ -+ if (result == BUS_RESULT_TRUE) -+ { -+ if (!bus_transaction_send (transaction, deferred_message->proposed_recipient, deferred_message->message, TRUE)) -+ result = BUS_RESULT_FALSE; -+ } -+ -+ bus_transaction_execute_and_free(transaction); -+ -+ goto out; -+ } -+ -+ /* do not attempt to send message if sender has disconnected */ -+ if (deferred_message->sender != NULL && !bus_connection_is_active(deferred_message->sender)) -+ { -+ bus_transaction_cancel_and_free(transaction); -+ result = BUS_RESULT_FALSE; -+ goto out; -+ } -+ -+ result = bus_dispatch_matches(transaction, deferred_message->sender, -+ deferred_message->addressed_recipient, deferred_message->message, deferred_message, &error); -+ -+ if (result == BUS_RESULT_LATER) -+ { -+ /* Message deferring was already done in bus_dispatch_matches */ -+ bus_transaction_cancel_and_free(transaction); -+ goto out; -+ } -+ -+ /* this part is a copy & paste from bus_dispatch function. Probably can be moved to a function */ -+ if (dbus_error_is_set (&error)) -+ { -+ if (!dbus_connection_get_is_connected (deferred_message->sender)) -+ { -+ /* If we disconnected it, we won't bother to send it any error -+ * messages. -+ */ -+ _dbus_verbose ("Not sending error to connection we disconnected\n"); -+ } -+ else if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY)) -+ { -+ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message); -+ -+ /* cancel transaction due to OOM */ -+ if (transaction != NULL) -+ { -+ bus_transaction_cancel_and_free (transaction); -+ transaction = NULL; -+ } -+ } -+ else -+ { -+ /* Try to send the real error, if no mem to do that, send -+ * the OOM error -+ */ -+ _dbus_assert (transaction != NULL); -+ if (!bus_transaction_send_error_reply (transaction, deferred_message->sender, -+ &error, deferred_message->message)) -+ { -+ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message); -+ -+ /* cancel transaction due to OOM */ -+ if (transaction != NULL) -+ { -+ bus_transaction_cancel_and_free (transaction); -+ transaction = NULL; -+ } -+ } -+ } -+ } -+ -+ if (transaction != NULL) -+ { -+ bus_transaction_execute_and_free (transaction); -+ } -+ -+out: -+ dbus_error_free(&error); -+ -+ return result; -+} -+ -+dbus_bool_t -+bus_deferred_message_replace (BusDeferredMessage *old_message, BusDeferredMessage *new_message) -+{ -+ if (bus_connection_replace_deferred_message(old_message->proposed_recipient, -+ old_message, new_message)) -+ { -+ new_message->response_callback = old_message->response_callback; -+ new_message->full_dispatch = old_message->full_dispatch; -+ return TRUE; -+ } -+ return FALSE; -+} -+ -+dbus_bool_t -+bus_deferred_message_waits_for_check(BusDeferredMessage *deferred_message) -+{ -+ return deferred_message->status != 0; -+} -+ -+DBusConnection * -+bus_deferred_message_get_recipient(BusDeferredMessage *deferred_message) -+{ -+ return deferred_message->proposed_recipient; -+} -+ - BusDeferredMessageStatus - bus_deferred_message_get_status (BusDeferredMessage *deferred_message) - { - return deferred_message->status; - } - -+BusResult -+bus_deferred_message_get_response (BusDeferredMessage *deferred_message) -+{ -+ return deferred_message->response; -+} -+ - void - bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - BusResult result) -@@ -310,3 +616,4 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - deferred_message->response_callback(deferred_message, result); - } - } -+ -diff --git a/bus/check.h b/bus/check.h -index d177549..9c13c18 100644 ---- a/bus/check.h -+++ b/bus/check.h -@@ -64,12 +64,37 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *messag - - BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message); - void bus_deferred_message_unref (BusDeferredMessage *deferred_message); -+BusResult bus_deferred_message_dispatch (BusDeferredMessage *deferred_message); -+dbus_bool_t bus_deferred_message_waits_for_check (BusDeferredMessage *deferred_message); -+DBusConnection *bus_deferred_message_get_recipient (BusDeferredMessage *deferred_message); - void bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - BusResult result); -+dbus_bool_t bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message, -+ BusTransaction *transaction, -+ dbus_bool_t full_dispatch, -+ dbus_bool_t prepend); -+dbus_bool_t bus_deferred_message_replace (BusDeferredMessage *old_message, -+ BusDeferredMessage *new_message); - void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message); -+BusResult bus_deferred_message_get_response (BusDeferredMessage *deferred_message); - - BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message); - -+ -+dbus_bool_t bus_deferred_message_expect_method_reply (BusDeferredMessage *deferred_message, -+ BusTransaction *transaction, -+ DBusError *error); -+void bus_deferred_message_create_error (BusDeferredMessage *deferred_message, -+ const char *error_message, -+ DBusError *error); -+void bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message, -+ dbus_bool_t requested_reply, -+ int matched_rules, -+ const char *privilege); -+dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, -+ DBusError *error); -+ -+ - #ifdef DBUS_ENABLE_EMBEDDED_TESTS - extern BusResult (*bus_check_test_override) (DBusConnection *connection, - const char *privilege); -diff --git a/bus/connection.c b/bus/connection.c -index b348d42..ee93384 100644 ---- a/bus/connection.c -+++ b/bus/connection.c -@@ -31,11 +31,13 @@ - #include "expirelist.h" - #include "selinux.h" - #include "apparmor.h" -+#include "check.h" - #include - #include - #include - #include - #include -+#include - #ifdef DBUS_ENABLE_CYNARA - #include - #include -@@ -102,6 +104,7 @@ typedef struct - DBusMessage *oom_message; - DBusPreallocatedSend *oom_preallocated; - BusClientPolicy *policy; -+ DBusList *deferred_messages; /**< Queue of messages deferred due to pending policy check */ - - char *cached_loginfo_string; - BusSELinuxID *selinux_id; -@@ -268,6 +271,8 @@ bus_connection_disconnected (DBusConnection *connection) - bus_transaction_execute_and_free (transaction); - } - -+ bus_connection_clear_deferred_messages(connection); -+ - bus_dispatch_remove_connection (connection); - - /* no more watching */ -@@ -2307,7 +2312,7 @@ bus_transaction_capture (BusTransaction *transaction, - { - DBusConnection *recipient = link->data; - -- if (!bus_transaction_send (transaction, recipient, message)) -+ if (!bus_transaction_send (transaction, recipient, message, FALSE)) - goto out; - } - -@@ -2361,6 +2366,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - { - DBusError error = DBUS_ERROR_INIT; - BusResult res; -+ BusDeferredMessage *deferred_message; - - /* We have to set the sender to the driver, and have - * to check security policy since it was not done in -@@ -2401,7 +2407,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - res = bus_context_check_security_policy (bus_transaction_get_context (transaction), - transaction, - NULL, connection, connection, message, NULL, -- &error, NULL); -+ &error, &deferred_message); - if (res == BUS_RESULT_FALSE) - { - if (!bus_transaction_capture_error_reply (transaction, connection, -@@ -2419,18 +2425,20 @@ bus_transaction_send_from_driver (BusTransaction *transaction, - } - else if (res == BUS_RESULT_LATER) - { -- _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n"); - dbus_error_free (&error); -- return TRUE; -+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE)) -+ return FALSE; -+ return TRUE; /* pretend to have sent it */ - } - -- return bus_transaction_send (transaction, connection, message); -+ return bus_transaction_send (transaction, connection, message, FALSE); - } - - dbus_bool_t - bus_transaction_send (BusTransaction *transaction, - DBusConnection *connection, -- DBusMessage *message) -+ DBusMessage *message, -+ dbus_bool_t deferred_dispatch) - { - MessageToSend *to_send; - BusConnectionData *d; -@@ -2456,7 +2464,28 @@ bus_transaction_send (BusTransaction *transaction, - - d = BUS_CONNECTION_DATA (connection); - _dbus_assert (d != NULL); -- -+ -+ if (!deferred_dispatch && d->deferred_messages != NULL) -+ { -+ BusDeferredMessage *deferred_message; -+ dbus_bool_t success; -+ /* sender and addressed recipient are not required at this point as we only need to send message -+ * to a single recipient without performing policy check. */ -+ deferred_message = bus_deferred_message_new (message, -+ NULL, -+ NULL, -+ connection, -+ BUS_RESULT_TRUE); -+ if (deferred_message == NULL) -+ return FALSE; -+ -+ success = bus_deferred_message_queue_at_recipient(deferred_message, transaction, -+ FALSE, FALSE); -+ bus_deferred_message_unref(deferred_message); -+ -+ return success; -+ } -+ - to_send = dbus_new (MessageToSend, 1); - if (to_send == NULL) - { -@@ -2708,6 +2737,131 @@ bus_transaction_add_cancel_hook (BusTransaction *transaction, - return TRUE; - } - -+void -+bus_connection_dispatch_deferred (DBusConnection *connection) -+{ -+ BusDeferredMessage *message; -+ -+ _dbus_return_if_fail (connection != NULL); -+ -+ while ((message = bus_connection_pop_deferred_message(connection)) != NULL) -+ { -+ bus_deferred_message_dispatch(message); -+ bus_deferred_message_unref(message); -+ } -+} -+ -+dbus_bool_t -+bus_connection_has_deferred_messages (DBusConnection *connection) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ return d->deferred_messages != NULL ? TRUE : FALSE; -+} -+ -+dbus_bool_t -+bus_connection_queue_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *message, -+ dbus_bool_t prepend) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ dbus_bool_t success; -+ if (prepend) -+ success = _dbus_list_prepend(&d->deferred_messages, message); -+ else -+ success = _dbus_list_append(&d->deferred_messages, message); -+ -+ if (success) -+ { -+ bus_deferred_message_ref(message); -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ -+dbus_bool_t -+bus_connection_replace_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *oldMessage, -+ BusDeferredMessage *newMessage) -+{ -+ DBusList *link; -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ -+ link = _dbus_list_find_first(&d->deferred_messages, oldMessage); -+ if (link == NULL) -+ return FALSE; -+ -+ if (!_dbus_list_insert_after(&d->deferred_messages, link, newMessage)) -+ return FALSE; -+ -+ bus_deferred_message_ref(newMessage); -+ _dbus_list_remove_link(&d->deferred_messages, link); -+ bus_deferred_message_unref(oldMessage); -+ return TRUE; -+} -+ -+BusDeferredMessage * -+bus_connection_pop_deferred_message (DBusConnection *connection) -+{ -+ DBusList *link; -+ BusDeferredMessage *message; -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ -+ link =_dbus_list_get_first_link(&d->deferred_messages); -+ if (link != NULL) -+ { -+ message = link->data; -+ if (!bus_deferred_message_waits_for_check(message)) -+ { -+ _dbus_list_remove_link(&d->deferred_messages, link); -+ return message; -+ } -+ } -+ -+ return NULL; -+} -+ -+dbus_bool_t -+bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ if (_dbus_list_prepend(&d->deferred_messages, message)) -+ { -+ return TRUE; -+ } -+ return FALSE; -+} -+ -+void -+bus_connection_clear_deferred_messages (DBusConnection *connection) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ DBusList *link; -+ DBusList *next; -+ BusDeferredMessage *message; -+ -+ link =_dbus_list_get_first_link(&d->deferred_messages); -+ while (link != NULL) -+ { -+ next = _dbus_list_get_next_link (&d->deferred_messages, link); -+ message = link->data; -+ -+ bus_deferred_message_unref(message); -+ _dbus_list_remove_link(&d->deferred_messages, link); -+ -+ link = next; -+ } -+} -+ -+void -+bus_connection_remove_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *message) -+{ -+ BusConnectionData *d = BUS_CONNECTION_DATA(connection); -+ if (_dbus_list_remove(&d->deferred_messages, message)) -+ bus_deferred_message_unref(message); -+} -+ - int - bus_connections_get_n_active (BusConnections *connections) - { -diff --git a/bus/connection.h b/bus/connection.h -index 71078ea..97dae96 100644 ---- a/bus/connection.h -+++ b/bus/connection.h -@@ -85,6 +85,22 @@ dbus_bool_t bus_connection_preallocate_oom_error (DBusConnection *connection); - void bus_connection_send_oom_error (DBusConnection *connection, - DBusMessage *in_reply_to); - -+dbus_bool_t bus_connection_has_deferred_messages (DBusConnection *connection); -+dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *message, -+ dbus_bool_t prepend); -+BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection); -+dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *message); -+void bus_connection_remove_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *message); -+dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection, -+ BusDeferredMessage *oldMessage, -+ BusDeferredMessage *newMessage); -+void bus_connection_dispatch_deferred (DBusConnection *connection); -+void bus_connection_clear_deferred_messages (DBusConnection *connection); -+ -+ - /* called by signals.c */ - dbus_bool_t bus_connection_add_match_rule (DBusConnection *connection, - BusMatchRule *rule); -@@ -137,7 +153,8 @@ BusTransaction* bus_transaction_new (BusContext * - BusContext* bus_transaction_get_context (BusTransaction *transaction); - dbus_bool_t bus_transaction_send (BusTransaction *transaction, - DBusConnection *connection, -- DBusMessage *message); -+ DBusMessage *message, -+ dbus_bool_t deferred_dispatch); - dbus_bool_t bus_transaction_capture (BusTransaction *transaction, - DBusConnection *connection, - DBusConnection *addressed_recipient, -diff --git a/bus/dispatch.c b/bus/dispatch.c -index 50a22a3..7d30ce4 100644 ---- a/bus/dispatch.c -+++ b/bus/dispatch.c -@@ -33,6 +33,7 @@ - #include "utils.h" - #include "bus.h" - #include "signals.h" -+#include "dispatch.h" - #include "test.h" - #include - #include -@@ -77,7 +78,7 @@ send_one_message (DBusConnection *connection, - NULL, - &stack_error, - &deferred_message); -- if (result != BUS_RESULT_TRUE) -+ if (result == BUS_RESULT_FALSE) - { - if (!bus_transaction_capture_error_reply (transaction, sender, - &stack_error, message)) -@@ -112,9 +113,19 @@ send_one_message (DBusConnection *connection, - return TRUE; /* don't send it but don't return an error either */ - } - -+ if (result == BUS_RESULT_LATER) -+ { -+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE)) -+ { -+ BUS_SET_OOM (error); -+ return FALSE; -+ } -+ return TRUE; /* pretend to have sent it */ -+ } -+ - if (!bus_transaction_send (transaction, - connection, -- message)) -+ message, FALSE)) - { - BUS_SET_OOM (error); - return FALSE; -@@ -124,11 +135,12 @@ send_one_message (DBusConnection *connection, - } - - BusResult --bus_dispatch_matches (BusTransaction *transaction, -- DBusConnection *sender, -- DBusConnection *addressed_recipient, -- DBusMessage *message, -- DBusError *error) -+bus_dispatch_matches (BusTransaction *transaction, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusMessage *message, -+ BusDeferredMessage *dispatched_deferred_message, -+ DBusError *error) - { - DBusError tmp_error; - BusConnections *connections; -@@ -137,7 +149,6 @@ bus_dispatch_matches (BusTransaction *transaction, - DBusList *link; - BusContext *context; - BusDeferredMessage *deferred_message; -- BusResult res; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - -@@ -153,16 +164,80 @@ bus_dispatch_matches (BusTransaction *transaction, - /* First, send the message to the addressed_recipient, if there is one. */ - if (addressed_recipient != NULL) - { -- res = bus_context_check_security_policy (context, transaction, -+ BusResult result; -+ /* To maintain message order message needs to be appended at the recipient if there are already -+ * deferred messages and we are not doing deferred dispatch -+ */ -+ if (dispatched_deferred_message == NULL && bus_connection_has_deferred_messages(addressed_recipient)) -+ { -+ deferred_message = bus_deferred_message_new(message, sender, -+ addressed_recipient, addressed_recipient, BUS_RESULT_LATER); -+ -+ if (deferred_message == NULL) -+ { -+ BUS_SET_OOM(error); -+ return BUS_RESULT_FALSE; -+ } -+ -+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE)) -+ { -+ bus_deferred_message_unref(deferred_message); -+ BUS_SET_OOM(error); -+ return BUS_RESULT_FALSE; -+ } -+ -+ bus_deferred_message_unref(deferred_message); -+ return BUS_RESULT_TRUE; /* pretend to have sent it */ -+ } -+ -+ if (dispatched_deferred_message != NULL) -+ { -+ result = bus_deferred_message_get_response(dispatched_deferred_message); -+ if (result == BUS_RESULT_TRUE) -+ { -+ /* if we know the result of policy check we still need to check if message limits -+ * are not exceeded. It is also required to add entry in expected replies list if -+ * this is a method call -+ */ -+ if (!bus_deferred_message_check_message_limits(dispatched_deferred_message, error)) -+ return BUS_RESULT_FALSE; -+ -+ if (!bus_deferred_message_expect_method_reply(dispatched_deferred_message, transaction, error)) -+ return BUS_RESULT_FALSE; -+ } -+ else if (result == BUS_RESULT_FALSE) -+ { -+ bus_deferred_message_create_error(dispatched_deferred_message, "Rejected message", error); -+ return BUS_RESULT_FALSE; -+ } -+ } -+ else -+ result = BUS_RESULT_LATER; -+ -+ if (result == BUS_RESULT_LATER) -+ result = bus_context_check_security_policy (context, transaction, - sender, addressed_recipient, - addressed_recipient, - message, NULL, error, - &deferred_message); -- if (res == BUS_RESULT_FALSE) -+ -+ if (result == BUS_RESULT_FALSE) - return BUS_RESULT_FALSE; -- else if (res == BUS_RESULT_LATER) -+ else if (result == BUS_RESULT_LATER) - { - BusDeferredMessageStatus status; -+ -+ if (dispatched_deferred_message != NULL) -+ { -+ /* for deferred dispatch prepend message at the recipient */ -+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, TRUE)) -+ { -+ BUS_SET_OOM(error); -+ return BUS_RESULT_FALSE; -+ } -+ return BUS_RESULT_TRUE; /* pretend to have sent it */ -+ } -+ - status = bus_deferred_message_get_status(deferred_message); - - if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND) -@@ -173,13 +248,18 @@ bus_dispatch_matches (BusTransaction *transaction, - } - else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE) - { -- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, -- "Rejecting message because time is needed to check security policy"); -- return BUS_RESULT_FALSE; -+ /* receive rule result not available - queue message at the recipient */ -+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE)) -+ { -+ BUS_SET_OOM(error); -+ return BUS_RESULT_FALSE; -+ } -+ -+ return BUS_RESULT_TRUE; /* pretend to have sent it */ - } - else - { -- _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n"); -+ _dbus_verbose("deferred message has no status field set unexpectedly\n"); - return BUS_RESULT_FALSE; - } - } -@@ -196,7 +276,8 @@ bus_dispatch_matches (BusTransaction *transaction, - } - - /* Dispatch the message */ -- if (!bus_transaction_send (transaction, addressed_recipient, message)) -+ if (!bus_transaction_send(transaction, addressed_recipient, message, -+ dispatched_deferred_message != NULL ? TRUE : FALSE)) - { - BUS_SET_OOM (error); - return BUS_RESULT_FALSE; -@@ -534,7 +615,7 @@ bus_dispatch (DBusConnection *connection, - * match rules. - */ - if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient, -- message, &error)) -+ message, NULL, &error)) - { - /* Roll back and dispatch the message once the policy result is available */ - bus_transaction_cancel_and_free (transaction); -diff --git a/bus/dispatch.h b/bus/dispatch.h -index afba6a2..f6102e8 100644 ---- a/bus/dispatch.h -+++ b/bus/dispatch.h -@@ -29,10 +29,11 @@ - - dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection); - void bus_dispatch_remove_connection (DBusConnection *connection); --BusResult bus_dispatch_matches (BusTransaction *transaction, -- DBusConnection *sender, -- DBusConnection *recipient, -- DBusMessage *message, -- DBusError *error); -+BusResult bus_dispatch_matches (BusTransaction *transaction, -+ DBusConnection *sender, -+ DBusConnection *recipient, -+ DBusMessage *message, -+ BusDeferredMessage *dispatched_deferred_message, -+ DBusError *error); - - #endif /* BUS_DISPATCH_H */ -diff --git a/bus/driver.c b/bus/driver.c -index f414f64..d89a658 100644 ---- a/bus/driver.c -+++ b/bus/driver.c -@@ -254,7 +254,7 @@ bus_driver_send_service_owner_changed (const char *service_name, - if (!bus_transaction_capture (transaction, NULL, NULL, message)) - goto oom; - -- res = bus_dispatch_matches (transaction, NULL, NULL, message, error); -+ res = bus_dispatch_matches (transaction, NULL, NULL, message, NULL, error); - if (res == BUS_RESULT_TRUE) - retval = TRUE; - else -diff --git a/bus/policy.c b/bus/policy.c -index 7de92c6..483cc97 100644 ---- a/bus/policy.c -+++ b/bus/policy.c -@@ -1122,6 +1122,9 @@ bus_client_policy_check_can_send (DBusConnection *sender, - - result = bus_check_privilege(check, message, sender, addressed_recipient, receiver, - privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message); -+ if (result == BUS_RESULT_LATER && deferred_message != NULL) -+ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply, -+ *toggles, privilege); - } - else - privilege = NULL; -@@ -1372,6 +1375,9 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - - result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient, - privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message); -+ if (result == BUS_RESULT_LATER && deferred_message != NULL) -+ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply, -+ *toggles, privilege); - } - else - privilege = NULL; --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch deleted file mode 100644 index 9953dcaac..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch +++ /dev/null @@ -1,1505 +0,0 @@ -From 28ada62c98d74285dc22b66650b09b6c8f2c28c4 Mon Sep 17 00:00:00 2001 -From: Jacek Bukarewicz -Date: Thu, 27 Nov 2014 11:26:21 +0100 -Subject: [PATCH 4/8] Add own rule result unavailability handling -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Own rule result unavailability is handled like send rules - dispatching -messages from the sender is blocked and resumed when result becomes -available. - -Handler of "RequestName" method needs to return BUS_RESULT_LATER when -policy result is not known therefore its return type is modified. -Since bus message handlers are put into function pointer array other -message handler function singatures are also affected. - -Cherry-picked from 35ef89cd6777ea2430077fc621d21bd01df92349 by Jose.bollo - -Updated for dbus 1.10.20 by Scott Murray and José Bollo - -Signed-off-by: José Bollo -Signed-off-by: Scott Murray ---- - bus/dispatch.c | 11 +- - bus/driver.c | 334 ++++++++++++++++++++++++++++--------------------- - bus/driver.h | 2 +- - bus/policy.c | 52 ++++++-- - bus/policy.h | 6 +- - bus/services.c | 26 ++-- - bus/services.h | 3 +- - bus/stats.c | 23 ++-- - bus/stats.h | 6 +- - 9 files changed, 283 insertions(+), 180 deletions(-) - -diff --git a/bus/dispatch.c b/bus/dispatch.c -index 7d30ce4..4b84c21 100644 ---- a/bus/dispatch.c -+++ b/bus/dispatch.c -@@ -517,8 +517,17 @@ bus_dispatch (DBusConnection *connection, - } - - _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS); -- if (!bus_driver_handle_message (connection, transaction, message, &error)) -+ res = bus_driver_handle_message (connection, transaction, message, &error); -+ if (res == BUS_RESULT_FALSE) - goto out; -+ else if (res == BUS_RESULT_LATER) -+ { -+ /* connection has been disabled in message handler */ -+ bus_transaction_cancel_and_free (transaction); -+ transaction = NULL; -+ result = DBUS_HANDLER_RESULT_LATER; -+ goto out; -+ } - } - else if (!bus_connection_is_active (connection)) /* clients must talk to bus driver first */ - { -diff --git a/bus/driver.c b/bus/driver.c -index d89a658..aaeb3b2 100644 ---- a/bus/driver.c -+++ b/bus/driver.c -@@ -420,7 +420,7 @@ create_unique_client_name (BusRegistry *registry, - return TRUE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_hello (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -428,7 +428,7 @@ bus_driver_handle_hello (DBusConnection *connection, - { - DBusString unique_name; - BusService *service; -- dbus_bool_t retval; -+ BusResult retval; - BusRegistry *registry; - BusConnections *connections; - DBusError tmp_error; -@@ -442,7 +442,7 @@ bus_driver_handle_hello (DBusConnection *connection, - /* We already handled an Hello message for this connection. */ - dbus_set_error (error, DBUS_ERROR_FAILED, - "Already handled an Hello message"); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - /* Note that when these limits are exceeded we don't disconnect the -@@ -464,16 +464,16 @@ bus_driver_handle_hello (DBusConnection *connection, - bus_context_log (context, DBUS_SYSTEM_LOG_WARNING, "%s (%s=%d)", - tmp_error.message, limit_name, limit); - dbus_move_error (&tmp_error, error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!_dbus_string_init (&unique_name)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - - registry = bus_connection_get_registry (connection); - -@@ -506,7 +506,7 @@ bus_driver_handle_hello (DBusConnection *connection, - goto out_0; - - _dbus_assert (bus_connection_is_active (connection)); -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out_0: - _dbus_string_free (&unique_name); -@@ -558,7 +558,7 @@ bus_driver_send_welcome_message (DBusConnection *connection, - } - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_list_services (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -580,14 +580,14 @@ bus_driver_handle_list_services (DBusConnection *connection, - if (reply == NULL) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!bus_registry_list_services (registry, &services, &len)) - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - dbus_message_iter_init_append (reply, &iter); -@@ -599,7 +599,7 @@ bus_driver_handle_list_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - { -@@ -611,7 +611,7 @@ bus_driver_handle_list_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - } - -@@ -624,7 +624,7 @@ bus_driver_handle_list_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - ++i; - } -@@ -635,23 +635,23 @@ bus_driver_handle_list_services (DBusConnection *connection, - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!bus_transaction_send_from_driver (transaction, connection, reply)) - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - else - { - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - } - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_list_activatable_services (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -673,14 +673,14 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, - if (reply == NULL) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!bus_activation_list_services (activation, &services, &len)) - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - dbus_message_iter_init_append (reply, &iter); -@@ -692,7 +692,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - { -@@ -704,7 +704,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - } - -@@ -717,7 +717,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, - dbus_free_string_array (services); - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - ++i; - } -@@ -728,23 +728,23 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection, - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!bus_transaction_send_from_driver (transaction, connection, reply)) - { - dbus_message_unref (reply); - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - else - { - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - } - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_acquire_service (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -755,7 +755,8 @@ bus_driver_handle_acquire_service (DBusConnection *connection, - const char *name; - dbus_uint32_t service_reply; - dbus_uint32_t flags; -- dbus_bool_t retval; -+ BusResult retval; -+ BusResult res; - BusRegistry *registry; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -766,20 +767,24 @@ bus_driver_handle_acquire_service (DBusConnection *connection, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_UINT32, &flags, - DBUS_TYPE_INVALID)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags); - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - reply = NULL; - - _dbus_string_init_const (&service_name, name); - -- if (!bus_registry_acquire_service (registry, connection, -- &service_name, flags, -- &service_reply, transaction, -- error)) -- goto out; -+ res = bus_registry_acquire_service (registry, connection, message, -+ &service_name, flags, -+ &service_reply, transaction, -+ error); -+ if (res != BUS_RESULT_TRUE) -+ { -+ retval = res; -+ goto out; -+ } - - reply = dbus_message_new_method_return (message); - if (reply == NULL) -@@ -800,7 +805,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection, - goto out; - } - -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out: - if (reply) -@@ -808,7 +813,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection, - return retval; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_release_service (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -818,7 +823,7 @@ bus_driver_handle_release_service (DBusConnection *connection, - DBusString service_name; - const char *name; - dbus_uint32_t service_reply; -- dbus_bool_t retval; -+ BusResult retval; - BusRegistry *registry; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -828,11 +833,11 @@ bus_driver_handle_release_service (DBusConnection *connection, - if (!dbus_message_get_args (message, error, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_INVALID)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - _dbus_verbose ("Trying to release name %s\n", name); - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - reply = NULL; - - _dbus_string_init_const (&service_name, name); -@@ -861,7 +866,7 @@ bus_driver_handle_release_service (DBusConnection *connection, - goto out; - } - -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out: - if (reply) -@@ -869,7 +874,7 @@ bus_driver_handle_release_service (DBusConnection *connection, - return retval; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_service_exists (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -880,7 +885,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, - BusService *service; - dbus_bool_t service_exists; - const char *name; -- dbus_bool_t retval; -+ BusResult retval; - BusRegistry *registry; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -890,9 +895,9 @@ bus_driver_handle_service_exists (DBusConnection *connection, - if (!dbus_message_get_args (message, error, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_INVALID)) -- return FALSE; -+ return BUS_RESULT_FALSE; - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - - if (strcmp (name, DBUS_SERVICE_DBUS) == 0) - { -@@ -926,7 +931,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, - goto out; - } - -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out: - if (reply) -@@ -935,7 +940,7 @@ bus_driver_handle_service_exists (DBusConnection *connection, - return retval; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_activate_service (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -943,7 +948,7 @@ bus_driver_handle_activate_service (DBusConnection *connection, - { - dbus_uint32_t flags; - const char *name; -- dbus_bool_t retval; -+ BusResult retval; - BusActivation *activation; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -957,10 +962,10 @@ bus_driver_handle_activate_service (DBusConnection *connection, - { - _DBUS_ASSERT_ERROR_IS_SET (error); - _dbus_verbose ("No memory to get arguments to StartServiceByName\n"); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - - if (!bus_activation_activate_service (activation, connection, transaction, FALSE, - message, name, error)) -@@ -970,7 +975,7 @@ bus_driver_handle_activate_service (DBusConnection *connection, - goto out; - } - -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out: - return retval; -@@ -1072,13 +1077,13 @@ bus_driver_send_or_activate (BusTransaction *transaction, - return TRUE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_update_activation_environment (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error) - { -- dbus_bool_t retval; -+ BusResult retval; - BusActivation *activation; - BusContext *context; - DBusMessageIter iter; -@@ -1100,7 +1105,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, - dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, - "Cannot change activation environment " - "on a system bus."); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - activation = bus_connection_get_activation (connection); -@@ -1114,7 +1119,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, - - dbus_message_iter_recurse (&iter, &dict_iter); - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - systemd_message = NULL; - - /* Then loop through the sent dictionary, add the location of -@@ -1279,7 +1284,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, - if (!bus_driver_send_ack_reply (connection, transaction, message, error)) - goto out; - -- retval = TRUE; -+ retval = BUS_RESULT_TRUE; - - out: - if (systemd_message != NULL) -@@ -1289,7 +1294,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection, - return retval; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_add_match (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1371,16 +1376,16 @@ bus_driver_handle_add_match (DBusConnection *connection, - - bus_match_rule_unref (rule); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - failed: - _DBUS_ASSERT_ERROR_IS_SET (error); - if (rule) - bus_match_rule_unref (rule); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_remove_match (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1423,16 +1428,16 @@ bus_driver_handle_remove_match (DBusConnection *connection, - - bus_match_rule_unref (rule); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - failed: - _DBUS_ASSERT_ERROR_IS_SET (error); - if (rule) - bus_match_rule_unref (rule); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_service_owner (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1502,7 +1507,7 @@ bus_driver_handle_get_service_owner (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1511,10 +1516,10 @@ bus_driver_handle_get_service_owner (DBusConnection *connection, - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_list_queued_owners (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1606,7 +1611,7 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1619,10 +1624,10 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection, - if (base_names) - _dbus_list_clear (&base_names); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_connection_unix_user (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1679,7 +1684,7 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1688,10 +1693,10 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection, - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1748,7 +1753,7 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1757,10 +1762,10 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1811,7 +1816,7 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1820,10 +1825,10 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1872,7 +1877,7 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -1881,10 +1886,10 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_connection_credentials (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -1998,7 +2003,7 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection, - - dbus_message_unref (reply); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -2012,10 +2017,10 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection, - dbus_message_unref (reply); - } - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_reload_config (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2040,7 +2045,7 @@ bus_driver_handle_reload_config (DBusConnection *connection, - goto oom; - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -2049,11 +2054,11 @@ bus_driver_handle_reload_config (DBusConnection *connection, - _DBUS_ASSERT_ERROR_IS_SET (error); - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - #ifdef DBUS_ENABLE_VERBOSE_MODE --static dbus_bool_t -+static BusResult - bus_driver_handle_enable_verbose (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2073,7 +2078,7 @@ bus_driver_handle_enable_verbose (DBusConnection *connection, - _dbus_set_verbose(TRUE); - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -2082,10 +2087,10 @@ bus_driver_handle_enable_verbose (DBusConnection *connection, - - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_disable_verbose (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2105,7 +2110,7 @@ bus_driver_handle_disable_verbose (DBusConnection *connection, - _dbus_set_verbose(FALSE); - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -2114,11 +2119,11 @@ bus_driver_handle_disable_verbose (DBusConnection *connection, - - if (reply) - dbus_message_unref (reply); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - #endif - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_id (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2134,7 +2139,7 @@ bus_driver_handle_get_id (DBusConnection *connection, - if (!_dbus_string_init (&uuid)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - reply = NULL; -@@ -2160,7 +2165,7 @@ bus_driver_handle_get_id (DBusConnection *connection, - - _dbus_string_free (&uuid); - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -2170,10 +2175,10 @@ bus_driver_handle_get_id (DBusConnection *connection, - if (reply) - dbus_message_unref (reply); - _dbus_string_free (&uuid); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_become_monitor (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2189,7 +2194,7 @@ bus_driver_handle_become_monitor (DBusConnection *connection, - int i; - int n_match_rules; - dbus_uint32_t flags; -- dbus_bool_t ret = FALSE; -+ BusResult ret = BUS_RESULT_FALSE; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - -@@ -2262,10 +2267,10 @@ bus_driver_handle_become_monitor (DBusConnection *connection, - if (!bus_connection_be_monitor (connection, transaction, &rules, error)) - goto out; - -- ret = TRUE; -+ ret = BUS_RESULT_TRUE; - - out: -- if (ret) -+ if (ret == BUS_RESULT_TRUE) - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - else - _DBUS_ASSERT_ERROR_IS_SET (error); -@@ -2281,7 +2286,7 @@ out: - return ret; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_machine_id (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2296,7 +2301,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection, - if (!_dbus_string_init (&uuid)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!_dbus_get_local_machine_uuid_encoded (&uuid, error)) -@@ -2321,7 +2326,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection, - - _dbus_string_free (&uuid); - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - _DBUS_ASSERT_ERROR_IS_CLEAR (error); -@@ -2335,29 +2340,30 @@ fail: - dbus_message_unref (reply); - - _dbus_string_free (&uuid); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_ping (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error) - { -- return bus_driver_send_ack_reply (connection, transaction, message, error); -+ return bus_driver_send_ack_reply (connection, transaction, message, error) == TRUE -+ ? BUS_RESULT_TRUE : BUS_RESULT_FALSE; - } - --static dbus_bool_t bus_driver_handle_get (DBusConnection *connection, -+static BusResult bus_driver_handle_get (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); - --static dbus_bool_t bus_driver_handle_get_all (DBusConnection *connection, -+static BusResult bus_driver_handle_get_all (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); - --static dbus_bool_t bus_driver_handle_set (DBusConnection *connection, -+static BusResult bus_driver_handle_set (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); -@@ -2389,10 +2395,10 @@ typedef struct - const char *name; - const char *in_args; - const char *out_args; -- dbus_bool_t (* handler) (DBusConnection *connection, -- BusTransaction *transaction, -- DBusMessage *message, -- DBusError *error); -+ BusResult (* handler) (DBusConnection *connection, -+ BusTransaction *transaction, -+ DBusMessage *message, -+ DBusError *error); - MethodFlags flags; - } MessageHandler; - -@@ -2511,7 +2517,7 @@ static const PropertyHandler dbus_property_handlers[] = { - { NULL, NULL, NULL } - }; - --static dbus_bool_t bus_driver_handle_introspect (DBusConnection *, -+static BusResult bus_driver_handle_introspect (DBusConnection *, - BusTransaction *, DBusMessage *, DBusError *); - - static const MessageHandler properties_message_handlers[] = { -@@ -2763,7 +2769,7 @@ bus_driver_generate_introspect_string (DBusString *xml, - return TRUE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_introspect (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2784,13 +2790,13 @@ bus_driver_handle_introspect (DBusConnection *connection, - DBUS_TYPE_INVALID)) - { - _DBUS_ASSERT_ERROR_IS_SET (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - if (!_dbus_string_init (&xml)) - { - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - is_canonical_path = dbus_message_has_path (message, DBUS_PATH_DBUS); -@@ -2815,7 +2821,7 @@ bus_driver_handle_introspect (DBusConnection *connection, - dbus_message_unref (reply); - _dbus_string_free (&xml); - -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -2825,10 +2831,42 @@ bus_driver_handle_introspect (DBusConnection *connection, - - _dbus_string_free (&xml); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - -+/* -+ * Set @error and return FALSE if the message is not directed to the -+ * dbus-daemon by its canonical object path. This is hardening against -+ * system services with poorly-written security policy files, which -+ * might allow sending dangerously broad equivalence classes of messages -+ * such as "anything with this assumed-to-be-safe object path". -+ * -+ * dbus-daemon is unusual in that it normally ignores the object path -+ * of incoming messages; we need to keep that behaviour for the "read" -+ * read-only method calls like GetConnectionUnixUser for backwards -+ * compatibility, but it seems safer to be more restrictive for things -+ * intended to be root-only or privileged-developers-only. -+ * -+ * It is possible that there are other system services with the same -+ * quirk as dbus-daemon. -+ */ - dbus_bool_t -+bus_driver_check_message_is_for_us (DBusMessage *message, -+ DBusError *error) -+{ -+ if (!dbus_message_has_path (message, DBUS_PATH_DBUS)) -+ { -+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, -+ "Method '%s' is only available at the canonical object path '%s'", -+ dbus_message_get_member (message), DBUS_PATH_DBUS); -+ -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+BusResult - bus_driver_handle_message (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -2839,6 +2877,7 @@ bus_driver_handle_message (DBusConnection *connection, - const MessageHandler *mh; - dbus_bool_t found_interface = FALSE; - dbus_bool_t is_canonical_path; -+ BusResult res; - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - -@@ -2854,7 +2893,7 @@ bus_driver_handle_message (DBusConnection *connection, - transaction, - message, - error)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - context = bus_connection_get_context (connection); - systemd = bus_driver_get_owner_of_name (connection, -@@ -2871,7 +2910,7 @@ bus_driver_handle_message (DBusConnection *connection, - attacker ? attacker : "(unauthenticated)", - bus_connection_get_loginfo (connection)); - /* ignore it */ -- return TRUE; -+ return BUS_RESULT_TRUE; - } - - if (!bus_context_get_systemd_activation (context)) -@@ -2879,16 +2918,16 @@ bus_driver_handle_message (DBusConnection *connection, - bus_context_log (context, DBUS_SYSTEM_LOG_WARNING, - "Ignoring unexpected ActivationFailure message " - "while not using systemd activation"); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - -- return dbus_activation_systemd_failure(bus_context_get_activation(context), message); -+ return dbus_activation_systemd_failure(bus_context_get_activation(context), message) == TRUE ? BUS_RESULT_TRUE : BUS_RESULT_FALSE; - } - - if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) - { - _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); -- return TRUE; /* we just ignore this */ -+ return BUS_RESULT_TRUE; /* we just ignore this */ - } - - /* may be NULL, which means "any interface will do" */ -@@ -2953,20 +2992,27 @@ bus_driver_handle_message (DBusConnection *connection, - name, dbus_message_get_signature (message), - mh->in_args); - _DBUS_ASSERT_ERROR_IS_SET (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - -- if ((* mh->handler) (connection, transaction, message, error)) -+ res = (* mh->handler) (connection, transaction, message, error); -+ if (res == BUS_RESULT_TRUE) - { - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - _dbus_verbose ("Driver handler succeeded\n"); -- return TRUE; -+ return BUS_RESULT_TRUE; - } -- else -+ else if (res == BUS_RESULT_FALSE) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - _dbus_verbose ("Driver handler returned failure\n"); -- return FALSE; -+ return BUS_RESULT_FALSE; -+ } -+ else if (res == BUS_RESULT_LATER) -+ { -+ _DBUS_ASSERT_ERROR_IS_CLEAR (error); -+ _dbus_verbose ("Driver handler delayed message processing due to policy check\n"); -+ return BUS_RESULT_LATER; - } - } - } -@@ -2978,7 +3024,7 @@ bus_driver_handle_message (DBusConnection *connection, - "%s does not understand message %s", - DBUS_SERVICE_DBUS, name); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - void -@@ -3099,7 +3145,7 @@ interface_handler_find_property (const InterfaceHandler *ih, - return NULL; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -3120,18 +3166,18 @@ bus_driver_handle_get (DBusConnection *connection, - DBUS_TYPE_STRING, &iface, - DBUS_TYPE_STRING, &prop, - DBUS_TYPE_INVALID)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - /* We only implement Properties on /org/freedesktop/DBus so far. */ - ih = bus_driver_find_interface (iface, TRUE, error); - - if (ih == NULL) -- return FALSE; -+ return BUS_RESULT_FALSE; - - handler = interface_handler_find_property (ih, prop, error); - - if (handler == NULL) -- return FALSE; -+ return BUS_RESULT_FALSE; - - context = bus_transaction_get_context (transaction); - -@@ -3159,17 +3205,17 @@ bus_driver_handle_get (DBusConnection *connection, - goto oom; - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - if (reply != NULL) - dbus_message_unref (reply); - - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_get_all (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -3188,13 +3234,13 @@ bus_driver_handle_get_all (DBusConnection *connection, - if (!dbus_message_get_args (message, error, - DBUS_TYPE_STRING, &iface, - DBUS_TYPE_INVALID)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - /* We only implement Properties on /org/freedesktop/DBus so far. */ - ih = bus_driver_find_interface (iface, TRUE, error); - - if (ih == NULL) -- return FALSE; -+ return BUS_RESULT_FALSE; - - context = bus_transaction_get_context (transaction); - -@@ -3229,7 +3275,7 @@ bus_driver_handle_get_all (DBusConnection *connection, - goto oom; - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom_abandon_message: - _dbus_asv_abandon (&reply_iter, &array_iter); -@@ -3239,10 +3285,10 @@ oom: - dbus_message_unref (reply); - - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --static dbus_bool_t -+static BusResult - bus_driver_handle_set (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -3271,15 +3317,15 @@ bus_driver_handle_set (DBusConnection *connection, - ih = bus_driver_find_interface (iface, TRUE, error); - - if (ih == NULL) -- return FALSE; -+ return BUS_RESULT_FALSE; - - handler = interface_handler_find_property (ih, prop, error); - - if (handler == NULL) -- return FALSE; -+ return BUS_RESULT_FALSE; - - /* We don't implement any properties that can be set yet. */ - dbus_set_error (error, DBUS_ERROR_PROPERTY_READ_ONLY, - "Property '%s.%s' cannot be set", iface, prop); -- return FALSE; -+ return BUS_RESULT_FALSE; - } -diff --git a/bus/driver.h b/bus/driver.h -index a7297ad..05e9886 100644 ---- a/bus/driver.h -+++ b/bus/driver.h -@@ -35,7 +35,7 @@ typedef enum - } BusDriverFound; - - void bus_driver_remove_connection (DBusConnection *connection); --dbus_bool_t bus_driver_handle_message (DBusConnection *connection, -+BusResult bus_driver_handle_message (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); -diff --git a/bus/policy.c b/bus/policy.c -index 483cc97..f6f4d85 100644 ---- a/bus/policy.c -+++ b/bus/policy.c -@@ -1390,18 +1390,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy, - - - --static dbus_bool_t -+static BusResult - bus_rules_check_can_own (DBusList *rules, -- const DBusString *service_name) -+ const DBusString *service_name, -+ DBusConnection *connection, -+ DBusMessage *message) - { - DBusList *link; -- dbus_bool_t allowed; -+ BusResult result; -+ const char *privilege; - - /* rules is in the order the rules appeared - * in the config file, i.e. last rule that applies wins - */ - -- allowed = FALSE; -+ result = BUS_RESULT_FALSE; - link = _dbus_list_get_first_link (&rules); - while (link != NULL) - { -@@ -1437,17 +1440,46 @@ bus_rules_check_can_own (DBusList *rules, - } - - /* Use this rule */ -- allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW; -+ switch (rule->access) -+ { -+ case BUS_POLICY_RULE_ACCESS_ALLOW: -+ result = BUS_RESULT_TRUE; -+ break; -+ default: -+ case BUS_POLICY_RULE_ACCESS_DENY: -+ result = BUS_RESULT_FALSE; -+ break; -+ case BUS_POLICY_RULE_ACCESS_CHECK: -+ result = BUS_RESULT_LATER; -+ privilege = rule->privilege; -+ break; -+ } - } - -- return allowed; -+ if (result == BUS_RESULT_LATER) -+ { -+ BusContext *context = bus_connection_get_context(connection); -+ BusCheck *check = bus_context_get_check(context); -+ BusDeferredMessage *deferred_message; -+ -+ result = bus_check_privilege(check, message, connection, NULL, NULL, -+ privilege, BUS_DEFERRED_MESSAGE_CHECK_OWN, &deferred_message); -+ if (result == BUS_RESULT_LATER) -+ { -+ bus_deferred_message_disable_sender(deferred_message); -+ } -+ } -+ -+ return result; - } - --dbus_bool_t -+BusResult - bus_client_policy_check_can_own (BusClientPolicy *policy, -- const DBusString *service_name) -+ const DBusString *service_name, -+ DBusConnection *connection, -+ DBusMessage *message) - { -- return bus_rules_check_can_own (policy->rules, service_name); -+ return bus_rules_check_can_own (policy->rules, service_name, connection, message); - } - - #ifdef DBUS_ENABLE_EMBEDDED_TESTS -@@ -1455,7 +1487,7 @@ dbus_bool_t - bus_policy_check_can_own (BusPolicy *policy, - const DBusString *service_name) - { -- return bus_rules_check_can_own (policy->default_rules, service_name); -+ return bus_rules_check_can_own (policy->default_rules, service_name, NULL, NULL) == BUS_RESULT_TRUE; - } - #endif /* DBUS_ENABLE_EMBEDDED_TESTS */ - -diff --git a/bus/policy.h b/bus/policy.h -index f839d23..28ce8f2 100644 ---- a/bus/policy.h -+++ b/bus/policy.h -@@ -182,8 +182,10 @@ BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy, - dbus_int32_t *toggles, - const char **privilege_param, - BusDeferredMessage **deferred_message); --dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy, -- const DBusString *service_name); -+BusResult bus_client_policy_check_can_own (BusClientPolicy *policy, -+ const DBusString *service_name, -+ DBusConnection *connection, -+ DBusMessage *message); - dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy, - BusPolicyRule *rule); - void bus_client_policy_optimize (BusClientPolicy *policy); -diff --git a/bus/services.c b/bus/services.c -index 127edda..586af18 100644 ---- a/bus/services.c -+++ b/bus/services.c -@@ -376,16 +376,17 @@ bus_registry_list_services (BusRegistry *registry, - return FALSE; - } - --dbus_bool_t -+BusResult - bus_registry_acquire_service (BusRegistry *registry, - DBusConnection *connection, -+ DBusMessage *message, - const DBusString *service_name, - dbus_uint32_t flags, - dbus_uint32_t *result, - BusTransaction *transaction, - DBusError *error) - { -- dbus_bool_t retval; -+ BusResult retval; - DBusConnection *old_owner_conn; - BusClientPolicy *policy; - BusService *service; -@@ -393,8 +394,9 @@ bus_registry_acquire_service (BusRegistry *registry, - BusSELinuxID *sid; - BusOwner *primary_owner; - int limit; -+ BusResult res; - -- retval = FALSE; -+ retval = BUS_RESULT_FALSE; - - if (!_dbus_validate_bus_name (service_name, 0, - _dbus_string_get_length (service_name))) -@@ -467,7 +469,8 @@ bus_registry_acquire_service (BusRegistry *registry, - _dbus_string_get_const_data (service_name), error)) - goto out; - -- if (!bus_client_policy_check_can_own (policy, service_name)) -+ res = bus_client_policy_check_can_own (policy, service_name, connection, message); -+ if (res == BUS_RESULT_FALSE) - { - dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, - "Connection \"%s\" is not allowed to own the service \"%s\" due " -@@ -478,6 +481,11 @@ bus_registry_acquire_service (BusRegistry *registry, - _dbus_string_get_const_data (service_name)); - goto out; - } -+ else if (res == BUS_RESULT_LATER) -+ { -+ retval = BUS_RESULT_LATER; -+ goto out; -+ } - - limit = bus_context_get_max_services_per_connection (registry->context); - -@@ -603,11 +611,13 @@ bus_registry_acquire_service (BusRegistry *registry, - } - - activation = bus_context_get_activation (registry->context); -- retval = bus_activation_send_pending_auto_activation_messages (activation, -+ -+ if (bus_activation_send_pending_auto_activation_messages (activation, - service, -- transaction); -- if (!retval) -- BUS_SET_OOM (error); -+ transaction)) -+ retval = BUS_RESULT_TRUE; -+ else -+ BUS_SET_OOM (error); - - out: - return retval; -diff --git a/bus/services.h b/bus/services.h -index 056dd9f..3df3dd7 100644 ---- a/bus/services.h -+++ b/bus/services.h -@@ -50,8 +50,9 @@ void bus_registry_foreach (BusRegistry *registry - dbus_bool_t bus_registry_list_services (BusRegistry *registry, - char ***listp, - int *array_len); --dbus_bool_t bus_registry_acquire_service (BusRegistry *registry, -+BusResult bus_registry_acquire_service (BusRegistry *registry, - DBusConnection *connection, -+ DBusMessage *message, - const DBusString *service_name, - dbus_uint32_t flags, - dbus_uint32_t *result, -diff --git a/bus/stats.c b/bus/stats.c -index 1582255..c25be98 100644 ---- a/bus/stats.c -+++ b/bus/stats.c -@@ -36,7 +36,7 @@ - - #ifdef DBUS_ENABLE_STATS - --dbus_bool_t -+BusResult - bus_stats_handle_get_stats (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -51,6 +51,9 @@ bus_stats_handle_get_stats (DBusConnection *connection, - - _DBUS_ASSERT_ERROR_IS_CLEAR (error); - -+ if (!bus_driver_check_message_is_for_us (message, error)) -+ return BUS_RESULT_FALSE; -+ - context = bus_transaction_get_context (transaction); - connections = bus_context_get_connections (context); - -@@ -104,17 +107,17 @@ bus_stats_handle_get_stats (DBusConnection *connection, - goto oom; - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - if (reply != NULL) - dbus_message_unref (reply); - - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - --dbus_bool_t -+BusResult - bus_stats_handle_get_connection_stats (DBusConnection *caller_connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -209,7 +212,7 @@ bus_stats_handle_get_connection_stats (DBusConnection *caller_connection, - goto oom; - - dbus_message_unref (reply); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - BUS_SET_OOM (error); -@@ -218,11 +221,11 @@ failed: - if (reply != NULL) - dbus_message_unref (reply); - -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - --dbus_bool_t -+BusResult - bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, - BusTransaction *transaction, - DBusMessage *message, -@@ -246,7 +249,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, - matchmaker = bus_context_get_matchmaker (context); - - if (!bus_registry_list_services (registry, &services, &services_len)) -- return FALSE; -+ return BUS_RESULT_FALSE; - - reply = dbus_message_new_method_return (message); - if (reply == NULL) -@@ -325,7 +328,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, - - dbus_message_unref (reply); - dbus_free_string_array (services); -- return TRUE; -+ return BUS_RESULT_TRUE; - - oom: - if (reply != NULL) -@@ -334,7 +337,7 @@ oom: - dbus_free_string_array (services); - - BUS_SET_OOM (error); -- return FALSE; -+ return BUS_RESULT_FALSE; - } - - #endif -diff --git a/bus/stats.h b/bus/stats.h -index dcb022c..683fa17 100644 ---- a/bus/stats.h -+++ b/bus/stats.h -@@ -25,17 +25,17 @@ - - #define BUS_INTERFACE_STATS "org.freedesktop.DBus.Debug.Stats" - --dbus_bool_t bus_stats_handle_get_stats (DBusConnection *connection, -+BusResult bus_stats_handle_get_stats (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); - --dbus_bool_t bus_stats_handle_get_connection_stats (DBusConnection *connection, -+BusResult bus_stats_handle_get_connection_stats (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); - --dbus_bool_t bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, -+BusResult bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error); --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch deleted file mode 100644 index 5f7e96a3b..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch +++ /dev/null @@ -1,180 +0,0 @@ -From 1f7ba56c9ced669951061d13b06e31d96a170e37 Mon Sep 17 00:00:00 2001 -From: Jacek Bukarewicz -Date: Tue, 23 Jun 2015 11:08:48 +0200 -Subject: [PATCH 5/8] Perform Cynara runtime policy checks by default -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This change introduces http://tizen.org/privilege/internal/dbus privilege -which is supposed to be available only to trusted system resources. -Checks for this privilege are used in place of certain allow rules to -make security policy more strict. - -For system bus sending and receiving signals now requires -http://tizen.org/privilege/internal/dbus privilege. Requesting name -ownership and sending methods is still denied by default. - -For session bus http://tizen.org/privilege/internal/dbus privilege -is now required for requesting name, calling methods, sending and receiving -signals. - -Services are supposed to override these default settings to implement their -own security policy. - -Cherry picked from e8610297cf7031e94eb314a2e8c11246f4405403 by Jose Bollo - -Updated for dbus 1.10.20 by Scott Murray and José Bollo - -Signed-off-by: Jacek Bukarewicz -Signed-off-by: José Bollo -Signed-off-by: Scott Murray ---- - bus/activation.c | 42 ++++++++++++++++++++++++++---------------- - bus/session.conf.in | 32 ++++++++++++++++++++++++++------ - bus/system.conf.in | 19 +++++++++++++++---- - 3 files changed, 67 insertions(+), 26 deletions(-) - -diff --git a/bus/activation.c b/bus/activation.c -index d4b597c..8aabeaa 100644 ---- a/bus/activation.c -+++ b/bus/activation.c -@@ -1840,22 +1840,32 @@ bus_activation_activate_service (BusActivation *activation, - } - - if (auto_activation && -- entry != NULL && -- BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context, -- transaction, -- connection, /* sender */ -- NULL, /* addressed recipient */ -- NULL, /* proposed recipient */ -- activation_message, -- entry, -- error, -- NULL)) -- { -- _DBUS_ASSERT_ERROR_IS_SET (error); -- _dbus_verbose ("activation not authorized: %s: %s\n", -- error != NULL ? error->name : "(error ignored)", -- error != NULL ? error->message : "(error ignored)"); -- return FALSE; -+ entry != NULL) -+ { -+ BusResult result; -+ -+ result = bus_context_check_security_policy (activation->context, -+ transaction, -+ connection, /* sender */ -+ NULL, /* addressed recipient */ -+ NULL, /* proposed recipient */ -+ activation_message, -+ entry, -+ error, -+ NULL); -+ if (result == BUS_RESULT_FALSE) -+ { -+ _DBUS_ASSERT_ERROR_IS_SET (error); -+ _dbus_verbose ("activation not authorized: %s: %s\n", -+ error != NULL ? error->name : "(error ignored)", -+ error != NULL ? error->message : "(error ignored)"); -+ return FALSE; -+ } -+ if (result == BUS_RESULT_LATER) -+ { -+ /* TODO */ -+ _dbus_verbose ("ALERT FIX ME!!!!!!!!!!!!!!!"); -+ } - } - - /* Bypass the registry lookup if we're auto-activating, bus_dispatch would not -diff --git a/bus/session.conf.in b/bus/session.conf.in -index affa7f1..157dfb4 100644 ---- a/bus/session.conf.in -+++ b/bus/session.conf.in -@@ -27,12 +27,32 @@ - - - -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -diff --git a/bus/system.conf.in b/bus/system.conf.in -index f139b55..19d0c04 100644 ---- a/bus/system.conf.in -+++ b/bus/system.conf.in -@@ -50,17 +50,20 @@ - - - -- -+ -+ -+ -+ -- - - - -- -+ - - - -- - - - - -+ -+ -+ - - -Date: Fri, 16 Aug 2019 13:29:23 +0200 -Subject: [PATCH 6/8] Fix SIGSEGV on disconnections -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Sometime, at start of the system, dbus-daemon was crashing -because a pending authorisation were reactivating a closed -connection. - -Also, clean unused function. - -Signed-off-by: José Bollo ---- - bus/check.c | 5 +++++ - bus/check.h | 1 + - bus/connection.c | 14 +++----------- - bus/connection.h | 3 --- - 4 files changed, 9 insertions(+), 14 deletions(-) - -diff --git a/bus/check.c b/bus/check.c -index f3d283f..b73d08b 100644 ---- a/bus/check.c -+++ b/bus/check.c -@@ -617,3 +617,8 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message, - } - } - -+void -+bus_deferred_message_abort (BusDeferredMessage *deferred_message) -+{ -+ deferred_message->response_callback = NULL; -+} -diff --git a/bus/check.h b/bus/check.h -index 9c13c18..d718a69 100644 ---- a/bus/check.h -+++ b/bus/check.h -@@ -93,6 +93,7 @@ void bus_deferred_message_set_policy_check_info (BusDeferredMessa - const char *privilege); - dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, - DBusError *error); -+void bus_deferred_message_abort (BusDeferredMessage *deferred_message); - - - #ifdef DBUS_ENABLE_EMBEDDED_TESTS -diff --git a/bus/connection.c b/bus/connection.c -index ee93384..b520d57 100644 ---- a/bus/connection.c -+++ b/bus/connection.c -@@ -47,6 +47,7 @@ - #define MAX_LOG_COMMAND_LEN 50 - - static void bus_connection_remove_transactions (DBusConnection *connection); -+static void bus_connection_clear_deferred_messages (DBusConnection *connection); - - typedef struct - { -@@ -2821,17 +2822,7 @@ bus_connection_pop_deferred_message (DBusConnection *connection) - return NULL; - } - --dbus_bool_t --bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message) --{ -- BusConnectionData *d = BUS_CONNECTION_DATA(connection); -- if (_dbus_list_prepend(&d->deferred_messages, message)) -- { -- return TRUE; -- } -- return FALSE; --} -- -+static - void - bus_connection_clear_deferred_messages (DBusConnection *connection) - { -@@ -2846,6 +2837,7 @@ bus_connection_clear_deferred_messages (DBusConnection *connection) - next = _dbus_list_get_next_link (&d->deferred_messages, link); - message = link->data; - -+ bus_deferred_message_abort(message); - bus_deferred_message_unref(message); - _dbus_list_remove_link(&d->deferred_messages, link); - -diff --git a/bus/connection.h b/bus/connection.h -index 97dae96..6af7bf1 100644 ---- a/bus/connection.h -+++ b/bus/connection.h -@@ -90,15 +90,12 @@ dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *con - BusDeferredMessage *message, - dbus_bool_t prepend); - BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection); --dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection, -- BusDeferredMessage *message); - void bus_connection_remove_deferred_message (DBusConnection *connection, - BusDeferredMessage *message); - dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection, - BusDeferredMessage *oldMessage, - BusDeferredMessage *newMessage); - void bus_connection_dispatch_deferred (DBusConnection *connection); --void bus_connection_clear_deferred_messages (DBusConnection *connection); - - - /* called by signals.c */ --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch deleted file mode 100644 index 7a69efcd2..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch +++ /dev/null @@ -1,1048 +0,0 @@ -From 43cc361a5c32c81c0f93451bdb0ef781cd19a1cb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Tue, 4 Feb 2020 12:23:36 +0100 -Subject: [PATCH 7/8] Switch from cynara to cynagora -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: José Bollo ---- - bus/Makefile.am | 8 +- - bus/bus.h | 2 +- - bus/check.c | 26 +- - bus/check.h | 2 +- - bus/connection.c | 27 --- - bus/connection.h | 3 - - bus/cynagora-check.c | 330 +++++++++++++++++++++++++ - bus/{cynara.h => cynagora-check.h} | 10 +- - bus/cynara.c | 373 ----------------------------- - bus/system.conf.in | 6 +- - configure.ac | 18 +- - 11 files changed, 366 insertions(+), 439 deletions(-) - create mode 100644 bus/cynagora-check.c - rename bus/{cynara.h => cynagora-check.h} (81%) - delete mode 100644 bus/cynara.c - -diff --git a/bus/Makefile.am b/bus/Makefile.am -index 2a8a72c..1720048 100644 ---- a/bus/Makefile.am -+++ b/bus/Makefile.am -@@ -13,7 +13,7 @@ DBUS_BUS_LIBS = \ - $(THREAD_LIBS) \ - $(ADT_LIBS) \ - $(NETWORK_libs) \ -- $(CYNARA_LIBS) \ -+ $(CYNAGORA_LIBS) \ - $(NULL) - - DBUS_LAUNCHER_LIBS = \ -@@ -31,7 +31,7 @@ AM_CPPFLAGS = \ - $(APPARMOR_CFLAGS) \ - -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \ - -DDBUS_COMPILATION \ -- $(CYNARA_CFLAGS) \ -+ $(CYNAGORA_CFLAGS) \ - $(NULL) - - # if assertions are enabled, improve backtraces -@@ -101,8 +101,8 @@ BUS_SOURCES= \ - config-parser-common.h \ - connection.c \ - connection.h \ -- cynara.c \ -- cynara.h \ -+ cynagora-check.c \ -+ cynagora-check.h \ - desktop-file.c \ - desktop-file.h \ - $(DIR_WATCH_SOURCE) \ -diff --git a/bus/bus.h b/bus/bus.h -index 1b08f7c..e167d9e 100644 ---- a/bus/bus.h -+++ b/bus/bus.h -@@ -47,7 +47,7 @@ typedef struct BusMatchRule BusMatchRule; - typedef struct BusActivationEntry BusActivationEntry; - typedef struct BusCheck BusCheck; - typedef struct BusDeferredMessage BusDeferredMessage; --typedef struct BusCynara BusCynara; -+typedef struct BusCynagora BusCynagora; - - /** - * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches. -diff --git a/bus/check.c b/bus/check.c -index b73d08b..ec30770 100644 ---- a/bus/check.c -+++ b/bus/check.c -@@ -26,7 +26,7 @@ - #include "check.h" - #include "connection.h" - #include "dispatch.h" --#include "cynara.h" -+#include "cynagora-check.h" - #include "utils.h" - #include - #include -@@ -38,7 +38,7 @@ typedef struct BusCheck - int refcount; - - BusContext *context; -- BusCynara *cynara; -+ BusCynagora *cynagora; - } BusCheck; - - typedef struct BusDeferredMessage -@@ -81,7 +81,7 @@ bus_check_new (BusContext *context, DBusError *error) - - check->refcount = 1; - check->context = context; -- check->cynara = bus_cynara_new(check, error); -+ check->cynagora = bus_cynagora_new(check, error); - if (dbus_error_is_set(error)) - { - dbus_message_free_data_slot(&deferred_message_data_slot); -@@ -110,7 +110,7 @@ bus_check_unref (BusCheck *check) - - if (check->refcount == 0) - { -- bus_cynara_unref(check->cynara); -+ bus_cynagora_unref(check->cynagora); - dbus_message_free_data_slot(&deferred_message_data_slot); - dbus_free(check); - } -@@ -122,10 +122,10 @@ bus_check_get_context (BusCheck *check) - return check->context; - } - --BusCynara * --bus_check_get_cynara (BusCheck *check) -+BusCynagora * -+bus_check_get_cynagora (BusCheck *check) - { -- return check->cynara; -+ return check->cynagora; - } - - static void -@@ -276,8 +276,8 @@ bus_check_privilege (BusCheck *check, - { - BusDeferredMessage *previous_deferred_message; - BusResult result = BUS_RESULT_FALSE; --#ifdef DBUS_ENABLE_CYNARA -- BusCynara *cynara; -+#ifdef DBUS_ENABLE_CYNAGORA -+ BusCynagora *cynagora; - #endif - DBusConnection *connection; - -@@ -304,7 +304,7 @@ bus_check_privilege (BusCheck *check, - * Message has been deferred due to receive or own rule which means that sending this message - * is allowed - it must have been checked previously. - * This might happen when client calls RequestName method which depending on security -- * policy might result in both "can_send" and "can_own" Cynara checks. -+ * policy might result in both "can_send" and "can_own" Cynagora checks. - */ - result = BUS_RESULT_TRUE; - } -@@ -327,9 +327,9 @@ bus_check_privilege (BusCheck *check, - else - { - /* ask policy checkers */ --#ifdef DBUS_ENABLE_CYNARA -- cynara = bus_check_get_cynara(check); -- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient, -+#ifdef DBUS_ENABLE_CYNAGORA -+ cynagora = bus_check_get_cynagora(check); -+ result = bus_cynagora_check_privilege(cynagora, message, sender, addressed_recipient, - proposed_recipient, privilege, check_type, deferred_message); - #endif - if (result == BUS_RESULT_LATER && deferred_message != NULL) -diff --git a/bus/check.h b/bus/check.h -index d718a69..ab63c18 100644 ---- a/bus/check.h -+++ b/bus/check.h -@@ -45,7 +45,7 @@ BusCheck *bus_check_ref (BusCheck *check); - void bus_check_unref (BusCheck *check); - - BusContext *bus_check_get_context (BusCheck *check); --BusCynara *bus_check_get_cynara (BusCheck *check); -+BusCynagora *bus_check_get_cynagora (BusCheck *check); - BusResult bus_check_privilege (BusCheck *check, - DBusMessage *message, - DBusConnection *sender, -diff --git a/bus/connection.c b/bus/connection.c -index b520d57..48910e0 100644 ---- a/bus/connection.c -+++ b/bus/connection.c -@@ -38,10 +38,6 @@ - #include - #include - #include --#ifdef DBUS_ENABLE_CYNARA --#include --#include --#endif - - /* Trim executed commands to this length; we want to keep logs readable */ - #define MAX_LOG_COMMAND_LEN 50 -@@ -124,9 +120,6 @@ typedef struct - - /** non-NULL if and only if this is a monitor */ - DBusList *link_in_monitors; --#ifdef DBUS_ENABLE_CYNARA -- char *cynara_session_id; --#endif - } BusConnectionData; - - static dbus_bool_t bus_pending_reply_expired (BusExpireList *list, -@@ -461,10 +454,6 @@ free_connection_data (void *data) - - dbus_free (d->name); - --#ifdef DBUS_ENABLE_CYNARA -- free (d->cynara_session_id); --#endif -- - dbus_free (d); - } - -@@ -1095,22 +1084,6 @@ bus_connection_get_policy (DBusConnection *connection) - return d->policy; - } - --#ifdef DBUS_ENABLE_CYNARA --const char *bus_connection_get_cynara_session_id (DBusConnection *connection) --{ -- BusConnectionData *d = BUS_CONNECTION_DATA (connection); -- _dbus_assert (d != NULL); -- -- if (d->cynara_session_id == NULL) -- { -- unsigned long pid; -- if (dbus_connection_get_unix_process_id(connection, &pid)) -- d->cynara_session_id = cynara_session_from_pid(pid); -- } -- return d->cynara_session_id; --} --#endif -- - static dbus_bool_t - foreach_active (BusConnections *connections, - BusConnectionForeachFunction function, -diff --git a/bus/connection.h b/bus/connection.h -index 6af7bf1..3116bcf 100644 ---- a/bus/connection.h -+++ b/bus/connection.h -@@ -138,9 +138,6 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection, - BusTransaction *transaction, - DBusList **rules, - DBusError *error); --#ifdef DBUS_ENABLE_CYNARA --const char *bus_connection_get_cynara_session_id (DBusConnection *connection); --#endif - - /* transaction API so we can send or not send a block of messages as a whole */ - -diff --git a/bus/cynagora-check.c b/bus/cynagora-check.c -new file mode 100644 -index 0000000..6c0c635 ---- /dev/null -+++ b/bus/cynagora-check.c -@@ -0,0 +1,330 @@ -+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -+/* cynagora.c Cynagora runtime privilege checking -+ * -+ * Copyright (c) 2014 Samsung Electronics, Ltd. -+ * -+ * Licensed under the Academic Free License version 2.1 -+ * -+ * 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 -+ * -+ */ -+ -+#include -+#include "cynagora-check.h" -+#include "check.h" -+#include "utils.h" -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#ifndef DBUS_ENABLE_CYNAGORA -+ -+BusCynagora * -+bus_cynagora_new(BusCheck *check, DBusError *error) -+{ -+ return NULL; -+} -+ -+BusCynagora * -+bus_cynagora_ref (BusCynagora *cynagora) -+{ -+ return NULL; -+} -+ -+void -+bus_cynagora_unref (BusCynagora *cynagora) -+{ -+} -+ -+BusResult -+bus_cynagora_check_privilege (BusCynagora *cynagora, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *privilege, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message_param) -+{ -+ return BUS_RESULT_FALSE; -+} -+ -+#endif -+ -+#ifdef DBUS_ENABLE_CYNAGORA -+ -+#include -+#include -+ -+#include -+ -+#ifndef CYNAGORA_CACHE_SIZE -+#define CYNAGORA_CACHE_SIZE 8000 -+#endif -+ -+typedef struct BusCynagora -+{ -+ int refcount; -+ -+ BusContext *context; -+ BusCheck *check; -+ cynagora_t *cynagora; -+ DBusWatch *cynagora_watch; -+} BusCynagora; -+ -+static int async_callback(void *closure, -+ int op, -+ int fd, -+ uint32_t events); -+ -+BusCynagora * -+bus_cynagora_new(BusCheck *check, DBusError *error) -+{ -+ BusContext *context; -+ BusCynagora *cynagora; -+ int ret; -+ -+ cynagora = dbus_new(BusCynagora, 1); -+ if (cynagora == NULL) -+ { -+ BUS_SET_OOM(error); -+ return NULL; -+ } -+ -+ context = bus_check_get_context(check); -+ -+ cynagora->refcount = 1; -+ cynagora->check = check; -+ cynagora->context = context; -+ cynagora->cynagora_watch = NULL; -+ -+ ret = cynagora_create(&cynagora->cynagora, cynagora_Check, CYNAGORA_CACHE_SIZE, NULL); -+ if (ret < 0) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynagora configuration"); -+ } -+ else -+ { -+ ret = cynagora_async_setup(cynagora->cynagora, async_callback, cynagora); -+ if (ret < 0) -+ { -+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynagora client"); -+ } -+ else -+ { -+ return cynagora; -+ } -+ cynagora_destroy(cynagora->cynagora); -+ } -+ -+ dbus_free(cynagora); -+ return NULL; -+} -+ -+BusCynagora * -+bus_cynagora_ref (BusCynagora *cynagora) -+{ -+ _dbus_assert (cynagora->refcount > 0); -+ cynagora->refcount += 1; -+ -+ return cynagora; -+} -+ -+void -+bus_cynagora_unref (BusCynagora *cynagora) -+{ -+ _dbus_assert (cynagora->refcount > 0); -+ -+ cynagora->refcount -= 1; -+ -+ if (cynagora->refcount == 0) -+ { -+ cynagora_destroy(cynagora->cynagora); -+ dbus_free(cynagora); -+ } -+} -+ -+static void -+async_check_callback (void *closure, int status) -+{ -+ BusDeferredMessage *deferred_message = closure; -+ BusResult result; -+ -+ if (deferred_message == NULL) -+ return; -+ -+ if (status == 1) -+ result = BUS_RESULT_TRUE; -+ else -+ result = BUS_RESULT_FALSE; -+ -+ bus_deferred_message_response_received(deferred_message, result); -+ bus_deferred_message_unref(deferred_message); -+} -+ -+BusResult -+bus_cynagora_check_privilege (BusCynagora *cynagora, -+ DBusMessage *message, -+ DBusConnection *sender, -+ DBusConnection *addressed_recipient, -+ DBusConnection *proposed_recipient, -+ const char *permission, -+ BusDeferredMessageStatus check_type, -+ BusDeferredMessage **deferred_message_param) -+{ -+ int result; -+ unsigned long uid; -+ unsigned long pid; -+ char *label; -+ char user[32]; -+ char session[32]; -+ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; -+ BusDeferredMessage *deferred_message; -+ BusResult ret; -+ cynagora_key_t key; -+ -+ _dbus_assert(connection != NULL); -+ -+ if (dbus_connection_get_unix_user(connection, &uid) == FALSE) -+ return BUS_RESULT_FALSE; -+ -+ if (dbus_connection_get_unix_process_id(connection, &pid) == FALSE) -+ return BUS_RESULT_FALSE; -+ -+ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) -+ { -+ _dbus_warn("Failed to obtain security label for connection\n"); -+ return BUS_RESULT_FALSE; -+ } -+ -+ snprintf(user, sizeof(user), "%lu", uid); -+ snprintf(session, sizeof(session), "%lu", pid); -+ -+ key.client = label; -+ key.session = session; -+ key.user = user; -+ key.permission = permission; -+ -+ result = cynagora_cache_check(cynagora->cynagora, &key); -+ switch (result) -+ { -+ case 1: -+ _dbus_verbose("Cynagora: got ALLOWED answer from cache (client=%s session_id=%s user=%s permission=%s)\n", -+ label, session_id, user, permission); -+ ret = BUS_RESULT_TRUE; -+ break; -+ -+ case 0: -+ _dbus_verbose("Cynagora: got DENIED answer from cache (client=%s session_id=%s user=%s permission=%s)\n", -+ label, session_id, user, permission); -+ ret = BUS_RESULT_FALSE; -+ break; -+ -+ default: -+ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, -+ proposed_recipient, BUS_RESULT_LATER); -+ if (deferred_message == NULL) -+ { -+ _dbus_verbose("Failed to allocate memory for deferred message\n"); -+ ret = BUS_RESULT_FALSE; -+ goto out; -+ } -+ -+ /* callback is supposed to unref deferred_message*/ -+ result = cynagora_async_check(cynagora->cynagora, &key, 1, 0, async_check_callback, deferred_message); -+ if (result == 0) -+ { -+ _dbus_verbose("Created Cynagora request: client=%s session_id=%s user=%s permission=%s " -+ "deferred_message=%p\n", label, session_id, user, permission, deferred_message); -+ if (deferred_message_param != NULL) -+ *deferred_message_param = deferred_message; -+ ret = BUS_RESULT_LATER; -+ } -+ else -+ { -+ _dbus_verbose("Error on cynagora request create: %i\n", result); -+ bus_deferred_message_unref(deferred_message); -+ ret = BUS_RESULT_FALSE; -+ } -+ break; -+ } -+out: -+ dbus_free(label); -+ return ret; -+} -+ -+static dbus_bool_t -+watch_handler_callback(DBusWatch *watch, -+ unsigned int flags, -+ void *data) -+{ -+ BusCynagora *cynagora = (BusCynagora *)data; -+ int result = cynagora_async_process(cynagora->cynagora); -+ if (result < 0) -+ _dbus_verbose("cynagora_async_process returned %d\n", result); -+ -+ return result != -ENOMEM ? TRUE : FALSE; -+} -+ -+static int -+async_callback(void *closure, int op, int fd, uint32_t events) -+{ -+ BusCynagora *cynagora = (BusCynagora *)closure; -+ DBusLoop *loop = bus_context_get_loop(cynagora->context); -+ unsigned int flags; -+ DBusWatch *watch; -+ -+ /* compute flags */ -+ flags = 0; -+ if (events & EPOLLIN) -+ flags |= DBUS_WATCH_READABLE; -+ if (events & EPOLLOUT) -+ flags |= DBUS_WATCH_WRITABLE; -+ -+ /* remove the watch if needed */ -+ watch = cynagora->cynagora_watch; -+ if (watch != NULL) -+ { -+ cynagora->cynagora_watch = NULL; -+ _dbus_loop_remove_watch(loop, watch); -+ _dbus_watch_invalidate(watch); -+ _dbus_watch_unref(watch); -+ } -+ -+ /* create the watch if needed */ -+ watch = cynagora->cynagora_watch; -+ if (op != EPOLL_CTL_DEL) -+ { -+ watch = _dbus_watch_new(fd, flags, TRUE, watch_handler_callback, cynagora, NULL); -+ if (watch == NULL) -+ return -ENOMEM; -+ if (_dbus_loop_add_watch(loop, watch) != TRUE) -+ { -+ _dbus_watch_invalidate(watch); -+ _dbus_watch_unref(watch); -+ return -ENOMEM; -+ } -+ cynagora->cynagora_watch = watch; -+ } -+ return 0; -+} -+ -+#endif /* DBUS_ENABLE_CYNAGORA */ -diff --git a/bus/cynara.h b/bus/cynagora-check.h -similarity index 81% -rename from bus/cynara.h -rename to bus/cynagora-check.h -index c4728bb..c0892c3 100644 ---- a/bus/cynara.h -+++ b/bus/cynagora-check.h -@@ -1,5 +1,5 @@ - /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ --/* cynara.h Cynara runtime privilege checking -+/* cynagora.h Cynagora runtime privilege checking - * - * Copyright (c) 2014 Samsung Electronics, Ltd. - * -@@ -24,10 +24,10 @@ - #include "bus.h" - #include "check.h" - --BusCynara *bus_cynara_new (BusCheck *check, DBusError *error); --BusCynara *bus_cynara_ref (BusCynara *cynara); --void bus_cynara_unref (BusCynara *cynara); --BusResult bus_cynara_check_privilege (BusCynara *cynara, -+BusCynagora *bus_cynagora_new (BusCheck *check, DBusError *error); -+BusCynagora *bus_cynagora_ref (BusCynagora *cynagora); -+void bus_cynagora_unref (BusCynagora *cynagora); -+BusResult bus_cynagora_check_privilege (BusCynagora *cynagora, - DBusMessage *message, - DBusConnection *sender, - DBusConnection *addressed_recipient, -diff --git a/bus/cynara.c b/bus/cynara.c -deleted file mode 100644 -index 77aed62..0000000 ---- a/bus/cynara.c -+++ /dev/null -@@ -1,373 +0,0 @@ --/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ --/* cynara.c Cynara runtime privilege checking -- * -- * Copyright (c) 2014 Samsung Electronics, Ltd. -- * -- * Licensed under the Academic Free License version 2.1 -- * -- * 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 -- * -- */ -- --#include --#include "cynara.h" --#include "check.h" --#include "utils.h" -- --#include -- --#include --#include --#include --#include --#ifdef DBUS_ENABLE_CYNARA --#include --#endif -- --#ifdef DBUS_ENABLE_CYNARA --typedef struct BusCynara --{ -- int refcount; -- -- BusContext *context; -- BusCheck *check; -- cynara_async *cynara; -- DBusWatch *cynara_watch; --} BusCynara; -- --#define USE_CYNARA_CACHE 1 --#ifdef USE_CYNARA_CACHE --#define CYNARA_CACHE_SIZE 1000 --#endif -- --static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch, -- unsigned int flags, -- void *data); -- --static void status_callback(int old_fd, -- int new_fd, -- cynara_async_status status, -- void *user_status_data); --static void bus_cynara_check_response_callback (cynara_check_id check_id, -- cynara_async_call_cause cause, -- int response, -- void *user_response_data); --#endif -- -- --BusCynara * --bus_cynara_new(BusCheck *check, DBusError *error) --{ --#ifdef DBUS_ENABLE_CYNARA -- BusContext *context; -- BusCynara *cynara; -- cynara_async_configuration *conf = NULL; -- int ret; -- -- cynara = dbus_new(BusCynara, 1); -- if (cynara == NULL) -- { -- BUS_SET_OOM(error); -- return NULL; -- } -- -- context = bus_check_get_context(check); -- -- cynara->refcount = 1; -- cynara->check = check; -- cynara->context = context; -- cynara->cynara_watch = NULL; -- -- ret = cynara_async_configuration_create(&conf); -- if (ret != CYNARA_API_SUCCESS) -- { -- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration"); -- goto out; -- } -- --#ifdef CYNARA_CACHE_SIZE -- ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE); -- if (ret != CYNARA_API_SUCCESS) -- { -- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size"); -- goto out; -- } --#endif -- -- ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara); -- if (ret != CYNARA_API_SUCCESS) -- { -- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client"); -- goto out; -- } -- --out: -- cynara_async_configuration_destroy(conf); -- if (ret != CYNARA_API_SUCCESS) -- { -- dbus_free(cynara); -- return NULL; -- } -- -- return cynara; --#else -- return NULL; --#endif --} -- --BusCynara * --bus_cynara_ref (BusCynara *cynara) --{ --#ifdef DBUS_ENABLE_CYNARA -- _dbus_assert (cynara->refcount > 0); -- cynara->refcount += 1; -- -- return cynara; --#else -- return NULL; --#endif --} -- --void --bus_cynara_unref (BusCynara *cynara) --{ --#ifdef DBUS_ENABLE_CYNARA -- _dbus_assert (cynara->refcount > 0); -- -- cynara->refcount -= 1; -- -- if (cynara->refcount == 0) -- { -- cynara_async_finish(cynara->cynara); -- dbus_free(cynara); -- } --#endif --} -- --BusResult --bus_cynara_check_privilege (BusCynara *cynara, -- DBusMessage *message, -- DBusConnection *sender, -- DBusConnection *addressed_recipient, -- DBusConnection *proposed_recipient, -- const char *privilege, -- BusDeferredMessageStatus check_type, -- BusDeferredMessage **deferred_message_param) --{ --#ifdef DBUS_ENABLE_CYNARA -- int result; -- unsigned long uid; -- char *label; -- const char *session_id; -- char user[32]; -- cynara_check_id check_id; -- DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender; -- BusDeferredMessage *deferred_message; -- BusResult ret; -- -- _dbus_assert(connection != NULL); -- -- if (dbus_connection_get_unix_user(connection, &uid) == FALSE) -- return BUS_RESULT_FALSE; -- -- if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL) -- { -- _dbus_warn("Failed to obtain security label for connection\n"); -- return BUS_RESULT_FALSE; -- } -- -- session_id = bus_connection_get_cynara_session_id (connection); -- if (session_id == NULL) -- { -- ret = BUS_RESULT_FALSE; -- goto out; -- } -- -- snprintf(user, sizeof(user), "%lu", uid); -- --#if USE_CYNARA_CACHE -- result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege); --#else -- result = CYNARA_API_CACHE_MISS; --#endif -- -- switch (result) -- { -- case CYNARA_API_ACCESS_ALLOWED: -- _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", -- label, session_id, user, privilege); -- ret = BUS_RESULT_TRUE; -- break; -- -- case CYNARA_API_ACCESS_DENIED: -- _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n", -- label, session_id, user, privilege); -- ret = BUS_RESULT_FALSE; -- break; -- -- case CYNARA_API_CACHE_MISS: -- deferred_message = bus_deferred_message_new(message, sender, addressed_recipient, -- proposed_recipient, BUS_RESULT_LATER); -- if (deferred_message == NULL) -- { -- _dbus_verbose("Failed to allocate memory for deferred message\n"); -- ret = BUS_RESULT_FALSE; -- goto out; -- } -- -- /* callback is supposed to unref deferred_message*/ -- result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id, -- &bus_cynara_check_response_callback, deferred_message); -- if (result == CYNARA_API_SUCCESS) -- { -- _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u " -- "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message); -- if (deferred_message_param != NULL) -- *deferred_message_param = deferred_message; -- ret = BUS_RESULT_LATER; -- } -- else -- { -- _dbus_verbose("Error on cynara request create: %i\n", result); -- bus_deferred_message_unref(deferred_message); -- ret = BUS_RESULT_FALSE; -- } -- break; -- default: -- _dbus_verbose("Error when accessing Cynara cache: %i\n", result); -- ret = BUS_RESULT_FALSE; -- } --out: -- dbus_free(label); -- return ret; -- --#else -- return BUS_RESULT_FALSE; --#endif --} -- -- -- --#ifdef DBUS_ENABLE_CYNARA --static void --status_callback(int old_fd, int new_fd, cynara_async_status status, -- void *user_status_data) --{ -- BusCynara *cynara = (BusCynara *)user_status_data; -- DBusLoop *loop = bus_context_get_loop(cynara->context); -- -- if (cynara->cynara_watch != NULL) -- { -- _dbus_loop_remove_watch(loop, cynara->cynara_watch); -- _dbus_watch_invalidate(cynara->cynara_watch); -- _dbus_watch_unref(cynara->cynara_watch); -- cynara->cynara_watch = NULL; -- } -- -- if (new_fd != -1) -- { -- unsigned int flags; -- DBusWatch *watch; -- -- switch (status) -- { -- case CYNARA_STATUS_FOR_READ: -- flags = DBUS_WATCH_READABLE; -- break; -- case CYNARA_STATUS_FOR_RW: -- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; -- break; -- default: -- /* Cynara passed unknown status - warn and add RW watch */ -- _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status); -- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE; -- break; -- } -- -- watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL); -- if (watch != NULL) -- { -- if (_dbus_loop_add_watch(loop, watch) == TRUE) -- { -- cynara->cynara_watch = watch; -- return; -- } -- -- _dbus_watch_invalidate(watch); -- _dbus_watch_unref(watch); -- } -- -- /* It seems like not much can be done at this point. Cynara events won't be processed -- * until next Cynara function call triggering status callback */ -- _dbus_verbose("Failed to add dbus watch\n"); -- } --} -- --static dbus_bool_t --bus_cynara_watch_callback(DBusWatch *watch, -- unsigned int flags, -- void *data) --{ -- BusCynara *cynara = (BusCynara *)data; -- int result = cynara_async_process(cynara->cynara); -- if (result != CYNARA_API_SUCCESS) -- _dbus_verbose("cynara_async_process returned %d\n", result); -- -- return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE; --} -- --static inline const char * --call_cause_to_string(cynara_async_call_cause cause) --{ -- switch (cause) -- { -- case CYNARA_CALL_CAUSE_ANSWER: -- return "ANSWER"; -- case CYNARA_CALL_CAUSE_CANCEL: -- return "CANCEL"; -- case CYNARA_CALL_CAUSE_FINISH: -- return "FINSIH"; -- case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE: -- return "SERVICE NOT AVAILABLE"; -- default: -- return "INVALID"; -- } --} -- --static void --bus_cynara_check_response_callback (cynara_check_id check_id, -- cynara_async_call_cause cause, -- int response, -- void *user_response_data) --{ -- BusDeferredMessage *deferred_message = user_response_data; -- BusResult result; -- -- _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n", -- (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data); -- -- if (deferred_message == NULL) -- return; -- -- if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED) -- result = BUS_RESULT_TRUE; -- else -- result = BUS_RESULT_FALSE; -- -- bus_deferred_message_response_received(deferred_message, result); -- bus_deferred_message_unref(deferred_message); --} -- --#endif /* DBUS_ENABLE_CYNARA */ -diff --git a/bus/system.conf.in b/bus/system.conf.in -index 19d0c04..81c39c8 100644 ---- a/bus/system.conf.in -+++ b/bus/system.conf.in -@@ -72,10 +72,10 @@ - send_interface="org.freedesktop.DBus.Introspectable"/> - -- - -diff --git a/configure.ac b/configure.ac -index 11b5ffd..df9341c 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1742,16 +1742,16 @@ AC_ARG_ENABLE([user-session], - AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION], - [test "x$enable_user_session" = xyes]) - --#enable cynara integration --AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no]) --if test "x$enable_cynara" = xyes; then -- PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0], -- [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])], -- [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])]) -+#enable cynagora integration -+AC_ARG_ENABLE([cynagora], [AS_HELP_STRING([--enable-cynagora], [enable Cynagora integration])], [], [enable_cynagora=no]) -+if test "x$enable_cynagora" = xyes; then -+ PKG_CHECK_MODULES([CYNAGORA], [cynagora], -+ [AC_DEFINE([DBUS_ENABLE_CYNAGORA], [1], [Define to enable Cynagora privilege checks in dbus-daemon])], -+ [AC_MSG_ERROR([libcynagora is required to enable Cynagora integration])]) - fi - --AC_SUBST([CYNARA_CFLAGS]) --AC_SUBST([CYNARA_LIBS]) -+AC_SUBST([CYNAGORA_CFLAGS]) -+AC_SUBST([CYNAGORA_LIBS]) - - AC_CONFIG_FILES([ - Doxyfile -@@ -1835,7 +1835,7 @@ echo " - Building bus stats API: ${enable_stats} - Building SELinux support: ${have_selinux} - Building AppArmor support: ${have_apparmor} -- Building Cynara support: ${enable_cynara} -+ Building Cynagora support: ${enable_cynagora} - Building inotify support: ${have_inotify} - Building kqueue support: ${have_kqueue} - Building systemd support: ${have_systemd} --- -2.21.1 - diff --git a/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend b/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend deleted file mode 100644 index 177a117b8..000000000 --- a/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend +++ /dev/null @@ -1,15 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/dbus-cynagora:" - -SRC_URI_append_class-target = "\ - file://0001-Integration-of-Cynara-asynchronous-security-checks.patch \ - file://0002-Disable-message-dispatching-when-send-rule-result-is.patch \ - file://0003-Handle-unavailability-of-policy-results-for-broadcas.patch \ - file://0004-Add-own-rule-result-unavailability-handling.patch \ - file://0005-Perform-Cynara-runtime-policy-checks-by-default.patch \ - file://0006-Fix-SIGSEGV-on-disconnections.patch \ - file://0007-Switch-from-cynara-to-cynagora.patch \ -" - -DEPENDS_append_class-target = " cynagora smack" -EXTRA_OECONF_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','smack','--enable-cynagora --disable-selinux','',d)}" - diff --git a/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb b/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb deleted file mode 100644 index bc708600f..000000000 --- a/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb +++ /dev/null @@ -1,23 +0,0 @@ -SUMMARY = "Security middleware components" -LICENSE = "MIT" - -inherit packagegroup - -# Install Cynara and security-manager by default if (and only if) -# Smack is enabled. -# -# Cynara does not have a hard dependency on Smack security, -# but is meant to be used with it. security-manager however -# links against smack and expects Smack to be active, -# so we do not have any choice. -# -# Without configuration, security-manager is not usable. We use -# the policy packaged from the upstream source code here. Adapting -# it for the distro can be done by patching that source. -RDEPENDS_${PN}_append_with-lsm-smack = " \ - cynagora \ - security-manager \ - security-manager-policy \ - smacknet \ - smack-system-setup \ -" diff --git a/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules b/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules deleted file mode 100644 index eca65292f..000000000 --- a/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules +++ /dev/null @@ -1,27 +0,0 @@ -# do not edit this file, it will be overwritten on update - -KERNEL=="null", SECLABEL{smack}="*" -KERNEL=="zero", SECLABEL{smack}="*" -KERNEL=="console", SECLABEL{smack}="*" -KERNEL=="kmsg", SECLABEL{smack}="*" -KERNEL=="video*", SECLABEL{smack}="*" -KERNEL=="card*", SECLABEL{smack}="*" -KERNEL=="ptmx", SECLABEL{smack}="*" -KERNEL=="tty", SECLABEL{smack}="*" -KERNEL=="rfkill", SECLABEL{smack}="*" - -SUBSYSTEM=="most_cdev_aim", SECLABEL{smack}="*" - -SUBSYSTEM=="graphics", GROUP="video", SECLABEL{smack}="*" -SUBSYSTEM=="drm", GROUP="video", SECLABEL{smack}="*" -SUBSYSTEM=="dvb", GROUP="video", SECLABEL{smack}="*" -SUBSYSTEM=="sound", GROUP="audio", SECLABEL{smack}="*" - -SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666", SECLABEL{smack}="*" -SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666", SECLABEL{smack}="*" -SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", SECLABEL{smack}="*" -SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty", SECLABEL{smack}="*" -KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", SECLABEL{smack}="*" - -SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640", SECLABEL{smack}="*" -SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640", SECLABEL{smack}="*" diff --git a/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf b/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf deleted file mode 100644 index 7035a1410..000000000 --- a/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf +++ /dev/null @@ -1,16 +0,0 @@ -# Run systemd-journald with the hat ("^") Smack label. -# -# The journal daemon needs global read access to gather information -# about the services spawned by systemd. The hat label is intended -# for this purpose. The journal daemon is the only part of the -# System domain that needs read access to the User domain. Giving -# the journal daemon the hat label means that we can remove the -# System domain's read access to the User domain and we can avoid -# hard-coding a specific label name for that domain. -# -# Original author: Casey Schaufler -# -# This is considered a configuration change and thus distro specific. -[Service] -SmackProcessLabel=^ - diff --git a/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf b/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf deleted file mode 100644 index db43c8c51..000000000 --- a/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -ExecStartPost=/bin/sh -c '([ ! -d /var/tmp ] || chsmack -L -a \"*\" /var/tmp) && ([ ! -d /var/log ] || chsmack -L -a System::Log /var/log && chsmack -L -t /var/log)' diff --git a/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf b/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf deleted file mode 100644 index 388986e82..000000000 --- a/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf +++ /dev/null @@ -1,12 +0,0 @@ -# Mount /tmp publicly accessable. Based on patch by Michael Demeter . -# Upstream systemd temporarily had SmackFileSystemRoot for this (https://github.com/systemd/systemd/pull/1664), -# but it was removed again (https://github.com/systemd/systemd/issues/1696) because -# util-linux mount will ignore smackfsroot when Smack is not active. However, -# busybox is not that intelligent. -# -# When using busybox mount, adding smackfsroot=* and booting without -# Smack (i.e. security=none), tmp.mount will fail with an error about -# "Bad mount option smackfsroot". -[Mount] -Options=smackfsroot=* - diff --git a/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb b/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb deleted file mode 100644 index 49b12ad3f..000000000 --- a/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb +++ /dev/null @@ -1,28 +0,0 @@ -DESCRIPTION = "setup of a system using smack" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" - -SRC_URI = "\ - file://55-udev-smack-default.rules \ - file://systemd-journald.service.conf \ - file://systemd-tmpfiles-setup.service.conf \ - file://tmp.mount.conf \ -" - -RDEPENDS_${PN}_append_with-lsm-smack = " smack" - -do_install_append_with-lsm-smack() { - # tuning systemd units - install -Dm0644 ${WORKDIR}/systemd-tmpfiles-setup.service.conf \ - ${D}${systemd_unitdir}/system/systemd-tmpfiles-setup.service.d/smack.conf - install -Dm0644 ${WORKDIR}/systemd-journald.service.conf \ - ${D}${systemd_unitdir}/system/systemd-journald.service.d/smack.conf - install -Dm0644 ${WORKDIR}/tmp.mount.conf \ - ${D}${systemd_unitdir}/system/tmp.mount.d/smack.conf - - # add udev rules - install -Dm0644 ${WORKDIR}/55-udev-smack-default.rules \ - ${D}${sysconfdir}/udev/rules.d/55-udev-smack-default.rules -} - -FILES_${PN} += "${systemd_unitdir}" diff --git a/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch b/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch deleted file mode 100644 index 46445be73..000000000 --- a/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 6cc74075797edb6f698cb7f312bb1c3d8cc6cb28 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Thu, 12 Oct 2017 17:17:56 +0200 -Subject: [PATCH] Switch Smack label earlier -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Switching label after removing capability isn't -possible. - -Change-Id: Ib7dac8f071f36119520ed3205d743c1e3df3cd5e -Signed-off-by: José Bollo ---- - src/core/execute.c | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/src/core/execute.c b/src/core/execute.c -index d72e5bf08..0abffd569 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -2707,6 +2707,13 @@ static int exec_child( - } - } - -+ r = setup_smack(context, command); -+ if (r < 0) { -+ *exit_status = EXIT_SMACK_PROCESS_LABEL; -+ *error_message = strdup("Failed to set SMACK process label"); -+ return r; -+ } -+ - if (!cap_test_all(context->capability_bounding_set)) { - r = capability_bounding_set_drop(context->capability_bounding_set, false); - if (r < 0) { -@@ -2775,13 +2782,6 @@ static int exec_child( - } - #endif - -- r = setup_smack(context, command); -- if (r < 0) { -- *exit_status = EXIT_SMACK_PROCESS_LABEL; -- *error_message = strdup("Failed to set SMACK process label"); -- return r; -- } -- - #ifdef HAVE_APPARMOR - if (context->apparmor_profile && mac_apparmor_use()) { - r = aa_change_onexec(context->apparmor_profile); --- -2.14.3 - diff --git a/meta-security/recipes-core/systemd/systemd_2%.bbappend b/meta-security/recipes-core/systemd/systemd_2%.bbappend deleted file mode 100644 index 789c05f83..000000000 --- a/meta-security/recipes-core/systemd/systemd_2%.bbappend +++ /dev/null @@ -1,40 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -# Ensures systemd runs with label "System" -EXTRA_OEMESON_append_with-lsm-smack = " -Dsmack-run-label=System" - -################################################################################## -# Maintaining trivial, non-upstreamable configuration changes as patches -# is tedious. But in same cases (like early mounting of special directories) -# the configuration has to be in code. We make these changes here directly. -################################################################################## -do_patch[prefuncs] += "patch_systemd" -do_patch[vardeps] += "patch_systemd" -patch_systemd() { - # Handling of /run and /sys/fs/cgroup. Make /run a transmuting directory to - # enable systemd communications with services in the User domain. - # Original patch by Michael Demeter . - # - # We simplify the patching by touching only lines which check the result of - # mac_smack_use(). Those are the ones which are used when Smack is active. - # - # smackfsroot=* on /sys/fs/cgroup may be upstreamable, but smackfstransmute=System::Run - # is too distro specific (depends on Smack rules) and thus has to remain here. - sed -i -e 's;\("/sys/fs/cgroup", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfsroot=*\2;' \ - -e 's;\("/run", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfstransmute=System::Run\2;' \ - ${S}/src/core/mount-setup.c -} - -################################################################################## -# What follows is temporary. -# This is a solution to the Bug-AGL SPEC-539 -# (see https://jira.automotivelinux.org/browse/SPEC-539). -# -# It renames the file "touchscreen.rules" to "55-touchscreen.rules" -# This comes with the recipe systemd_230/234 of poky (meta/recipes-core/systemd) -# It should be removed when poky changes. -################################################################################## -do_install_prepend() { - mv ${WORKDIR}/touchscreen.rules ${WORKDIR}/55-touchscreen.rules || true -} - diff --git a/meta-security/recipes-core/util-linux/util-linux_%.bbappend b/meta-security/recipes-core/util-linux/util-linux_%.bbappend deleted file mode 100644 index 05286f80d..000000000 --- a/meta-security/recipes-core/util-linux/util-linux_%.bbappend +++ /dev/null @@ -1,8 +0,0 @@ -# Enabling Smack support in util-linux enables special support -# in [lib]mount for Smack mount options: they get removed if -# Smack is not active in the current kernel. Important for -# booting with "security=none" when userspace otherwise is -# compiled to use Smack. - -PACKAGECONFIG_append_with-lsm-smack_class-target = " smack" -PACKAGECONFIG[smack] = "--with-smack, --without-smack" diff --git a/meta-security/recipes-kernel/linux/linux-%.bbappend b/meta-security/recipes-kernel/linux/linux-%.bbappend deleted file mode 100644 index 717d32e3a..000000000 --- a/meta-security/recipes-kernel/linux/linux-%.bbappend +++ /dev/null @@ -1,17 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" - -IS_KERNEL_RECIPE := "${@bb.data.inherits_class('kernel', d) and 'yes' or 'no'}" -SMACK_KERNEL_SRC_URI_no = "" -SMACK_KERNEL_SRC_URI_yes = "" - -# Kernel config fragment enabling Smack, without making it the default explicitly. -SMACK_KERNEL_SRC_URI_yes += "file://smack.cfg" - -# When added, set Smack as the default LSM. -SMACK_DEFAULT_SECURITY_CFG = "file://smack-default-lsm.cfg" - -# Add it by default, can be overridden by changing this variable here. -SMACK_DEFAULT_SECURITY ??= "${SMACK_DEFAULT_SECURITY_CFG}" -SMACK_KERNEL_SRC_URI_yes += " ${SMACK_DEFAULT_SECURITY}" - -SRC_URI_append_with-lsm-smack = "${SMACK_KERNEL_SRC_URI_${IS_KERNEL_RECIPE}}" diff --git a/meta-security/recipes-kernel/linux/linux/audit.cfg b/meta-security/recipes-kernel/linux/linux/audit.cfg deleted file mode 100644 index 214dbe33f..000000000 --- a/meta-security/recipes-kernel/linux/linux/audit.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_AUDIT=y -CONFIG_AUDITSYSCALL=y diff --git a/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg b/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg deleted file mode 100644 index b5c48454e..000000000 --- a/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_DEFAULT_SECURITY="smack" -CONFIG_DEFAULT_SECURITY_SMACK=y diff --git a/meta-security/recipes-kernel/linux/linux/smack.cfg b/meta-security/recipes-kernel/linux/linux/smack.cfg deleted file mode 100644 index 45a92f148..000000000 --- a/meta-security/recipes-kernel/linux/linux/smack.cfg +++ /dev/null @@ -1,9 +0,0 @@ -CONFIG_IP_NF_SECURITY=m -CONFIG_IP6_NF_SECURITY=m -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT3_FS_SECURITY=y -CONFIG_EXT4_FS_SECURITY=y -CONFIG_SECURITY=y -CONFIG_SECURITY_SMACK=y -CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y -CONFIG_TMPFS_XATTR=y diff --git a/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch b/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch deleted file mode 100644 index 6e1827c08..000000000 --- a/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch +++ /dev/null @@ -1,42 +0,0 @@ -From df878b92e01f4d1c3de7f7d8229cea6a431509eb Mon Sep 17 00:00:00 2001 -From: Mingli Yu -Date: Wed, 19 Feb 2020 15:23:40 +0800 -Subject: [PATCH] lib/i386_table.h: add new syscall - -On 32bit system, -After upgrade glibc to 2.31 - # strace -o /tmp/test.log date -s 09:16:45 - # tail -f /tmp/test.log - close(3) = 0 - stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=114, ...}) = 0 - clock_settime64(CLOCK_REALTIME, {tv_sec=1582103805, tv_nsec=0}) = 0 - fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(0x4, 0x40), ...}) = 0 - ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0 - write(1, "Wed Feb 19 09:16:45 UTC 2020\n", 29) = 29 - close(1) = 0 - close(2) = 0 - exit_group(0) = ? - +++ exited with 0 +++ - -It means the clock_settime64 syscall is used, so -add the syscall. - -Upstream-Status: Submitted [https://github.com/linux-audit/audit-userspace/pull/116] - -Signed-off-by: Mingli Yu ---- - lib/i386_table.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/i386_table.h b/lib/i386_table.h -index 1a64c88..65fd4d9 100644 ---- a/lib/i386_table.h -+++ b/lib/i386_table.h -@@ -405,3 +405,4 @@ _S(383, "statx") - _S(384, "arch_prctl") - _S(385, "io_pgetevents") - _S(386, "rseq") -+_S(404, "clock_settime64") --- -2.7.4 - diff --git a/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch b/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch deleted file mode 100644 index bb6c61e80..000000000 --- a/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch +++ /dev/null @@ -1,133 +0,0 @@ -From bdcdc3dff4469aac88e718bd15958d5ed4b9392a Mon Sep 17 00:00:00 2001 -From: Steve Grubb -Date: Tue, 26 Feb 2019 18:33:33 -0500 -Subject: [PATCH] Add substitue functions for strndupa & rawmemchr - -Upstream-Status: Backport -[https://github.com/linux-audit/audit-userspace/commit/d579a08bb1cde71f939c13ac6b2261052ae9f77e] ---- - auparse/auparse.c | 12 +++++++++++- - auparse/interpret.c | 9 ++++++++- - configure.ac | 14 +++++++++++++- - src/ausearch-lol.c | 12 +++++++++++- - 4 files changed, 43 insertions(+), 4 deletions(-) - -diff --git a/auparse/auparse.c b/auparse/auparse.c -index 650db02..2e1c737 100644 ---- a/auparse/auparse.c -+++ b/auparse/auparse.c -@@ -1,5 +1,5 @@ - /* auparse.c -- -- * Copyright 2006-08,2012-17 Red Hat Inc., Durham, North Carolina. -+ * Copyright 2006-08,2012-19 Red Hat Inc., Durham, North Carolina. - * All Rights Reserved. - * - * This library is free software; you can redistribute it and/or -@@ -1118,6 +1118,16 @@ static int str2event(char *s, au_event_t *e) - return 0; - } - -+#ifndef HAVE_STRNDUPA -+static inline char *strndupa(const char *old, size_t n) -+{ -+ size_t len = strnlen(old, n); -+ char *tmp = alloca(len + 1); -+ tmp[len] = 0; -+ return memcpy(tmp, old, len); -+} -+#endif -+ - /* Returns 0 on success and 1 on error */ - static int extract_timestamp(const char *b, au_event_t *e) - { -diff --git a/auparse/interpret.c b/auparse/interpret.c -index 51c4a5e..67b7b77 100644 ---- a/auparse/interpret.c -+++ b/auparse/interpret.c -@@ -853,6 +853,13 @@ err_out: - return print_escaped(id->val); - } - -+// rawmemchr is faster. Let's use it if we have it. -+#ifdef HAVE_RAWMEMCHR -+#define STRCHR rawmemchr -+#else -+#define STRCHR strchr -+#endif -+ - static const char *print_proctitle(const char *val) - { - char *out = (char *)print_escaped(val); -@@ -863,7 +870,7 @@ static const char *print_proctitle(const char *val) - // Proctitle has arguments separated by NUL bytes - // We need to write over the NUL bytes with a space - // so that we can see the arguments -- while ((ptr = rawmemchr(ptr, '\0'))) { -+ while ((ptr = STRCHR(ptr, '\0'))) { - if (ptr >= end) - break; - *ptr = ' '; -diff --git a/configure.ac b/configure.ac -index 54bdbf1..aef07fb 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1,7 +1,7 @@ - dnl - define([AC_INIT_NOTICE], - [### Generated automatically using autoconf version] AC_ACVERSION [ --### Copyright 2005-18 Steve Grubb -+### Copyright 2005-19 Steve Grubb - ### - ### Permission is hereby granted, free of charge, to any person obtaining a - ### copy of this software and associated documentation files (the "Software"), -@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote - AC_CHECK_FUNCS([posix_fallocate]) - dnl; signalfd is needed for libev - AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ]) -+dnl; check if rawmemchr is available -+AC_CHECK_FUNCS([rawmemchr]) -+dnl; check if strndupa is available -+AC_LINK_IFELSE( -+ [AC_LANG_SOURCE( -+ [[ -+ #define _GNU_SOURCE -+ #include -+ int main() { (void) strndupa("test", 10); return 0; }]])], -+ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])], -+ [] -+) - - ALLWARNS="" - ALLDEBUG="-g" -diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c -index 5d17a72..758c33e 100644 ---- a/src/ausearch-lol.c -+++ b/src/ausearch-lol.c -@@ -1,6 +1,6 @@ - /* - * ausearch-lol.c - linked list of linked lists library --* Copyright (c) 2008,2010,2014,2016 Red Hat Inc., Durham, North Carolina. -+* Copyright (c) 2008,2010,2014,2016,2019 Red Hat Inc., Durham, North Carolina. - * All Rights Reserved. - * - * This software may be freely redistributed and/or modified under the -@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2) - return 0; - } - -+#ifndef HAVE_STRNDUPA -+static inline char *strndupa(const char *old, size_t n) -+{ -+ size_t len = strnlen(old, n); -+ char *tmp = alloca(len + 1); -+ tmp[len] = 0; -+ return memcpy(tmp, old, len); -+} -+#endif -+ - /* - * This function will look at the line and pick out pieces of it. - */ --- -2.7.4 - diff --git a/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch b/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch deleted file mode 100644 index 7c2699540..000000000 --- a/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch +++ /dev/null @@ -1,57 +0,0 @@ -From a07271f1cce82122610b622bcea4a8a37528f321 Mon Sep 17 00:00:00 2001 -From: Li xin -Date: Sun, 19 Jul 2015 02:42:58 +0900 -Subject: [PATCH] audit: Fixed swig host contamination issue - -The audit build uses swig to generate a python wrapper. -Unfortunately, the swig info file references host include -directories. Some of these were previously noticed and -eliminated, but the one fixed here was not. - -Upstream-Status: Inappropriate [embedded specific] - -Signed-off-by: Anders Hedlund -Signed-off-by: Joe Slater -Signed-off-by: Yi Zhao ---- - bindings/swig/python3/Makefile.am | 3 ++- - bindings/swig/src/auditswig.i | 2 +- - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/bindings/swig/python3/Makefile.am b/bindings/swig/python3/Makefile.am -index 9938418..fa46aac 100644 ---- a/bindings/swig/python3/Makefile.am -+++ b/bindings/swig/python3/Makefile.am -@@ -22,6 +22,7 @@ - CONFIG_CLEAN_FILES = *.loT *.rej *.orig - AM_CFLAGS = -fPIC -DPIC -fno-strict-aliasing $(PYTHON3_CFLAGS) - AM_CPPFLAGS = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES) -+STDINC ?= /usr/include - LIBS = $(top_builddir)/lib/libaudit.la - SWIG_FLAGS = -python -py3 -modern - SWIG_INCLUDES = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES) -@@ -37,7 +38,7 @@ _audit_la_DEPENDENCIES =${top_srcdir}/lib/libaudit.h ${top_builddir}/lib/libaudi - _audit_la_LIBADD = ${top_builddir}/lib/libaudit.la - nodist__audit_la_SOURCES = audit_wrap.c - audit.py audit_wrap.c: ${srcdir}/../src/auditswig.i -- swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} ${srcdir}/../src/auditswig.i -+ swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} -I$(STDINC) ${srcdir}/../src/auditswig.i - - CLEANFILES = audit.py* audit_wrap.c *~ - -diff --git a/bindings/swig/src/auditswig.i b/bindings/swig/src/auditswig.i -index 7ebb373..424fb68 100644 ---- a/bindings/swig/src/auditswig.i -+++ b/bindings/swig/src/auditswig.i -@@ -39,7 +39,7 @@ signed - #define __attribute(X) /*nothing*/ - typedef unsigned __u32; - typedef unsigned uid_t; --%include "/usr/include/linux/audit.h" -+%include "linux/audit.h" - #define __extension__ /*nothing*/ - #include - %include "../lib/libaudit.h" --- -2.7.4 - diff --git a/meta-security/recipes-security/audit/audit/audit-volatile.conf b/meta-security/recipes-security/audit/audit/audit-volatile.conf deleted file mode 100644 index 9cbe1547a..000000000 --- a/meta-security/recipes-security/audit/audit/audit-volatile.conf +++ /dev/null @@ -1 +0,0 @@ -d /var/log/audit 0750 root root - diff --git a/meta-security/recipes-security/audit/audit/auditd b/meta-security/recipes-security/audit/audit/auditd deleted file mode 100755 index cda2e43d4..000000000 --- a/meta-security/recipes-security/audit/audit/auditd +++ /dev/null @@ -1,153 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: auditd -# Required-Start: $local_fs -# Required-Stop: $local_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Audit Daemon -# Description: Collects audit information from Linux 2.6 Kernels. -### END INIT INFO - -# Author: Philipp Matthias Hahn -# Based on Debians /etc/init.d/skeleton and Auditds init.d/auditd.init - -# June, 2012: Adopted for yocto - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/bin:/usr/sbin:/usr/bin -DESC="audit daemon" -NAME=auditd -DAEMON=/sbin/auditd -PIDFILE=/var/run/"$NAME".pid -SCRIPTNAME=/etc/init.d/"$NAME" - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME" - -. /etc/default/rcS - -. /etc/init.d/functions - -# -# Function that starts the daemon/service -# -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null \ - || return 1 - start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- \ - $EXTRAOPTIONS \ - || return 2 - if [ -f /etc/audit/audit.rules ] - then - /sbin/auditctl -R /etc/audit/audit.rules >/dev/null - fi -} - -# -# Function that stops the daemon/service -# -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - # other if a failure occurred - start-stop-daemon -K --quiet --pidfile "$PIDFILE" --name "$NAME" - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - # Many daemons don't delete their pidfiles when they exit. - rm -f "$PIDFILE" - rm -f /var/run/audit_events - # Remove watches so shutdown works cleanly - case "$AUDITD_CLEAN_STOP" in - no|NO) ;; - *) /sbin/auditctl -D >/dev/null ;; - esac - return "$RETVAL" -} - -# -# Function that sends a SIGHUP to the daemon/service -# -do_reload() { - start-stop-daemon -K --signal HUP --quiet --pidfile $PIDFILE --name $NAME - return 0 -} - -if [ ! -e /var/log/audit ]; then - mkdir -p /var/log/audit - [ -x /sbin/restorecon ] && /sbin/restorecon -F /var/log/audit -fi - -case "$1" in - start) - [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && echo 0 ;; - 2) [ "$VERBOSE" != no ] && echo 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && echo 0 ;; - 2) [ "$VERBOSE" != no ] && echo 1 ;; - esac - ;; - reload|force-reload) - echo "Reloading $DESC" "$NAME" - do_reload - echo $? - ;; - restart) - echo "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) echo 0 ;; - 1) echo 1 ;; # Old process is still running - *) echo 1 ;; # Failed to start - esac - ;; - *) - # Failed to stop - echo 1 - ;; - esac - ;; - rotate) - echo "Rotating $DESC logs" "$NAME" - start-stop-daemon -K --signal USR1 --quiet --pidfile "$PIDFILE" --name "$NAME" - echo $? - ;; - status) - pidofproc "$DAEMON" >/dev/null - status=$? - if [ $status -eq 0 ]; then - echo "$NAME is running." - else - echo "$NAME is not running." - fi - exit $status - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|rotate|status}" >&2 - exit 3 - ;; -esac - -: diff --git a/meta-security/recipes-security/audit/audit/auditd.service b/meta-security/recipes-security/audit/audit/auditd.service deleted file mode 100644 index ebc079897..000000000 --- a/meta-security/recipes-security/audit/audit/auditd.service +++ /dev/null @@ -1,20 +0,0 @@ -[Unit] -Description=Security Auditing Service -DefaultDependencies=no -After=local-fs.target -Conflicts=shutdown.target -Before=sysinit.target shutdown.target -After=systemd-tmpfiles-setup.service - -[Service] -ExecStart=/sbin/auditd -n -## To use augenrules, copy this file to /etc/systemd/system/auditd.service -## and uncomment the next line and delete/comment out the auditctl line. -## Then copy existing rules to /etc/audit/rules.d/ -## Not doing this last step can cause loss of existing rules -#ExecStartPost=-/sbin/augenrules --load -ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules -ExecReload=/bin/kill -HUP $MAINPID - -[Install] -WantedBy=multi-user.target diff --git a/meta-security/recipes-security/audit/audit_2.8.5.bb b/meta-security/recipes-security/audit/audit_2.8.5.bb deleted file mode 100644 index af36ed5e2..000000000 --- a/meta-security/recipes-security/audit/audit_2.8.5.bb +++ /dev/null @@ -1,106 +0,0 @@ -SUMMARY = "User space tools for kernel auditing" -DESCRIPTION = "The audit package contains the user space utilities for \ -storing and searching the audit records generated by the audit subsystem \ -in the Linux kernel." -HOMEPAGE = "http://people.redhat.com/sgrubb/audit/" -SECTION = "base" -LICENSE = "GPLv2+ & LGPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" - -SRC_URI = "git://github.com/linux-audit/${BPN}-userspace.git;branch=2.8_maintenance \ - file://Add-substitue-functions-for-strndupa-rawmemchr.patch \ - file://Fixed-swig-host-contamination-issue.patch \ - file://0001-lib-i386_table.h-add-new-syscall.patch \ - file://auditd \ - file://auditd.service \ - file://audit-volatile.conf \ -" - -S = "${WORKDIR}/git" -SRCREV = "5fae55c1ad15b3cefe6890eba7311af163e9133c" - -inherit autotools python3native update-rc.d systemd - -UPDATERCPN = "auditd" -INITSCRIPT_NAME = "auditd" -INITSCRIPT_PARAMS = "defaults" - -SYSTEMD_PACKAGES = "auditd" -SYSTEMD_SERVICE_auditd = "auditd.service" - -DEPENDS += "python3 tcp-wrappers libcap-ng linux-libc-headers swig-native" - -EXTRA_OECONF += "--without-prelude \ - --with-libwrap \ - --enable-gssapi-krb5=no \ - --with-libcap-ng=yes \ - --with-python3=yes \ - --libdir=${base_libdir} \ - --sbindir=${base_sbindir} \ - --without-python \ - --without-golang \ - --disable-zos-remote \ - " -EXTRA_OECONF_append_arm = " --with-arm=yes" -EXTRA_OECONF_append_aarch64 = " --with-aarch64=yes" - -EXTRA_OEMAKE += "PYLIBVER='python${PYTHON_BASEVERSION}' \ - PYINC='${STAGING_INCDIR}/$(PYLIBVER)' \ - pyexecdir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \ - STDINC='${STAGING_INCDIR}' \ - pkgconfigdir=${libdir}/pkgconfig \ - " - -SUMMARY_audispd-plugins = "Plugins for the audit event dispatcher" -DESCRIPTION_audispd-plugins = "The audispd-plugins package provides plugins for the real-time \ -interface to the audit system, audispd. These plugins can do things \ -like relay events to remote machines or analyze events for suspicious \ -behavior." - -PACKAGES =+ "audispd-plugins" -PACKAGES += "auditd ${PN}-python" - -FILES_${PN} = "${sysconfdir}/libaudit.conf ${base_libdir}/libaudit.so.1* ${base_libdir}/libauparse.so.*" -FILES_auditd += "${bindir}/* ${base_sbindir}/* ${sysconfdir}/*" -FILES_audispd-plugins += "${sysconfdir}/audisp/audisp-remote.conf \ - ${sysconfdir}/audisp/plugins.d/au-remote.conf \ - ${sbindir}/audisp-remote ${localstatedir}/spool/audit \ - " -FILES_${PN}-dbg += "${libdir}/python${PYTHON_BASEVERSION}/*/.debug" -FILES_${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}" - -CONFFILES_auditd += "${sysconfdir}/audit/audit.rules" -RDEPENDS_auditd += "bash" - -do_install_append() { - rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.a - rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.la - - # reuse auditd config - [ ! -e ${D}/etc/default ] && mkdir ${D}/etc/default - mv ${D}/etc/sysconfig/auditd ${D}/etc/default - rmdir ${D}/etc/sysconfig/ - - # replace init.d - install -D -m 0755 ${WORKDIR}/auditd ${D}/etc/init.d/auditd - rm -rf ${D}/etc/rc.d - - if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then - install -d ${D}${sysconfdir}/tmpfiles.d/ - install -m 0644 ${WORKDIR}/audit-volatile.conf ${D}${sysconfdir}/tmpfiles.d/ - fi - - # install systemd unit files - install -d ${D}${systemd_unitdir}/system - install -m 0644 ${WORKDIR}/auditd.service ${D}${systemd_unitdir}/system - - # audit-2.5 doesn't install any rules by default, so we do that here - mkdir -p ${D}/etc/audit ${D}/etc/audit/rules.d - cp ${S}/rules/10-base-config.rules ${D}/etc/audit/rules.d/audit.rules - - chmod 750 ${D}/etc/audit ${D}/etc/audit/rules.d - chmod 640 ${D}/etc/audit/auditd.conf ${D}/etc/audit/rules.d/audit.rules - - # Based on the audit.spec "Copy default rules into place on new installation" - cp ${D}/etc/audit/rules.d/audit.rules ${D}/etc/audit/audit.rules -} diff --git a/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb b/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb deleted file mode 100644 index c77c99189..000000000 --- a/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb +++ /dev/null @@ -1,23 +0,0 @@ -DESCRIPTION = "OAuth server using cynagora backend" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagoauth.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "26a5dbddf3a9bfde481a6fcd2aae16c7ecba665f" -PV = "0.1+git${SRCPV}" - -S = "${WORKDIR}/git" - -DEPENDS = "json-c libmicrohttpd openssl cynagora" - -inherit cmake - -EXTRA_OECMAKE += " \ - -DDEFAULTHOSTS=:7777 \ - -DDEFAULTURL=http://localhost:7777/tok \ - -DUNITDIR_SYSTEM=${systemd_system_unitdir} \ -" - -FILES_${PN} += "${systemd_system_unitdir}" - - diff --git a/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb b/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb deleted file mode 100644 index f146051cd..000000000 --- a/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.1.bb +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION = "Cynara service with client libraries" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "7d7907651c42c5c32deabc17b639e0e1765eae60" -PV = "2.1+git${SRCPV}" - -S = "${WORKDIR}/git" - -inherit cmake - -PROVIDES = "cynara" -RPROVIDES_${PN} = "cynara" -DEPENDS = "libcap" -RDEPENDS_${PN} = "cynagora" - -EXTRA_OECMAKE += " \ - -DWITH_SYSTEMD=OFF \ - -DWITH_CYNARA_COMPAT=ON \ - -DDIRECT_CYNARA_COMPAT=ON \ -" - -do_install_append() { - # remove cynagora stuff - rm $(find ${D} -name '*cynagora*') - # remove stupid test - rm -r ${D}${bindir} -} - diff --git a/meta-security/recipes-security/cynagora/cynagora/run-ptest b/meta-security/recipes-security/cynagora/cynagora/run-ptest deleted file mode 100755 index f95f0725b..000000000 --- a/meta-security/recipes-security/cynagora/cynagora/run-ptest +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# test access to cynagora server -cynagora-admin list > /dev/null diff --git a/meta-security/recipes-security/cynagora/cynagora_2.1.bb b/meta-security/recipes-security/cynagora/cynagora_2.1.bb deleted file mode 100644 index 73f2f0949..000000000 --- a/meta-security/recipes-security/cynagora/cynagora_2.1.bb +++ /dev/null @@ -1,38 +0,0 @@ -DESCRIPTION = "Cynagora service and client libraries" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" - -SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "7d7907651c42c5c32deabc17b639e0e1765eae60" -PV = "2.1+git${SRCPV}" - -S = "${WORKDIR}/git" - -DEPENDS = "systemd libcap" - -inherit cmake - -EXTRA_OECMAKE += " \ - -DSYSTEMD_UNIT_DIR=${systemd_system_unitdir} \ - -DWITH_SYSTEMD=ON \ - -DWITH_CYNARA_COMPAT=OFF \ -" - -inherit useradd -USERADD_PACKAGES = "${PN}" -GROUPADD_PARAM_${PN} = "-r cynagora" -USERADD_PARAM_${PN} = "\ ---system --home ${localstatedir}/lib/empty \ ---no-create-home --shell /bin/false \ ---gid cynagora cynagora \ -" - -FILES_${PN} += "${systemd_system_unitdir}" - -PACKAGES =+ "${PN}-tools" -FILES_${PN}-tools += "${bindir}/cynagora-admin ${bindir}/cynagora-agent" -RDEPENDS_${PN}_append_agl-devel = " ${PN}-tools" - -inherit ptest -SRC_URI_append = " file://run-ptest" -RDEPENDS_${PN}-ptest_append = " ${PN}-tools" diff --git a/meta-security/recipes-security/security-manager/security-manager.inc b/meta-security/recipes-security/security-manager/security-manager.inc deleted file mode 100644 index e1d1f4011..000000000 --- a/meta-security/recipes-security/security-manager/security-manager.inc +++ /dev/null @@ -1,83 +0,0 @@ -DESCRIPTION = "Security manager and utilities" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327;beginline=3" - -inherit cmake - -B = "${S}" - -DEPENDS = " \ - attr \ - boost \ - cynara \ - icu \ - libcap \ - smack \ - sqlite3 \ - systemd \ -" - -PACKAGECONFIG ??= "" -PACKAGECONFIG[debug] = "-DCMAKE_BUILD_TYPE=DEBUG,-DCMAKE_BUILD_TYPE=RELEASE" - -TZ_SYS_DB ?= "/var/db/security-manager" - -EXTRA_OECMAKE = " \ - -DCMAKE_VERBOSE_MAKEFILE=ON \ - -DVERSION=${PV} \ - -DSYSTEMD_INSTALL_DIR=${systemd_unitdir}/system \ - -DBIN_INSTALL_DIR=${bindir} \ - -DDB_INSTALL_DIR=${TZ_SYS_DB} \ - -DLIB_INSTALL_DIR=${libdir} \ - -DSHARE_INSTALL_PREFIX=${datadir} \ - -DINCLUDE_INSTALL_DIR=${includedir} \ -" - -inherit systemd -SYSTEMD_SERVICE_${PN} = "security-manager.service" - -inherit features_check -REQUIRED_DISTRO_FEATURES += "smack" - -# The upstream source code contains the Tizen-specific policy configuration files. -# To replace them, create a security-manager.bbappend and set the following variable to a -# space-separated list of policy file names (not URIs!), for example: -# SECURITY_MANAGER_POLICY = "privilege-group.list usertype-system.profile" -# -# Leave it empty to use the upstream Tizen policy. -SECURITY_MANAGER_POLICY ?= "" -SRC_URI_append = " ${@' '.join(['file://' + x for x in d.getVar('SECURITY_MANAGER_POLICY', True).split()])}" -python do_patch_append () { - import os - import shutil - import glob - files = d.getVar('SECURITY_MANAGER_POLICY', True).split() - if files: - s = d.getVar('S', True) - workdir = d.getVar('WORKDIR', True) - for pattern in ['*.profile', '*.list']: - for old_file in glob.glob(s + '/policy/' + pattern): - os.unlink(old_file) - for file in files: - shutil.copy(file, s + '/policy') -} - -do_install_append () { - install -d ${D}/${systemd_unitdir}/system/multi-user.target.wants - ln -s ../security-manager.service ${D}/${systemd_unitdir}/system/multi-user.target.wants/security-manager.service - install -d ${D}/${systemd_unitdir}/system/sockets.target.wants - ln -s ../security-manager.socket ${D}/${systemd_unitdir}/system/sockets.target.wants/security-manager.socket -} - -RDEPENDS_${PN} += "sqlite3 cynara" -FILES_${PN} += " \ - ${systemd_unitdir} \ - ${TZ_SYS_DB} \ - ${bindir}/.security-manager-setup \ -" - -PACKAGES =+ "${PN}-policy" -FILES_${PN}-policy = " \ - ${datadir}/${PN} \ - ${bindir}/security-manager-policy-reload \ -" diff --git a/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch b/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch deleted file mode 100644 index 91ce81963..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 3d9d1d83fe298a364f51ad752c17aad461beded3 Mon Sep 17 00:00:00 2001 -From: Patrick Ohly -Date: Tue, 24 Mar 2015 04:54:03 -0700 -Subject: [PATCH 01/14] systemd: stop using compat libs - -libsystemd-journal and libsystemd-daemon are considered obsolete -in systemd since 2.09 and may not be available (not compiled -by default). - -The code works fine with the current libsystemd, so just -use that. - -Signed-off-by: Patrick Ohly -Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1 ---- - src/common/CMakeLists.txt | 2 +- - src/server/CMakeLists.txt | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt -index 2da9c3e..968c7c1 100644 ---- a/src/common/CMakeLists.txt -+++ b/src/common/CMakeLists.txt -@@ -3,7 +3,7 @@ SET(COMMON_VERSION ${COMMON_VERSION_MAJOR}.0.2) - - PKG_CHECK_MODULES(COMMON_DEP - REQUIRED -- libsystemd-journal -+ libsystemd - libsmack - db-util - cynara-admin -diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt -index 753eb96..6849d76 100644 ---- a/src/server/CMakeLists.txt -+++ b/src/server/CMakeLists.txt -@@ -1,6 +1,6 @@ - PKG_CHECK_MODULES(SERVER_DEP - REQUIRED -- libsystemd-daemon -+ libsystemd - ) - - FIND_PACKAGE(Boost REQUIRED) --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch b/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch deleted file mode 100644 index b6346480b..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From a90515613f09140049b2bdf471fa83d5dd7bad1c Mon Sep 17 00:00:00 2001 -From: Patrick Ohly -Date: Wed, 19 Aug 2015 15:02:32 +0200 -Subject: [PATCH 02/14] security-manager-policy-reload: do not depend on GNU - sed - -\U (= make replacement uppercase) is a GNU sed extension which is not -supported by other sed implementation's (like the one from -busybox). When using busybox, the bucket for user profiles became -USER_TYPE_Uadmin instead USER_TYPE_ADMIN. - -To make SecurityManager more portable, better use tr to turn the -bucket name into uppercase. - -Signed-off-by: Patrick Ohly -Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1 ---- - policy/security-manager-policy-reload | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload -index 274c49c..6f211c6 100755 ---- a/policy/security-manager-policy-reload -+++ b/policy/security-manager-policy-reload -@@ -33,7 +33,7 @@ END - find "$POLICY_PATH" -name "usertype-*.profile" | - while read file - do -- bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\U\1|'`" -+ bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\1|' | tr '[:lower:]' '[:upper:]'`" - - # Re-create the bucket with empty contents - cyad --delete-bucket=$bucket || true --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch b/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch deleted file mode 100644 index d79345e01..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch +++ /dev/null @@ -1,117 +0,0 @@ -From a80e33bc0a10fa4bed5d0b7bf29f45dd2565d309 Mon Sep 17 00:00:00 2001 -From: Alejandro Joya -Date: Wed, 4 Nov 2015 19:01:35 -0600 -Subject: [PATCH 03/14] Smack-rules: create two new functions - -It let to smack-rules to create multiple set of rules -related with the privileges. - -It runs from the same bases than for a static set of rules on the -template, but let you add 1 or many templates for different cases. - -Change-Id: I14f8d4e914ad5a7ba34c96f3cb5589f0b15292de -Signed-off-by: Alejandro Joya ---- - src/common/include/smack-rules.h | 15 +++++++++++ - src/common/smack-rules.cpp | 44 ++++++++++++++++++++++++++++++++ - 2 files changed, 59 insertions(+) - -diff --git a/src/common/include/smack-rules.h b/src/common/include/smack-rules.h -index 91446a7..3ad9dd4 100644 ---- a/src/common/include/smack-rules.h -+++ b/src/common/include/smack-rules.h -@@ -47,6 +47,8 @@ public: - void addFromTemplate(const std::vector &templateRules, - const std::string &appId, const std::string &pkgId); - void addFromTemplateFile(const std::string &appId, const std::string &pkgId); -+ void addFromTemplateFile(const std::string &appId, const std::string &pkgId, -+ const std::string &path); - - void apply() const; - void clear() const; -@@ -74,6 +76,19 @@ public: - */ - static void installApplicationRules(const std::string &appId, const std::string &pkgId, - const std::vector &pkgContents); -+ /** -+ * Install privileges-specific smack rules. -+ * -+ * Function creates smack rules using predefined template. Rules are applied -+ * to the kernel and saved on persistent storage so they are loaded on system boot. -+ * -+ * @param[in] appId - application id that is beeing installed -+ * @param[in] pkgId - package id that the application is in -+ * @param[in] pkgContents - a list of all applications in the package -+ * @param[in] privileges - a list of all prvileges -+ */ -+ static void installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, -+ const std::vector &pkgContents, const std::vector &privileges); - /** - * Uninstall package-specific smack rules. - * -diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp -index 3629e0f..922a56f 100644 ---- a/src/common/smack-rules.cpp -+++ b/src/common/smack-rules.cpp -@@ -135,6 +135,29 @@ void SmackRules::saveToFile(const std::string &path) const - } - } - -+void SmackRules::addFromTemplateFile(const std::string &appId, -+ const std::string &pkgId, const std::string &path) -+{ -+ std::vector templateRules; -+ std::string line; -+ std::ifstream templateRulesFile(path); -+ -+ if (!templateRulesFile.is_open()) { -+ LogError("Cannot open rules template file: " << path); -+ ThrowMsg(SmackException::FileError, "Cannot open rules template file: " << path); -+ } -+ -+ while (std::getline(templateRulesFile, line)) { -+ templateRules.push_back(line); -+ } -+ -+ if (templateRulesFile.bad()) { -+ LogError("Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH); -+ ThrowMsg(SmackException::FileError, "Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH); -+ } -+ -+ addFromTemplate(templateRules, appId, pkgId); -+} - - void SmackRules::addFromTemplateFile(const std::string &appId, - const std::string &pkgId) -@@ -223,7 +246,28 @@ std::string SmackRules::getApplicationRulesFilePath(const std::string &appId) - std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str())); - return path; - } -+void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, -+ const std::vector &pkgContents, const std::vector &privileges) -+{ -+ SmackRules smackRules; -+ std::string appPath = getApplicationRulesFilePath(appId); -+ smackRules.loadFromFile(appPath); -+ struct stat buffer; -+ for (auto privilege : privileges) { -+ if (privilege.empty()) -+ continue; -+ std::string fprivilege ( privilege + "-template.smack"); -+ std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str())); -+ if( stat(path.c_str(), &buffer) == 0) -+ smackRules.addFromTemplateFile(appId, pkgId, path); -+ } -+ -+ if (smack_smackfs_path() != NULL) -+ smackRules.apply(); - -+ smackRules.saveToFile(appPath); -+ updatePackageRules(pkgId, pkgContents); -+} - void SmackRules::installApplicationRules(const std::string &appId, const std::string &pkgId, - const std::vector &pkgContents) - { --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch b/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch deleted file mode 100644 index 59d4971ff..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch +++ /dev/null @@ -1,34 +0,0 @@ -From a5979d9d674e400ecd7fcdf5d7589cfa0cfeb492 Mon Sep 17 00:00:00 2001 -From: Alejandro Joya -Date: Wed, 4 Nov 2015 19:06:23 -0600 -Subject: [PATCH 04/14] app-install: implement multiple set of smack-rules - -If it's need it could create load multiple set of smack rules -related with the privileges. -It wouldn't affect the case that only the default set of rules is need it. - -Signed-off-by: Alejandro Joya ---- - src/common/service_impl.cpp | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp -index 7fd621c..ae305d3 100644 ---- a/src/common/service_impl.cpp -+++ b/src/common/service_impl.cpp -@@ -338,6 +338,12 @@ int appInstall(const app_inst_req &req, uid_t uid) - LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: " - << req.pkgId << ". Applications in package: " << pkgContents.size()); - SmackRules::installApplicationRules(req.appId, req.pkgId, pkgContents); -+ /*Setup for privileges custom rules*/ -+ LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: " -+ << req.pkgId << ". Applications in package: " << pkgContents.size() -+ << " and Privileges"); -+ SmackRules::installApplicationPrivilegesRules(req.appId, req.pkgId, -+ pkgContents,req.privileges); - } catch (const SmackException::Base &e) { - LogError("Error while applying Smack policy for application: " << e.DumpToString()); - return SECURITY_MANAGER_API_ERROR_SETTING_FILE_LABEL_FAILED; --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch b/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch deleted file mode 100644 index 0739f28c7..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 198ba9b9782fda19803e94d2afeff91189ac27af Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Wed, 13 Jan 2016 17:30:06 +0100 -Subject: [PATCH 05/14] c++11: replace deprecated auto_ptr -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream-Status: Submitted [https://review.tizen.org/gerrit/#/c/56940/] - -Change-Id: Id793c784c9674eef48f346226c094bdd9f7bbda8 -Signed-off-by: José Bollo ---- - src/dpl/core/include/dpl/binary_queue.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/dpl/core/include/dpl/binary_queue.h b/src/dpl/core/include/dpl/binary_queue.h -index dd03f5e..185b6c7 100644 ---- a/src/dpl/core/include/dpl/binary_queue.h -+++ b/src/dpl/core/include/dpl/binary_queue.h -@@ -33,7 +33,7 @@ namespace SecurityManager { - * Binary queue auto pointer - */ - class BinaryQueue; --typedef std::auto_ptr BinaryQueueAutoPtr; -+typedef std::unique_ptr BinaryQueueAutoPtr; - - /** - * Binary stream implemented as constant size bucket list --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch b/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch deleted file mode 100644 index 3b8aad98c..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ec098bf03cea23350ca7d1ea2ad88b9c88228943 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Fri, 8 Jan 2016 16:53:46 +0100 -Subject: [PATCH 06/14] socket-manager: removes tizen specific call -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The function 'smack_fgetlabel' is specific to Tizen -and is no more maintained upstream. - -Upstream-Status: Accepted [https://review.tizen.org/gerrit/#/c/56507/] - -Change-Id: I3802742b1758efe37b33e6d968ff727d68f2fd1f -Signed-off-by: José Bollo ---- - src/server/main/socket-manager.cpp | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/server/main/socket-manager.cpp b/src/server/main/socket-manager.cpp -index 94c54c6..5e1a79b 100644 ---- a/src/server/main/socket-manager.cpp -+++ b/src/server/main/socket-manager.cpp -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -493,9 +494,9 @@ int SocketManager::CreateDomainSocketHelp( - if (smack_check()) { - LogInfo("Set up smack label: " << desc.smackLabel); - -- if (0 != smack_fsetlabel(sockfd, desc.smackLabel.c_str(), SMACK_LABEL_IPIN)) { -- LogError("Error in smack_fsetlabel"); -- ThrowMsg(Exception::InitFailed, "Error in smack_fsetlabel"); -+ if (0 != smack_set_label_for_file(sockfd, XATTR_NAME_SMACKIPIN, desc.smackLabel.c_str())) { -+ LogError("Error in smack_set_label_for_file"); -+ ThrowMsg(Exception::InitFailed, "Error in smack_set_label_for_file"); - } - } else { - LogInfo("No smack on platform. Socket won't be securied with smack label!"); --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch b/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch deleted file mode 100644 index bad99d25a..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 9d0791dab4b4df086374c5c0ba2a6558e10e81c1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Mon, 16 Nov 2015 15:56:27 +0100 -Subject: [PATCH 07/14] removes dependency to libslp-db-utils - -Change-Id: I90471e77d20e04bae58cc42eb2639e4aef97fdec ---- - src/common/CMakeLists.txt | 3 ++- - src/dpl/db/src/sql_connection.cpp | 17 +---------------- - 2 files changed, 3 insertions(+), 17 deletions(-) - -diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt -index 968c7c1..9ae376f 100644 ---- a/src/common/CMakeLists.txt -+++ b/src/common/CMakeLists.txt -@@ -5,7 +5,8 @@ PKG_CHECK_MODULES(COMMON_DEP - REQUIRED - libsystemd - libsmack -- db-util -+ sqlite3 -+ icu-i18n - cynara-admin - cynara-client - ) -diff --git a/src/dpl/db/src/sql_connection.cpp b/src/dpl/db/src/sql_connection.cpp -index fdb4fe4..f49a6dc 100644 ---- a/src/dpl/db/src/sql_connection.cpp -+++ b/src/dpl/db/src/sql_connection.cpp -@@ -26,7 +26,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -606,16 +605,7 @@ void SqlConnection::Connect(const std::string &address, - - // Connect to database - int result; -- if (type & Flag::UseLucene) { -- result = db_util_open_with_options( -- address.c_str(), -- &m_connection, -- flag, -- NULL); -- -- m_usingLucene = true; -- LogPedantic("Lucene index enabled"); -- } else { -+ (void)type; - result = sqlite3_open_v2( - address.c_str(), - &m_connection, -@@ -624,7 +614,6 @@ void SqlConnection::Connect(const std::string &address, - - m_usingLucene = false; - LogPedantic("Lucene index disabled"); -- } - - if (result == SQLITE_OK) { - LogPedantic("Connected to DB"); -@@ -653,11 +642,7 @@ void SqlConnection::Disconnect() - - int result; - -- if (m_usingLucene) { -- result = db_util_close(m_connection); -- } else { - result = sqlite3_close(m_connection); -- } - - if (result != SQLITE_OK) { - const char *error = sqlite3_errmsg(m_connection); --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch b/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch deleted file mode 100644 index 5ece7ef4f..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch +++ /dev/null @@ -1,38 +0,0 @@ -From a1d9b40b4fa2e73d31a53e398c286bffeaae1732 Mon Sep 17 00:00:00 2001 -From: Ronan -Date: Wed, 12 Oct 2016 17:48:55 +0200 -Subject: [PATCH 08/14] Fix gcc6 build - -Signed-off-by: ronan ---- - src/client/client-security-manager.cpp | 1 + - src/common/include/privilege_db.h | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/src/client/client-security-manager.cpp b/src/client/client-security-manager.cpp -index 74a6b30..347cddd 100644 ---- a/src/client/client-security-manager.cpp -+++ b/src/client/client-security-manager.cpp -@@ -46,6 +46,7 @@ - #include - #include - #include -+#include - - static const char *EMPTY = ""; - -diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h -index 4d73d90..08fb9d6 100644 ---- a/src/common/include/privilege_db.h -+++ b/src/common/include/privilege_db.h -@@ -32,6 +32,7 @@ - #include - #include - #include -+#include - - #include - #include --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch b/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch deleted file mode 100644 index 706eb1a93..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 382379d74221bcc60a0ab70d63430a1c0587b2ec Mon Sep 17 00:00:00 2001 -From: Ronan -Date: Thu, 13 Oct 2016 11:37:47 +0200 -Subject: [PATCH 09/14] Fix Cmake conf for gcc6 build - -Signed-off-by: Ronan ---- - src/cmd/CMakeLists.txt | 4 +--- - src/server/CMakeLists.txt | 1 - - 2 files changed, 1 insertion(+), 4 deletions(-) - -diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt -index ee9a160..aa7a12c 100644 ---- a/src/cmd/CMakeLists.txt -+++ b/src/cmd/CMakeLists.txt -@@ -1,8 +1,6 @@ - FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options) - --INCLUDE_DIRECTORIES(SYSTEM -- ${Boost_INCLUDE_DIRS} -- ) -+ - - INCLUDE_DIRECTORIES( - ${INCLUDE_PATH} -diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt -index 6849d76..9598037 100644 ---- a/src/server/CMakeLists.txt -+++ b/src/server/CMakeLists.txt -@@ -8,7 +8,6 @@ FIND_PACKAGE(Threads REQUIRED) - - INCLUDE_DIRECTORIES(SYSTEM - ${SERVER_DEP_INCLUDE_DIRS} -- ${Boost_INCLUDE_DIRS} - ${Threads_INCLUDE_DIRS} - ) - --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch b/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch deleted file mode 100644 index 0f48c5f68..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 8e93699c0f225716f3cd5eff790270ae9e3880f9 Mon Sep 17 00:00:00 2001 -From: Changhyeok Bae -Date: Sun, 17 Dec 2017 15:40:58 +0000 -Subject: [PATCH 10/14] gcc-7 requires include for std::function - -Signed-off-by: Changhyeok Bae ---- - src/client/client-common.cpp | 1 + - src/common/smack-labels.cpp | 1 + - src/dpl/core/src/binary_queue.cpp | 1 + - 3 files changed, 3 insertions(+) - -diff --git a/src/client/client-common.cpp b/src/client/client-common.cpp -index 883ab8d..1babdf7 100644 ---- a/src/client/client-common.cpp -+++ b/src/client/client-common.cpp -@@ -31,6 +31,7 @@ - #include - #include - #include -+#include - - #include - #include -diff --git a/src/common/smack-labels.cpp b/src/common/smack-labels.cpp -index 0294a42..1598099 100644 ---- a/src/common/smack-labels.cpp -+++ b/src/common/smack-labels.cpp -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -diff --git a/src/dpl/core/src/binary_queue.cpp b/src/dpl/core/src/binary_queue.cpp -index 72817a6..838409f 100644 ---- a/src/dpl/core/src/binary_queue.cpp -+++ b/src/dpl/core/src/binary_queue.cpp -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - namespace SecurityManager { - BinaryQueue::BinaryQueue() : --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch b/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch deleted file mode 100644 index 5c679fc26..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 243b7ffee16558d7cb9b411f49380138efeffca9 Mon Sep 17 00:00:00 2001 -From: Stephane Desneux -Date: Fri, 1 Feb 2019 12:26:17 +0000 -Subject: [PATCH 11/14] Fix gcc8 warning/error [-Werror=catch-value=] - -Fixes the following warning/error during compile: - -src/dpl/core/src/assert.cpp:61:14: error: catching polymorphic type 'class SecurityManager::Exception' by value [-Werror=catch-value=] -| } catch (Exception) { -| ^~~~~~~~~ - -Signed-off-by: Stephane Desneux ---- - src/dpl/core/src/assert.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/dpl/core/src/assert.cpp b/src/dpl/core/src/assert.cpp -index 63538a2..fc60ce9 100644 ---- a/src/dpl/core/src/assert.cpp -+++ b/src/dpl/core/src/assert.cpp -@@ -58,7 +58,7 @@ void AssertProc(const char *condition, - INTERNAL_LOG("### Function: " << function); - INTERNAL_LOG( - "################################################################################"); -- } catch (Exception) { -+ } catch (Exception const&) { - // Just ignore possible double errors - } - --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch b/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch deleted file mode 100644 index 91ccf9ee2..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 5ee51d38575f289c2bf37ed817ef680ed47bb320 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Fri, 1 Feb 2019 15:37:44 +0100 -Subject: [PATCH 12/14] Avoid casting from "const T&" to "void*" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Latest version of g++ refuse the cast - - reinterpret_cast(serviceFunction) - -I made no investigation to know if the problem -is coming from the const or not. - -Signed-off-by: José Bollo ---- - src/server/main/include/service-thread.h | 42 ++++++++++-------------- - 1 file changed, 18 insertions(+), 24 deletions(-) - -diff --git a/src/server/main/include/service-thread.h b/src/server/main/include/service-thread.h -index 964d168..61fdda8 100644 ---- a/src/server/main/include/service-thread.h -+++ b/src/server/main/include/service-thread.h -@@ -94,7 +94,7 @@ public: - Join(); - while (!m_eventQueue.empty()){ - auto front = m_eventQueue.front(); -- delete front.eventPtr; -+ delete front; - m_eventQueue.pop(); - } - } -@@ -104,34 +104,28 @@ public: - Service *servicePtr, - void (Service::*serviceFunction)(const T &)) - { -- EventDescription description; -- description.serviceFunctionPtr = -- reinterpret_cast(serviceFunction); -- description.servicePtr = servicePtr; -- description.eventFunctionPtr = &ServiceThread::EventCall; -- description.eventPtr = new T(event); -+ EventCallerBase *ec = new EventCaller(event, servicePtr, serviceFunction); - { - std::lock_guard lock(m_eventQueueMutex); -- m_eventQueue.push(description); -+ m_eventQueue.push(ec); - } - m_waitCondition.notify_one(); - } - - protected: - -- struct EventDescription { -- void (Service::*serviceFunctionPtr)(void *); -- Service *servicePtr; -- void (ServiceThread::*eventFunctionPtr)(const EventDescription &event); -- GenericEvent* eventPtr; -+ struct EventCallerBase { -+ virtual void fire() = 0; -+ virtual ~EventCallerBase() {} - }; - - template -- void EventCall(const EventDescription &desc) { -- auto fun = reinterpret_cast(desc.serviceFunctionPtr); -- const T& eventLocale = *(static_cast(desc.eventPtr)); -- (desc.servicePtr->*fun)(eventLocale); -- } -+ struct EventCaller : public EventCallerBase { -+ T *event; Service *target; void (Service::*function)(const T&); -+ EventCaller(const T &e, Service *c, void (Service::*f)(const T&)) : event(new T(e)), target(c), function(f) {} -+ ~EventCaller() { delete event; } -+ void fire() { (target->*function)(*event); } -+ }; - - static void ThreadLoopStatic(ServiceThread *ptr) { - ptr->ThreadLoop(); -@@ -139,33 +133,33 @@ protected: - - void ThreadLoop(){ - for (;;) { -- EventDescription description = {NULL, NULL, NULL, NULL}; -+ EventCallerBase *ec = NULL; - { - std::unique_lock ulock(m_eventQueueMutex); - if (m_quit) - return; - if (!m_eventQueue.empty()) { -- description = m_eventQueue.front(); -+ ec = m_eventQueue.front(); - m_eventQueue.pop(); - } else { - m_waitCondition.wait(ulock); - } - } - -- if (description.eventPtr != NULL) { -+ if (ec != NULL) { - UNHANDLED_EXCEPTION_HANDLER_BEGIN - { -- (this->*description.eventFunctionPtr)(description); -- delete description.eventPtr; -+ ec->fire(); - } - UNHANDLED_EXCEPTION_HANDLER_END -+ delete ec; - } - } - } - - std::thread m_thread; - std::mutex m_eventQueueMutex; -- std::queue m_eventQueue; -+ std::queue m_eventQueue; - std::condition_variable m_waitCondition; - - State m_state; --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch b/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch deleted file mode 100644 index fb6215923..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch +++ /dev/null @@ -1,259 +0,0 @@ -From 6c96a39ba7a7763ccd47e379dbfd8d376164985f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Mon, 16 Nov 2015 14:26:25 +0100 -Subject: [PATCH 13/14] Removing tizen-platform-config - -Change-Id: Ic832a2b75229517b09faba969c27fb1a4b490121 ---- - CMakeLists.txt | 16 +++++++- - db/CMakeLists.txt | 2 +- - policy/CMakeLists.txt | 1 + - ...load => security-manager-policy-reload.in} | 4 +- - src/common/file-lock.cpp | 4 +- - src/common/include/file-lock.h | 1 - - src/common/include/privilege_db.h | 3 +- - src/common/service_impl.cpp | 39 ++++++------------- - src/common/smack-rules.cpp | 12 ++---- - 9 files changed, 37 insertions(+), 45 deletions(-) - rename policy/{security-manager-policy-reload => security-manager-policy-reload.in} (94%) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 28790d8..37a43cc 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -49,7 +49,7 @@ ADD_DEFINITIONS("-Wall") # Generate all warnings - ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings - - STRING(REGEX MATCH "([^.]*)" API_VERSION "${VERSION}") --ADD_DEFINITIONS("-DAPI_VERSION=\"$(API_VERSION)\"") -+ADD_DEFINITIONS("-DAPI_VERSION=\"${API_VERSION}\"") - - ADD_DEFINITIONS("-DSMACK_ENABLED") - -@@ -58,6 +58,20 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG") - ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG") - ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG") - -+SET(DATADIR "/usr/share/security-manager" CACHE STRING "path to data directory") -+SET(SMACKRULESDIR "/etc/smack/accesses.d" CACHE STRING "path to Smack rules directory") -+SET(LOCKDIR "/var/run/lock" CACHE STRING "path to lock directory") -+SET(DB_INSTALL_DIR "/var/db/security-manager" CACHE STRING "path to database directory") -+SET(DB_FILENAME ".security-manager.db" CACHE STRING "basename of database") -+SET(GLOBALUSER "userapp" CACHE STRING "name of the global user") -+ -+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") -+ADD_DEFINITIONS("-DSMACKRULESDIR=\"${SMACKRULESDIR}\"") -+ADD_DEFINITIONS("-DLOCKDIR=\"${LOCKDIR}\"") -+ADD_DEFINITIONS("-DDB_INSTALL_DIR=\"${DB_INSTALL_DIR}\"") -+ADD_DEFINITIONS("-DDB_FILENAME=\"${DB_FILENAME}\"") -+ADD_DEFINITIONS("-DGLOBALUSER=\"${GLOBALUSER}\"") -+ - ADD_SUBDIRECTORY(src) - ADD_SUBDIRECTORY(pc) - ADD_SUBDIRECTORY(systemd) -diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt -index 9e8ffcc..d7af1a0 100644 ---- a/db/CMakeLists.txt -+++ b/db/CMakeLists.txt -@@ -1,4 +1,4 @@ --SET(TARGET_DB ".security-manager.db") -+SET(TARGET_DB "$(DB_FILENAME)") - - ADD_CUSTOM_COMMAND( - OUTPUT ${TARGET_DB} ${TARGET_DB}-journal -diff --git a/policy/CMakeLists.txt b/policy/CMakeLists.txt -index bd08edc..626a2bd 100644 ---- a/policy/CMakeLists.txt -+++ b/policy/CMakeLists.txt -@@ -1,4 +1,5 @@ - FILE(GLOB USERTYPE_POLICY_FILES usertype-*.profile) -+CONFIGURE_FILE(security-manager-policy-reload.in security-manager-policy-reload @ONLY) - INSTALL(FILES ${USERTYPE_POLICY_FILES} DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) - INSTALL(FILES "app-rules-template.smack" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) - INSTALL(FILES "privilege-group.list" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy) -diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload.in -similarity index 94% -rename from policy/security-manager-policy-reload -rename to policy/security-manager-policy-reload.in -index 6f211c6..c1bc4e2 100755 ---- a/policy/security-manager-policy-reload -+++ b/policy/security-manager-policy-reload.in -@@ -1,8 +1,8 @@ - #!/bin/sh -e - --POLICY_PATH=/usr/share/security-manager/policy -+POLICY_PATH=@DATADIR@/policy - PRIVILEGE_GROUP_MAPPING=$POLICY_PATH/privilege-group.list --DB_FILE=`tzplatform-get TZ_SYS_DB | cut -d= -f2`/.security-manager.db -+DB_FILE=@DB_INSTALL_DIR@/@DB_FILENAME@ - - # Create default buckets - while read bucket default_policy -diff --git a/src/common/file-lock.cpp b/src/common/file-lock.cpp -index 6f3996c..88d2092 100644 ---- a/src/common/file-lock.cpp -+++ b/src/common/file-lock.cpp -@@ -30,9 +30,7 @@ - - namespace SecurityManager { - --char const * const SERVICE_LOCK_FILE = tzplatform_mkpath3(TZ_SYS_RUN, -- "lock", -- "security-manager.lock"); -+char const * const SERVICE_LOCK_FILE = LOCKDIR "/security-manager.lock"; - - FileLocker::FileLocker(const std::string &lockFile, bool blocking) - { -diff --git a/src/common/include/file-lock.h b/src/common/include/file-lock.h -index 604b019..21a86a0 100644 ---- a/src/common/include/file-lock.h -+++ b/src/common/include/file-lock.h -@@ -29,7 +29,6 @@ - - #include - #include --#include - - namespace SecurityManager { - -diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h -index 08fb9d6..3344987 100644 ---- a/src/common/include/privilege_db.h -+++ b/src/common/include/privilege_db.h -@@ -35,14 +35,13 @@ - #include - - #include --#include - - #ifndef PRIVILEGE_DB_H_ - #define PRIVILEGE_DB_H_ - - namespace SecurityManager { - --const char *const PRIVILEGE_DB_PATH = tzplatform_mkpath(TZ_SYS_DB, ".security-manager.db"); -+const char *const PRIVILEGE_DB_PATH = DB_INSTALL_DIR "/" DB_FILENAME; - - enum class QueryType { - EGetPkgPrivileges, -diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp -index ae305d3..42150fe 100644 ---- a/src/common/service_impl.cpp -+++ b/src/common/service_impl.cpp -@@ -32,7 +32,6 @@ - #include - - #include --#include - - #include "protocols.h" - #include "privilege_db.h" -@@ -131,7 +130,13 @@ static inline int validatePolicy(policy_entry &policyEntry, std::string uidStr, - - static uid_t getGlobalUserId(void) - { -- static uid_t globaluid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); -+ static uid_t globaluid = 0; -+ if (!globaluid) { -+ struct passwd pw, *p; -+ char buf[4096]; -+ int rc = getpwnam_r(GLOBALUSER, &pw, buf, sizeof buf, &p); -+ globaluid = (rc || p == NULL) ? 555 : p->pw_uid; -+ } - return globaluid; - } - -@@ -161,37 +166,17 @@ static inline bool isSubDir(const char *parent, const char *subdir) - - static bool getUserAppDir(const uid_t &uid, std::string &userAppDir) - { -- struct tzplatform_context *tz_ctx = nullptr; -- -- if (tzplatform_context_create(&tz_ctx)) -- return false; -- -- if (tzplatform_context_set_user(tz_ctx, uid)) { -- tzplatform_context_destroy(tz_ctx); -- tz_ctx = nullptr; -+ struct passwd pw, *p; -+ char buf[4096]; -+ int rc = getpwuid_r(uid, &pw, buf, sizeof buf, &p); -+ if (rc || p == NULL) - return false; -- } -- -- enum tzplatform_variable id = -- (uid == getGlobalUserId()) ? TZ_SYS_RW_APP : TZ_USER_APP; -- const char *appDir = tzplatform_context_getenv(tz_ctx, id); -- if (!appDir) { -- tzplatform_context_destroy(tz_ctx); -- tz_ctx = nullptr; -- return false; -- } -- -- userAppDir = appDir; -- -- tzplatform_context_destroy(tz_ctx); -- tz_ctx = nullptr; -- -+ userAppDir = p->pw_dir; - return true; - } - - static inline bool installRequestAuthCheck(const app_inst_req &req, uid_t uid, bool &isCorrectPath, std::string &appPath) - { -- std::string userHome; - std::string userAppDir; - std::stringstream correctPath; - -diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp -index 922a56f..c2e0041 100644 ---- a/src/common/smack-rules.cpp -+++ b/src/common/smack-rules.cpp -@@ -34,7 +34,6 @@ - #include - - #include --#include - - #include "smack-labels.h" - #include "smack-rules.h" -@@ -43,7 +42,7 @@ namespace SecurityManager { - - const char *const SMACK_APP_LABEL_TEMPLATE = "~APP~"; - const char *const SMACK_PKG_LABEL_TEMPLATE = "~PKG~"; --const char *const APP_RULES_TEMPLATE_FILE_PATH = tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", "app-rules-template.smack"); -+const char *const APP_RULES_TEMPLATE_FILE_PATH = DATADIR "/policy/app-rules-template.smack"; - const char *const SMACK_APP_IN_PACKAGE_PERMS = "rwxat"; - - SmackRules::SmackRules() -@@ -237,14 +236,12 @@ void SmackRules::generatePackageCrossDeps(const std::vector &pkgCon - - std::string SmackRules::getPackageRulesFilePath(const std::string &pkgId) - { -- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("pkg_" + pkgId).c_str())); -- return path; -+ return SMACKRULESDIR "/pkg_" + pkgId; - } - - std::string SmackRules::getApplicationRulesFilePath(const std::string &appId) - { -- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str())); -- return path; -+ return SMACKRULESDIR "/app_" + appId; - } - void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId, - const std::vector &pkgContents, const std::vector &privileges) -@@ -256,8 +253,7 @@ void SmackRules::installApplicationPrivilegesRules(const std::string &appId, con - for (auto privilege : privileges) { - if (privilege.empty()) - continue; -- std::string fprivilege ( privilege + "-template.smack"); -- std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str())); -+ std::string path = DATADIR "/policy/" + privilege + "-template.smack"; - if( stat(path.c_str(), &buffer) == 0) - smackRules.addFromTemplateFile(appId, pkgId, path); - } --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch b/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch deleted file mode 100644 index 542a387d2..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch +++ /dev/null @@ -1,78 +0,0 @@ -From c7f9d14e38a1b6d40b2fffa01433a3025eff9abd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Tue, 26 Nov 2019 12:34:39 +0100 -Subject: [PATCH 14/14] Ensure post install initialization of database -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Creation of the database was made during image creation, -leading to issue with SOTA. This adds the creation on -need before launching the service. - -Change-Id: Idfd0676bd87d39f7c10eaafd63f3a318f675c972 -Signed-off-by: José Bollo ---- - db/CMakeLists.txt | 14 ++++++-------- - db/security-manager-setup | 14 ++++++++++++++ - systemd/security-manager.service.in | 1 + - 3 files changed, 21 insertions(+), 8 deletions(-) - create mode 100644 db/security-manager-setup - -diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt -index d7af1a0..dcf5bc8 100644 ---- a/db/CMakeLists.txt -+++ b/db/CMakeLists.txt -@@ -1,12 +1,10 @@ --SET(TARGET_DB "$(DB_FILENAME)") -- - ADD_CUSTOM_COMMAND( -- OUTPUT ${TARGET_DB} ${TARGET_DB}-journal -- COMMAND sqlite3 ${TARGET_DB} .security-manager-setup -+ DEPENDS security-manager-setup db.sql -+) - - # Add a dummy build target to trigger building of ${TARGET_DB} --ADD_CUSTOM_TARGET(DB ALL DEPENDS ${TARGET_DB}) -+ADD_CUSTOM_TARGET(DB ALL DEPENDS .security-manager-setup) - --INSTALL(FILES ${TARGET_DB} DESTINATION ${DB_INSTALL_DIR}) --INSTALL(FILES ${TARGET_DB}-journal DESTINATION ${DB_INSTALL_DIR}) -+INSTALL(PROGRAMS .security-manager-setup DESTINATION ${BIN_INSTALL_DIR}) -diff --git a/db/security-manager-setup b/db/security-manager-setup -new file mode 100644 -index 0000000..5675baf ---- /dev/null -+++ b/db/security-manager-setup -@@ -0,0 +1,14 @@ -+#!/bin/sh -+ -+if test -f "$1"; then exit; fi -+set -e -+dbdir="$(dirname "$1")" -+dbfile="$(basename "$1")" -+test -n "$dbfile" -+test -n "$dbdir" -+mkdir -p "$dbdir" -+cd "$dbdir" -+sqlite3 "$dbfile" << END-OF-CAT -+--DB.SQL-- -+END-OF-CAT -+ -diff --git a/systemd/security-manager.service.in b/systemd/security-manager.service.in -index 23fd1b2..2bf97d7 100644 ---- a/systemd/security-manager.service.in -+++ b/systemd/security-manager.service.in -@@ -3,5 +3,6 @@ Description=Start the security manager - - [Service] - Type=notify -+ExecStartPre=@BIN_INSTALL_DIR@/.security-manager-setup @DB_INSTALL_DIR@/@DB_FILENAME@ - ExecStart=@BIN_INSTALL_DIR@/security-manager - Sockets=security-manager.socket --- -2.21.0 - diff --git a/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch b/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch deleted file mode 100644 index d9949193b..000000000 --- a/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 7cffcd61378a9d7c0e7db5691b2da3a37448c969 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jos=C3=A9=20Bollo?= -Date: Thu, 30 Jan 2020 09:19:25 +0100 -Subject: [PATCH 15/15] Restrict socket accesses -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Ensure that only members of the group and the owner can access -the security manager. - -Bug-AGL: SPEC-3146 - -Change-Id: I68ce6523db4bfd4707c3680555c3cb0cf8858ef2 -Signed-off-by: José Bollo ---- - systemd/security-manager.socket | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/systemd/security-manager.socket b/systemd/security-manager.socket -index af1c1da..b401f77 100644 ---- a/systemd/security-manager.socket -+++ b/systemd/security-manager.socket -@@ -1,6 +1,6 @@ - [Socket] - ListenStream=/run/security-manager.socket --SocketMode=0777 -+SocketMode=0660 - SmackLabelIPIn=* - SmackLabelIPOut=@ - --- -2.21.1 - diff --git a/meta-security/recipes-security/security-manager/security-manager_git.bb b/meta-security/recipes-security/security-manager/security-manager_git.bb deleted file mode 100644 index b34973519..000000000 --- a/meta-security/recipes-security/security-manager/security-manager_git.bb +++ /dev/null @@ -1,27 +0,0 @@ -require security-manager.inc - -PV = "1.0.2+git${SRCPV}" -SRCREV = "860305a595d681d650024ad07b3b0977e1fcb0a6" -SRC_URI += "git://github.com/Samsung/security-manager.git" -S = "${WORKDIR}/git" - -SRC_URI += " \ - file://0001-systemd-stop-using-compat-libs.patch \ - file://0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch \ - file://0003-Smack-rules-create-two-new-functions.patch \ - file://0004-app-install-implement-multiple-set-of-smack-rules.patch \ - file://0005-c-11-replace-deprecated-auto_ptr.patch \ - file://0006-socket-manager-removes-tizen-specific-call.patch \ - file://0007-removes-dependency-to-libslp-db-utils.patch \ - file://0008-Fix-gcc6-build.patch \ - file://0009-Fix-Cmake-conf-for-gcc6-build.patch \ - file://0010-gcc-7-requires-include-functional-for-std-function.patch \ - file://0011-Fix-gcc8-warning-error-Werror-catch-value.patch \ - file://0012-Avoid-casting-from-const-T-to-void.patch \ - file://0013-Removing-tizen-platform-config.patch \ - file://0014-Ensure-post-install-initialization-of-database.patch \ - file://0015-Restrict-socket-accesses.patch \ -" - -# Use make with cmake and not ninja -OECMAKE_GENERATOR = "Unix Makefiles" diff --git a/meta-security/recipes-security/smacknet/files/smacknet b/meta-security/recipes-security/smacknet/files/smacknet deleted file mode 100644 index 3818d30ae..000000000 --- a/meta-security/recipes-security/smacknet/files/smacknet +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2012, 2013, Intel Corporation -# Copyright (c) 2009 David Wolinsky L", bmask)[0]).count("1") - tags = [ - addr+"/"+str(prefix)+" Network::Local\n", - "0.0.0.0/0 Network::Cloud\n", - "127.0.0.1/8 -CIPSO\n"] - smackfs_netlabel(tags) - -def loadnetlabelrules(): - rulesSystem = [ - "System Network::Cloud w\n", - "System Network::Local w\n", - "Network::Cloud System w\n", - "Network::Local System w\n"] - smackfs_load2(rulesSystem) - -def smackfs_load2 (rules): - with open(SMACKFS_LOAD, "w") as load2: - for rule in rules: - load2.write(rule) - -def smackfs_netlabel (tags): - for tag in tags: - with open(SMACKFS_NETLABEL, "w") as netlabel: - netlabel.write(tag) - -""" - Source of: Class ip monitor, and other functions named bellow. - Original author: David Wolinsky " + addr) - - def request_addrs(self, sock): - sock.send(struct.pack("IHHIIBBBBI", 24, rtattr.GETADDR, \ - netlink.REQUEST | netlink.ROOT | netlink.MATCH, 0, sock.getsockname()[0], \ - socket.AF_INET, 0, 0, 0, 0)) - - def start_thread(self): - thread.start_new_thread(self.run, ()) - - def run(self): - sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE) - sock.bind((0, rtattr.GRP_IPV4_IFADDR)) - self.request_addrs(sock) - - while True: - data = sock.recv(4096) - pos = 0 - while pos < len(data): - nl = netlink(data[pos:]) - if nl.msgtype == netlink.DONE: - break - pos += align(nl.msglen) - if nl.msgtype != rtattr.NEWADDR: - continue - self._callback(nl.rtas[ifaddr.LABEL], nl.rtas[ifaddr.LOCAL]) - -def main(): - if not os.path.isfile(SMACKFS_LOAD): - print ("Smack not found.") - return -1 - loadnetlabelrules() - - ip_monitor(applynetlabeltags).run() - -if __name__ == "__main__": - main() diff --git a/meta-security/recipes-security/smacknet/files/smacknet.service b/meta-security/recipes-security/smacknet/files/smacknet.service deleted file mode 100644 index 218d8b896..000000000 --- a/meta-security/recipes-security/smacknet/files/smacknet.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=netlabels configuration for SMACK -Wants=network.target network-online.target -After=network.target network-online.target - -[Service] -TimeoutStartSec=0 -ExecStart=@BINDIR@/smacknet - -[Install] -WantedBy=multi-user.target diff --git a/meta-security/recipes-security/smacknet/smacknet.bb b/meta-security/recipes-security/smacknet/smacknet.bb deleted file mode 100644 index 250cdb132..000000000 --- a/meta-security/recipes-security/smacknet/smacknet.bb +++ /dev/null @@ -1,29 +0,0 @@ -#SMACKNET Description -SUMMARY = "Smack network labels configuration" -DESCRIPTION = "Provide service that will be labeling the network rules" -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9" -RDEPENDS_${PN} = "python" - -SRC_URI += "file://smacknet \ - file://smacknet.service \ - " -S = "${WORKDIR}" - -inherit systemd - -inherit features_check -REQUIRED_DISTRO_FEATURES = "smack" - -#netlabel configuration service -SYSTEMD_SERVICE_${PN} = "smacknet.service" -SYSTEMD_AUTO_ENABLE = "enable" -do_install(){ - install -d ${D}${bindir} - install -m 0551 ${WORKDIR}/smacknet ${D}${bindir} - - install -d -m 755 ${D}${systemd_unitdir}/system - install -m 644 ${WORKDIR}/smacknet.service ${D}${systemd_unitdir}/system - sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/system/smacknet.service -} - diff --git a/scripts/README-mkefi-agl.md b/scripts/README-mkefi-agl.md deleted file mode 100644 index 2262fb129..000000000 --- a/scripts/README-mkefi-agl.md +++ /dev/null @@ -1,18 +0,0 @@ -# Introduction - -This script will install the AGL distribution on a removable device to boot on Intel UEFI-based computer. - -In particular it can create a USB or SD bootable support for [MinnowBoard](www.minnowboard.org). - -Usage: mkefi-agl.sh [-v] IDSK_IMAGE REMOVABLE_DEVICE - -v: Verbose debug - HDDIMG: The DISK_IMAGE file generated by Yocto the efi disk from - Supported formats are .hddimg, .wic .wic.xz - REMOVABLE_DEVICE: The block device to write the image to, e.g. /dev/sdh -ex: - mkefi-agl.sh agl-demo-platform-intel-corei7-64.hddimg /dev/sdd - mkefi-agl.sh agl-demo-platform-intel-corei7-64.wic.xz /dev/sdd - -## Documentation - -[Additional documentation](https://wiki.automotivelinux.org/agl-distro/developer_resources_intel) diff --git a/templates/base/00_local.conf.agl.inc b/templates/base/00_local.conf.agl.inc index b49c44df6..d55cbef4b 100644 --- a/templates/base/00_local.conf.agl.inc +++ b/templates/base/00_local.conf.agl.inc @@ -6,6 +6,3 @@ DISTRO = "poky-agl" #see meta-agl/meta-agl-profile-core/conf/include/base-agl.inc require conf/include/base-agl.inc - -#see meta-agl/meta-app-framework/conf/include/agl-appfw-smack.inc -require conf/include/agl-appfw-smack.inc diff --git a/templates/base/99_local.conf.inc b/templates/base/99_local.conf.inc index c4f43998b..bbf1b2afa 100644 --- a/templates/base/99_local.conf.inc +++ b/templates/base/99_local.conf.inc @@ -4,7 +4,7 @@ # ARM 32bit 'medium' compiler (armv7thf instead of armv7ve) # (only use for CPUs <= cortex-a9 / w/o virt extension - e.g. cortex-a8) -# DISTRO_FEATURES_append = " agl-medium-arm-compiler" +# AGL_FEATURES_append = " agl-medium-arm-compiler" ###################### diff --git a/templates/base/bblayers.conf.sample b/templates/base/bblayers.conf.sample index 653f6dbe8..0dd28da03 100644 --- a/templates/base/bblayers.conf.sample +++ b/templates/base/bblayers.conf.sample @@ -24,27 +24,15 @@ YOCTO_LAYERS = " \ # with some automotive tools/libraries #----------------------------------------------------- AGL_CORE_LAYERS = " \ - ${METADIR}/meta-agl/meta-agl-profile-core \ - ${METADIR}/meta-agl/meta-agl-distro \ + ${METADIR}/meta-agl/meta-agl-core \ + ${METADIR}/meta-agl/meta-agl-core-test \ ${METADIR}/meta-agl/meta-agl-bsp \ " -AGL_APPFW_LAYERS = " \ - ${METADIR}/external/meta-security \ - ${METADIR}/external/meta-openembedded/meta-perl \ - ${METADIR}/meta-agl/meta-security \ - ${METADIR}/meta-agl/meta-app-framework \ - " - - # These are the direct dependencies of the AGL CORE Layers #--------------------------------------------------------- AGL_CORE_DEPENDENCY_LAYERS = " \ ${METADIR}/external/meta-openembedded/meta-oe \ - ${METADIR}/external/meta-openembedded/meta-multimedia \ - ${METADIR}/external/meta-openembedded/meta-networking \ - ${METADIR}/external/meta-openembedded/meta-python \ - ${METADIR}/external/meta-openembedded/meta-filesystems \ " #################### @@ -52,15 +40,13 @@ AGL_CORE_DEPENDENCY_LAYERS = " \ BBLAYERS ?= " \ ${AGL_CORE_DEPENDENCY_LAYERS} \ ${AGL_CORE_LAYERS} \ - ${AGL_APPFW_LAYERS} \ ${YOCTO_LAYERS} \ " BBLAYERS_NON_REMOVABLE ?= " \ ${METADIR}/external/poky/meta \ ${METADIR}/external/poky/meta-poky \ - ${METADIR}/meta-agl/meta-agl-profile-core \ - ${METADIR}/meta-agl/meta-agl-distro \ + ${METADIR}/meta-agl/meta-agl-core \ " diff --git a/templates/feature/agl-appfw-smack/50_bblayers.conf.inc b/templates/feature/agl-appfw-smack/50_bblayers.conf.inc new file mode 100644 index 000000000..5f6847a87 --- /dev/null +++ b/templates/feature/agl-appfw-smack/50_bblayers.conf.inc @@ -0,0 +1,9 @@ +AGL_APPFW_LAYERS = " \ + ${METADIR}/external/meta-security \ + ${METADIR}/external/meta-openembedded/meta-python \ + ${METADIR}/external/meta-openembedded/meta-networking \ + ${METADIR}/external/meta-openembedded/meta-perl \ + ${METADIR}/meta-agl/meta-app-framework \ + " + +BBLAYERS =+ "${AGL_APPFW_LAYERS}" \ No newline at end of file diff --git a/templates/feature/agl-appfw-smack/50_local.conf.inc b/templates/feature/agl-appfw-smack/50_local.conf.inc index e69de29bb..8282a1cae 100644 --- a/templates/feature/agl-appfw-smack/50_local.conf.inc +++ b/templates/feature/agl-appfw-smack/50_local.conf.inc @@ -0,0 +1 @@ +require conf/include/agl-appfw-smack.inc diff --git a/templates/feature/agl-hmi-framework/50_local.conf.inc b/templates/feature/agl-hmi-framework/50_local.conf.inc index d251e183d..21fdf3abf 100644 --- a/templates/feature/agl-hmi-framework/50_local.conf.inc +++ b/templates/feature/agl-hmi-framework/50_local.conf.inc @@ -1,4 +1,4 @@ # In order to enable the hmi-framework features , # enables the following line: # -DISTRO_FEATURES_append = " agl-hmi-framework" +AGL_FEATURES_append = " agl-hmi-framework" diff --git a/templates/feature/agl-localdev/80_bblayers.conf.inc b/templates/feature/agl-localdev/80_bblayers.conf.inc new file mode 100644 index 000000000..d9bb9d070 --- /dev/null +++ b/templates/feature/agl-localdev/80_bblayers.conf.inc @@ -0,0 +1,3 @@ +# Local derivations during development, just add a layer in the folder meta-localdev +BBLAYERS =+ "${@'${METADIR}/meta-localdev' if os.path.exists('${METADIR}/meta-localdev') else ''}" + diff --git a/templates/feature/agl-localdev/80_local.conf.inc b/templates/feature/agl-localdev/80_local.conf.inc new file mode 100644 index 000000000..6c9213512 --- /dev/null +++ b/templates/feature/agl-localdev/80_local.conf.inc @@ -0,0 +1,2 @@ +# (weak) include userspecific local.dev.inc +include local.dev.inc diff --git a/templates/feature/agl-localdev/README_feature_agl-localdev.md b/templates/feature/agl-localdev/README_feature_agl-localdev.md new file mode 100644 index 000000000..111ae4ec0 --- /dev/null +++ b/templates/feature/agl-localdev/README_feature_agl-localdev.md @@ -0,0 +1,9 @@ +--- +description: enable local layer for development purposes +authors: Stéphane Desneux +--- + +### Feature agl-localdev + +Adds a local layer named "meta-localdev" in meta directory and a local.dev.inc conf file if present. + diff --git a/templates/feature/agl-netboot/50_bblayers.conf.inc b/templates/feature/agl-netboot/50_bblayers.conf.inc index 3d2ed6460..80ace82d4 100644 --- a/templates/feature/agl-netboot/50_bblayers.conf.inc +++ b/templates/feature/agl-netboot/50_bblayers.conf.inc @@ -1 +1,2 @@ -BBLAYERS =+ "${METADIR}/meta-agl/meta-netboot" +BBLAYERS =+ " ${METADIR}/meta-agl/meta-netboot \ + " diff --git a/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc b/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc deleted file mode 100644 index f1aef074d..000000000 --- a/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-cluster-qt5 \ -" diff --git a/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md b/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md deleted file mode 100644 index 095a8db18..000000000 --- a/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -description: Feature agl-profile-cluster-qt5 -authors: Scott Murray ---- - -### Feature agl-profile-cluster-qt5 - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md* - -#### Dependent features pulled by agl-profile-cluster-qt5 - -The following features are pulled: - -* agl-profile-graphical-qt5 - diff --git a/templates/feature/agl-profile-cluster-qt5/included.dep b/templates/feature/agl-profile-cluster-qt5/included.dep deleted file mode 100644 index 21b1fa6bc..000000000 --- a/templates/feature/agl-profile-cluster-qt5/included.dep +++ /dev/null @@ -1 +0,0 @@ -agl-profile-graphical-qt5 diff --git a/templates/feature/agl-profile-cluster/50_bblayers.conf.inc b/templates/feature/agl-profile-cluster/50_bblayers.conf.inc deleted file mode 100644 index b430dc7db..000000000 --- a/templates/feature/agl-profile-cluster/50_bblayers.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-cluster \ -" diff --git a/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md b/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md deleted file mode 100644 index 544dc7c8e..000000000 --- a/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -description: Feature agl-profile-cluster -authors: Scott Murray ---- - -### Feature agl-profile-cluster - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md* - -#### Dependent features pulled by agl-profile-cluster - -The following features are pulled: - -* agl-profile-graphical - diff --git a/templates/feature/agl-profile-cluster/included.dep b/templates/feature/agl-profile-cluster/included.dep deleted file mode 100644 index 032609b8a..000000000 --- a/templates/feature/agl-profile-cluster/included.dep +++ /dev/null @@ -1 +0,0 @@ -agl-profile-graphical diff --git a/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc deleted file mode 100644 index a35f93fb5..000000000 --- a/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc +++ /dev/null @@ -1,6 +0,0 @@ - -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-graphical-html5 \ - ${METADIR}/external/meta-python2 \ - " - diff --git a/templates/feature/agl-profile-graphical-html5/50_local.conf.inc b/templates/feature/agl-profile-graphical-html5/50_local.conf.inc deleted file mode 100644 index 0b2d70028..000000000 --- a/templates/feature/agl-profile-graphical-html5/50_local.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ - -IMAGE_INSTALL_append = " packagegroup-agl-profile-graphical-html5" - diff --git a/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md b/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md deleted file mode 100644 index dc00f94c2..000000000 --- a/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -description: Feature agl-profile-graphical-html5 -authors: Jacobo Aragunde Pérez ---- - -### Feature agl-profile-graphical-html5 - -Packages required to run web applications in AGL. The provided image agl-image-graphical-html5 includes the minimum set of packages required for this purpose. diff --git a/templates/feature/agl-profile-graphical-html5/included.dep b/templates/feature/agl-profile-graphical-html5/included.dep deleted file mode 100644 index 032609b8a..000000000 --- a/templates/feature/agl-profile-graphical-html5/included.dep +++ /dev/null @@ -1 +0,0 @@ -agl-profile-graphical diff --git a/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc deleted file mode 100644 index 960267908..000000000 --- a/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc +++ /dev/null @@ -1,9 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-graphical-qt5 \ -" - -# These are the dependencies -#--------------------------- -BBLAYERS =+ " \ - ${METADIR}/external/meta-qt5 \ -" diff --git a/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md b/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md deleted file mode 100644 index 387de2ca4..000000000 --- a/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -description: Feature agl-profile-graphical-qt5 -authors: Jan-Simon Möller ---- - -### Feature agl-profile-graphical-qt5 - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md* - -#### Dependent features pulled by agl-profile-graphical-qt5 - -The following features are pulled: - -* agl-profile-graphical - diff --git a/templates/feature/agl-profile-graphical-qt5/included.dep b/templates/feature/agl-profile-graphical-qt5/included.dep deleted file mode 100644 index 5b54430da..000000000 --- a/templates/feature/agl-profile-graphical-qt5/included.dep +++ /dev/null @@ -1 +0,0 @@ -agl-profile-graphical \ No newline at end of file diff --git a/templates/feature/agl-profile-graphical/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical/50_bblayers.conf.inc deleted file mode 100644 index 44b0885dc..000000000 --- a/templates/feature/agl-profile-graphical/50_bblayers.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-graphical \ -" diff --git a/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md b/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md deleted file mode 100644 index 594d047e7..000000000 --- a/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Feature agl-profile-graphical -authors: Jan-Simon Möller ---- - -### Feature agl-profile-graphical - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md* - diff --git a/templates/feature/agl-profile-hud/50_bblayers.conf.inc b/templates/feature/agl-profile-hud/50_bblayers.conf.inc deleted file mode 100644 index 047383710..000000000 --- a/templates/feature/agl-profile-hud/50_bblayers.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-hud \ -" diff --git a/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md b/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md deleted file mode 100644 index b4387c129..000000000 --- a/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Feature agl-profile-hud -authors: Jan-Simon Möller ---- - -### Feature agl-profile-hud - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md* - diff --git a/templates/feature/agl-profile-telematics/50_bblayers.conf.inc b/templates/feature/agl-profile-telematics/50_bblayers.conf.inc deleted file mode 100644 index 874b438f0..000000000 --- a/templates/feature/agl-profile-telematics/50_bblayers.conf.inc +++ /dev/null @@ -1,3 +0,0 @@ -BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-agl-profile-telematics \ -" diff --git a/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md b/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md deleted file mode 100644 index 6abcd5d24..000000000 --- a/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Feature agl-profile-telematics -authors: Jan-Simon Möller ---- - -### Feature agl-profile-telematics - -*Description is missing - please complete file meta-agl/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md* - diff --git a/templates/feature/agl-weston-remoting/included.dep b/templates/feature/agl-weston-remoting/included.dep index 032609b8a..82639da07 100644 --- a/templates/feature/agl-weston-remoting/included.dep +++ b/templates/feature/agl-weston-remoting/included.dep @@ -1 +1 @@ -agl-profile-graphical +agl-demo -- cgit 1.2.3-korg