From 1a4b7ee28bf7413af6513fb45ad0d0736048f866 Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Sun, 16 Dec 2018 17:11:34 -0800 Subject: reset upstream subtrees to yocto 2.6 Reset the following subtrees on thud HEAD: poky: 87e3a9739d meta-openembedded: 6094ae18c8 meta-security: 31dc4e7532 meta-raspberrypi: a48743dc36 meta-xilinx: c42016e2e6 Also re-apply backports that didn't make it into thud: poky: 17726d0 systemd-systemctl-native: handle Install wildcards meta-openembedded: 4321a5d libtinyxml2: update to 7.0.1 042f0a3 libcereal: Add native and nativesdk classes e23284f libcereal: Allow empty package 030e8d4 rsyslog: curl-less build with fmhttp PACKAGECONFIG 179a1b9 gtest: update to 1.8.1 Squashed OpenBMC subtree compatibility updates: meta-aspeed: Brad Bishop (1): aspeed: add yocto 2.6 compatibility meta-ibm: Brad Bishop (1): ibm: prepare for yocto 2.6 meta-ingrasys: Brad Bishop (1): ingrasys: set layer compatibility to yocto 2.6 meta-openpower: Brad Bishop (1): openpower: set layer compatibility to yocto 2.6 meta-phosphor: Brad Bishop (3): phosphor: set layer compatibility to thud phosphor: libgpg-error: drop patches phosphor: react to fitimage artifact rename Ed Tanous (4): Dropbear: upgrade options for latest upgrade yocto2.6: update openssl options busybox: remove upstream watchdog patch systemd: Rebase CONFIG_CGROUP_BPF patch Change-Id: I7b1fe71cca880d0372a82d94b5fd785323e3a9e7 Signed-off-by: Brad Bishop --- poky/.gitignore | 1 + poky/bitbake/bin/bitbake | 2 +- poky/bitbake/bin/bitbake-selftest | 7 +- .../bitbake-user-manual-intro.xml | 170 +- .../bitbake-user-manual-metadata.xml | 65 +- .../bitbake-user-manual-ref-variables.xml | 102 +- .../figures/bb_multiconfig_files.png | Bin 0 -> 19991 bytes poky/bitbake/lib/bb/COW.py | 2 +- poky/bitbake/lib/bb/__init__.py | 18 +- poky/bitbake/lib/bb/build.py | 8 +- poky/bitbake/lib/bb/cache.py | 2 +- poky/bitbake/lib/bb/codeparser.py | 4 +- poky/bitbake/lib/bb/cooker.py | 32 +- poky/bitbake/lib/bb/daemonize.py | 25 +- poky/bitbake/lib/bb/data.py | 61 +- poky/bitbake/lib/bb/data_smart.py | 108 +- poky/bitbake/lib/bb/event.py | 5 +- poky/bitbake/lib/bb/fetch2/__init__.py | 44 +- poky/bitbake/lib/bb/fetch2/bzr.py | 5 +- poky/bitbake/lib/bb/fetch2/cvs.py | 5 +- poky/bitbake/lib/bb/fetch2/git.py | 54 +- poky/bitbake/lib/bb/fetch2/gitsm.py | 263 +- poky/bitbake/lib/bb/fetch2/hg.py | 2 +- poky/bitbake/lib/bb/fetch2/osc.py | 5 +- poky/bitbake/lib/bb/fetch2/perforce.py | 8 +- poky/bitbake/lib/bb/fetch2/repo.py | 12 +- poky/bitbake/lib/bb/fetch2/svn.py | 69 +- poky/bitbake/lib/bb/msg.py | 3 + poky/bitbake/lib/bb/parse/ast.py | 37 +- poky/bitbake/lib/bb/runqueue.py | 98 +- poky/bitbake/lib/bb/server/process.py | 31 +- poky/bitbake/lib/bb/siggen.py | 64 +- poky/bitbake/lib/bb/taskdata.py | 18 +- poky/bitbake/lib/bb/tests/cooker.py | 83 + poky/bitbake/lib/bb/tests/data.py | 77 +- poky/bitbake/lib/bb/tests/fetch.py | 181 +- poky/bitbake/lib/bb/tests/parse.py | 4 + poky/bitbake/lib/bb/ui/buildinfohelper.py | 9 +- poky/bitbake/lib/bb/ui/taskexp.py | 10 +- poky/bitbake/lib/bb/utils.py | 38 +- poky/bitbake/lib/bblayers/action.py | 2 +- poky/bitbake/lib/bblayers/layerindex.py | 323 +- poky/bitbake/lib/layerindexlib/README | 28 + poky/bitbake/lib/layerindexlib/__init__.py | 1363 ++++++ poky/bitbake/lib/layerindexlib/cooker.py | 344 ++ poky/bitbake/lib/layerindexlib/plugin.py | 60 + poky/bitbake/lib/layerindexlib/restapi.py | 398 ++ poky/bitbake/lib/layerindexlib/tests/__init__.py | 0 poky/bitbake/lib/layerindexlib/tests/common.py | 43 + poky/bitbake/lib/layerindexlib/tests/cooker.py | 123 + .../lib/layerindexlib/tests/layerindexobj.py | 226 + poky/bitbake/lib/layerindexlib/tests/restapi.py | 184 + .../lib/layerindexlib/tests/testdata/README | 11 + .../tests/testdata/build/conf/bblayers.conf | 15 + .../tests/testdata/layer1/conf/layer.conf | 17 + .../tests/testdata/layer2/conf/layer.conf | 20 + .../tests/testdata/layer3/conf/layer.conf | 19 + .../tests/testdata/layer4/conf/layer.conf | 22 + .../toaster/bldcontrol/localhostbecontroller.py | 181 +- .../bldcontrol/management/commands/runbuilds.py | 2 +- poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml | 12 +- poky/bitbake/lib/toaster/orm/fixtures/poky.xml | 10 +- .../toaster/orm/management/commands/lsupdates.py | 228 +- .../orm/migrations/0018_project_specific.py | 28 + poky/bitbake/lib/toaster/orm/models.py | 67 +- poky/bitbake/lib/toaster/toastergui/api.py | 176 +- .../lib/toaster/toastergui/static/js/layerBtn.js | 12 + .../lib/toaster/toastergui/static/js/libtoaster.js | 108 +- .../lib/toaster/toastergui/static/js/mrbsection.js | 4 +- .../toastergui/static/js/newcustomimage_modal.js | 7 + .../toaster/toastergui/static/js/projecttopbar.js | 22 + poky/bitbake/lib/toaster/toastergui/tables.py | 12 +- .../toastergui/templates/base_specific.html | 128 + .../templates/baseprojectspecificpage.html | 48 + .../toastergui/templates/customise_btn.html | 6 +- .../templates/generic-toastertable-page.html | 2 +- .../toaster/toastergui/templates/importlayer.html | 4 +- .../toastergui/templates/landing_specific.html | 50 + .../toaster/toastergui/templates/layerdetails.html | 3 +- .../toaster/toastergui/templates/mrb_section.html | 2 +- .../toastergui/templates/newcustomimage.html | 4 +- .../toaster/toastergui/templates/newproject.html | 53 +- .../toastergui/templates/newproject_specific.html | 95 + .../lib/toaster/toastergui/templates/project.html | 7 +- .../toastergui/templates/project_specific.html | 162 + .../templates/project_specific_topbar.html | 80 + .../toaster/toastergui/templates/projectconf.html | 7 +- .../toastergui/templates/recipe_add_btn.html | 23 + poky/bitbake/lib/toaster/toastergui/urls.py | 13 + poky/bitbake/lib/toaster/toastergui/views.py | 165 +- poky/bitbake/lib/toaster/toastergui/widgets.py | 6 + .../toastermain/management/commands/builddelete.py | 6 +- .../toastermain/management/commands/buildimport.py | 584 +++ poky/bitbake/toaster-requirements.txt | 2 +- poky/documentation/Makefile | 3 +- .../brief-yoctoprojectqs/brief-yoctoprojectqs.xml | 41 +- poky/documentation/bsp-guide/bsp-guide.xml | 10 +- poky/documentation/bsp-guide/bsp.xml | 4 +- .../dev-manual/dev-manual-common-tasks.xml | 396 +- poky/documentation/dev-manual/dev-manual-intro.xml | 4 +- poky/documentation/dev-manual/dev-manual-start.xml | 448 +- poky/documentation/dev-manual/dev-manual.xml | 10 +- .../dev-manual/figures/multiconfig_files.png | Bin 0 -> 18611 bytes .../documentation/kernel-dev/kernel-dev-common.xml | 2 +- poky/documentation/kernel-dev/kernel-dev.xml | 10 +- .../mega-manual/figures/multiconfig_files.png | Bin 0 -> 18611 bytes poky/documentation/mega-manual/mega-manual.xml | 10 +- .../overview-manual/overview-manual-yp-intro.xml | 2 +- .../overview-manual/overview-manual.xml | 10 +- poky/documentation/poky.ent | 24 +- .../profile-manual/profile-manual-intro.xml | 4 +- .../profile-manual/profile-manual-usage.xml | 4 +- .../profile-manual/profile-manual.xml | 10 +- poky/documentation/ref-manual/migration.xml | 655 ++- poky/documentation/ref-manual/ref-classes.xml | 160 +- poky/documentation/ref-manual/ref-manual.xml | 10 +- .../ref-manual/ref-release-process.xml | 2 +- .../ref-manual/ref-system-requirements.xml | 45 +- poky/documentation/ref-manual/ref-tasks.xml | 11 +- poky/documentation/ref-manual/ref-terms.xml | 32 +- poky/documentation/ref-manual/ref-variables.xml | 853 +++- .../sdk-manual/sdk-appendix-customizing.xml | 76 +- .../sdk-manual/sdk-appendix-obtain.xml | 2 +- .../sdk-manual/sdk-eclipse-project.xml | 4 +- poky/documentation/sdk-manual/sdk-manual.xml | 10 +- .../toaster-manual/toaster-manual-start.xml | 2 +- .../toaster-manual/toaster-manual.xml | 10 +- poky/documentation/tools/mega-manual.sed | 48 +- poky/meta-poky/conf/distro/poky-lsb.conf | 1 - poky/meta-poky/conf/distro/poky-tiny.conf | 2 +- poky/meta-poky/conf/distro/poky.conf | 20 +- poky/meta-poky/conf/layer.conf | 2 +- poky/meta-poky/conf/local.conf.sample | 6 +- poky/meta-poky/conf/local.conf.sample.extended | 7 +- poky/meta-poky/conf/site.conf.sample | 4 +- poky/meta-selftest/conf/layer.conf | 2 +- .../lib/oeqa/runtime/cases/dnf_runtime.py | 2 +- .../recipes-test/aspell/aspell_0.0.0.1.bb | 5 +- .../selftest-hardlink/selftest-hardlink.bb | 30 + .../selftest-hardlink/selftest-hardlink/gdb.sh | 8 + .../selftest-hardlink/selftest-hardlink/hello.c | 5 + poky/meta-skeleton/conf/layer.conf | 2 +- poky/meta-yocto-bsp/conf/layer.conf | 2 +- .../conf/machine/beaglebone-yocto.conf | 6 +- poky/meta-yocto-bsp/conf/machine/edgerouter.conf | 4 +- .../conf/machine/include/genericx86-common.inc | 2 +- poky/meta-yocto-bsp/conf/machine/mpc8315e-rdb.conf | 10 +- .../lib/oeqa/selftest/cases/systemd_boot.py | 61 +- .../recipes-kernel/linux/linux-yocto-dev.bbappend | 15 + .../recipes-kernel/linux/linux-yocto_4.12.bbappend | 28 - .../recipes-kernel/linux/linux-yocto_4.14.bbappend | 20 +- .../recipes-kernel/linux/linux-yocto_4.15.bbappend | 27 - .../recipes-kernel/linux/linux-yocto_4.18.bbappend | 27 + poky/meta-yocto-bsp/wic/beaglebone-yocto.wks | 4 +- poky/meta/classes/allarch.bbclass | 14 +- poky/meta/classes/archiver.bbclass | 38 +- poky/meta/classes/autotools.bbclass | 4 +- poky/meta/classes/base.bbclass | 35 +- poky/meta/classes/buildhistory.bbclass | 5 +- poky/meta/classes/clutter.bbclass | 7 +- poky/meta/classes/cmake.bbclass | 2 - poky/meta/classes/compress_doc.bbclass | 7 +- poky/meta/classes/cpan.bbclass | 13 +- poky/meta/classes/cpan_build.bbclass | 2 +- poky/meta/classes/cross-canadian.bbclass | 2 +- poky/meta/classes/cross.bbclass | 1 - poky/meta/classes/devicetree.bbclass | 143 + poky/meta/classes/devtool-source.bbclass | 18 +- poky/meta/classes/distutils-common-base.bbclass | 12 + poky/meta/classes/distutils.bbclass | 26 +- poky/meta/classes/distutils3.bbclass | 26 +- poky/meta/classes/dos2unix.bbclass | 14 + poky/meta/classes/externalsrc.bbclass | 3 + poky/meta/classes/fontcache.bbclass | 2 +- poky/meta/classes/gio-module-cache.bbclass | 1 - poky/meta/classes/go.bbclass | 12 +- poky/meta/classes/goarch.bbclass | 8 +- poky/meta/classes/gobject-introspection.bbclass | 2 +- poky/meta/classes/gtk-immodules-cache.bbclass | 70 +- poky/meta/classes/icecc.bbclass | 2 +- poky/meta/classes/image-live.bbclass | 18 +- poky/meta/classes/image-mklibs.bbclass | 2 +- .../meta/classes/image-postinst-intercepts.bbclass | 23 + poky/meta/classes/image-prelink.bbclass | 2 +- poky/meta/classes/image.bbclass | 61 +- poky/meta/classes/image_types.bbclass | 2 +- poky/meta/classes/insane.bbclass | 155 +- poky/meta/classes/kernel-arch.bbclass | 2 + poky/meta/classes/kernel-artifact-names.bbclass | 18 + poky/meta/classes/kernel-devicetree.bbclass | 89 +- poky/meta/classes/kernel-fitimage.bbclass | 90 +- poky/meta/classes/kernel-uimage.bbclass | 2 +- poky/meta/classes/kernel-yocto.bbclass | 46 +- poky/meta/classes/kernel.bbclass | 122 +- poky/meta/classes/libc-common.bbclass | 4 - poky/meta/classes/libc-package.bbclass | 2 + poky/meta/classes/license.bbclass | 287 +- poky/meta/classes/license_image.bbclass | 238 + poky/meta/classes/linuxloader.bbclass | 125 +- poky/meta/classes/manpages.bbclass | 32 + poky/meta/classes/meson.bbclass | 106 +- poky/meta/classes/mime.bbclass | 2 +- poky/meta/classes/multilib.bbclass | 35 +- poky/meta/classes/multilib_global.bbclass | 5 +- poky/meta/classes/multilib_script.bbclass | 32 + poky/meta/classes/native.bbclass | 5 +- poky/meta/classes/nativesdk.bbclass | 6 +- poky/meta/classes/npm.bbclass | 13 +- poky/meta/classes/package.bbclass | 343 +- poky/meta/classes/package_deb.bbclass | 51 +- poky/meta/classes/package_ipk.bbclass | 51 +- poky/meta/classes/patch.bbclass | 2 +- poky/meta/classes/pixbufcache.bbclass | 2 +- poky/meta/classes/populate_sdk_base.bbclass | 28 +- poky/meta/classes/populate_sdk_ext.bbclass | 18 +- poky/meta/classes/python3native.bbclass | 6 +- poky/meta/classes/pythonnative.bbclass | 6 +- poky/meta/classes/reproducible_build.bbclass | 180 +- poky/meta/classes/rm_work.bbclass | 83 +- poky/meta/classes/rootfs-postcommands.bbclass | 46 +- poky/meta/classes/rootfs_deb.bbclass | 2 +- poky/meta/classes/rootfs_ipk.bbclass | 2 +- poky/meta/classes/rootfs_rpm.bbclass | 2 +- poky/meta/classes/setuptools.bbclass | 7 +- poky/meta/classes/setuptools3.bbclass | 4 - poky/meta/classes/siteinfo.bbclass | 21 +- poky/meta/classes/spdx.bbclass | 16 +- poky/meta/classes/sstate.bbclass | 86 +- poky/meta/classes/staging.bbclass | 16 +- poky/meta/classes/systemd.bbclass | 14 +- poky/meta/classes/terminal.bbclass | 3 +- poky/meta/classes/testexport.bbclass | 5 + poky/meta/classes/testimage-auto.bbclass | 23 - poky/meta/classes/testimage.bbclass | 54 +- poky/meta/classes/testsdk.bbclass | 21 +- poky/meta/classes/toolchain-scripts.bbclass | 34 +- poky/meta/classes/uboot-extlinux-config.bbclass | 2 +- poky/meta/classes/uninative.bbclass | 5 +- poky/meta/classes/update-rc.d.bbclass | 4 +- poky/meta/classes/useradd_base.bbclass | 4 +- poky/meta/classes/utils.bbclass | 30 +- poky/meta/conf/bitbake.conf | 44 +- poky/meta/conf/distro/include/as-needed.inc | 13 - .../conf/distro/include/default-distrovars.inc | 3 +- .../meta/conf/distro/include/default-providers.inc | 2 +- poky/meta/conf/distro/include/default-versions.inc | 3 - poky/meta/conf/distro/include/distro_alias.inc | 38 +- poky/meta/conf/distro/include/maintainers.inc | 798 ++-- poky/meta/conf/distro/include/no-static-libs.inc | 3 +- poky/meta/conf/distro/include/security_flags.inc | 26 +- poky/meta/conf/distro/include/tclibc-baremetal.inc | 13 +- poky/meta/conf/distro/include/tclibc-glibc.inc | 2 - poky/meta/conf/distro/include/tclibc-musl.inc | 3 +- poky/meta/conf/distro/include/tclibc-newlib.inc | 48 + poky/meta/conf/distro/include/tcmode-default.inc | 17 +- poky/meta/conf/distro/include/yocto-uninative.inc | 1 + poky/meta/conf/documentation.conf | 4 +- poky/meta/conf/layer.conf | 22 +- poky/meta/conf/machine-sdk/aarch64.conf | 2 + poky/meta/conf/machine/include/arm/arch-armv7a.inc | 1 + poky/meta/conf/machine/include/m68k/arch-m68k.inc | 8 + .../conf/machine/include/mips/tune-mips-74k.inc | 37 + poky/meta/conf/machine/include/qemu.inc | 2 +- poky/meta/conf/machine/include/tune-core2.inc | 2 +- poky/meta/conf/machine/include/tune-corei7.inc | 11 +- poky/meta/conf/machine/include/tune-mcf5441x.inc | 13 + poky/meta/conf/machine/include/x86-base.inc | 9 +- poky/meta/conf/machine/qemuarm.conf | 2 +- poky/meta/conf/machine/qemumips.conf | 2 - poky/meta/conf/machine/qemumips64.conf | 2 - poky/meta/conf/machine/qemux86-64.conf | 4 + poky/meta/conf/machine/qemux86.conf | 4 + poky/meta/conf/multilib.conf | 4 + poky/meta/conf/sanity.conf | 2 +- poky/meta/files/toolchain-shar-extract.sh | 1 + poky/meta/lib/bblayers/create.py | 10 +- poky/meta/lib/bblayers/templates/README | 12 +- poky/meta/lib/bblayers/templates/layer.conf | 15 +- poky/meta/lib/oe/buildhistory_analysis.py | 42 +- poky/meta/lib/oe/copy_buildsystem.py | 26 +- poky/meta/lib/oe/elf.py | 128 + poky/meta/lib/oe/gpg_sign.py | 15 +- poky/meta/lib/oe/maketype.py | 9 +- poky/meta/lib/oe/package.py | 126 +- poky/meta/lib/oe/package_manager.py | 200 +- poky/meta/lib/oe/patch.py | 3 +- poky/meta/lib/oe/path.py | 38 +- poky/meta/lib/oe/qa.py | 3 +- poky/meta/lib/oe/rootfs.py | 22 +- poky/meta/lib/oe/sdk.py | 83 +- poky/meta/lib/oe/sstatesig.py | 17 +- poky/meta/lib/oe/terminal.py | 6 +- poky/meta/lib/oe/types.py | 7 +- poky/meta/lib/oe/utils.py | 133 +- poky/meta/lib/oeqa/core/context.py | 11 +- poky/meta/lib/oeqa/core/decorator/data.py | 14 + poky/meta/lib/oeqa/core/decorator/depends.py | 16 +- poky/meta/lib/oeqa/core/loader.py | 2 + poky/meta/lib/oeqa/core/runner.py | 35 +- poky/meta/lib/oeqa/core/utils/concurrencytest.py | 259 ++ poky/meta/lib/oeqa/files/test.pl | 2 - poky/meta/lib/oeqa/files/test.py | 6 - poky/meta/lib/oeqa/manual/abat.patch | 64 + poky/meta/lib/oeqa/manual/bsp-hw.json | 1200 +++++ poky/meta/lib/oeqa/manual/bsp-qemu.json | 222 + poky/meta/lib/oeqa/manual/build-appliance.json | 122 + poky/meta/lib/oeqa/manual/crops.json | 294 ++ poky/meta/lib/oeqa/manual/eclipse-plugin.json | 322 ++ poky/meta/lib/oeqa/manual/kernel-dev.json | 200 + poky/meta/lib/oeqa/manual/oe-core.json | 260 ++ poky/meta/lib/oeqa/manual/sdk.json | 32 + poky/meta/lib/oeqa/runtime/cases/apt.py | 2 +- poky/meta/lib/oeqa/runtime/cases/dnf.py | 48 +- poky/meta/lib/oeqa/runtime/cases/ksample.py | 221 + poky/meta/lib/oeqa/runtime/cases/ldd.py | 15 +- poky/meta/lib/oeqa/runtime/cases/logrotate.py | 4 +- poky/meta/lib/oeqa/runtime/cases/oe_syslog.py | 12 +- poky/meta/lib/oeqa/runtime/cases/opkg.py | 7 +- poky/meta/lib/oeqa/runtime/cases/parselogs.py | 22 +- poky/meta/lib/oeqa/runtime/cases/perl.py | 32 +- poky/meta/lib/oeqa/runtime/cases/python.py | 38 +- poky/meta/lib/oeqa/runtime/cases/rpm.py | 28 +- poky/meta/lib/oeqa/runtime/cases/scanelf.py | 26 - poky/meta/lib/oeqa/runtime/cases/stap.py | 2 +- poky/meta/lib/oeqa/runtime/cases/systemd.py | 6 +- poky/meta/lib/oeqa/runtime/context.py | 14 +- poky/meta/lib/oeqa/sdk/cases/assimp.py | 63 + poky/meta/lib/oeqa/sdk/cases/buildgalculator.py | 6 +- poky/meta/lib/oeqa/sdk/cases/buildlzip.py | 4 +- poky/meta/lib/oeqa/sdk/cases/gcc.py | 4 +- poky/meta/lib/oeqa/sdk/cases/perl.py | 25 +- poky/meta/lib/oeqa/sdk/cases/python.py | 35 +- poky/meta/lib/oeqa/sdk/context.py | 31 +- poky/meta/lib/oeqa/sdk/utils/sdkbuildproject.py | 10 +- poky/meta/lib/oeqa/sdkext/cases/devtool.py | 8 - poky/meta/lib/oeqa/selftest/case.py | 10 +- poky/meta/lib/oeqa/selftest/cases/bblayers.py | 27 +- poky/meta/lib/oeqa/selftest/cases/bbtests.py | 12 +- poky/meta/lib/oeqa/selftest/cases/buildoptions.py | 23 + poky/meta/lib/oeqa/selftest/cases/devtool.py | 180 +- poky/meta/lib/oeqa/selftest/cases/distrodata.py | 4 +- .../lib/oeqa/selftest/cases/efibootpartition.py | 1 - poky/meta/lib/oeqa/selftest/cases/fetch.py | 49 + poky/meta/lib/oeqa/selftest/cases/image_typedep.py | 3 + poky/meta/lib/oeqa/selftest/cases/imagefeatures.py | 6 +- poky/meta/lib/oeqa/selftest/cases/lic_checksum.py | 3 +- poky/meta/lib/oeqa/selftest/cases/oelib/elf.py | 1 + poky/meta/lib/oeqa/selftest/cases/oelib/utils.py | 50 +- poky/meta/lib/oeqa/selftest/cases/oescripts.py | 17 +- poky/meta/lib/oeqa/selftest/cases/package.py | 67 +- poky/meta/lib/oeqa/selftest/cases/recipetool.py | 4 +- poky/meta/lib/oeqa/selftest/cases/runqemu.py | 21 +- poky/meta/lib/oeqa/selftest/cases/runtime_test.py | 9 +- poky/meta/lib/oeqa/selftest/cases/signing.py | 2 +- poky/meta/lib/oeqa/selftest/cases/sstatetests.py | 23 +- poky/meta/lib/oeqa/selftest/cases/wic.py | 239 +- poky/meta/lib/oeqa/selftest/context.py | 22 +- poky/meta/lib/oeqa/utils/httpserver.py | 37 +- poky/meta/lib/oeqa/utils/package_manager.py | 6 +- poky/meta/lib/oeqa/utils/qemurunner.py | 10 +- poky/meta/recipes-bsp/acpid/acpid_2.0.28.bb | 7 - poky/meta/recipes-bsp/acpid/acpid_2.0.30.bb | 7 + poky/meta/recipes-bsp/apmd/apmd/legacy.patch | 2 +- .../eee-acpi-scripts/eee-acpi-scripts_git.bb | 39 - .../eee-acpi-scripts/files/policy-funcs | 8 - .../eee-acpi-scripts/files/powerbtn.patch | 22 - .../eee-acpi-scripts/files/remove-doc-check.patch | 60 - .../gnu-efi/lib-Makefile-fix-parallel-issue.patch | 14 +- .../gnu-efi/gnu-efi/parallel-make-archives.patch | 16 +- poky/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.6.bb | 71 - poky/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.8.bb | 71 + ...-64-Treat-R_X86_64_PLT32-as-R_X86_64_PC32.patch | 76 + poky/meta/recipes-bsp/grub/grub-efi_2.02.bb | 3 + poky/meta/recipes-bsp/grub/grub2.inc | 5 +- poky/meta/recipes-bsp/pciutils/pciutils_3.5.6.bb | 58 - poky/meta/recipes-bsp/pciutils/pciutils_3.6.2.bb | 60 + .../pcmciautils-018/lex_sys_types.patch | 21 - .../pcmciautils/pcmciautils-018/makefile_fix.patch | 101 - .../pcmciautils-018/makefile_race.patch | 29 - poky/meta/recipes-bsp/pcmciautils/pcmciautils.inc | 34 - .../recipes-bsp/pcmciautils/pcmciautils_018.bb | 11 - ...0001-efi_loader-avoid-make-race-condition.patch | 51 - .../u-boot/files/CVE-2018-1000205-1.patch | 59 + .../u-boot/files/CVE-2018-1000205-2.patch | 143 + .../u-boot/files/MPC8315ERDB-enable-DHCP.patch | 19 - .../recipes-bsp/u-boot/u-boot-common_2018.01.inc | 17 - .../recipes-bsp/u-boot/u-boot-common_2018.07.inc | 18 + .../recipes-bsp/u-boot/u-boot-fw-utils_2018.01.bb | 34 - .../recipes-bsp/u-boot/u-boot-fw-utils_2018.07.bb | 34 + .../recipes-bsp/u-boot/u-boot-mkimage_2018.01.bb | 29 - .../recipes-bsp/u-boot/u-boot-mkimage_2018.07.bb | 29 + poky/meta/recipes-bsp/u-boot/u-boot.inc | 54 +- poky/meta/recipes-bsp/u-boot/u-boot_2018.01.bb | 4 - poky/meta/recipes-bsp/u-boot/u-boot_2018.07.bb | 4 + .../usb-devices-avoid-dependency-on-bash.patch | 32 +- poky/meta/recipes-bsp/usbutils/usbutils_009.bb | 34 - poky/meta/recipes-bsp/usbutils/usbutils_010.bb | 32 + .../v86d/v86d/Support-for-cross-compilation.patch | 34 + poky/meta/recipes-bsp/v86d/v86d/aarch64-host.patch | 18 - poky/meta/recipes-bsp/v86d/v86d_0.1.10.bb | 4 +- .../recipes-connectivity/avahi/avahi-ui_0.7.bb | 16 +- poky/meta/recipes-connectivity/avahi/avahi.inc | 84 +- poky/meta/recipes-connectivity/avahi/avahi_0.7.bb | 84 +- .../0001-Fix-opening-etc-resolv.conf-error.patch | 40 + .../0001-avoid-start-failure-with-bind-user.patch | 27 + ...igure.in-remove-useless-L-use_openssl-lib.patch | 32 + ...-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch | 13 +- .../0001-lib-dns-gen.c-fix-too-long-error.patch | 13 +- ...lwresd-V-and-start-log-hide-build-options.patch | 34 + .../bind/bind/CVE-2018-5740.patch | 72 + .../bind/bind/bind-confgen-build-unix.o-once.patch | 48 - ...-searching-for-json-headers-searches-sysr.patch | 13 +- .../bind/bind/dont-test-on-host.patch | 17 - .../use-python3-and-fix-install-lib-path.patch | 36 - poky/meta/recipes-connectivity/bind/bind_9.10.6.bb | 123 - poky/meta/recipes-connectivity/bind/bind_9.11.4.bb | 137 + poky/meta/recipes-connectivity/bluez5/bluez5.inc | 2 + ...-obexd-without-systemd-in-the-user-sessio.patch | 45 +- .../bluez5/0001-test-gatt-Fix-hung-issue.patch | 43 + .../recipes-connectivity/bluez5/bluez5_5.48.bb | 69 - .../recipes-connectivity/bluez5/bluez5_5.50.bb | 70 + ...resolve-musl-does-not-implement-res_ninit.patch | 8 + .../connman/connman/includes.patch | 14 +- poky/meta/recipes-connectivity/dhcp/dhcp.inc | 16 +- ...o-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.patch | 13 +- .../dhcp/dhcp/0003-link-with-lcrypto.patch | 13 +- .../dhcp/dhcp/0004-Fix-out-of-tree-builds.patch | 109 +- .../dhcp/0006-site.h-enable-gentle-shutdown.patch | 13 +- ...re-argument-to-make-the-libxml2-dependenc.patch | 40 +- .../dhcp/0008-tweak-to-support-external-bind.patch | 69 +- .../dhcp/dhcp/0010-build-shared-libs.patch | 205 - ...all-to-isc_app_ctxstart-to-not-get-signal.patch | 81 - ...correct-the-intention-for-xml2-lib-search.patch | 13 +- .../dhcp/dhcp/0013-fixup_use_libbind.patch | 64 + .../dhcp/dhcp/CVE-2017-3144.patch | 74 - poky/meta/recipes-connectivity/dhcp/dhcp_4.3.6.bb | 35 - poky/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb | 21 + .../recipes-connectivity/dhcp/files/dhcpd6.service | 2 +- .../recipes-connectivity/iproute2/iproute2.inc | 2 +- .../iproute2/0001-iproute2-de-bash-scripts.patch | 63 - .../iproute2/iproute2_4.14.1.bb | 15 - .../iproute2/iproute2_4.18.0.bb | 14 + .../libnss-mdns/libnss-mdns_0.10.bb | 17 +- .../multilibfix.patch | 18 + .../mobile-broadband-provider-info_git.bb | 5 +- .../files/bugfix-adjust-statd-service-name.patch | 31 - .../files/nfs-utils-debianize-start-statd.patch | 42 - ...clude-sys-types.h-for-getting-u_-typedefs.patch | 27 - .../libnfsidmap/Set_nobody_user_group.patch | 18 - .../nfs-utils/libnfsidmap/fix-ac-prereq.patch | 13 - .../nfs-utils/libnfsidmap_0.25.bb | 27 - ...gure-Allow-to-explicitly-disable-nfsidmap.patch | 40 - ...nclude-stdint.h-for-UINT16_MAX-definition.patch | 27 - .../bugfix-adjust-statd-service-name.patch | 31 + .../nfs-utils-1.2.3-sm-notify-res_init.patch | 37 - .../nfs-utils-debianize-start-statd.patch | 42 + .../nfs-utils/nfs-utils-musl-limits.patch | 133 + .../nfs-utils/nfs-utils-musl-res_querydomain.patch | 22 + .../nfs-utils/nfs-utils_2.1.1.bb | 150 - .../nfs-utils/nfs-utils_2.3.1.bb | 151 + poky/meta/recipes-connectivity/ofono/ofono_1.22.bb | 9 - poky/meta/recipes-connectivity/ofono/ofono_1.24.bb | 9 + ...able-ciphers-not-supported-by-OpenSSL-DES.patch | 39 - .../meta/recipes-connectivity/openssh/openssh/init | 12 +- .../openssh/openssh/ssh_config | 12 +- .../openssh/openssh/sshd_check_keys | 50 +- .../openssh/openssh/sshd_config | 30 +- .../recipes-connectivity/openssh/openssh_7.6p1.bb | 167 - .../openssh/openssh_7.8p1+git.bb | 164 + .../openssl/files/environment.d-openssl.sh | 1 + ...build-with-clang-using-external-assembler.patch | 45 - .../0001-allow-manpages-to-be-disabled.patch | 31 - ...penssl-force-soft-link-to-avoid-rare-race.patch | 46 - .../openssl/openssl-1.0.2p/Makefiles-ptest.patch | 89 - .../Use-SHA256-not-MD5-as-default-digest.patch | 69 - .../openssl-1.0.2p/configure-musl-target.patch | 25 - .../openssl/openssl-1.0.2p/configure-targets.patch | 35 - .../openssl-1.0.2p/debian/c_rehash-compat.patch | 71 - .../openssl-1.0.2p/debian/debian-targets.patch | 73 - .../openssl/openssl-1.0.2p/debian/man-dir.patch | 15 - .../openssl-1.0.2p/debian/man-section.patch | 34 - .../openssl/openssl-1.0.2p/debian/no-rpath.patch | 15 - .../openssl-1.0.2p/debian/no-symbolic.patch | 15 - .../openssl/openssl-1.0.2p/debian/pic.patch | 177 - .../debian1.0.2/block_digicert_malaysia.patch | 29 - .../debian1.0.2/block_diginotar.patch | 68 - .../openssl-1.0.2p/debian1.0.2/soname.patch | 15 - .../debian1.0.2/version-script.patch | 4658 -------------------- .../engines-install-in-libdir-ssl.patch | 64 - .../openssl/openssl-1.0.2p/oe-ldflags.patch | 24 - .../openssl/openssl-1.0.2p/openssl-c_rehash.sh | 222 - .../openssl-1.0.2p/openssl-fix-des.pod-error.patch | 19 - .../openssl-1.0.2p/openssl_fix_for_x32.patch | 39 - .../openssl/openssl-1.0.2p/parallel.patch | 368 -- .../openssl/openssl-1.0.2p/ptest-deps.patch | 34 - .../openssl-1.0.2p/ptest_makefile_deps.patch | 248 -- .../openssl-1.0.2p/reproducible-cflags.patch | 20 - .../openssl-1.0.2p/reproducible-mkbuildinf.patch | 21 - .../openssl/openssl-1.0.2p/run-ptest | 2 - .../openssl/openssl-1.0.2p/shared-libs.patch | 41 - ...1-Take-linking-flags-from-LDFLAGS-env-var.patch | 43 - ...trip-sysroot-and-debug-prefix-map-from-co.patch | 70 + .../openssl/0001-skip-test_symbol_presence.patch | 46 + .../openssl/openssl/0002-fix-CVE-2018-0734.patch | 108 + .../openssl/openssl/0003-fix-CVE-2018-0735.patch | 50 + .../openssl/openssl/environment.d-openssl.sh | 1 - .../recipes-connectivity/openssl/openssl/run-ptest | 14 +- ...build-with-clang-using-external-assembler.patch | 45 + .../0001-allow-manpages-to-be-disabled.patch | 31 + .../openssl/openssl10/0001-fix-CVE-2018-0734.patch | 33 + ...penssl-force-soft-link-to-avoid-rare-race.patch | 46 + .../openssl/openssl10/Makefiles-ptest.patch | 89 + .../Use-SHA256-not-MD5-as-default-digest.patch | 69 + .../openssl/openssl10/configure-musl-target.patch | 25 + .../openssl/openssl10/configure-targets.patch | 35 + .../openssl/openssl10/debian/c_rehash-compat.patch | 71 + .../openssl/openssl10/debian/debian-targets.patch | 73 + .../openssl/openssl10/debian/man-dir.patch | 15 + .../openssl/openssl10/debian/man-section.patch | 34 + .../openssl/openssl10/debian/no-rpath.patch | 15 + .../openssl/openssl10/debian/no-symbolic.patch | 15 + .../openssl/openssl10/debian/pic.patch | 177 + .../debian1.0.2/block_digicert_malaysia.patch | 29 + .../openssl10/debian1.0.2/block_diginotar.patch | 68 + .../openssl/openssl10/debian1.0.2/soname.patch | 15 + .../openssl10/debian1.0.2/version-script.patch | 4658 ++++++++++++++++++++ .../openssl10/engines-install-in-libdir-ssl.patch | 64 + .../openssl/openssl10/oe-ldflags.patch | 24 + .../openssl/openssl10/openssl-c_rehash.sh | 222 + .../openssl10/openssl-fix-des.pod-error.patch | 19 + .../openssl/openssl10/openssl_fix_for_x32.patch | 39 + .../openssl/openssl10/parallel.patch | 368 ++ .../openssl/openssl10/ptest-deps.patch | 34 + .../openssl/openssl10/ptest_makefile_deps.patch | 248 ++ .../openssl/openssl10/reproducible-cflags.patch | 20 + .../openssl10/reproducible-mkbuildinf.patch | 21 + .../openssl/openssl10/run-ptest | 2 + .../openssl/openssl10/shared-libs.patch | 41 + .../openssl/openssl10_1.0.2p.bb | 361 ++ .../recipes-connectivity/openssl/openssl_1.0.2p.bb | 344 -- .../recipes-connectivity/openssl/openssl_1.1.0i.bb | 170 - .../recipes-connectivity/openssl/openssl_1.1.1.bb | 205 + .../ppp/ppp/ppp-2.4.7-DES-openssl.patch | 84 + poky/meta/recipes-connectivity/ppp/ppp_2.4.7.bb | 9 +- .../recipes-connectivity/socat/socat_1.7.3.2.bb | 19 +- .../wireless-tools/avoid_strip.patch | 21 - .../wireless-tools/wireless-tools/ldflags.patch | 22 - .../wireless-tools/wireless-tools/man.patch | 15 - .../wireless-tools/remove.ldconfig.call.patch | 19 - .../wireless-tools/wireless-tools_30.pre9.bb | 50 - .../recipes-core/base-files/base-files/profile | 14 +- .../recipes-core/base-files/base-files_3.0.14.bb | 1 + .../recipes-core/busybox/busybox-inittab_1.27.2.bb | 32 - .../recipes-core/busybox/busybox-inittab_1.29.2.bb | 32 + poky/meta/recipes-core/busybox/busybox.inc | 128 +- .../busybox/busybox/CVE-2011-5325.patch | 481 -- .../busybox/busybox/CVE-2017-15873.patch | 95 - .../busybox/busybox/CVE-2017-15874.patch | 30 - .../busybox/busybox/busybox-CVE-2017-16544.patch | 43 - .../busybox/busybox-fix-lzma-segfaults.patch | 106 - .../busybox/busybox-udhcpc-no_deconfig.patch | 48 +- poky/meta/recipes-core/busybox/busybox/defconfig | 48 +- poky/meta/recipes-core/busybox/busybox/init.cfg | 2 +- .../busybox/busybox/umount-ignore-c.patch | 40 - poky/meta/recipes-core/busybox/busybox_1.27.2.bb | 55 - poky/meta/recipes-core/busybox/busybox_1.29.2.bb | 48 + poky/meta/recipes-core/busybox/files/runlevel | 11 - .../console-tools/console-tools_0.3.2.bb | 11 +- ...need_charset_alias-when-building-for-musl.patch | 33 - .../coreutils/coreutils/CVE-2017-18018-1.patch | 40 - .../coreutils/coreutils/CVE-2017-18018-2.patch | 83 - poky/meta/recipes-core/coreutils/coreutils_8.29.bb | 135 - poky/meta/recipes-core/coreutils/coreutils_8.30.bb | 139 + poky/meta/recipes-core/dbus/dbus-glib.inc | 39 - poky/meta/recipes-core/dbus/dbus-glib_0.108.bb | 4 - poky/meta/recipes-core/dbus/dbus-glib_0.110.bb | 39 + poky/meta/recipes-core/dbus/dbus-test_1.12.10.bb | 83 + poky/meta/recipes-core/dbus/dbus-test_1.12.2.bb | 82 - poky/meta/recipes-core/dbus/dbus/run-ptest | 2 +- poky/meta/recipes-core/dbus/dbus_1.12.10.bb | 176 + poky/meta/recipes-core/dbus/dbus_1.12.2.bb | 181 - poky/meta/recipes-core/dropbear/dropbear.inc | 14 +- .../0001-urandom-xauth-changes-to-options.h.patch | 16 +- .../dropbear/dropbear/0003-configure.patch | 43 - .../dropbear/dropbear/0004-fix-2kb-keys.patch | 19 - .../dropbear/0005-dropbear-enable-pam.patch | 40 +- .../0006-dropbear-configuration-file.patch | 23 +- .../dropbear/0007-dropbear-fix-for-x32-abi.patch | 140 - .../dropbear/dropbear/CVE-2018-15599.patch | 236 + .../dropbear/dropbear/dropbear.default | 2 + .../fix-libtomcrypt-libtommath-ordering.patch | 49 - .../meta/recipes-core/dropbear/dropbear_2017.75.bb | 5 - .../meta/recipes-core/dropbear/dropbear_2018.76.bb | 5 + poky/meta/recipes-core/expat/expat_2.2.5.bb | 23 - poky/meta/recipes-core/expat/expat_2.2.6.bb | 23 + .../0001-Do-not-ignore-return-value-of-write.patch | 17 +- ...stall-gio-querymodules-as-libexec_PROGRAM.patch | 14 +- ...st-for-pthread_getname_np-before-using-it.patch | 70 - .../Enable-more-tests-while-cross-compiling.patch | 29 +- ...un-media-sdX-drive-mount-if-username-root.patch | 39 - .../recipes-core/glib-2.0/glib-2.0/date-lt.patch | 20 + .../glib-2.0/glib-2.0/ptest-paths.patch | 30 - .../glib-2.0/glib-2.0/relocate-modules.patch | 13 +- poky/meta/recipes-core/glib-2.0/glib-2.0_2.54.3.bb | 24 - poky/meta/recipes-core/glib-2.0/glib-2.0_2.58.0.bb | 22 + poky/meta/recipes-core/glib-2.0/glib.inc | 25 +- .../glibc/cross-localedef-native_2.27.bb | 52 - .../glibc/cross-localedef-native_2.28.bb | 51 + poky/meta/recipes-core/glibc/glibc-collateral.inc | 1 + poky/meta/recipes-core/glibc/glibc-initial.inc | 6 +- poky/meta/recipes-core/glibc/glibc-initial_2.27.bb | 9 - poky/meta/recipes-core/glibc/glibc-initial_2.28.bb | 9 + poky/meta/recipes-core/glibc/glibc-ld.inc | 42 +- poky/meta/recipes-core/glibc/glibc-locale.inc | 4 +- poky/meta/recipes-core/glibc/glibc-locale_2.27.bb | 1 - poky/meta/recipes-core/glibc/glibc-locale_2.28.bb | 1 + poky/meta/recipes-core/glibc/glibc-mtrace_2.27.bb | 1 - poky/meta/recipes-core/glibc/glibc-mtrace_2.28.bb | 1 + poky/meta/recipes-core/glibc/glibc-package.inc | 20 +- poky/meta/recipes-core/glibc/glibc-scripts_2.27.bb | 1 - poky/meta/recipes-core/glibc/glibc-scripts_2.28.bb | 1 + poky/meta/recipes-core/glibc/glibc.inc | 12 +- ...libc-Look-for-host-system-ld.so.cache-as-.patch | 14 +- ...libc-Fix-buffer-overrun-with-a-relocated-.patch | 12 +- ...libc-Raise-the-size-of-arrays-containing-.patch | 20 +- ...ivesdk-glibc-Allow-64-bit-atomics-for-x86.patch | 7 +- ...500-e5500-e6500-603e-fsqrt-implementation.patch | 1584 ------- ...libc-Make-relocatable-install-for-locales.patch | 67 + ...500-e5500-e6500-603e-fsqrt-implementation.patch | 1581 +++++++ ...-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch | 33 - ...-Fix-undefined-reference-to-__sqrt_finite.patch | 208 - ...-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch | 29 + ...qrt-f-are-now-inline-functions-and-call-o.patch | 387 -- ...-Fix-undefined-reference-to-__sqrt_finite.patch | 205 + ...bug-1443-which-explains-what-the-patch-do.patch | 62 - ...qrt-f-are-now-inline-functions-and-call-o.patch | 384 ++ ...bug-1443-which-explains-what-the-patch-do.patch | 58 + ...n-libm-err-tab.pl-with-specific-dirs-in-S.patch | 36 - ...qrt-f-are-now-inline-functions-and-call-o.patch | 61 - ...n-libm-err-tab.pl-with-specific-dirs-in-S.patch | 33 + ...qrt-f-are-now-inline-functions-and-call-o.patch | 58 + ...-configure.ac-handle-correctly-libc_cv_ro.patch | 42 - .../glibc/glibc/0013-Add-unused-attribute.patch | 34 - ...-configure.ac-handle-correctly-libc_cv_ro.patch | 39 + .../glibc/glibc/0014-Add-unused-attribute.patch | 31 + ...thin-the-path-sets-wrong-config-variables.patch | 263 -- ...-timezone-re-written-tzselect-as-posix-sh.patch | 45 - ...thin-the-path-sets-wrong-config-variables.patch | 260 ++ ...move-bash-dependency-for-nscd-init-script.patch | 75 - ...-timezone-re-written-tzselect-as-posix-sh.patch | 42 + ...move-bash-dependency-for-nscd-init-script.patch | 72 + ...c-Cross-building-and-testing-instructions.patch | 619 --- ...c-Cross-building-and-testing-instructions.patch | 616 +++ ...018-eglibc-Help-bootstrap-cross-toolchain.patch | 100 - .../0019-eglibc-Clear-cache-lines-on-ppc8xx.patch | 83 - ...019-eglibc-Help-bootstrap-cross-toolchain.patch | 97 + .../0020-eglibc-Clear-cache-lines-on-ppc8xx.patch | 80 + ...0020-eglibc-Resolve-__fpscr_values-on-SH4.patch | 56 - .../glibc/0021-eglibc-Install-PIC-archives.patch | 123 - ...0021-eglibc-Resolve-__fpscr_values-on-SH4.patch | 53 + ...ward-port-cross-locale-generation-support.patch | 29 +- ...0023-Define-DUMMY_LOCALE_T-if-not-defined.patch | 7 +- ....c-Make-_dl_build_local_scope-breadth-fir.patch | 11 +- ...-locale-fix-hard-coded-reference-to-gcc-E.patch | 7 +- ...26-reset-dl_load_write_lock-after-forking.patch | 15 +- ...so-lock-before-switching-to-malloc_atfork.patch | 31 +- ...o-consts.h-enum-definition-for-TRAP_HWBKP.patch | 15 +- ...ncpy-with-memccpy-to-fix-Wstringop-trunca.patch | 40 - ...dd-to-archive-uses-a-hard-coded-locale-pa.patch | 89 + ...tl-Emit-no-lines-in-bison-generated-files.patch | 31 + .../0030-plural_c_no_preprocessor_lines.patch | 21 - .../glibc/0031-nativesdk-deprecate-libcrypt.patch | 419 -- ...e754-prevent-maybe-uninitialized-errors-w.patch | 258 ++ ...e754-soft-fp-ignore-maybe-uninitialized-w.patch | 100 + ...ent-maybe-uninitialized-errors-with-Os-BZ.patch | 68 + .../0034-inject-file-assembly-directives.patch | 272 ++ .../recipes-core/glibc/glibc/CVE-2017-18269.patch | 178 - .../recipes-core/glibc/glibc/CVE-2018-11236.patch | 164 - .../recipes-core/glibc/glibc/CVE-2018-11237.patch | 82 - .../recipes-core/glibc/glibc/archive-path.patch | 39 - poky/meta/recipes-core/glibc/glibc/etc/ld.so.conf | 1 + poky/meta/recipes-core/glibc/glibc/makedbs.sh | 177 + .../glibc/glibc/relocate-locales.patch | 55 - poky/meta/recipes-core/glibc/glibc_2.27.bb | 149 - poky/meta/recipes-core/glibc/glibc_2.28.bb | 135 + ...-6-.defn-fix-inverted-checks-for-loopback.patch | 38 +- .../images/build-appliance-image_15.0.0.bb | 10 +- .../images/core-image-minimal-initramfs.bb | 2 - .../images/core-image-tiny-initramfs.bb | 4 +- .../initrdscripts/files/init-install-efi.sh | 2 +- .../recipes-core/initrdscripts/files/init-live.sh | 7 +- .../initrdscripts/initramfs-framework/init | 2 +- .../initrdscripts/initramfs-framework/nfsrootfs | 48 + .../initrdscripts/initramfs-framework_1.0.bb | 8 + .../initramfs-live-install-efi_1.0.bb | 1 + .../initrdscripts/initramfs-live-install_1.0.bb | 1 + .../initramfs-module-install-efi_1.0.bb | 1 + .../initrdscripts/initramfs-module-install_1.0.bb | 1 + .../initscripts-1.0/populate-volatile.sh | 37 +- .../initscripts-1.0/read-only-rootfs-hook.sh | 9 +- .../meta/recipes-core/libxcrypt/libxcrypt_4.0.1.bb | 32 - .../meta/recipes-core/libxcrypt/libxcrypt_4.1.1.bb | 27 + ...1-Fix-infinite-loop-in-LZMA-decompression.patch | 55 + .../libxml/libxml2/CVE-2018-14404.patch | 58 - .../recipes-core/libxml/libxml2/ansidecl.patch | 25 - .../libxml/libxml2/fix-CVE-2017-8872.patch | 65 + .../libxml/libxml2/fix-CVE-2018-14404.patch | 45 + .../meta/recipes-core/libxml/libxml2/runtest.patch | 151 +- poky/meta/recipes-core/libxml/libxml2_2.9.7.bb | 111 - poky/meta/recipes-core/libxml/libxml2_2.9.8.bb | 113 + poky/meta/recipes-core/meta/buildtools-tarball.bb | 4 + poky/meta/recipes-core/meta/dummy-sdk-package.inc | 2 + poky/meta/recipes-core/meta/meta-environment.bb | 2 +- poky/meta/recipes-core/meta/meta-ide-support.bb | 2 +- poky/meta/recipes-core/meta/uninative-tarball.bb | 3 + poky/meta/recipes-core/musl/libssp-nonshared.bb | 39 + .../recipes-core/musl/libssp-nonshared/ssp-local.c | 45 + poky/meta/recipes-core/musl/musl-utils.bb | 2 + poky/meta/recipes-core/musl/musl.inc | 2 +- poky/meta/recipes-core/musl/musl_git.bb | 23 +- .../recipes-core/ncurses/files/0001-tic-hang.patch | 24 +- .../files/0002-configure-reproducible.patch | 8 +- poky/meta/recipes-core/ncurses/ncurses.inc | 1 + .../recipes-core/ncurses/ncurses_6.0+20171125.bb | 11 - .../recipes-core/ncurses/ncurses_6.1+20180630.bb | 11 + .../newlib/libgloss/fix-rs6000-crt0.patch | 41 + .../libgloss/fix_makefile_include_arm_h.patch | 30 + poky/meta/recipes-core/newlib/libgloss_3.0.0.bb | 33 + poky/meta/recipes-core/newlib/newlib.inc | 58 + poky/meta/recipes-core/newlib/newlib_3.0.0.bb | 19 + poky/meta/recipes-core/ovmf/ovmf_git.bb | 2 +- .../nativesdk-packagegroup-sdk-host.bb | 3 +- .../packagegroups/packagegroup-base.bb | 2 +- .../packagegroups/packagegroup-core-boot.bb | 1 + .../packagegroup-core-standalone-sdk-target.bb | 2 +- .../packagegroup-core-tools-profile.bb | 6 +- .../packagegroup-core-tools-testapps.bb | 7 +- .../packagegroups/packagegroup-go-sdk-target.bb | 2 + .../packagegroups/packagegroup-self-hosted.bb | 14 +- poky/meta/recipes-core/psplash/psplash_git.bb | 5 +- poky/meta/recipes-core/systemd/systemd-boot_237.bb | 70 - poky/meta/recipes-core/systemd/systemd-boot_239.bb | 69 + poky/meta/recipes-core/systemd/systemd-conf.bb | 53 + .../recipes-core/systemd/systemd-serialgetty.bb | 2 +- poky/meta/recipes-core/systemd/systemd.inc | 2 +- ...01-Also-check-i386-i586-and-i686-for-ia32.patch | 28 - ...rt_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch | 34 - ...ck-protector-flags-to-workaround-musl-bui.patch | 28 +- ...nv-when-secure-versions-are-not-available.patch | 10 +- ...t-install-dependency-links-at-install-tim.patch | 81 + ...sive-let-s-rework-the-recursive-logic-to-.patch | 219 + ....c-Change-the-default-device-timeout-to-2.patch | 30 - ...eserializing-state-always-use-read_line-L.patch | 250 ++ ...sure-we-have-enough-space-for-the-DHCP6-o.patch | 39 + ...arse_uid-when-unmounting-user-runtime-dir.patch | 110 + ...bus-make-BUS_DEFAULT_TIMEOUT-configurable.patch | 175 + ...t-install-dependency-links-at-install-tim.patch | 81 - .../0002-don-t-use-glibc-specific-qsort_r.patch | 183 + ...pper-instead-of-looking-for-relative-opti.patch | 64 + ...fn_t-is-glibc-specific-use-raw-signature-.patch | 40 + ...0003-implment-systemd-sysv-install-for-OE.patch | 43 + ...pper-instead-of-looking-for-relative-opti.patch | 64 - ...llback-parse_printf_format-implementation.patch | 432 ++ ...0004-implment-systemd-sysv-install-for-OE.patch | 43 - .../systemd/0004-rules-whitelist-hd-devices.patch | 33 + ...5-Make-root-s-home-directory-configurable.patch | 70 + ...clude-gshadow-only-if-ENABLE_GSHADOW-is-1.patch | 29 + .../systemd/0005-rules-whitelist-hd-devices.patch | 33 - ...6-Make-root-s-home-directory-configurable.patch | 78 - .../0006-remove-nobody-user-group-checking.patch | 63 + ...asic-missing.h-check-for-missing-strndupa.patch | 118 + .../systemd/0007-Include-netinet-if_ether.h.patch | 96 + ...evert-rules-remove-firmware-loading-rules.patch | 28 - ...les-watch-metadata-changes-in-ide-devices.patch | 43 + ...le-nss-tests-if-nss-systemd-is-not-enable.patch | 29 + ...-remove-userspace-firmware-loading-suppor.patch | 377 -- ...if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch | 153 + .../0009-add-missing-FTW_-macros-for-musl.patch | 50 + ...nes-Build-conditionally-when-ENABLE_MYHOS.patch | 43 + .../0009-remove-duplicate-include-uchar.h.patch | 41 - .../0010-check-for-uchar.h-in-meson.build.patch | 45 - ...il-don-t-fail-if-libc-doesn-t-support-IDN.patch | 38 + ...il-don-t-fail-if-libc-doesn-t-support-IDN.patch | 39 - ...issing.h-check-for-missing-__compar_fn_t-.patch | 48 + ...-of-__register_atfork-for-non-glibc-build.patch | 45 + ...les-watch-metadata-changes-in-ide-devices.patch | 43 - .../0013-Use-uintmax_t-for-handling-rlim_t.patch | 90 + ...llback-parse_printf_format-implementation.patch | 431 -- ...-ULONG_LONG_MAX-definition-in-case-of-mus.patch | 30 + ...asic-missing.h-check-for-missing-strndupa.patch | 118 - ...if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch | 157 - ...exdecoct.c-Include-missing.h-for-strndupa.patch | 28 + ...issing.h-check-for-missing-__compar_fn_t-.patch | 47 - ....c-Disable-tests-for-missing-typedefs-in-.patch | 42 + .../systemd/0017-Include-netinet-if_ether.h.patch | 85 - ...ass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch | 99 + ...c-compatible-basename-for-non-glibc-syste.patch | 34 + ...-check-for-missing-canonicalize_file_name.patch | 47 - ...ble-buffering-when-writing-to-oom_score_a.patch | 39 + ...le-nss-tests-if-nss-systemd-is-not-enable.patch | 29 - ...-XSI-compliant-strerror_r-from-GNU-specif.patch | 62 + ...exdecoct.c-Include-missing.h-for-strndupa.patch | 28 - ...rt_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch | 34 + ....c-Disable-tests-for-missing-typedefs-in-.patch | 42 - ...etect-whether-struct-statx-is-defined-in-.patch | 109 + .../0022-don-t-use-glibc-specific-qsort_r.patch | 105 - ...ass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch | 99 - ...onf-fixes-for-the-compatibility-interface.patch | 58 + ...fn_t-is-glibc-specific-use-raw-signature-.patch | 31 - ...PATH_WTMPX-and-_PATH_UTMPX-if-not-defined.patch | 43 - .../0026-Use-uintmax_t-for-handling-rlim_t.patch | 89 - .../0027-remove-nobody-user-group-checking.patch | 63 - .../0028-add-missing-FTW_-macros-for-musl.patch | 50 - ...nes-Build-conditionally-when-ENABLE_MYHOS.patch | 43 - ...-of-__register_atfork-for-non-glibc-build.patch | 45 - ...-ULONG_LONG_MAX-definition-in-case-of-mus.patch | 30 - .../recipes-core/systemd/systemd/0032-memfd.patch | 272 -- ...cros-rename-noreturn-into-_noreturn_-8456.patch | 203 - ...truncation-compile-failure-by-typecasting.patch | 173 - ...c-compatible-basename-for-non-glibc-syste.patch | 33 - .../recipes-core/systemd/systemd/libmount.patch | 75 - poky/meta/recipes-core/systemd/systemd_237.bb | 595 --- poky/meta/recipes-core/systemd/systemd_239.bb | 606 +++ ...-sysmacros.h-for-major-minor-defines-in-g.patch | 71 + .../meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb | 3 +- poky/meta/recipes-core/udev/eudev_3.2.5.bb | 10 +- .../meta/recipes-core/udev/udev-extraconf/mount.sh | 111 +- poky/meta/recipes-core/udev/udev-extraconf_1.1.bb | 3 + .../update-rc.d/update-rc.d/add-verbose.patch | 49 - .../update-rc.d/check-if-symlinks-are-valid.patch | 59 - .../fix-to-handle-priority-numbers-correctly.patch | 28 - .../recipes-core/update-rc.d/update-rc.d_0.7.bb | 33 - .../recipes-core/update-rc.d/update-rc.d_0.8.bb | 26 + poky/meta/recipes-core/util-linux/util-linux.inc | 35 +- .../recipes-core/util-linux/util-linux_2.32.1.bb | 2 - .../volatile-binds/files/mount-copybind | 30 +- poky/meta/recipes-devtools/autoconf/autoconf.inc | 31 +- ...utomake-Add-default-libtool_tag-to-cppasm.patch | 18 +- .../0001-build-fix-race-in-parallel-builds.patch | 65 + ...tion-in-shebangs-with-modern-use-warnings.patch | 68 +- .../automake/automake/buildtest.patch | 20 +- .../automake/new_rt_path_for_test-driver.patch | 22 +- .../automake/automake/performance.patch | 19 +- .../automake/automake/python-libdir.patch | 19 +- .../recipes-devtools/automake/automake_1.15.1.bb | 43 - .../recipes-devtools/automake/automake_1.16.1.bb | 44 + .../recipes-devtools/binutils/binutils-2.30.inc | 56 - .../recipes-devtools/binutils/binutils-2.31.inc | 55 + .../binutils/binutils-cross-canadian_2.30.bb | 3 - .../binutils/binutils-cross-canadian_2.31.bb | 3 + .../binutils/binutils-cross_2.30.bb | 3 - .../binutils/binutils-cross_2.31.bb | 3 + .../binutils/binutils-crosssdk_2.30.bb | 13 - .../binutils/binutils-crosssdk_2.31.bb | 13 + poky/meta/recipes-devtools/binutils/binutils.inc | 11 +- ...ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch | 176 - ...nutils-crosssdk-Generate-relocatable-SDKs.patch | 12 +- ...oss-Do-not-generate-linker-script-directo.patch | 22 +- ...ure-widen-the-regexp-for-SH-architectures.patch | 12 +- .../0004-Point-scripts-location-to-libdir.patch | 10 +- ...te-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch | 10 +- .../binutils/binutils/0006-Use-libtool-2.4.patch | 2296 +++++----- ...7-Add-the-armv5e-architecture-to-binutils.patch | 8 +- ...he-distro-compiler-point-to-the-wrong-ins.patch | 4 +- ...es-of-system-directories-when-cross-linki.patch | 50 +- ...-rpath-in-libtool-when-sysroot-is-enabled.patch | 4 +- ...Change-default-emulation-for-mips64-linux.patch | 12 +- .../0012-Add-support-for-Netlogic-XLP.patch | 80 +- ...ncorrect-assembling-for-ppc-wait-mnemonic.patch | 10 +- .../binutils/0014-Detect-64-bit-MIPS-targets.patch | 4 +- .../0015-sync-with-OE-libtool-changes.patch | 4 +- .../0016-add-i386pep-emulation-for-x86_64.patch | 41 + ...check-for-input-file-matching-output-file.patch | 59 + ...location-where-GOT-information-is-collect.patch | 201 + ...bustness.-Return-FALSE-in-case-of-NULL-po.patch | 38 + ...lobal-symbol-is-not-an-indirect-or-warnin.patch | 46 + ...tion-was-still-being-generated-when-symbo.patch | 40 + .../binutils/binutils/CVE-2018-10372.patch | 58 - .../binutils/binutils/CVE-2018-10373.patch | 45 - .../binutils/binutils/CVE-2018-10534.patch | 3429 -------------- .../binutils/binutils/CVE-2018-10535.patch | 61 - .../binutils/binutils/CVE-2018-17358.patch | 144 + .../binutils/binutils/CVE-2018-17360.patch | 65 + .../binutils/binutils/CVE-2018-18309.patch | 308 ++ .../binutils/binutils/CVE-2018-18605.patch | 47 + .../binutils/binutils/CVE-2018-18606.patch | 70 + .../binutils/binutils/CVE-2018-18607.patch | 77 + .../binutils/binutils/CVE-2018-6759.patch | 108 - .../binutils/binutils/CVE-2018-6872.patch | 50 - .../binutils/binutils/CVE-2018-7208.patch | 47 - .../binutils/binutils/CVE-2018-7568.patch | 85 - .../binutils/binutils/CVE-2018-7569.patch | 119 - .../binutils/binutils/CVE-2018-7642.patch | 51 - .../binutils/binutils/CVE-2018-7643.patch | 102 - .../binutils/binutils/CVE-2018-8945.patch | 70 - .../recipes-devtools/binutils/binutils_2.30.bb | 49 - .../recipes-devtools/binutils/binutils_2.31.bb | 49 + poky/meta/recipes-devtools/bison/bison_3.0.4.bb | 4 + ...ed-Missing-default-value-for-BOOTLOG_DEST.patch | 30 - .../bootchart2/bootchart2_0.14.8.bb | 4 +- ...Add-LDFLAGS-when-building-libbtrfsutil.so.patch | 35 + ...bility-to-specify-where-python-modules-ar.patch | 25 + ...ith-musl-missing-header-include-for-dev_t.patch | 26 - .../btrfs-tools/btrfs-tools_4.13.3.bb | 39 - .../btrfs-tools/btrfs-tools_4.17.1.bb | 44 + poky/meta/recipes-devtools/ccache/ccache_3.3.5.bb | 12 - poky/meta/recipes-devtools/ccache/ccache_3.4.2.bb | 11 + .../0002-dev.mk.in-fix-file-name-too-long.patch | 15 +- ...te-man-page-in-the-make-install-from-git-.patch | 33 - .../recipes-devtools/cmake/cmake-native_3.10.3.bb | 38 - .../recipes-devtools/cmake/cmake-native_3.12.2.bb | 50 + poky/meta/recipes-devtools/cmake/cmake.inc | 18 +- ...ineSystem-use-oe-environment-vars-to-load.patch | 47 + ...oost-1.66.0-dependency-and-release-update.patch | 52 - ...ix-incorrect-alphabetisation-of-headers-l.patch | 29 - ...mplement-Architecture-and-Address-Model-t.patch | 132 - .../0002-cmake-Prevent-the-detection-of-Qt5.patch | 122 + ...earch-for-upstream-packaged-libs-next-to-.patch | 31 - ...upport-OpenEmbedded-Qt4-tool-binary-names.patch | 59 + ...ently-if-system-Qt-installation-is-broken.patch | 82 + ...-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch | 40 + .../cmake/cmake/OEToolchainConfig.cmake | 3 + .../cmake/cmake-Prevent-the-detection-of-Qt5.patch | 215 - .../cmake/cmake/cmlibarchive-disable-ext2fs.patch | 26 - .../cmake/cmake/environment.d-cmake.sh | 3 +- .../cmake/cmake/qt4-fail-silent.patch | 77 - .../cmake/cmake/support-oe-qt4-tools-names.patch | 58 - poky/meta/recipes-devtools/cmake/cmake_3.10.3.bb | 51 - poky/meta/recipes-devtools/cmake/cmake_3.12.2.bb | 53 + .../createrepo-c/createrepo-c_git.bb | 11 +- .../desktop-file-utils-native_0.23.bb | 18 - .../desktop-file-utils/desktop-file-utils_0.23.bb | 19 + .../diffstat/avoid-check-user-break-cc.patch | 32 + .../recipes-devtools/diffstat/diffstat_1.61.bb | 27 - .../recipes-devtools/diffstat/diffstat_1.62.bb | 28 + poky/meta/recipes-devtools/distcc/distcc_3.2.bb | 69 - poky/meta/recipes-devtools/distcc/distcc_3.3.2.bb | 71 + .../files/0001-zeroconf-Include-fcntl.h.patch | 29 - poky/meta/recipes-devtools/distcc/files/default | 4 +- .../recipes-devtools/dmidecode/dmidecode_3.1.bb | 4 + poky/meta/recipes-devtools/dnf/dnf_2.7.5.bb | 1 + .../dwarfsrcfiles/dwarfsrcfiles.bb | 2 +- poky/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc | 2 +- ...ix-build-failure-in-swapfs.c-on-big-endia.patch | 40 - ...fs-enable-the-metadata_csum-and-64bit-fea.patch | 12 +- .../e2fsprogs/e2fsprogs/ptest.patch | 58 +- .../recipes-devtools/e2fsprogs/e2fsprogs_1.43.8.bb | 120 - .../recipes-devtools/e2fsprogs/e2fsprogs_1.44.3.bb | 135 + .../recipes-devtools/elfutils/elfutils_0.170.bb | 70 - .../recipes-devtools/elfutils/elfutils_0.174.bb | 77 + ...-packed-structs-follow-the-gcc-memory-lay.patch | 34 - .../files/0001-Use-fallthrough-attribute.patch | 791 ---- ...01-arlib-Check-that-sh_entsize-isn-t-zero.patch | 36 + .../elfutils/files/0001-dso-link-change.patch | 8 +- ...0001-libasm-may-link-with-libbz2-if-found.patch | 13 +- ...Sanity-check-partial-core-file-data-reads.patch | 60 + ...end.c-check-data_list.data.d.d_buf-before.patch | 46 + .../0001-size-Handle-recursive-ELF-ar-files.patch | 40 + ...-elf_cvt_gunhash-if-dest-and-src-are-same.patch | 4 +- .../elfutils/files/0003-fixheadercheck.patch | 6 +- .../0004-Disable-the-test-to-convert-euc-jp.patch | 4 +- .../files/0005-fix-a-stack-usage-warning.patch | 8 +- .../files/0006-Fix-build-on-aarch64-musl.patch | 4 +- ...-path-where-we-have-str-as-uninitialized-.patch | 12 +- ...de-alternatives-for-glibc-assumptions-hel.patch | 873 +--- ...ferences-between-mips-machine-identifiers.patch | 7 +- .../elfutils/files/debian/0001-arm_backend.patch | 627 +++ .../files/debian/0001-disable_werror.patch | 35 + .../files/debian/0001-fix-gcc7-ftbfs.patch | 57 + .../elfutils/files/debian/0001-hppa_backend.patch | 840 ++++ .../elfutils/files/debian/0001-mips_backend.patch | 718 +++ .../files/debian/0001-mips_readelf_w.patch | 39 + .../debian/0001-testsuite-ignore-elflint.patch | 57 + ...-support-for-mips64-abis-in-mips_retval.c.patch | 6 +- .../0003-Add-mips-n64-relocation-format-hack.patch | 8 +- .../elfutils/files/debian/arm_backend.diff | 603 --- .../elfutils/files/debian/hppa_backend.diff | 802 ---- .../elfutils/files/debian/ignore_strmerge.diff | 14 + .../elfutils/files/debian/mips_backend.patch | 715 --- .../elfutils/files/debian/mips_readelf_w.patch | 25 - poky/meta/recipes-devtools/fdisk/gptfdisk_1.0.3.bb | 26 - poky/meta/recipes-devtools/fdisk/gptfdisk_1.0.4.bb | 33 + .../file/0001-Add-P-prompt-into-Usage-info.patch | 39 - poky/meta/recipes-devtools/file/file_5.32.bb | 48 - poky/meta/recipes-devtools/file/file_5.34.bb | 50 + poky/meta/recipes-devtools/gcc/gcc-7.3.inc | 9 +- .../gcc/gcc-7.3/0008-c99-snprintf.patch | 28 - ...049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch | 204 + poky/meta/recipes-devtools/gcc/gcc-8.2.inc | 127 + .../0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch | 42 + .../0003-gcc-poison-system-directories.patch | 194 + .../0005-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch | 73 + .../gcc/gcc-8.2/0006-64-bit-multilib-hack.patch | 85 + .../gcc/gcc-8.2/0007-optional-libstdc.patch | 125 + ...0008-gcc-disable-MASK_RELAX_PIC_CALLS-bit.patch | 59 + .../gcc/gcc-8.2/0009-COLLECT_GCC_OPTIONS.patch | 38 + ...efaults.h-in-B-instead-of-S-and-t-oe-in-B.patch | 96 + .../gcc-8.2/0011-fortran-cross-compile-hack.patch | 46 + .../gcc/gcc-8.2/0012-cpp-honor-sysroot.patch | 54 + .../gcc-8.2/0013-MIPS64-Default-to-N64-ABI.patch | 57 + ...C_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch | 248 ++ ...0015-gcc-Fix-argument-list-too-long-error.patch | 40 + .../gcc/gcc-8.2/0016-Disable-sdt.patch | 113 + .../gcc/gcc-8.2/0017-libtool.patch | 42 + ...4-pass-fix-v4bx-to-linker-to-support-EABI.patch | 43 + ...tilib-config-files-from-B-instead-of-usin.patch | 102 + ...-libdir-from-.la-which-usually-points-to-.patch | 31 + .../gcc/gcc-8.2/0021-export-CPP.patch | 53 + ...-MULTILIB_OSDIRNAMES-and-other-multilib-o.patch | 42 + ...Ensure-target-gcc-headers-can-be-included.patch | 98 + ...-t-build-with-disable-dependency-tracking.patch | 54 + ...h-host-directory-during-relink-if-inst_pr.patch | 38 + ...IBS_DIR-replacement-instead-of-hardcoding.patch | 29 + .../0027-aarch64-Add-support-for-musl-ldso.patch | 28 + ...ibcc1-fix-libcc1-s-install-path-and-rpath.patch | 54 + ...-handle-sysroot-support-for-nativesdk-gcc.patch | 213 + ...et-sysroot-gcc-version-specific-dirs-with.patch | 102 + ...-various-_FOR_BUILD-and-related-variables.patch | 137 + .../0032-nios2-Define-MUSL_DYNAMIC_LINKER.patch | 28 + ...shared-to-link-commandline-for-musl-targe.patch | 87 + ...34-libgcc-Add-knob-to-use-ldbl-128-on-ppc.patch | 125 + ...bgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch | 29 + ...e-alias-for-__cpu_indicator_init-instead-.patch | 86 + .../gcc-8.2/0037-sync-gcc-stddef.h-with-musl.patch | 91 + ...ation-fault-in-precompiled-header-generat.patch | 60 + .../gcc-8.2/0039-Fix-for-testsuite-failure.patch | 258 ++ ...0040-Re-introduce-spe-commandline-options.patch | 41 + .../gcc/gcc-8.2/0041-ARC-fix-spec-gen.patch | 44 + poky/meta/recipes-devtools/gcc/gcc-common.inc | 2 +- .../recipes-devtools/gcc/gcc-cross-canadian.inc | 5 - .../recipes-devtools/gcc/gcc-cross-canadian_8.2.bb | 5 + .../recipes-devtools/gcc/gcc-cross-initial_8.2.bb | 2 + poky/meta/recipes-devtools/gcc/gcc-cross.inc | 2 +- poky/meta/recipes-devtools/gcc/gcc-cross_8.2.bb | 3 + .../gcc/gcc-crosssdk-initial_8.2.bb | 3 + poky/meta/recipes-devtools/gcc/gcc-crosssdk_8.2.bb | 2 + poky/meta/recipes-devtools/gcc/gcc-runtime.inc | 5 +- poky/meta/recipes-devtools/gcc/gcc-runtime_8.2.bb | 12 + poky/meta/recipes-devtools/gcc/gcc-sanitizers.inc | 1 + .../recipes-devtools/gcc/gcc-sanitizers_8.2.bb | 7 + poky/meta/recipes-devtools/gcc/gcc-source_8.2.bb | 4 + poky/meta/recipes-devtools/gcc/gcc-target.inc | 18 +- poky/meta/recipes-devtools/gcc/gcc_8.2.bb | 14 + poky/meta/recipes-devtools/gcc/libgcc-common.inc | 5 + .../recipes-devtools/gcc/libgcc-initial_8.2.bb | 5 + poky/meta/recipes-devtools/gcc/libgcc_8.2.bb | 5 + poky/meta/recipes-devtools/gcc/libgfortran_8.2.bb | 3 + poky/meta/recipes-devtools/gdb/gdb-8.0.1.inc | 24 - poky/meta/recipes-devtools/gdb/gdb-8.2.inc | 23 + poky/meta/recipes-devtools/gdb/gdb-common.inc | 6 +- .../gdb/gdb-cross-canadian_8.0.1.bb | 3 - .../recipes-devtools/gdb/gdb-cross-canadian_8.2.bb | 3 + poky/meta/recipes-devtools/gdb/gdb-cross_8.0.1.bb | 2 - poky/meta/recipes-devtools/gdb/gdb-cross_8.2.bb | 2 + .../gdb/0001-include-sys-types.h-for-mode_t.patch | 15 +- ...0002-make-man-install-relative-to-DESTDIR.patch | 8 +- ...s-linux-nat-Define-_ABIO32-if-not-defined.patch | 26 +- ...Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch | 14 +- ...d-support-for-Renesas-SH-sh4-architecture.patch | 64 +- ...e-libreadline.a-when-using-disable-static.patch | 10 +- .../gdb/gdb/0007-use-asm-sgidefs.h.patch | 8 +- .../0008-Use-exorted-definitions-of-SIGRTMIN.patch | 12 +- .../gdb/gdb/0009-Change-order-of-CFLAGS.patch | 10 +- .../0010-resolve-restrict-keyword-conflict.patch | 8 +- .../gdb/0011-Fix-invalid-sigprocmask-call.patch | 49 + .../gdb/0012-Unbreak-GDBserver-build-for-x32.patch | 101 - ...4-defining-TRAP_HWBKPT-before-including-g.patch | 56 - .../gdb/gdb/gdbserver-ctrl-c-handling.patch | 26 + ..._gdb_patches_120-sigprocmask-invalid-call.patch | 45 - poky/meta/recipes-devtools/gdb/gdb_8.0.1.bb | 27 - poky/meta/recipes-devtools/gdb/gdb_8.2.bb | 29 + .../git/files/CVE-2018-11233.patch | 44 - .../git/files/CVE-2018-11235.patch | 288 -- poky/meta/recipes-devtools/git/git.inc | 16 +- poky/meta/recipes-devtools/git/git_2.16.1.bb | 11 - poky/meta/recipes-devtools/git/git_2.18.1.bb | 11 + poky/meta/recipes-devtools/glide/glide_0.13.1.bb | 15 - poky/meta/recipes-devtools/glide/glide_0.13.2.bb | 35 + .../gnu-config/gnu-config/musl-support.patch | 25 - .../gnu-config/gnu-config_20120814.bb | 40 - .../recipes-devtools/gnu-config/gnu-config_git.bb | 6 +- poky/meta/recipes-devtools/go/go-1.10.inc | 24 - ...1-allow-CC-and-CXX-to-have-multiple-words.patch | 33 - ...-content-based-hash-generation-less-pedan.patch | 220 - ...OLDIR-to-be-overridden-in-the-environment.patch | 64 - .../0004-ld-add-soname-to-shareable-objects.patch | 47 - ...verride-CC-when-building-dist-and-go_boot.patch | 40 - ...-cmd-dist-separate-host-and-target-builds.patch | 277 -- ...07-cmd-go-make-GOROOT-precious-by-default.patch | 108 - ...l-obj-arm64-fix-branch-too-far-with-TBZ-l.patch | 58 - ...ld-replace-glibc-dynamic-linker-with-musl.patch | 130 - poky/meta/recipes-devtools/go/go-1.11.inc | 23 + ...1-allow-CC-and-CXX-to-have-multiple-words.patch | 31 + ...-content-based-hash-generation-less-pedan.patch | 218 + ...OLDIR-to-be-overridden-in-the-environment.patch | 48 + .../0004-ld-add-soname-to-shareable-objects.patch | 45 + ...verride-CC-when-building-dist-and-go_boot.patch | 37 + ...-cmd-dist-separate-host-and-target-builds.patch | 282 ++ ...07-cmd-go-make-GOROOT-precious-by-default.patch | 106 + ...ld-replace-glibc-dynamic-linker-with-musl.patch | 128 + .../recipes-devtools/go/go-cross-canadian_1.10.bb | 2 - .../recipes-devtools/go/go-cross-canadian_1.11.bb | 2 + poky/meta/recipes-devtools/go/go-cross.inc | 4 +- poky/meta/recipes-devtools/go/go-cross_1.10.bb | 2 - poky/meta/recipes-devtools/go/go-cross_1.11.bb | 2 + poky/meta/recipes-devtools/go/go-crosssdk_1.10.bb | 2 - poky/meta/recipes-devtools/go/go-crosssdk_1.11.bb | 2 + poky/meta/recipes-devtools/go/go-dep_0.4.1.bb | 20 - poky/meta/recipes-devtools/go/go-dep_0.5.0.bb | 35 + poky/meta/recipes-devtools/go/go-native.inc | 6 +- poky/meta/recipes-devtools/go/go-native_1.10.bb | 2 - poky/meta/recipes-devtools/go/go-native_1.11.bb | 2 + poky/meta/recipes-devtools/go/go-runtime.inc | 2 +- poky/meta/recipes-devtools/go/go-runtime_1.10.bb | 2 - poky/meta/recipes-devtools/go/go-runtime_1.11.bb | 2 + poky/meta/recipes-devtools/go/go-target.inc | 2 +- poky/meta/recipes-devtools/go/go_1.10.bb | 2 - poky/meta/recipes-devtools/go/go_1.11.bb | 2 + poky/meta/recipes-devtools/go/go_1.9.bb | 7 + .../help2man/help2man-native_1.47.5.bb | 25 - .../help2man/help2man-native_1.47.6.bb | 25 + .../recipes-devtools/i2c-tools/i2c-tools_4.0.bb | 9 + .../icecc-toolchain/icecc-toolchain/icecc-setup.sh | 5 - .../icon-naming-utils/icon-naming-utils_0.8.90.bb | 30 - poky/meta/recipes-devtools/json-c/json-c_0.13.1.bb | 30 + poky/meta/recipes-devtools/json-c/json-c_0.13.bb | 31 - .../libtool/libtool-cross_2.4.6.bb | 8 + .../libtool/libtool/multilib.patch | 23 + .../meta/recipes-devtools/libtool/libtool_2.4.6.bb | 6 + ...1-Disable-generating-a-native-llvm-config.patch | 41 - .../0002-llvm-allow-env-override-of-exe-path.patch | 47 +- poky/meta/recipes-devtools/llvm/llvm_git.bb | 18 +- poky/meta/recipes-devtools/meson/meson.inc | 28 + ...01-Support-building-allarch-recipes-again.patch | 28 + ...ix-issues-that-arise-when-cross-compiling.patch | 56 +- .../0002-Make-CPU-family-warnings-fatal.patch | 36 + ...rospection-determine-g-ir-scanner-and-g-i.patch | 17 +- .../meson/meson/0003-native_bindir.patch | 69 +- .../recipes-devtools/meson/meson/gi-flags.patch | 35 + .../meson/meson/gtkdoc-flags.patch | 44 + .../recipes-devtools/meson/meson/meson-setup.py | 62 + .../recipes-devtools/meson/meson/meson-wrapper | 14 + poky/meta/recipes-devtools/meson/meson_0.44.1.bb | 21 - poky/meta/recipes-devtools/meson/meson_0.47.2.bb | 3 + .../meson/nativesdk-meson_0.47.2.bb | 74 + poky/meta/recipes-devtools/mtd/mtd-utils_git.bb | 4 +- ...01-remove-LOCK_NB-to-use-blocking-request.patch | 44 + .../mtools/mtools/clang_UNUSED.patch | 17 + poky/meta/recipes-devtools/mtools/mtools_4.0.18.bb | 2 + .../opkg-utils/opkg-utils/pigz.patch | 51 + .../opkg-utils/opkg-utils_0.3.6.bb | 1 + .../recipes-devtools/opkg/opkg-keyrings_1.0.bb | 12 +- ...ve_maintainer_scripts-use-strict-matching.patch | 56 + .../opkg/opkg/opkg-configure.service | 17 - poky/meta/recipes-devtools/opkg/opkg_0.3.6.bb | 15 +- .../ossp-uuid/0001-Change-library-name.patch | 119 - ...erve-m-option-status-in-v-option-handling.patch | 62 - .../ossp-uuid/0003-Fix-whatis-entries.patch | 58 - .../ossp-uuid/0004-fix-data-uuid-from-string.patch | 43 - .../ossp-uuid/ossp-uuid/install-pc.patch | 19 - .../ossp-uuid/ossp-uuid/ldflags.patch | 26 - .../ossp-uuid/ossp-uuid/libtool-tag.patch | 21 - .../ossp-uuid/ossp-uuid/uuid-libtool.patch | 27 - .../ossp-uuid/ossp-uuid/uuid-nostrip.patch | 19 - .../recipes-devtools/ossp-uuid/ossp-uuid_1.6.2.bb | 66 - .../recipes-devtools/pax-utils/pax-utils_1.2.2.bb | 36 - .../recipes-devtools/perl/liberror-perl_0.17025.bb | 33 - .../recipes-devtools/perl/liberror-perl_0.17026.bb | 33 + .../meta/recipes-devtools/perl/liburi-perl_1.73.bb | 38 - .../meta/recipes-devtools/perl/liburi-perl_1.74.bb | 38 + .../perl/libxml-parser-perl_2.44.bb | 9 +- .../perl/libxml-simple-perl_2.24.bb | 24 - .../perl/libxml-simple-perl_2.25.bb | 35 + .../recipes-devtools/perl/perl-native_5.24.1.bb | 139 - .../recipes-devtools/perl/perl-native_5.24.4.bb | 140 + poky/meta/recipes-devtools/perl/perl-ptest.inc | 2 +- .../recipes-devtools/perl/perl-rdepends_5.24.1.inc | 2575 ----------- .../recipes-devtools/perl/perl-rdepends_5.24.4.inc | 2575 +++++++++++ .../0001-ExtUtils-MM_Unix.pm-fix-race-issues.patch | 52 + .../perl/perl/CVE-2017-12837.patch | 32 - .../perl/perl/CVE-2017-12883.patch | 44 - .../recipes-devtools/perl/perl/CVE-2018-6797.patch | 45 - .../perl/perl/CVE-2018-6798-1.patch | 130 - .../perl/perl/CVE-2018-6798-2.patch | 37 - .../recipes-devtools/perl/perl/CVE-2018-6913.patch | 153 - .../recipes-devtools/perl/perl/Makefile.SH.patch | 12 +- poky/meta/recipes-devtools/perl/perl/config.sh | 60 +- poky/meta/recipes-devtools/perl/perl_5.24.1.bb | 358 -- poky/meta/recipes-devtools/perl/perl_5.24.4.bb | 353 ++ .../meta/recipes-devtools/pkgconf/pkgconf_1.4.2.bb | 71 - .../meta/recipes-devtools/pkgconf/pkgconf_1.5.3.bb | 69 + ...ps.c-check-info-resolvetls-before-use-its.patch | 51 + poky/meta/recipes-devtools/prelink/prelink_git.bb | 8 +- poky/meta/recipes-devtools/pseudo/pseudo_git.bb | 2 +- .../recipes-devtools/python-numpy/python-numpy.inc | 6 +- .../python-numpy/python-numpy_1.14.2.bb | 6 - .../python-numpy/python-numpy_1.14.5.bb | 6 + .../python-numpy/python3-numpy_1.14.2.bb | 2 - .../python-numpy/python3-numpy_1.14.5.bb | 2 + ...ionally-do-not-fetch-code-by-easy_install.patch | 34 + .../meta/recipes-devtools/python/python-extras.inc | 12 + poky/meta/recipes-devtools/python/python-git.inc | 4 +- poky/meta/recipes-devtools/python/python-gitdb.inc | 4 +- poky/meta/recipes-devtools/python/python-pbr.inc | 15 + .../recipes-devtools/python/python-setuptools.inc | 17 +- .../python/python-setuptools_39.0.0.bb | 9 - .../python/python-setuptools_40.0.0.bb | 9 + .../recipes-devtools/python/python-subunit.inc | 14 + .../recipes-devtools/python/python-testtools.inc | 27 + poky/meta/recipes-devtools/python/python.inc | 14 +- ...23-Use-XML_SetHashSalt-in-_elementtree-GH.patch | 4 +- ...ix-test_ssl-when-a-filename-cannot-be-enc.patch | 55 + ...LS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976-.patch | 120 + ...34540-Convert-shutil._call_external_zip-t.patch | 4 +- ...dd-missing-closing-wrapper-in-test_tls1_3.patch | 37 + ...ix-test_ssl.test_options-to-account-for-O.patch | 37 + ...ix-test_default_ecdh_curve-needs-no-tlsv1.patch | 34 + .../python/python/create_manifest2.py | 2 +- .../recipes-devtools/python/python/multilib.patch | 2 +- .../python/python/python2-manifest.json | 24 +- .../recipes-devtools/python/python3-dbus_1.2.6.bb | 23 - .../recipes-devtools/python/python3-dbus_1.2.8.bb | 24 + .../python/python3-extras_1.0.0.bb | 2 + .../recipes-devtools/python/python3-git_2.1.11.bb | 2 + .../recipes-devtools/python/python3-git_2.1.8.bb | 2 - .../recipes-devtools/python/python3-gitdb_2.0.3.bb | 2 - .../recipes-devtools/python/python3-gitdb_2.0.4.bb | 2 + .../python/python3-native_3.5.5.bb | 112 - .../python/python3-native_3.5.6.bb | 100 + .../recipes-devtools/python/python3-pbr_4.2.0.bb | 2 + .../recipes-devtools/python/python3-pip_18.0.bb | 30 + .../recipes-devtools/python/python3-pip_9.0.2.bb | 48 - .../python/python3-pygobject_3.28.1.bb | 29 - .../python/python3-pygobject_3.28.3.bb | 29 + .../python/python3-setuptools_39.0.0.bb | 6 - .../python/python3-setuptools_40.0.0.bb | 6 + .../python/python3-subunit_1.3.0.bb | 2 + .../python/python3-testtools_2.3.0.bb | 2 + poky/meta/recipes-devtools/python/python3.inc | 43 + ...-SSLContext-has-improved-default-settings.patch | 272 ++ .../python3/0001-cross-compile-support.patch | 96 - ...le-add-target-to-split-profile-generation.patch | 40 + ...dd-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch | 227 + ...ixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch | 173 + ...TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch | 110 + ...0714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch | 68 + .../python/python3/CVE-2018-1061.patch | 165 - ...-CFLAGS-for-extensions-when-cross-compili.patch | 56 + .../python/python3/create_manifest3.py | 469 +- .../python/python3/float-endian.patch | 212 + .../recipes-devtools/python/python3/ftplib.patch | 60 + .../python/python3/python3-manifest.json | 1338 +++--- .../meta/recipes-devtools/python/python3/run-ptest | 3 + .../python/python3/shutil-follow-symlink-fix.patch | 17 - .../recipes-devtools/python/python3/signal.patch | 56 + poky/meta/recipes-devtools/python/python3_3.5.5.bb | 324 -- poky/meta/recipes-devtools/python/python3_3.5.6.bb | 329 ++ poky/meta/recipes-devtools/python/python_2.7.15.bb | 9 +- poky/meta/recipes-devtools/qemu/qemu-targets.inc | 2 +- poky/meta/recipes-devtools/qemu/qemu.inc | 31 +- ...018-11806-QEMU-slirp-heap-buffer-overflow.patch | 69 - ...sdl.c-allow-user-to-disable-pointer-grabs.patch | 23 +- ...002-qemu-Add-missing-wacom-HID-descriptor.patch | 6 +- ...age-ptest-which-runs-all-unit-test-cases-.patch | 6 +- ...dition-environment-space-to-boot-loader-q.patch | 6 +- .../qemu/qemu/0005-qemu-disable-Valgrind.patch | 6 +- ...paths-searched-during-user-mode-emulation.patch | 4 +- ...-set-ld.bfd-fix-cflags-and-set-some-envir.patch | 8 +- ...ardev-connect-socket-to-a-spawned-command.patch | 60 +- .../qemu/0009-apic-fixup-fallthrough-to-PIC.patch | 6 +- ...-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch | 6 +- ...x-user-fix-mmap-munmap-mprotect-mremap-sh.patch | 141 + .../qemu/qemu/0011-memfd-fix-configure-test.patch | 54 - ...te-a64-treat-DISAS_UPDATE-as-variant-of-D.patch | 64 - ...12-fix-libcap-header-issue-on-some-distro.patch | 85 + ...error-messages-when-qemi_cpu_kick_thread-.patch | 73 + ...ck-PS2Queue-pointers-in-post_load-routine.patch | 60 - ...14-fix-libcap-header-issue-on-some-distro.patch | 85 - ...error-messages-when-qemi_cpu_kick_thread-.patch | 73 - .../qemu/qemu/CVE-2018-10839.patch | 52 + .../qemu/qemu/CVE-2018-12617.patch | 53 - .../qemu/qemu/CVE-2018-15746.patch | 64 + .../qemu/qemu/CVE-2018-17958.patch | 52 + .../qemu/qemu/CVE-2018-17962.patch | 70 + .../qemu/qemu/CVE-2018-17963.patch | 51 + .../recipes-devtools/qemu/qemu/CVE-2018-7550.patch | 62 - poky/meta/recipes-devtools/qemu/qemu_2.11.1.bb | 61 - poky/meta/recipes-devtools/qemu/qemu_3.0.0.bb | 60 + .../recipes-devtools/qemu/qemuwrapper-cross_1.0.bb | 40 +- poky/meta/recipes-devtools/quilt/quilt.inc | 29 +- ...code-lib-rpm-as-the-installation-path-for.patch | 19 +- ...t-the-PATH-environment-variable-before-ru.patch | 22 +- ...0001-Factor-out-and-unify-setting-CLOEXEC.patch | 148 - .../0001-configure.ac-add-option-for-dbus.patch | 42 - ...-restrict-virtual-memory-usage-if-limit-s.patch | 65 + .../files/0002-Optimize-rpmSetCloseOnExec.patch | 100 - .../0003-rpmSetCloseOnExec-use-getrlimit.patch | 53 - ...c-remove-static-local-variables-from-buil.patch | 17 +- poky/meta/recipes-devtools/rpm/rpm_4.14.1.bb | 152 - poky/meta/recipes-devtools/rpm/rpm_4.14.2.bb | 151 + poky/meta/recipes-devtools/rsync/rsync.inc | 20 - poky/meta/recipes-devtools/rsync/rsync_3.1.3.bb | 28 +- poky/meta/recipes-devtools/ruby/ruby.inc | 2 +- .../ruby/ruby/CVE-2018-1000073.patch | 34 + poky/meta/recipes-devtools/ruby/ruby_2.5.0.bb | 49 - poky/meta/recipes-devtools/ruby/ruby_2.5.1.bb | 70 + .../run-postinsts/run-postinsts/run-postinsts | 21 +- .../run-postinsts/run-postinsts.service | 1 - .../squashfs-tools/squashfs-tools_git.bb | 4 +- .../strace/strace/Makefile-ptest.patch | 35 +- .../strace/strace/disable-git-version-gen.patch | 27 +- ...-robust-test-for-m32-mx32-compile-support.patch | 22 +- poky/meta/recipes-devtools/strace/strace/run-ptest | 2 +- poky/meta/recipes-devtools/strace/strace_4.20.bb | 59 - poky/meta/recipes-devtools/strace/strace_4.24.bb | 64 + .../subversion/subversion_1.10.0.bb | 58 + .../subversion/subversion_1.9.7.bb | 55 - ...n-Fix-new-GCC8-warnings-in-generated-code.patch | 191 + ...x-issue-reported-for-SWIG_Python_FixMetho.patch | 36 + poky/meta/recipes-devtools/swig/swig_3.0.12.bb | 2 + ...nonicalize_file_name-is-specific-to-glibc.patch | 46 - .../tcf-agent/tcf-agent/fix_ranlib.patch | 23 +- .../recipes-devtools/tcf-agent/tcf-agent_git.bb | 8 +- .../unfs3/0001-attr-fix-utime-for-symlink.patch | 85 + .../recipes-devtools/unfs3/unfs3_0.9.22.r497.bb | 3 +- poky/meta/recipes-devtools/vala/vala.inc | 7 +- .../vala/vala/disable-graphviz.patch | 35 +- poky/meta/recipes-devtools/vala/vala_0.38.8.bb | 10 - poky/meta/recipes-devtools/vala/vala_0.42.0.bb | 10 + ...uard-against-__GLIBC_PREREQ-for-musl-libc.patch | 36 + ...functions-static-to-avoid-assembler-error.patch | 182 + ...sts-Use-ucontext_t-instead-of-struct-ucon.patch | 30 - ...02-context-APIs-are-not-available-on-musl.patch | 17 +- ...roken-inline-asm-in-tests-on-mips32-linux.patch | 47 - .../valgrind/0004-Fix-out-of-tree-builds.patch | 49 +- .../valgrind/valgrind/link-gz-tests.patch | 27 - .../mask-CPUID-support-in-HWCAP-on-aarch64.patch | 36 - .../valgrind/valgrind/ppc-headers.patch | 165 - .../recipes-devtools/valgrind/valgrind_3.13.0.bb | 157 - .../recipes-devtools/valgrind/valgrind_3.14.0.bb | 155 + poky/meta/recipes-devtools/yasm/yasm_1.3.0.bb | 16 - .../recipes-extended/acpica/acpica_20170303.bb | 53 - .../recipes-extended/acpica/acpica_20180508.bb | 52 + ...Linux-add-support-for-X32-ABI-compilation.patch | 31 - .../files/manipulate-fds-instead-of-FILE.patch | 29 +- ...-memleak-bug-fix-for-builtin-command-read.patch | 35 - poky/meta/recipes-extended/bash/bash_4.4.12.bb | 24 - poky/meta/recipes-extended/bash/bash_4.4.18.bb | 41 + poky/meta/recipes-extended/bc/bc/libmath.h | 46 + .../recipes-extended/bc/bc/no-gen-libmath.patch | 24 + poky/meta/recipes-extended/bc/bc_1.06.bb | 26 - poky/meta/recipes-extended/bc/bc_1.07.1.bb | 33 + .../bc/files/fix-segment-fault.patch | 28 - .../blktool/0001-fix-typos-in-manpage.patch | 2 +- .../blktool/blktool/0002-fix-string-error.patch | 2 +- ...rgument-for-BLKROSET-it-must-be-const-int.patch | 2 +- .../blktool/blktool/blktool-gnulib-makedev.patch | 23 + poky/meta/recipes-extended/blktool/blktool_4-7.bb | 1 + poky/meta/recipes-extended/bzip2/bzip2_1.0.6.bb | 3 +- poky/meta/recipes-extended/cronie/cronie_1.5.1.bb | 83 - poky/meta/recipes-extended/cronie/cronie_1.5.2.bb | 83 + poky/meta/recipes-extended/cups/cups.inc | 5 +- .../cups/cups-avoid-install-file-conflicts.patch | 21 + poky/meta/recipes-extended/cups/cups_2.2.6.bb | 6 - poky/meta/recipes-extended/cups/cups_2.2.8.bb | 6 + .../recipes-extended/diffutils/diffutils_3.6.bb | 2 + .../ethtool/ethtool/avoid_parallel_tests.patch | 21 +- poky/meta/recipes-extended/ethtool/ethtool_4.13.bb | 30 - poky/meta/recipes-extended/ethtool/ethtool_4.17.bb | 30 + ...need_charset_alias-when-building-for-musl.patch | 15 +- ...elete-honour-the-ignore_readdir_race-opti.patch | 144 + .../findutils/findutils-4.6.0-gnulib-fflush.patch | 140 + .../findutils/findutils-4.6.0-gnulib-makedev.patch | 78 + .../recipes-extended/findutils/findutils_4.6.0.bb | 6 +- ...add-operand-checking-to-.setnativefontmap.patch | 59 + ...Improve-hiding-of-security-critical-custo.patch | 434 ++ ...32-add-control-over-hiding-error-handlers.patch | 172 + ...operators-pass-a-name-object-to-error-han.patch | 105 + ...-699938-.loadfontloop-must-be-an-operator.patch | 31 + ...define-some-additional-internal-operators.patch | 42 + ...don-t-include-operator-arrays-in-execstac.patch | 197 + ...put-unavailable-from-.policyprocs-helper-.patch | 245 + .../files/do-not-check-local-libpng-source.patch | 10 +- .../ghostscript/ghostscript/CVE-2017-11714.patch | 61 - .../ghostscript/ghostscript/CVE-2017-5951.patch | 44 - .../ghostscript/ghostscript/CVE-2017-7207.patch | 39 - .../ghostscript/ghostscript/CVE-2017-7975.patch | 37 - .../ghostscript/ghostscript/CVE-2017-9216.patch | 36 - .../ghostscript/ghostscript/CVE-2017-9611.patch | 34 - .../ghostscript/ghostscript/CVE-2017-9612.patch | 35 - .../ghostscript/ghostscript/CVE-2017-9726.patch | 33 - .../ghostscript/ghostscript/CVE-2017-9727.patch | 35 - .../ghostscript/ghostscript/CVE-2017-9739.patch | 37 - .../ghostscript/ghostscript/CVE-2017-9835.patch | 125 - .../ghostscript/avoid-host-contamination.patch | 18 +- ...c-add-a-preprocessor-define-to-allow-fope.patch | 14 +- .../ghostscript/ghostscript/cups-no-gcrypt.patch | 14 +- .../ghostscript/ghostscript-9.02-genarch.patch | 33 +- .../ghostscript-9.15-parallel-make.patch | 28 +- .../ghostscript-9.16-Werror-return-type.patch | 10 +- ...pt-9.21-native-fix-disable-system-libtiff.patch | 32 +- .../ghostscript-9.21-prevent_recompiling.patch | 80 +- .../ghostscript/ghostscript/mkdir-p.patch | 16 +- .../ghostscript/ghostscript_9.21.bb | 136 - .../ghostscript/ghostscript_9.25.bb | 133 + .../groff-not-search-fonts-on-build-host.patch | 20 + poky/meta/recipes-extended/groff/groff_1.22.3.bb | 5 +- .../recipes-extended/gzip/gzip-1.9/gnulib.patch | 189 + poky/meta/recipes-extended/gzip/gzip_1.9.bb | 4 +- poky/meta/recipes-extended/hdparm/hdparm_9.53.bb | 43 - poky/meta/recipes-extended/hdparm/hdparm_9.56.bb | 43 + .../recipes-extended/iptables/iptables_1.6.2.bb | 43 +- .../iputils/files/0001-Fix-build-on-MUSL.patch | 95 - .../iputils/iputils/ai_canonidn.patch | 58 + .../recipes-extended/iputils/iputils/install.patch | 26 + .../recipes-extended/iputils/iputils_s20161105.bb | 62 - .../recipes-extended/iputils/iputils_s20180629.bb | 61 + poky/meta/recipes-extended/less/less_529.bb | 42 - poky/meta/recipes-extended/less/less_530.bb | 42 + .../recipes-extended/libaio/libaio/00_arches.patch | 194 +- ...neric-arch-dectection-for-padding-defines.patch | 65 - .../libaio/libaio/libaio_fix_for_x32.patch | 61 - .../meta/recipes-extended/libaio/libaio_0.3.110.bb | 26 - .../meta/recipes-extended/libaio/libaio_0.3.111.bb | 23 + .../libarchive/libarchive/CVE-2017-14166.patch | 37 - .../libarchive/libarchive/CVE-2017-14501.patch | 79 - .../libarchive/libarchive/CVE-2017-14502.patch | 37 - .../libarchive/libarchive/CVE-2017-14503.patch | 33 - .../libarchive/libarchive/bug1066.patch | 54 + .../libarchive/libarchive/bug929.patch | 38 - .../libarchive/libarchive_3.3.2.bb | 73 - .../libarchive/libarchive_3.3.3.bb | 69 + ...1-idn-fix-printf-format-security-warnings.patch | 694 --- ..._MKDIR_P_warning_error_with_automake_1.12.patch | 25 +- .../libidn/libidn/gcc7-compatibility.patch | 334 -- .../libidn/libidn_fix_for_automake-1.12.patch | 21 +- ...need_charset_alias-when-building-for-musl.patch | 23 + poky/meta/recipes-extended/libidn/libidn2_2.0.5.bb | 29 + poky/meta/recipes-extended/libidn/libidn_1.33.bb | 44 - poky/meta/recipes-extended/libidn/libidn_1.35.bb | 42 + .../0001-include-sys-cdefs.h-explicitly.patch | 68 - ...Include-stdint.h-for-uintptr_t-definition.patch | 27 - .../0002-Define-glibc-specific-macros.patch | 57 - poky/meta/recipes-extended/libnsl/libnsl2_git.bb | 19 +- .../meta/recipes-extended/libnss-nis/libnss-nis.bb | 31 + .../recipes-extended/libsolv/libsolv_0.6.33.bb | 30 - .../recipes-extended/libsolv/libsolv_0.6.35.bb | 32 + .../0001-include-stdint.h-for-uintptr_t.patch | 29 - .../0001-replace-__bzero-with-memset-API.patch | 64 - .../libtirpc/libtirpc/Use-netbsd-queue.h.patch | 878 ---- .../libtirpc/export_key_secretkey_is_set.patch | 31 - .../libtirpc/libtirpc/libtirpc-1.0.4-rc1.patch | 103 + .../recipes-extended/libtirpc/libtirpc/musl.patch | 18 + .../recipes-extended/libtirpc/libtirpc_1.0.2.bb | 33 - .../recipes-extended/libtirpc/libtirpc_1.0.3.bb | 28 + .../libuser/libuser/0001-Check-for-issetugid.patch | 62 - ...es.c-parse_field-fix-string-formating-in-.patch | 34 - .../libuser/0002-remove-unused-execinfo.h.patch | 27 - poky/meta/recipes-extended/libuser/libuser_0.62.bb | 35 - .../recipes-extended/lighttpd/lighttpd_1.4.48.bb | 85 - .../recipes-extended/lighttpd/lighttpd_1.4.50.bb | 85 + .../recipes-extended/logrotate/logrotate_3.13.0.bb | 85 - .../recipes-extended/logrotate/logrotate_3.14.0.bb | 99 + poky/meta/recipes-extended/lsb/lsb_5.0.bb | 6 +- .../recipes-extended/lsb/lsbinitscripts_9.79.bb | 1 - poky/meta/recipes-extended/lsof/lsof_4.89.bb | 64 - poky/meta/recipes-extended/lsof/lsof_4.91.bb | 63 + ...ix-default-value-of-without-numa-switch-i.patch | 31 - ...onfigure-add-knob-to-control-numa-support.patch | 50 - .../ltp/ltp/0001-mmap15-mips64-return-EINVAL.patch | 41 + ...r.sh-use-ping-6-when-ping6-is-not-avaliab.patch | 45 + ..._testsuite-mmap24-2-Relax-condition-a-bit.patch | 68 + ...nfo01-recent-glibc-calls-syscall-directly.patch | 75 + ...ntl-make-OFD-command-use-fcntl64-syscall-.patch | 184 + .../0003-Add-knob-to-control-tirpc-support.patch | 46 - ...-Add-option-to-select-libc-implementation.patch | 71 +- ...__GLIBC_PREREQ-is-defined-before-using-it.patch | 26 +- ...010-replace-__BEGIN_DECLS-and-__END_DECLS.patch | 75 - ..._GNU_SOURCE-for-MREMAP_MAYMOVE-definition.patch | 27 +- ...n.h-Use-sighandler_t-instead-of-__sighand.patch | 20 +- ...etwork-nfsv4-acl-acl1.c-Security-fix-on-s.patch | 2 +- ...fine-FNM_EXTMATCH-if-not-already-like-und.patch | 44 + ...-make-is_fuse-return-zero-if-fs_type-is-N.patch | 40 - ...69-shmat-for-0-or-PAGESIZE-with-RND-flag-.patch | 97 + ...est06.c-Fix-too-small-name-string-and-rel.patch | 34 + ...skip-S_ISGID-check-on-files-created-by-no.patch | 81 + poky/meta/recipes-extended/ltp/ltp_20180118.bb | 116 - poky/meta/recipes-extended/ltp/ltp_20180515.bb | 127 + poky/meta/recipes-extended/lzip/lzip_1.19.bb | 41 - poky/meta/recipes-extended/lzip/lzip_1.20.bb | 41 + poky/meta/recipes-extended/man-db/files/99_mandb | 1 + ...conf-avoid-multilib-install-file-conflict.patch | 16 + poky/meta/recipes-extended/man-db/man-db_2.8.1.bb | 43 - poky/meta/recipes-extended/man-db/man-db_2.8.3.bb | 55 + .../recipes-extended/man-pages/man-pages_4.14.bb | 31 - .../recipes-extended/man-pages/man-pages_4.16.bb | 36 + poky/meta/recipes-extended/mc/mc_4.8.20.bb | 49 - poky/meta/recipes-extended/mc/mc_4.8.21.bb | 49 + .../mdadm/files/0001-Disable-gcc8-warnings.patch | 152 + ...e-instead-of-memcpy-on-overlapping-region.patch | 31 + poky/meta/recipes-extended/mdadm/mdadm_4.0.bb | 4 +- .../recipes-extended/mingetty/mingetty_1.08.bb | 1 + .../meta/recipes-extended/minicom/minicom_2.7.1.bb | 2 - .../mktemp/files/disable-strip.patch | 15 - .../mktemp/files/fix-parallel-make.patch | 24 - poky/meta/recipes-extended/mktemp/mktemp_1.7.bb | 36 - .../net-tools/net-tools_1.60-26.bb | 11 +- .../newt/libnewt-python_0.52.20.bb | 2 +- poky/meta/recipes-extended/newt/libnewt_0.52.20.bb | 2 +- .../packagegroup-core-full-cmdline.bb | 12 +- .../packagegroups/packagegroup-core-lsb.bb | 6 +- poky/meta/recipes-extended/pam/libpam_1.3.0.bb | 2 +- poky/meta/recipes-extended/parted/parted_3.2.bb | 6 + ...ix-invalid-suffix-on-literal-C-11-warning.patch | 73 + poky/meta/recipes-extended/pbzip2/pbzip2_1.1.13.bb | 7 +- .../recipes-extended/perl/libxml-sax-perl_0.99.bb | 33 - .../recipes-extended/perl/libxml-sax-perl_1.00.bb | 32 + ...onfigure-Detect-headers-before-using-them.patch | 51 - ...-Use-macro-bswap_64-instead-of-__bswap_64.patch | 47 - .../936d8068ae19d95260d3058f41dd6cf718101cd6.patch | 68 - poky/meta/recipes-extended/pixz/pixz_1.0.6.bb | 25 - .../procps/0001-Fix-out-of-tree-builds.patch | 24 + .../procps/procps/CVE-2018-1124.patch | 176 - poky/meta/recipes-extended/procps/procps_3.3.12.bb | 66 - poky/meta/recipes-extended/procps/procps_3.3.15.bb | 66 + poky/meta/recipes-extended/psmisc/psmisc_23.0.bb | 10 - poky/meta/recipes-extended/psmisc/psmisc_23.1.bb | 10 + .../rpcbind_add_option_to_fix_port_number.patch | 130 + .../meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb | 1 + .../recipes-extended/rpcsvc-proto/rpcsvc-proto.bb | 37 + .../0001-Use-cross-compiled-rpcgen.patch | 23 + poky/meta/recipes-extended/screen/screen_4.6.2.bb | 2 +- .../0001-Disable-use-of-syslog-for-sysroot.patch | 21 +- ...o-not-read-login.defs-before-doing-chroot.patch | 46 - .../shadow/files/0001-shadow-CVE-2017-12424 | 46 - ...-useradd-copy-extended-attributes-of-home.patch | 28 +- ...-create-parent-directories-when-necessary.patch | 83 +- .../shadow/files/CVE-2017-2616.patch | 64 - .../shadow/files/CVE-2018-7169.patch | 186 - .../allow-for-setting-password-in-clear-text.patch | 181 +- ..._of_uid_t_and_gid_t_using_AC_CHECK_SIZEOF.patch | 41 - ...installation-failure-with-subids-disabled.patch | 28 - ...-compilation-failure-with-subids-disabled.patch | 33 - .../shadow/shadow-securetty_4.2.1.bb | 38 - .../shadow/shadow-securetty_4.6.bb | 38 + .../shadow/shadow-sysroot_4.2.1.bb | 32 - .../recipes-extended/shadow/shadow-sysroot_4.6.bb | 32 + poky/meta/recipes-extended/shadow/shadow.inc | 14 +- poky/meta/recipes-extended/shadow/shadow_4.2.1.bb | 10 - poky/meta/recipes-extended/shadow/shadow_4.6.bb | 10 + poky/meta/recipes-extended/slang/slang_2.3.2.bb | 2 +- poky/meta/recipes-extended/sudo/sudo.inc | 6 +- poky/meta/recipes-extended/sudo/sudo_1.8.22.bb | 36 - poky/meta/recipes-extended/sudo/sudo_1.8.23.bb | 40 + poky/meta/recipes-extended/sysklogd/sysklogd.inc | 7 +- .../recipes-extended/sysstat/sysstat_11.7.1.bb | 8 - .../recipes-extended/sysstat/sysstat_11.7.4.bb | 8 + poky/meta/recipes-extended/tar/tar.inc | 52 - poky/meta/recipes-extended/tar/tar_1.30.bb | 72 +- .../tcp-wrappers/tcp-wrappers_7.6.bb | 2 +- poky/meta/recipes-extended/time/time_1.8.bb | 21 - poky/meta/recipes-extended/time/time_1.9.bb | 21 + .../recipes-extended/tzcode/tzcode-native_2018f.bb | 30 - .../recipes-extended/tzcode/tzcode-native_2018g.bb | 30 + poky/meta/recipes-extended/tzdata/tzdata_2018f.bb | 215 - poky/meta/recipes-extended/tzdata/tzdata_2018g.bb | 215 + poky/meta/recipes-extended/unzip/unzip_6.0.bb | 2 +- .../watchdog/watchdog/watchdog-conf.patch | 16 - .../watchdog/watchdog/watchdog-init.patch | 56 - .../watchdog/watchdog/watchdog.init | 110 + .../recipes-extended/watchdog/watchdog_5.15.bb | 25 +- .../recipes-extended/xdg-utils/xdg-utils_1.1.2.bb | 37 - .../recipes-extended/xdg-utils/xdg-utils_1.1.3.bb | 37 + poky/meta/recipes-extended/xinetd/xinetd_2.3.15.bb | 7 +- poky/meta/recipes-extended/xz/xz_5.2.3.bb | 36 - poky/meta/recipes-extended/xz/xz_5.2.4.bb | 43 + .../meta/recipes-gnome/epiphany/epiphany_3.26.6.bb | 22 - .../recipes-gnome/epiphany/epiphany_3.28.3.1.bb | 22 + ...-help-meson.build-disable-the-use-of-yelp.patch | 20 +- .../gcr-add-missing-dependencies-for-vapi.patch | 51 - poky/meta/recipes-gnome/gcr/gcr_3.20.0.bb | 26 - poky/meta/recipes-gnome/gcr/gcr_3.28.0.bb | 32 + ...ble-libseccomp-sycall-filtering-mechanism.patch | 38 - ...figure.ac-Remove-gnome-common-macro-calls.patch | 33 - ...top-thumbnail-don-t-assume-time_t-is-long.patch | 61 - .../gnome-desktop/gnome-desktop3_3.26.2.bb | 29 - .../0001-Don-t-use-AC_CANONICAL_HOST.patch | 14 +- .../gnome/adwaita-icon-theme_3.26.1.bb | 44 - .../gnome/adwaita-icon-theme_3.28.0.bb | 44 + ...he-repository-directory-for-native-builds.patch | 62 + ...ncomplete-upstream-attempt-at-cross-compi.patch | 12 +- ...01-configure.ac-make-GIR_DIR-configurable.patch | 68 + ...01-giscanner-add-a-lib-dirs-envvar-option.patch | 21 +- ...gnore-error-return-codes-from-ldd-wrapper.patch | 27 + ...c-add-host-gi-gi-cross-wrapper-gi-ldd-wra.patch | 43 +- .../0002-g-ir-tools-respect-gir_dir_prefix.patch | 76 + ...3-giscanner-add-use-binary-wrapper-option.patch | 14 +- ...04-giscanner-add-a-use-ldd-wrapper-option.patch | 16 +- ...config-paths-with-PKG_CONFIG_SYSROOT_DIR-.patch | 18 +- .../gobject-introspection_1.54.1.bb | 190 - .../gobject-introspection_1.58.0.bb | 204 + .../gsettings-desktop-schemas_3.24.1.bb | 13 - .../gsettings-desktop-schemas_3.28.0.bb | 13 + poky/meta/recipes-gnome/gtk+/gtk+.inc | 4 + ...ok-into-HOME-when-looking-for-gtk-modules.patch | 29 + poky/meta/recipes-gnome/gtk+/gtk+3.inc | 4 + poky/meta/recipes-gnome/gtk+/gtk+3_3.22.28.bb | 18 - poky/meta/recipes-gnome/gtk+/gtk+3_3.22.30.bb | 18 + poky/meta/recipes-gnome/gtk+/gtk+_2.24.32.bb | 3 +- .../gtk+/gtk-icon-utils-native_3.22.28.bb | 63 - .../gtk+/gtk-icon-utils-native_3.22.30.bb | 63 + ...hardocode-paths-to-perl-python-in-scripts.patch | 25 +- .../recipes-gnome/gtk-doc/files/no-clobber.patch | 23 +- .../gtk-doc/files/pkg-config-native.patch | 12 +- poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.27.bb | 50 - poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.29.bb | 50 + .../recipes-gnome/libsecret/libsecret_0.18.5.bb | 20 - .../recipes-gnome/libsecret/libsecret_0.18.6.bb | 22 + poky/meta/recipes-graphics/cairo/cairo-fpu.inc | 6 - poky/meta/recipes-graphics/cairo/cairo.inc | 48 - poky/meta/recipes-graphics/cairo/cairo_1.14.12.bb | 79 +- .../cantarell-fonts/cantarell-fonts_git.bb | 6 +- .../clutter/clutter-gst-3.0_3.0.24.bb | 7 - .../clutter/clutter-gst-3.0_3.0.26.bb | 7 + ...ac-Allow-explicit-enabling-of-cunit-tests.patch | 53 - .../drm/libdrm/fix_O_CLOEXEC_undeclared.patch | 24 - .../recipes-graphics/drm/libdrm/installtests.patch | 25 - .../recipes-graphics/drm/libdrm/musl-ioctl.patch | 35 + poky/meta/recipes-graphics/drm/libdrm_2.4.91.bb | 51 - poky/meta/recipes-graphics/drm/libdrm_2.4.94.bb | 60 + poky/meta/recipes-graphics/eglinfo/eglinfo.inc | 9 +- .../0001-Check-for-libegl-using-pkg-config.patch | 31 + poky/meta/recipes-graphics/eglinfo/files/waf | 169 + .../fontconfig/fontconfig_2.12.6.bb | 8 +- .../recipes-graphics/freetype/freetype_2.9.1.bb | 49 + .../meta/recipes-graphics/freetype/freetype_2.9.bb | 49 - poky/meta/recipes-graphics/fstests/fstests_git.bb | 19 - .../recipes-graphics/harfbuzz/harfbuzz_1.7.5.bb | 39 - .../recipes-graphics/harfbuzz/harfbuzz_1.8.8.bb | 46 + .../0001-libjpeg-turbo-fix-package_qa-error.patch | 32 + ...bo-fix-wrongly-defined-define-HAVE_STDLIB.patch | 119 + .../recipes-graphics/jpeg/libjpeg-turbo_1.5.3.bb | 59 - .../recipes-graphics/jpeg/libjpeg-turbo_2.0.0.bb | 56 + ...-gst_bo_map-_unmap-and-use-it-or-avoid-it.patch | 10 +- poky/meta/recipes-graphics/kmscube/kmscube_git.bb | 2 +- .../libepoxy/libepoxy/no-tests.patch | 33 - .../recipes-graphics/libepoxy/libepoxy_1.5.0.bb | 23 - .../recipes-graphics/libepoxy/libepoxy_1.5.2.bb | 22 + .../libsdl2/libsdl2/more-gen-depends.patch | 47 + .../meta/recipes-graphics/libsdl2/libsdl2_2.0.8.bb | 13 +- .../recipes-graphics/libva/libva-utils_2.1.0.bb | 32 - .../recipes-graphics/libva/libva-utils_2.2.0.bb | 32 + poky/meta/recipes-graphics/libva/libva_2.1.0.bb | 46 - poky/meta/recipes-graphics/libva/libva_2.2.0.bb | 46 + ...lkan.am-explictly-add-lib-expat-to-intel-.patch | 42 - .../0001-Simplify-wayland-scanner-lookup.patch | 39 + .../0001-Use-wayland-scanner-in-the-path.patch | 34 - ...i-Initialise-modifier-to-INVALID-for-DRI2.patch | 43 - .../0001-winsys-svga-drm-Include-sys-types.h.patch | 34 - .../mesa/files/0002-hardware-gloat.patch | 51 - .../0002-winsys-svga-drm-Include-sys-types.h.patch | 34 + ...t-LLVM-version-when-using-LLVM-Git-releas.patch | 44 + .../0004-Use-Python-3-to-execute-the-scripts.patch | 32 + .../0005-dri-i965-Add-missing-time.h-include.patch | 36 + ...CK_VAR-for-defining-WAYLAND_PROTOCOLS_DAT.patch | 37 + .../Use-Python-3-to-execute-the-scripts.patch | 32 - .../mesa/files/disable-asm-on-non-gcc.patch | 29 - .../mesa/files/llvm-config-version.patch | 41 - poky/meta/recipes-graphics/mesa/mesa-gl_17.3.8.bb | 9 - poky/meta/recipes-graphics/mesa/mesa-gl_18.1.9.bb | 9 + poky/meta/recipes-graphics/mesa/mesa.inc | 27 +- poky/meta/recipes-graphics/mesa/mesa_17.3.8.bb | 23 - poky/meta/recipes-graphics/mesa/mesa_18.1.9.bb | 21 + ...op-introspection-macros-from-acinclude.m4.patch | 120 - poky/meta/recipes-graphics/pango/pango_1.40.14.bb | 50 - poky/meta/recipes-graphics/pango/pango_1.42.4.bb | 45 + ...-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch | 32 + poky/meta/recipes-graphics/piglit/piglit_git.bb | 7 +- ...ild-demos-with-questionably-licensed-data.patch | 51 +- .../vulkan-demos/0001-Fix-build-on-x86.patch | 41 - ...stalling-demos-support-out-of-tree-builds.patch | 85 - .../recipes-graphics/vulkan/vulkan-demos_git.bb | 11 +- .../vulkan/demos-Don-t-build-tri-or-cube.patch | 110 +- .../recipes-graphics/vulkan/vulkan_1.0.65.2.bb | 36 - .../recipes-graphics/vulkan/vulkan_1.1.73.0.bb | 37 + .../recipes-graphics/wayland/libinput_1.11.3.bb | 29 + .../recipes-graphics/wayland/libinput_1.9.4.bb | 29 - .../wayland/wayland-protocols_1.13.bb | 20 - .../wayland/wayland-protocols_1.16.bb | 22 + .../recipes-graphics/wayland/wayland_1.14.0.bb | 42 - .../recipes-graphics/wayland/wayland_1.16.0.bb | 44 + poky/meta/recipes-graphics/wayland/weston-conf.bb | 35 + .../wayland/weston-init/weston.service | 1 + .../wayland/weston/0001-make-error-portable.patch | 44 +- ...ch-Provide-a-default-version-that-doesn-t.patch | 49 +- .../wayland/weston/fix-missing-header.patch | 30 - ...t-pitch-correctly-for-subsampled-textures.patch | 55 - poky/meta/recipes-graphics/wayland/weston_3.0.0.bb | 114 - poky/meta/recipes-graphics/wayland/weston_5.0.0.bb | 108 + .../recipes-graphics/xorg-app/mkfontscale_1.1.2.bb | 18 - .../recipes-graphics/xorg-app/mkfontscale_1.1.3.bb | 18 + poky/meta/recipes-graphics/xorg-app/rgb_1.0.6.bb | 2 +- poky/meta/recipes-graphics/xorg-app/xev_1.2.2.bb | 2 +- poky/meta/recipes-graphics/xorg-app/xeyes_1.1.1.bb | 14 - poky/meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb | 14 + poky/meta/recipes-graphics/xorg-app/xinit_1.3.4.bb | 20 - poky/meta/recipes-graphics/xorg-app/xinit_1.4.0.bb | 20 + .../recipes-graphics/xorg-app/xkbcomp_1.4.0.bb | 19 - .../recipes-graphics/xorg-app/xkbcomp_1.4.2.bb | 17 + poky/meta/recipes-graphics/xorg-app/xprop_1.2.2.bb | 18 - poky/meta/recipes-graphics/xorg-app/xprop_1.2.3.bb | 18 + poky/meta/recipes-graphics/xorg-app/xset_1.2.3.bb | 19 - poky/meta/recipes-graphics/xorg-app/xset_1.2.4.bb | 19 + .../recipes-graphics/xorg-app/xwininfo_1.1.3.bb | 15 - .../recipes-graphics/xorg-app/xwininfo_1.1.4.bb | 15 + .../xorg-driver/xf86-input-evdev_2.10.5.bb | 21 - .../xorg-driver/xf86-input-evdev_2.10.6.bb | 20 + .../xorg-driver/xf86-input-libinput_0.26.0.bb | 11 - .../xorg-driver/xf86-input-libinput_0.28.0.bb | 11 + .../xorg-driver/xf86-input-mouse_1.9.2.bb | 14 - .../xorg-driver/xf86-input-mouse_1.9.3.bb | 14 + .../xorg-driver/xf86-input-synaptics_1.9.0.bb | 16 - .../xorg-driver/xf86-input-synaptics_1.9.1.bb | 16 + .../xorg-driver/xf86-video-fbdev_0.4.4.bb | 9 - .../xorg-driver/xf86-video-fbdev_0.5.0.bb | 9 + .../always_include_xorg_server.h.patch | 24 - .../xf86-video-intel/disable-x11-dri3.patch | 17 - .../xorg-driver/xf86-video-intel/glibc.patch | 25 + .../xorg-driver/xf86-video-intel_git.bb | 15 +- .../xorg-driver/xf86-video-omap_0.4.5.bb | 41 - ...apfb-from-from-crashing-when-pixelclock-o.patch | 37 - ...a-large-CRTC-upper-limit-to-not-prune-lar.patch | 41 - ...virtual-size-when-configuring-framebuffer.patch | 32 - .../xf86-video-omapfb/0003-force-plain-mode.patch | 31 - .../xf86-video-omapfb/0004-blacklist-tv-out.patch | 33 - .../0005-Attempt-to-fix-VRFB.patch | 325 -- ...0006-omapfb-port-to-new-xserver-video-API.patch | 272 -- .../0007-always_include_xorg_server.h.patch | 48 - .../xorg-driver/xf86-video-omapfb_git.bb | 37 - .../xorg-driver/xf86-video-vesa_2.3.4.bb | 21 - .../xorg-driver/xf86-video-vesa_2.4.0.bb | 19 + .../xorg-driver/xf86-video-vmware_13.2.1.bb | 19 - .../xorg-driver/xf86-video-vmware_13.3.0.bb | 19 + .../xorg-driver/xorg-driver-common.inc | 2 +- .../xorg-driver/xorg-driver-input.inc | 2 +- .../xorg-driver/xorg-driver-video.inc | 2 +- .../meta/recipes-graphics/xorg-lib/libdmx_1.1.3.bb | 20 - .../meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb | 20 + .../recipes-graphics/xorg-lib/libfontenc_1.1.3.bb | 2 +- .../meta/recipes-graphics/xorg-lib/libice_1.0.9.bb | 2 +- .../recipes-graphics/xorg-lib/libpciaccess_0.14.bb | 2 + poky/meta/recipes-graphics/xorg-lib/libsm_1.2.2.bb | 2 +- .../recipes-graphics/xorg-lib/libx11-diet_1.6.5.bb | 19 - .../recipes-graphics/xorg-lib/libx11-diet_1.6.6.bb | 19 + poky/meta/recipes-graphics/xorg-lib/libx11.inc | 6 +- .../xorg-lib/libx11/X18NCMSstubs.diff | 520 --- .../xorg-lib/libx11/X18NCMSstubs.patch | 536 +++ .../xorg-lib/libx11/fix-disable-xlocale.diff | 17 - .../xorg-lib/libx11/fix-disable-xlocale.patch | 33 + .../xorg-lib/libx11/fix-utf8-wrong-define.patch | 30 +- .../meta/recipes-graphics/xorg-lib/libx11_1.6.5.bb | 14 - .../meta/recipes-graphics/xorg-lib/libx11_1.6.6.bb | 14 + .../meta/recipes-graphics/xorg-lib/libxau_1.0.8.bb | 2 +- .../xorg-lib/libxcalibrate/fix-xcb.patch | 29 - .../recipes-graphics/xorg-lib/libxcalibrate_git.bb | 23 - .../Fix-inconsistent-use-of-tabs-vs.-space.patch | 62 - poky/meta/recipes-graphics/xorg-lib/libxcb_1.12.bb | 39 - poky/meta/recipes-graphics/xorg-lib/libxcb_1.13.bb | 39 + .../xorg-lib/libxcomposite_0.4.4.bb | 2 +- .../recipes-graphics/xorg-lib/libxdamage_1.1.4.bb | 2 +- .../recipes-graphics/xorg-lib/libxdmcp_1.1.2.bb | 2 +- .../recipes-graphics/xorg-lib/libxext_1.3.3.bb | 2 +- .../recipes-graphics/xorg-lib/libxfixes_5.0.3.bb | 2 +- .../recipes-graphics/xorg-lib/libxfont2_2.0.3.bb | 2 +- .../recipes-graphics/xorg-lib/libxfont_1.5.4.bb | 2 +- poky/meta/recipes-graphics/xorg-lib/libxi_1.7.9.bb | 2 +- .../recipes-graphics/xorg-lib/libxinerama_1.1.3.bb | 22 - .../recipes-graphics/xorg-lib/libxinerama_1.1.4.bb | 22 + .../xorg-lib/libxkbcommon_0.8.0.bb | 22 - .../xorg-lib/libxkbcommon_0.8.2.bb | 22 + .../recipes-graphics/xorg-lib/libxkbfile_1.0.9.bb | 2 +- .../recipes-graphics/xorg-lib/libxrandr_1.5.1.bb | 2 +- .../recipes-graphics/xorg-lib/libxrender_0.9.10.bb | 2 +- .../recipes-graphics/xorg-lib/libxres_1.2.0.bb | 2 +- .../xorg-lib/libxscrnsaver_1.2.2.bb | 23 - .../xorg-lib/libxscrnsaver_1.2.3.bb | 23 + .../xorg-lib/libxshmfence/extensions.patch | 17 - .../recipes-graphics/xorg-lib/libxshmfence_1.2.bb | 19 - .../recipes-graphics/xorg-lib/libxshmfence_1.3.bb | 17 + poky/meta/recipes-graphics/xorg-lib/libxt_1.1.5.bb | 2 +- .../recipes-graphics/xorg-lib/libxtst_1.2.3.bb | 2 +- .../meta/recipes-graphics/xorg-lib/libxv_1.0.11.bb | 2 +- .../recipes-graphics/xorg-lib/libxvmc_1.0.10.bb | 2 +- .../recipes-graphics/xorg-lib/libxxf86dga_1.1.4.bb | 2 +- .../xorg-lib/libxxf86misc_1.0.3.bb | 20 - .../xorg-lib/libxxf86misc_1.0.4.bb | 19 + .../recipes-graphics/xorg-lib/libxxf86vm_1.1.4.bb | 2 +- .../xorg-lib/xkeyboard-config_2.22.bb | 32 - .../xorg-lib/xkeyboard-config_2.24.bb | 32 + .../xorg-lib/xtrans/multilibfix.patch | 18 + .../meta/recipes-graphics/xorg-lib/xtrans_1.3.5.bb | 2 + .../xorg-proto/bigreqsproto_1.1.2.bb | 16 - .../xorg-proto/calibrateproto/fix.patch | 42 - .../xorg-proto/calibrateproto_git.bb | 21 - .../xorg-proto/compositeproto_0.4.2.bb | 21 - .../xorg-proto/damageproto_1.2.1.bb | 20 - .../recipes-graphics/xorg-proto/dmxproto_2.3.1.bb | 18 - .../recipes-graphics/xorg-proto/dri2proto_2.8.bb | 15 - .../recipes-graphics/xorg-proto/dri3proto_1.0.bb | 14 - .../recipes-graphics/xorg-proto/fixesproto_5.0.bb | 22 - .../xorg-proto/fontsproto_2.1.3.bb | 18 - .../recipes-graphics/xorg-proto/glproto_1.4.17.bb | 18 - .../xorg-proto/inputproto_2.3.2.bb | 22 - .../recipes-graphics/xorg-proto/kbproto_1.0.7.bb | 18 - .../xorg-proto/presentproto_git.bb | 22 - .../xorg-proto/randrproto_1.5.0.bb | 19 - .../xorg-proto/recordproto_1.14.2.bb | 18 - .../xorg-proto/renderproto_0.11.1.bb | 21 - .../xorg-proto/resourceproto_1.2.0.bb | 19 - .../xorg-proto/scrnsaverproto_1.2.2.bb | 19 - .../xorg-proto/videoproto_2.3.3.bb | 14 - .../0001-Make-whitespace-use-consistent.patch | 215 - ...print-is-a-function-and-needs-parentheses.patch | 75 - .../recipes-graphics/xorg-proto/xcb-proto_1.12.bb | 53 - .../recipes-graphics/xorg-proto/xcb-proto_1.13.bb | 51 + .../xorg-proto/xcmiscproto_1.2.2.bb | 17 - .../recipes-graphics/xorg-proto/xextproto_7.3.0.bb | 24 - .../xorg-proto/xf86dgaproto_2.1.bb | 18 - .../xorg-proto/xf86driproto_2.1.1.bb | 17 - .../xorg-proto/xf86miscproto_0.9.3.bb | 17 - .../xorg-proto/xf86vidmodeproto_2.3.1.bb | 18 - .../xorg-proto/xineramaproto_1.2.1.bb | 19 - .../0001-Remove-libdir-specification.patch | 468 ++ .../xorg-proto/xorgproto_2018.4.bb | 16 + .../xorg-proto/xproto/xproto_fix_for_x32.patch | 24 - .../recipes-graphics/xorg-proto/xproto_7.0.31.bb | 19 - .../recipes-graphics/xorg-util/gccmakedep_1.0.3.bb | 21 - .../recipes-graphics/xorg-util/makedepend_1.0.5.bb | 2 +- .../xorg-util/util-macros_1.19.1.bb | 19 - .../xorg-util/util-macros_1.19.2.bb | 19 + .../xserver-xf86-config/qemumips64/xorg.conf | 1 + .../recipes-graphics/xorg-xserver/xserver-xorg.inc | 15 +- ...NULL-value-detection-for-ID_INPUT-being-u.patch | 40 - ...onfigure.ac-Fix-check-for-CLOCK_MONOTONIC.patch | 61 - .../0003-Remove-check-for-useSIGIO-option.patch | 47 - ...003-modesetting-Fix-16-bit-depth-bpp-mode.patch | 46 - .../xorg-xserver/xserver-xorg/CVE-2018-14665.patch | 62 + .../xorg-xserver/xserver-xorg/macro_tweak.patch | 25 - .../xorg-xserver/xserver-xorg/pkgconfig.patch | 34 + .../xorg-xserver/xserver-xorg_1.19.6.bb | 33 - .../xorg-xserver/xserver-xorg_1.20.1.bb | 31 + .../cryptodev/cryptodev-module_1.9.bb | 3 + .../cryptodev/cryptodev-tests_1.9.bb | 3 +- .../files/0001-Port-tests-to-openssl-1.1.patch | 103 + ...-split-big-function-to-simplify-maintaina.patch | 250 ++ ...g-relocate-code-to-simplify-later-patches.patch | 64 + ...ert-to-new-AEAD-interface-in-kernels-v4.2.patch | 102 + poky/meta/recipes-kernel/dtc/dtc.inc | 1 - ...cks-Use-proper-format-modifier-for-size_t.patch | 43 - .../meta/recipes-kernel/dtc/dtc/make_install.patch | 23 +- poky/meta/recipes-kernel/dtc/dtc_1.4.5.bb | 10 - poky/meta/recipes-kernel/dtc/dtc_1.4.7.bb | 10 + .../kern-tools/kern-tools-native_git.bb | 2 +- ...or-Unhandled-rela-relocation-R_X86_64_PLT.patch | 41 + .../recipes-kernel/kexec/kexec-tools/kdump.service | 3 +- .../recipes-kernel/kexec/kexec-tools_2.0.16.bb | 86 - .../recipes-kernel/kexec/kexec-tools_2.0.17.bb | 88 + poky/meta/recipes-kernel/kmod/kmod_git.bb | 6 +- .../linux-firmware/linux-firmware_git.bb | 22 +- .../linux-libc-headers/linux-libc-headers.inc | 11 +- ...lude-linux-stddef.h-in-swab.h-uapi-header.patch | 44 + .../linux-libc-headers_4.15.7.bb | 13 - .../linux-libc-headers/linux-libc-headers_4.18.bb | 13 + poky/meta/recipes-kernel/linux/kernel-devsrc.bb | 248 +- poky/meta/recipes-kernel/linux/linux-yocto-dev.bb | 6 +- .../recipes-kernel/linux/linux-yocto-rt_4.12.bb | 38 - .../recipes-kernel/linux/linux-yocto-rt_4.15.bb | 41 - .../recipes-kernel/linux/linux-yocto-rt_4.18.bb | 43 + .../recipes-kernel/linux/linux-yocto-tiny_4.12.bb | 25 - .../recipes-kernel/linux/linux-yocto-tiny_4.15.bb | 25 - .../recipes-kernel/linux/linux-yocto-tiny_4.18.bb | 29 + poky/meta/recipes-kernel/linux/linux-yocto.inc | 7 +- poky/meta/recipes-kernel/linux/linux-yocto_4.12.bb | 46 - poky/meta/recipes-kernel/linux/linux-yocto_4.15.bb | 47 - poky/meta/recipes-kernel/linux/linux-yocto_4.18.bb | 48 + poky/meta/recipes-kernel/lttng/babeltrace_1.5.4.bb | 19 - poky/meta/recipes-kernel/lttng/babeltrace_1.5.6.bb | 20 + ...trfs-Remove-unnecessary-fs_info-parameter.patch | 116 + ...ose-sk-wmem-in-sock_exceed_buf_limit-trac.patch | 67 + .../recipes-kernel/lttng/lttng-modules_2.10.6.bb | 35 - .../recipes-kernel/lttng/lttng-modules_2.10.7.bb | 37 + ...ow-multiple-attempts-to-connect-to-relayd.patch | 43 + .../lttng/lttng-tools/lttng-sessiond.service | 9 + .../meta/recipes-kernel/lttng/lttng-tools_2.9.5.bb | 13 +- poky/meta/recipes-kernel/perf/perf-perl.inc | 7 + poky/meta/recipes-kernel/perf/perf.bb | 25 +- ...d-anything-in-help-as-it-requires-itstool.patch | 13 +- ...0001-fix-non-literal-format-string-issues.patch | 34 + .../recipes-kernel/sysprof/files/wordsize.patch | 38 + poky/meta/recipes-kernel/sysprof/sysprof_3.26.1.bb | 34 - poky/meta/recipes-kernel/sysprof/sysprof_3.30.0.bb | 35 + ...001-Added-a-couple-of-small-sysroot-fixes.patch | 42 - ...g-sysroot-path-to-module-name-in-case-of-.patch | 61 - ...-by-updating-the-use-of-timers-for-the-4..patch | 277 -- .../systemtap/systemtap/0001-Fixes-for-gcc-8.patch | 215 - ...all-python-modules-to-correct-library-dir.patch | 36 +- ...sure-sysroot-paths-don-t-end-with-a-slash.patch | 128 - ...root-when-looking-for-the-System.map-file.patch | 29 - ...e_relocate-needs-target-file-path-not-hos.patch | 39 - ...ldrun-remove-quotes-around-I-include-line.patch | 38 - ...ookup-with-sysroot-case-do-not-remove-sys.patch | 42 - ...1-improve-reproducibility-for-c-compiling.patch | 31 + ...-short-release-r-option-handling-follow-u.patch | 40 - ...sroot-fix-short-release-r-option-handling.patch | 53 - ...dle-symbolic-links-with-absolute-name-rel.patch | 117 - .../systemtap/systemtap/monitor-option.patch | 15 +- .../meta/recipes-kernel/systemtap/systemtap_git.bb | 29 +- .../recipes-kernel/systemtap/systemtap_git.inc | 16 +- .../recipes-kernel/trace-cmd/kernelshark_git.bb | 33 - poky/meta/recipes-kernel/trace-cmd/trace-cmd.inc | 13 - ...its.h-so-that-PATH_MAX-is-defined-an-issu.patch | 27 - .../trace-cmd/blktrace-api-compatibility.patch | 29 - .../meta/recipes-kernel/trace-cmd/trace-cmd_git.bb | 34 - poky/meta/recipes-multimedia/alsa/alsa-fpu.inc | 4 - .../meta/recipes-multimedia/alsa/alsa-lib_1.1.5.bb | 39 - .../meta/recipes-multimedia/alsa/alsa-lib_1.1.6.bb | 41 + .../recipes-multimedia/alsa/alsa-plugins_1.1.5.bb | 103 - .../recipes-multimedia/alsa/alsa-plugins_1.1.6.bb | 103 + ...g-Wreserved-user-defined-literal-warnings.patch | 34 + .../alsa/alsa-tools/autotools.patch | 32 - .../alsa/alsa-tools/gitcompile_hdajacksensetest | 13 - .../alsa/alsa-tools/makefile_no_gtk.patch | 29 - .../recipes-multimedia/alsa/alsa-tools/musl.patch | 47 + .../recipes-multimedia/alsa/alsa-tools_1.1.5.bb | 40 - .../recipes-multimedia/alsa/alsa-tools_1.1.6.bb | 87 + .../alsa/alsa-utils-scripts_1.1.5.bb | 25 - .../alsa/alsa-utils-scripts_1.1.6.bb | 25 + ...-t-let-systemd-unit-restore-the-volume-wh.patch | 56 - .../recipes-multimedia/alsa/alsa-utils_1.1.5.bb | 108 - .../recipes-multimedia/alsa/alsa-utils_1.1.6.bb | 107 + .../ffmpeg/ffmpeg/CVE-2018-15822.patch | 37 + .../meta/recipes-multimedia/ffmpeg/ffmpeg_3.4.2.bb | 151 - .../meta/recipes-multimedia/ffmpeg/ffmpeg_4.0.2.bb | 158 + .../flac/files/CVE-2017-6888.patch | 31 - .../flac/flac/CVE-2017-6888.patch | 37 + poky/meta/recipes-multimedia/flac/flac_1.3.2.bb | 3 +- ...connect-has-a-different-signature-on-musl.patch | 38 + ...on.m4-prefix-pkgconfig-paths-with-PKG_CON.patch | 12 +- .../files/add-a-target-to-compile-tests.patch | 69 + .../recipes-multimedia/gstreamer/files/run-ptest | 3 + .../gstreamer/gst-validate_1.12.4.bb | 23 - .../gstreamer/gst-validate_1.14.2.bb | 25 + .../gstreamer/gstreamer1.0-libav.inc | 51 - .../0001-fix-host-contamination.patch | 36 + ...a.c-Fix-build-by-Including-libavcodec-hev.patch | 33 - .../gstreamer/gstreamer1.0-libav_1.12.4.bb | 21 - .../gstreamer/gstreamer1.0-libav_1.14.2.bb | 70 + .../gstreamer/gstreamer1.0-omx.inc | 49 - .../gstreamer/gstreamer1.0-omx_1.12.4.bb | 11 - .../gstreamer/gstreamer1.0-omx_1.14.2.bb | 57 + .../gstreamer/gstreamer1.0-plugins-bad.inc | 147 - ...-don-t-hardcode-libtool-name-when-running.patch | 51 +- ...gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch | 29 - ...y-Use-ifdef-for-platform-specific-defines.patch | 37 - ...n-Use-the-generated-version-of-vkconfig.h.patch | 64 - .../0009-glimagesink-Downrank-to-marginal.patch | 32 - .../link-with-libvchostif.patch | 35 - .../gstreamer/gstreamer1.0-plugins-bad_1.12.4.bb | 24 - .../gstreamer/gstreamer1.0-plugins-bad_1.14.2.bb | 148 + .../gstreamer/gstreamer1.0-plugins-base.inc | 50 - ...-don-t-hardcode-libtool-name-when-running.patch | 73 +- ...gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch | 29 + ...-prefix-calls-to-pkg-config-with-PKG_CONF.patch | 159 +- ...ssing-include-directories-when-calling-in.patch | 12 +- ...3-ssaparse-enhance-SSA-text-lines-parsing.patch | 24 +- ...ncorrect-reference-to-gstreamer-sdp-in-Ma.patch | 12 +- ...t-need_segment-after-sink-pad-received-GS.patch | 69 - .../0009-glimagesink-Downrank-to-marginal.patch | 32 + ...ch-for-explicitely-enabling-disabling-GBM.patch | 70 + ...ches-for-explicitely-enabling-disabling-P.patch | 109 + .../get-caps-from-src-pad-when-query-caps.patch | 12 +- .../link-with-libvchostif.patch | 45 + ...make-gio_unix_2_0-dependency-configurable.patch | 12 +- .../gstreamer/gstreamer1.0-plugins-base_1.12.4.bb | 18 - .../gstreamer/gstreamer1.0-plugins-base_1.14.2.bb | 76 + .../gstreamer/gstreamer1.0-plugins-good.inc | 52 - .../gstreamer/gstreamer1.0-plugins-good_1.12.4.bb | 20 - .../gstreamer/gstreamer1.0-plugins-good_1.14.2.bb | 79 + .../gstreamer/gstreamer1.0-plugins-ugly.inc | 31 - .../gstreamer/gstreamer1.0-plugins-ugly_1.12.4.bb | 13 - .../gstreamer/gstreamer1.0-plugins-ugly_1.14.2.bb | 40 + .../gstreamer/gstreamer1.0-python.inc | 33 - .../gstreamer/gstreamer1.0-python_1.12.4.bb | 7 - .../gstreamer/gstreamer1.0-python_1.14.2.bb | 39 + .../gstreamer/gstreamer1.0-rtsp-server.inc | 31 - .../gstreamer/gstreamer1.0-rtsp-server_1.12.4.bb | 6 - .../gstreamer/gstreamer1.0-rtsp-server_1.14.2.bb | 35 + .../gstreamer/gstreamer1.0-vaapi.inc | 46 - ...akefile.am-Add-EGL_CFLAGS-to-libgstvaapi-.patch | 33 + .../0001-vaapsink-downgrade-to-marginal.patch | 46 + .../gstreamer/gstreamer1.0-vaapi_1.12.4.bb | 5 - .../gstreamer/gstreamer1.0-vaapi_1.14.2.bb | 49 + .../recipes-multimedia/gstreamer/gstreamer1.0.inc | 61 - .../gstreamer/gstreamer1.0_1.12.4.bb | 14 - .../gstreamer/gstreamer1.0_1.14.2.bb | 90 + .../libpng/files/CVE-2018-13785.patch | 37 - .../recipes-multimedia/libpng/libpng_1.6.34.bb | 32 - .../recipes-multimedia/libpng/libpng_1.6.35.bb | 31 + .../libvorbis/0001-configure-Check-for-clang.patch | 20 +- .../libvorbis/libvorbis/CVE-2017-14160.patch | 15 +- .../libvorbis/libvorbis/CVE-2017-14632.patch | 62 - .../libvorbis/libvorbis/CVE-2017-14633.patch | 42 - .../libvorbis/libvorbis/CVE-2018-10392.patch | 13 +- .../libvorbis/libvorbis/CVE-2018-5146.patch | 100 - .../libvorbis/libvorbis_1.3.5.bb | 25 - .../libvorbis/libvorbis_1.3.6.bb | 21 + .../recipes-multimedia/pulseaudio/pulseaudio.inc | 15 +- ...ers-only-define-memfd_create-if-not-alrea.patch | 66 - .../0001-padsp-Make-it-compile-on-musl.patch | 70 - .../pulseaudio/pulseaudio_11.1.bb | 15 - .../pulseaudio/pulseaudio_12.2.bb | 13 + poky/meta/recipes-multimedia/webp/libwebp_0.6.1.bb | 54 - poky/meta/recipes-multimedia/webp/libwebp_1.0.0.bb | 53 + poky/meta/recipes-rt/rt-tests/rt-tests.inc | 2 + .../matchbox-sato/matchbox-session-sato/session | 5 +- .../matchbox-sato/matchbox-session-sato_0.1.bb | 2 +- .../matchbox-terminal/matchbox-terminal_0.1.bb | 21 - .../matchbox-terminal/matchbox-terminal_0.2.bb | 21 + .../packagegroups/packagegroup-core-x11-sato.bb | 8 +- poky/meta/recipes-sato/pcmanfm/pcmanfm_1.2.5.bb | 40 - poky/meta/recipes-sato/pcmanfm/pcmanfm_1.3.0.bb | 40 + poky/meta/recipes-sato/puzzles/puzzles_git.bb | 37 +- ...gData-has-no-member-named-lightVector-on-.patch | 37 + .../webkitgtk/0001-Fix-build-with-musl.patch | 28 +- ...01-Fix-gles3-header-when-gles2-is-enabled.patch | 38 - ...ix-racy-parallel-build-of-WebKit2-4.0.gir.patch | 63 +- ...cmake-drop-the-hardcoded-introspection-gt.patch | 15 +- ...bKitMacros-Append-to-I-and-not-to-isystem.patch | 60 +- ...ng-introspection-files-add-CMAKE_C_FLAGS-.patch | 47 +- .../0001-webkitgtk-fix-CVE-2017-17821.patch | 44 + .../0012-soup-Forward-declare-URL-class.patch | 31 + .../detect-atomics-during-configure.patch | 46 - .../webkit/webkitgtk/detect-gstreamer-gl.patch | 20 + .../webkitgtk/fix-configure-failure-aarch64.patch | 29 - .../webkit/webkitgtk/x32_support.patch | 27 +- poky/meta/recipes-sato/webkit/webkitgtk_2.18.6.bb | 123 - poky/meta/recipes-sato/webkit/webkitgtk_2.20.5.bb | 124 + .../apr/0008-apr-fix-ptest-hang-in-teststr.patch | 32 + poky/meta/recipes-support/apr/apr_1.6.3.bb | 1 + .../meta/recipes-support/aspell/aspell_0.60.6.1.bb | 5 +- .../meta/recipes-support/atk/at-spi2-atk_2.26.1.bb | 22 - .../meta/recipes-support/atk/at-spi2-atk_2.26.2.bb | 20 + .../0001-build-Add-with-systemduserunitdir.patch | 52 - .../recipes-support/atk/at-spi2-core_2.26.2.bb | 29 - .../recipes-support/atk/at-spi2-core_2.28.0.bb | 39 + .../0001-Switch-from-filename-to-basename.patch | 38 + ...ld-enable-introspection-for-cross-compile.patch | 28 + poky/meta/recipes-support/atk/atk_2.26.1.bb | 19 - poky/meta/recipes-support/atk/atk_2.28.1.bb | 37 + poky/meta/recipes-support/attr/acl_2.2.52.bb | 2 +- poky/meta/recipes-support/attr/attr.inc | 6 +- .../bash-completion/bash-completion_2.7.bb | 42 - .../bash-completion/bash-completion_2.8.bb | 42 + .../beecrypt/beecrypt/add-option-dev-dsp.patch | 34 - .../beecrypt/beecrypt-enable-ptest-support.patch | 37 - .../beecrypt/beecrypt/disable-icu-check.patch | 43 - .../beecrypt/beecrypt/fix-for-gcc-4.7.patch | 39 - .../beecrypt/beecrypt/fix-security.patch | 47 - .../recipes-support/beecrypt/beecrypt/run-ptest | 5 - .../recipes-support/beecrypt/beecrypt_4.2.1.bb | 48 - .../recipes-support/boost/bjam-native_1.66.0.bb | 19 - .../recipes-support/boost/bjam-native_1.68.0.bb | 19 + poky/meta/recipes-support/boost/boost-1.66.0.inc | 21 - poky/meta/recipes-support/boost/boost-1.68.0.inc | 21 + poky/meta/recipes-support/boost/boost.inc | 6 +- ...e_x86_64_sysv_elf_gas.S-set-.file-section.patch | 48 + ...Don-t-set-up-m32-m64-we-do-that-ourselves.patch | 65 - poky/meta/recipes-support/boost/boost_1.66.0.bb | 11 - poky/meta/recipes-support/boost/boost_1.68.0.bb | 11 + ...ge-assert-typo-how-was-this-released-with.patch | 37 - .../ca-certificates/ca-certificates_20170717.bb | 88 - .../ca-certificates/ca-certificates_20180409.bb | 87 + poky/meta/recipes-support/curl/curl_7.61.0.bb | 15 +- .../db/db/arm-thumb-mutex_db5.patch | 50 - poky/meta/recipes-support/db/db_5.3.28.bb | 18 +- .../debianutils/debianutils_4.8.4.bb | 57 - .../debianutils/debianutils_4.8.6.bb | 55 + .../recipes-support/dos2unix/dos2unix_7.4.0.bb | 35 + .../recipes-support/fribidi/fribidi/meson.patch | 44 + poky/meta/recipes-support/fribidi/fribidi_1.0.5.bb | 17 + poky/meta/recipes-support/gdbm/files/ptest.patch | 22 +- poky/meta/recipes-support/gdbm/gdbm_1.14.1.bb | 43 - poky/meta/recipes-support/gdbm/gdbm_1.18.bb | 43 + poky/meta/recipes-support/gmp/gmp.inc | 2 +- poky/meta/recipes-support/gmp/gmp_6.1.2.bb | 4 + ...c-use-a-custom-value-for-the-location-of-.patch | 10 +- .../gnupg/gnupg/CVE-2018-12020.patch | 47 - .../gnupg/gnupg/CVE-2018-9234.patch | 28 - poky/meta/recipes-support/gnupg/gnupg_2.2.4.bb | 57 - poky/meta/recipes-support/gnupg/gnupg_2.2.9.bb | 55 + poky/meta/recipes-support/gnutls/gnutls.inc | 59 - .../gnutls/0001-configure.ac-fix-sed-command.patch | 29 - poky/meta/recipes-support/gnutls/gnutls_3.6.1.bb | 9 - poky/meta/recipes-support/gnutls/gnutls_3.6.3.bb | 64 + .../gpgme/gpgme/0001-pkgconfig.patch | 18 +- ...python-gpg-error-config-should-not-be-use.patch | 10 +- .../0003-Correctly-install-python-modules.patch | 6 +- .../gpgme/gpgme/0004-python-import.patch | 6 +- ...g-skip-all-lib-or-usr-lib-directories-in-.patch | 6 +- .../gpgme/gpgme/0006-fix-build-path-issue.patch | 6 +- .../0007-qt-python-Add-variables-to-tests.patch | 12 +- poky/meta/recipes-support/gpgme/gpgme_1.10.0.bb | 86 - poky/meta/recipes-support/gpgme/gpgme_1.11.1.bb | 86 + poky/meta/recipes-support/icu/icu.inc | 6 +- .../icu/icu/0001-i18n-Drop-include-xlocale.h.patch | 34 - .../icu/icu/0002-Add-ARC-support.patch | 27 + poky/meta/recipes-support/icu/icu_60.2.bb | 29 - poky/meta/recipes-support/icu/icu_62.1.bb | 29 + .../recipes-support/iso-codes/iso-codes_3.77.bb | 16 - .../recipes-support/iso-codes/iso-codes_4.1.bb | 19 + .../libatomic-ops/libatomic-ops_7.6.2.bb | 21 - .../libatomic-ops/libatomic-ops_7.6.6.bb | 21 + ...001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch | 376 -- .../0001-flopen-Add-missing-fcntl.h-include.patch | 46 + ...overlay.pc.in-Set-Cflags-to-use-I-instead.patch | 33 - .../libbsd/libbsd/0002-Remove-funopen.patch | 52 - poky/meta/recipes-support/libbsd/libbsd_0.8.7.bb | 50 - poky/meta/recipes-support/libbsd/libbsd_0.9.1.bb | 44 + .../libcap-ng/libcap-ng/python.patch | 28 +- .../recipes-support/libcap-ng/libcap-ng_0.7.8.bb | 37 - .../recipes-support/libcap-ng/libcap-ng_0.7.9.bb | 37 + poky/meta/recipes-support/libcap/libcap_2.25.bb | 2 +- .../not-echo-compiler-info-to-check_stdint.h.patch | 19 + .../recipes-support/libcheck/libcheck_0.12.0.bb | 3 +- .../libcroco/libcroco/CVE-2017-7961.patch | 46 - .../recipes-support/libcroco/libcroco_0.6.12.bb | 3 +- .../recipes-support/libevdev/libevdev_1.5.8.bb | 14 - .../recipes-support/libevdev/libevdev_1.5.9.bb | 14 + .../recipes-support/libevent/libevent_2.1.8.bb | 6 +- .../recipes-support/libfm/libfm-extra_1.2.5.bb | 23 - .../recipes-support/libfm/libfm-extra_1.3.0.2.bb | 23 + ...-library-path-to-avoid-host-contamination.patch | 23 + ...Enclose-text-in-programlisting-into-CDATA.patch | 76 - poky/meta/recipes-support/libfm/libfm_1.2.5.bb | 54 - poky/meta/recipes-support/libfm/libfm_1.3.0.2.bb | 54 + .../libgcrypt/files/CVE-2018-0495.patch | 76 - .../recipes-support/libgcrypt/libgcrypt_1.8.2.bb | 54 - .../recipes-support/libgcrypt/libgcrypt_1.8.3.bb | 54 + ...port-ARC-CPUs-and-simplify-aliasing-table.patch | 298 ++ ...cfg-Add-support-for-arc-unknown-linux-gnu.patch | 35 + .../libgpg-error/libgpg-error/pkgconfig.patch | 67 +- .../libgpg-error/libgpg-error_1.27.bb | 62 - .../libgpg-error/libgpg-error_1.32.bb | 71 + poky/meta/recipes-support/libical/libical_2.0.0.bb | 7 + .../meta/recipes-support/libpcre/libpcre2_10.30.bb | 61 - .../meta/recipes-support/libpcre/libpcre2_10.31.bb | 61 + poky/meta/recipes-support/libpcre/libpcre_8.41.bb | 87 - poky/meta/recipes-support/libpcre/libpcre_8.42.bb | 87 + .../recipes-support/libproxy/libproxy_0.4.15.bb | 5 +- .../recipes-support/libsoup/libsoup-2.4_2.60.3.bb | 35 - .../recipes-support/libsoup/libsoup-2.4_2.62.3.bb | 34 + .../libunistring/libunistring_0.9.10.bb | 30 + .../libunistring/libunistring_0.9.9.bb | 30 - poky/meta/recipes-support/libunwind/libunwind.inc | 2 - .../recipes-support/libunwind/libunwind_1.2.1.bb | 2 + .../Add-support-for-the-RISC-V-architecture.patch | 157 + .../meta/recipes-support/liburcu/liburcu_0.10.1.bb | 7 +- .../0001-usb.h-Include-sys-types.h.patch | 30 - .../recipes-support/libusb/libusb-compat_0.1.5.bb | 42 - poky/meta/recipes-support/libusb/libusb1/run-ptest | 29 + poky/meta/recipes-support/libusb/libusb1_1.0.21.bb | 35 - poky/meta/recipes-support/libusb/libusb1_1.0.22.bb | 44 + .../libxslt/libxslt/fix-rvts-handling.patch | 80 + .../meta/recipes-support/libxslt/libxslt_1.1.32.bb | 5 +- poky/meta/recipes-support/libyaml/libyaml_0.1.7.bb | 20 - poky/meta/recipes-support/libyaml/libyaml_0.2.1.bb | 18 + ...sts-Makefile-don-t-use-LIBDIR-as-variable.patch | 82 - poky/meta/recipes-support/lz4/lz4_1.7.4.bb | 27 - poky/meta/recipes-support/lz4/lz4_1.8.2.bb | 27 + .../0001-Fix-obsolete-ARC-asm-constraints.patch | 45 + .../mpfr/mpfr/long-long-thumb.patch | 39 - poky/meta/recipes-support/mpfr/mpfr_3.1.5.bb | 20 - poky/meta/recipes-support/mpfr/mpfr_4.0.1.bb | 19 + poky/meta/recipes-support/npth/npth_1.5.bb | 23 - poky/meta/recipes-support/npth/npth_1.6.bb | 27 + ...e-definitions-for-the-RISC-V-architecture.patch | 150 + .../nspr/nspr/0004-Add-ARC-support.patch | 88 + poky/meta/recipes-support/nspr/nspr_4.19.bb | 6 +- ...1437734-Use-snprintf-in-sign.c-r-ttaubert.patch | 119 - .../nss/nss/Fix-compilation-for-X32.patch | 33 - poky/meta/recipes-support/nss/nss/blank-cert9.db | Bin 0 -> 28672 bytes poky/meta/recipes-support/nss/nss/blank-key4.db | Bin 0 -> 36864 bytes .../nss/nss/disable-Wvarargs-with-clang.patch | 8 +- .../nss/nss/nss-build-hacl-poly1305-aarch64.patch | 30 - .../recipes-support/nss/nss/pqg.c-ULL_addend.patch | 8 +- .../meta/recipes-support/nss/nss/system-pkcs11.txt | 5 + poky/meta/recipes-support/nss/nss_3.35.bb | 255 -- poky/meta/recipes-support/nss/nss_3.39.bb | 264 ++ ...p-the-languages-for-which-upstream-does-n.patch | 13 +- .../meta/recipes-support/p11-kit/p11-kit_0.22.1.bb | 46 - .../recipes-support/p11-kit/p11-kit_0.23.14.bb | 46 + .../recipes-support/pinentry/pinentry_1.1.0.bb | 11 +- .../ptest-runner/ptest-runner_2.1.1.bb | 26 - .../ptest-runner/ptest-runner_2.2.bb | 26 + poky/meta/recipes-support/re2c/re2c/mkdir.patch | 36 - poky/meta/recipes-support/re2c/re2c_0.16.bb | 15 - poky/meta/recipes-support/re2c/re2c_1.0.1.bb | 14 + .../rng-tools/rng-tools/rngd.service | 3 + poky/meta/recipes-support/rng-tools/rng-tools_5.bb | 9 +- .../recipes-support/serf/serf/0003-gen_def.patch | 5 + .../shared-mime-info/shared-mime-info_1.10.bb | 7 + .../shared-mime-info/shared-mime-info_1.9.bb | 7 - .../sqlite/files/CVE-2018-8740.patch | 47 - poky/meta/recipes-support/sqlite/sqlite3.inc | 8 +- poky/meta/recipes-support/sqlite/sqlite3_3.22.0.bb | 11 - poky/meta/recipes-support/sqlite/sqlite3_3.23.1.bb | 10 + poky/meta/recipes-support/vte/vte_0.50.2.bb | 48 - poky/meta/recipes-support/vte/vte_0.52.2.bb | 46 + poky/meta/site/arc-common | 11 + poky/scripts/autobuilder-worker-prereq-tests | 65 + poky/scripts/combo-layer | 2 +- poky/scripts/contrib/mkefidisk.sh | 472 -- poky/scripts/contrib/patchreview.py | 6 +- poky/scripts/contrib/verify-homepage.py | 2 +- poky/scripts/devtool | 2 +- poky/scripts/lib/build_perf/html/report.html | 7 +- poky/scripts/lib/devtool/build.py | 7 +- poky/scripts/lib/devtool/export.py | 2 +- poky/scripts/lib/devtool/import.py | 8 +- poky/scripts/lib/devtool/standard.py | 16 +- poky/scripts/lib/devtool/upgrade.py | 11 +- poky/scripts/lib/recipetool/append.py | 14 +- poky/scripts/lib/recipetool/create.py | 4 +- poky/scripts/lib/recipetool/create_kmod.py | 2 +- poky/scripts/lib/recipetool/create_npm.py | 6 +- poky/scripts/lib/recipetool/edit.py | 54 + poky/scripts/lib/recipetool/newappend.py | 4 +- poky/scripts/lib/scriptutils.py | 24 +- poky/scripts/lib/wic/canned-wks/mkhybridiso.wks | 2 +- poky/scripts/lib/wic/engine.py | 29 +- poky/scripts/lib/wic/filemap.py | 9 +- poky/scripts/lib/wic/help.py | 18 +- poky/scripts/lib/wic/ksparser.py | 16 +- poky/scripts/lib/wic/partition.py | 4 +- poky/scripts/lib/wic/plugins/imager/direct.py | 6 + .../lib/wic/plugins/source/bootimg-partition.py | 121 +- .../lib/wic/plugins/source/bootimg-pcbios.py | 10 +- .../lib/wic/plugins/source/isoimage-isohybrid.py | 36 +- poky/scripts/oe-build-perf-report | 4 +- poky/scripts/oe-buildenv-internal | 11 +- poky/scripts/oe-depends-dot | 46 + poky/scripts/oe-find-native-sysroot | 2 - poky/scripts/oe-pkgdata-util | 13 +- poky/scripts/oe-run-native | 4 +- poky/scripts/postinst-intercepts/update_font_cache | 3 +- .../postinst-intercepts/update_gio_module_cache | 3 +- .../postinst-intercepts/update_gtk_immodules_cache | 16 + .../postinst-intercepts/update_pixbuf_cache | 3 +- poky/scripts/postinst-intercepts/update_udev_hwdb | 6 + poky/scripts/runqemu | 21 +- poky/scripts/runqemu-extract-sdk | 19 +- poky/scripts/runqemu-ifdown | 10 + poky/scripts/send-error-report | 4 +- poky/scripts/wic | 2 + poky/scripts/yocto-check-layer | 9 +- 2265 files changed, 75741 insertions(+), 69079 deletions(-) create mode 100644 poky/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png create mode 100644 poky/bitbake/lib/bb/tests/cooker.py create mode 100644 poky/bitbake/lib/layerindexlib/README create mode 100644 poky/bitbake/lib/layerindexlib/__init__.py create mode 100644 poky/bitbake/lib/layerindexlib/cooker.py create mode 100644 poky/bitbake/lib/layerindexlib/plugin.py create mode 100644 poky/bitbake/lib/layerindexlib/restapi.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/__init__.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/common.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/cooker.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/layerindexobj.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/restapi.py create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/README create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/build/conf/bblayers.conf create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/layer1/conf/layer.conf create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/layer2/conf/layer.conf create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/layer3/conf/layer.conf create mode 100644 poky/bitbake/lib/layerindexlib/tests/testdata/layer4/conf/layer.conf create mode 100644 poky/bitbake/lib/toaster/orm/migrations/0018_project_specific.py create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/base_specific.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/baseprojectspecificpage.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/landing_specific.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/newproject_specific.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/project_specific.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/project_specific_topbar.html create mode 100644 poky/bitbake/lib/toaster/toastergui/templates/recipe_add_btn.html mode change 100755 => 100644 poky/bitbake/lib/toaster/toastergui/views.py create mode 100644 poky/bitbake/lib/toaster/toastermain/management/commands/buildimport.py create mode 100644 poky/documentation/dev-manual/figures/multiconfig_files.png create mode 100644 poky/documentation/mega-manual/figures/multiconfig_files.png create mode 100644 poky/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb create mode 100755 poky/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh create mode 100644 poky/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/hello.c create mode 100644 poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto-dev.bbappend delete mode 100644 poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.12.bbappend delete mode 100644 poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.15.bbappend create mode 100644 poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.18.bbappend create mode 100644 poky/meta/classes/devicetree.bbclass create mode 100644 poky/meta/classes/dos2unix.bbclass create mode 100644 poky/meta/classes/image-postinst-intercepts.bbclass create mode 100644 poky/meta/classes/kernel-artifact-names.bbclass create mode 100644 poky/meta/classes/license_image.bbclass create mode 100644 poky/meta/classes/multilib_script.bbclass delete mode 100644 poky/meta/classes/testimage-auto.bbclass delete mode 100644 poky/meta/conf/distro/include/as-needed.inc create mode 100644 poky/meta/conf/distro/include/tclibc-newlib.inc create mode 100644 poky/meta/conf/machine-sdk/aarch64.conf create mode 100644 poky/meta/conf/machine/include/m68k/arch-m68k.inc create mode 100644 poky/meta/conf/machine/include/mips/tune-mips-74k.inc create mode 100644 poky/meta/conf/machine/include/tune-mcf5441x.inc create mode 100644 poky/meta/lib/oe/elf.py create mode 100644 poky/meta/lib/oeqa/core/utils/concurrencytest.py delete mode 100644 poky/meta/lib/oeqa/files/test.pl delete mode 100644 poky/meta/lib/oeqa/files/test.py create mode 100644 poky/meta/lib/oeqa/manual/abat.patch create mode 100644 poky/meta/lib/oeqa/manual/bsp-hw.json create mode 100644 poky/meta/lib/oeqa/manual/bsp-qemu.json create mode 100644 poky/meta/lib/oeqa/manual/build-appliance.json create mode 100644 poky/meta/lib/oeqa/manual/crops.json create mode 100644 poky/meta/lib/oeqa/manual/eclipse-plugin.json create mode 100644 poky/meta/lib/oeqa/manual/kernel-dev.json create mode 100644 poky/meta/lib/oeqa/manual/oe-core.json create mode 100644 poky/meta/lib/oeqa/manual/sdk.json create mode 100644 poky/meta/lib/oeqa/runtime/cases/ksample.py delete mode 100644 poky/meta/lib/oeqa/runtime/cases/scanelf.py create mode 100644 poky/meta/lib/oeqa/sdk/cases/assimp.py create mode 100644 poky/meta/lib/oeqa/selftest/cases/fetch.py delete mode 100644 poky/meta/recipes-bsp/acpid/acpid_2.0.28.bb create mode 100644 poky/meta/recipes-bsp/acpid/acpid_2.0.30.bb delete mode 100644 poky/meta/recipes-bsp/eee-acpi-scripts/eee-acpi-scripts_git.bb delete mode 100644 poky/meta/recipes-bsp/eee-acpi-scripts/files/policy-funcs delete mode 100644 poky/meta/recipes-bsp/eee-acpi-scripts/files/powerbtn.patch delete mode 100644 poky/meta/recipes-bsp/eee-acpi-scripts/files/remove-doc-check.patch delete mode 100644 poky/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.6.bb create mode 100644 poky/meta/recipes-bsp/gnu-efi/gnu-efi_3.0.8.bb create mode 100644 poky/meta/recipes-bsp/grub/files/0001-x86-64-Treat-R_X86_64_PLT32-as-R_X86_64_PC32.patch delete mode 100644 poky/meta/recipes-bsp/pciutils/pciutils_3.5.6.bb create mode 100644 poky/meta/recipes-bsp/pciutils/pciutils_3.6.2.bb delete mode 100644 poky/meta/recipes-bsp/pcmciautils/pcmciautils-018/lex_sys_types.patch delete mode 100644 poky/meta/recipes-bsp/pcmciautils/pcmciautils-018/makefile_fix.patch delete mode 100644 poky/meta/recipes-bsp/pcmciautils/pcmciautils-018/makefile_race.patch delete mode 100644 poky/meta/recipes-bsp/pcmciautils/pcmciautils.inc delete mode 100644 poky/meta/recipes-bsp/pcmciautils/pcmciautils_018.bb delete mode 100644 poky/meta/recipes-bsp/u-boot/files/0001-efi_loader-avoid-make-race-condition.patch create mode 100644 poky/meta/recipes-bsp/u-boot/files/CVE-2018-1000205-1.patch create mode 100644 poky/meta/recipes-bsp/u-boot/files/CVE-2018-1000205-2.patch delete mode 100644 poky/meta/recipes-bsp/u-boot/files/MPC8315ERDB-enable-DHCP.patch delete mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-common_2018.01.inc create mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-common_2018.07.inc delete mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-fw-utils_2018.01.bb create mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-fw-utils_2018.07.bb delete mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-mkimage_2018.01.bb create mode 100644 poky/meta/recipes-bsp/u-boot/u-boot-mkimage_2018.07.bb delete mode 100644 poky/meta/recipes-bsp/u-boot/u-boot_2018.01.bb create mode 100644 poky/meta/recipes-bsp/u-boot/u-boot_2018.07.bb delete mode 100644 poky/meta/recipes-bsp/usbutils/usbutils_009.bb create mode 100644 poky/meta/recipes-bsp/usbutils/usbutils_010.bb create mode 100644 poky/meta/recipes-bsp/v86d/v86d/Support-for-cross-compilation.patch delete mode 100644 poky/meta/recipes-bsp/v86d/v86d/aarch64-host.patch create mode 100644 poky/meta/recipes-connectivity/avahi/files/0001-Fix-opening-etc-resolv.conf-error.patch create mode 100644 poky/meta/recipes-connectivity/bind/bind/0001-avoid-start-failure-with-bind-user.patch create mode 100644 poky/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch create mode 100644 poky/meta/recipes-connectivity/bind/bind/0001-named-lwresd-V-and-start-log-hide-build-options.patch create mode 100644 poky/meta/recipes-connectivity/bind/bind/CVE-2018-5740.patch delete mode 100644 poky/meta/recipes-connectivity/bind/bind/bind-confgen-build-unix.o-once.patch delete mode 100644 poky/meta/recipes-connectivity/bind/bind/dont-test-on-host.patch delete mode 100644 poky/meta/recipes-connectivity/bind/bind/use-python3-and-fix-install-lib-path.patch delete mode 100644 poky/meta/recipes-connectivity/bind/bind_9.10.6.bb create mode 100644 poky/meta/recipes-connectivity/bind/bind_9.11.4.bb create mode 100644 poky/meta/recipes-connectivity/bluez5/bluez5/0001-test-gatt-Fix-hung-issue.patch delete mode 100644 poky/meta/recipes-connectivity/bluez5/bluez5_5.48.bb create mode 100644 poky/meta/recipes-connectivity/bluez5/bluez5_5.50.bb delete mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp/0010-build-shared-libs.patch delete mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp/0011-Moved-the-call-to-isc_app_ctxstart-to-not-get-signal.patch create mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp/0013-fixup_use_libbind.patch delete mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp/CVE-2017-3144.patch delete mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp_4.3.6.bb create mode 100644 poky/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb delete mode 100644 poky/meta/recipes-connectivity/iproute2/iproute2/0001-iproute2-de-bash-scripts.patch delete mode 100644 poky/meta/recipes-connectivity/iproute2/iproute2_4.14.1.bb create mode 100644 poky/meta/recipes-connectivity/iproute2/iproute2_4.18.0.bb create mode 100644 poky/meta/recipes-connectivity/mobile-broadband-provider-info/mobile-broadband-provider-info/multilibfix.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/files/bugfix-adjust-statd-service-name.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/files/nfs-utils-debianize-start-statd.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/libnfsidmap/0001-include-sys-types.h-for-getting-u_-typedefs.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/libnfsidmap/Set_nobody_user_group.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/libnfsidmap/fix-ac-prereq.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/libnfsidmap_0.25.bb delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-configure-Allow-to-explicitly-disable-nfsidmap.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-include-stdint.h-for-UINT16_MAX-definition.patch create mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/bugfix-adjust-statd-service-name.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-utils-1.2.3-sm-notify-res_init.patch create mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-utils-debianize-start-statd.patch create mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-utils-musl-limits.patch create mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-utils-musl-res_querydomain.patch delete mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils_2.1.1.bb create mode 100644 poky/meta/recipes-connectivity/nfs-utils/nfs-utils_2.3.1.bb delete mode 100644 poky/meta/recipes-connectivity/ofono/ofono_1.22.bb create mode 100644 poky/meta/recipes-connectivity/ofono/ofono_1.24.bb delete mode 100644 poky/meta/recipes-connectivity/openssh/openssh/disable-ciphers-not-supported-by-OpenSSL-DES.patch delete mode 100644 poky/meta/recipes-connectivity/openssh/openssh_7.6p1.bb create mode 100644 poky/meta/recipes-connectivity/openssh/openssh_7.8p1+git.bb create mode 100644 poky/meta/recipes-connectivity/openssl/files/environment.d-openssl.sh delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/0001-Fix-build-with-clang-using-external-assembler.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/0001-allow-manpages-to-be-disabled.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/0001-openssl-force-soft-link-to-avoid-rare-race.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/Makefiles-ptest.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/Use-SHA256-not-MD5-as-default-digest.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/configure-musl-target.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/configure-targets.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/c_rehash-compat.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/debian-targets.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/man-dir.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/man-section.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/no-rpath.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/no-symbolic.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian/pic.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian1.0.2/block_digicert_malaysia.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian1.0.2/block_diginotar.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian1.0.2/soname.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/debian1.0.2/version-script.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/engines-install-in-libdir-ssl.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/oe-ldflags.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/openssl-c_rehash.sh delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/openssl-fix-des.pod-error.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/openssl_fix_for_x32.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/parallel.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/ptest-deps.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/ptest_makefile_deps.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/reproducible-cflags.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/reproducible-mkbuildinf.patch delete mode 100755 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/run-ptest delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl-1.0.2p/shared-libs.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl/0001-Take-linking-flags-from-LDFLAGS-env-var.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl/0001-skip-test_symbol_presence.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl/0002-fix-CVE-2018-0734.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl/0003-fix-CVE-2018-0735.patch delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl/environment.d-openssl.sh create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/0001-Fix-build-with-clang-using-external-assembler.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/0001-allow-manpages-to-be-disabled.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/0001-fix-CVE-2018-0734.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/0001-openssl-force-soft-link-to-avoid-rare-race.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/Makefiles-ptest.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/Use-SHA256-not-MD5-as-default-digest.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/configure-musl-target.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/configure-targets.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/c_rehash-compat.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/debian-targets.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/man-dir.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/man-section.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/no-rpath.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/no-symbolic.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian/pic.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian1.0.2/block_digicert_malaysia.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian1.0.2/block_diginotar.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian1.0.2/soname.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/debian1.0.2/version-script.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/engines-install-in-libdir-ssl.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/oe-ldflags.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/openssl-c_rehash.sh create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/openssl-fix-des.pod-error.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/openssl_fix_for_x32.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/parallel.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/ptest-deps.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/ptest_makefile_deps.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/reproducible-cflags.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/reproducible-mkbuildinf.patch create mode 100755 poky/meta/recipes-connectivity/openssl/openssl10/run-ptest create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10/shared-libs.patch create mode 100644 poky/meta/recipes-connectivity/openssl/openssl10_1.0.2p.bb delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl_1.0.2p.bb delete mode 100644 poky/meta/recipes-connectivity/openssl/openssl_1.1.0i.bb create mode 100644 poky/meta/recipes-connectivity/openssl/openssl_1.1.1.bb create mode 100644 poky/meta/recipes-connectivity/ppp/ppp/ppp-2.4.7-DES-openssl.patch delete mode 100644 poky/meta/recipes-connectivity/wireless-tools/wireless-tools/avoid_strip.patch delete mode 100644 poky/meta/recipes-connectivity/wireless-tools/wireless-tools/ldflags.patch delete mode 100644 poky/meta/recipes-connectivity/wireless-tools/wireless-tools/man.patch delete mode 100644 poky/meta/recipes-connectivity/wireless-tools/wireless-tools/remove.ldconfig.call.patch delete mode 100644 poky/meta/recipes-connectivity/wireless-tools/wireless-tools_30.pre9.bb delete mode 100644 poky/meta/recipes-core/busybox/busybox-inittab_1.27.2.bb create mode 100644 poky/meta/recipes-core/busybox/busybox-inittab_1.29.2.bb delete mode 100755 poky/meta/recipes-core/busybox/busybox/CVE-2011-5325.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox/CVE-2017-15873.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox/CVE-2017-15874.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox/busybox-fix-lzma-segfaults.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox/umount-ignore-c.patch delete mode 100644 poky/meta/recipes-core/busybox/busybox_1.27.2.bb create mode 100644 poky/meta/recipes-core/busybox/busybox_1.29.2.bb delete mode 100644 poky/meta/recipes-core/busybox/files/runlevel delete mode 100644 poky/meta/recipes-core/coreutils/coreutils/0001-Unset-need_charset_alias-when-building-for-musl.patch delete mode 100644 poky/meta/recipes-core/coreutils/coreutils/CVE-2017-18018-1.patch delete mode 100644 poky/meta/recipes-core/coreutils/coreutils/CVE-2017-18018-2.patch delete mode 100644 poky/meta/recipes-core/coreutils/coreutils_8.29.bb create mode 100644 poky/meta/recipes-core/coreutils/coreutils_8.30.bb delete mode 100644 poky/meta/recipes-core/dbus/dbus-glib.inc delete mode 100644 poky/meta/recipes-core/dbus/dbus-glib_0.108.bb create mode 100644 poky/meta/recipes-core/dbus/dbus-glib_0.110.bb create mode 100644 poky/meta/recipes-core/dbus/dbus-test_1.12.10.bb delete mode 100644 poky/meta/recipes-core/dbus/dbus-test_1.12.2.bb create mode 100644 poky/meta/recipes-core/dbus/dbus_1.12.10.bb delete mode 100644 poky/meta/recipes-core/dbus/dbus_1.12.2.bb delete mode 100644 poky/meta/recipes-core/dropbear/dropbear/0003-configure.patch delete mode 100644 poky/meta/recipes-core/dropbear/dropbear/0004-fix-2kb-keys.patch delete mode 100644 poky/meta/recipes-core/dropbear/dropbear/0007-dropbear-fix-for-x32-abi.patch create mode 100644 poky/meta/recipes-core/dropbear/dropbear/CVE-2018-15599.patch create mode 100644 poky/meta/recipes-core/dropbear/dropbear/dropbear.default delete mode 100644 poky/meta/recipes-core/dropbear/dropbear/fix-libtomcrypt-libtommath-ordering.patch delete mode 100644 poky/meta/recipes-core/dropbear/dropbear_2017.75.bb create mode 100644 poky/meta/recipes-core/dropbear/dropbear_2018.76.bb delete mode 100644 poky/meta/recipes-core/expat/expat_2.2.5.bb create mode 100644 poky/meta/recipes-core/expat/expat_2.2.6.bb delete mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0/0001-Test-for-pthread_getname_np-before-using-it.patch delete mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0/allow-run-media-sdX-drive-mount-if-username-root.patch create mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0/date-lt.patch delete mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0/ptest-paths.patch delete mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0_2.54.3.bb create mode 100644 poky/meta/recipes-core/glib-2.0/glib-2.0_2.58.0.bb delete mode 100644 poky/meta/recipes-core/glibc/cross-localedef-native_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/cross-localedef-native_2.28.bb delete mode 100644 poky/meta/recipes-core/glibc/glibc-initial_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/glibc-initial_2.28.bb delete mode 100644 poky/meta/recipes-core/glibc/glibc-locale_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/glibc-locale_2.28.bb delete mode 100644 poky/meta/recipes-core/glibc/glibc-mtrace_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/glibc-mtrace_2.28.bb delete mode 100644 poky/meta/recipes-core/glibc/glibc-scripts_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/glibc-scripts_2.28.bb delete mode 100644 poky/meta/recipes-core/glibc/glibc/0005-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0006-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0006-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0007-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0007-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0008-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0008-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0009-Quote-from-bug-1443-which-explains-what-the-patch-do.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0009-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0010-Quote-from-bug-1443-which-explains-what-the-patch-do.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0010-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0011-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0011-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0012-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0012-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0013-Add-unused-attribute.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0013-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0014-Add-unused-attribute.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0014-yes-within-the-path-sets-wrong-config-variables.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0015-timezone-re-written-tzselect-as-posix-sh.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0015-yes-within-the-path-sets-wrong-config-variables.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0016-Remove-bash-dependency-for-nscd-init-script.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0016-timezone-re-written-tzselect-as-posix-sh.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0017-Remove-bash-dependency-for-nscd-init-script.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0017-eglibc-Cross-building-and-testing-instructions.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0018-eglibc-Cross-building-and-testing-instructions.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0018-eglibc-Help-bootstrap-cross-toolchain.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0019-eglibc-Clear-cache-lines-on-ppc8xx.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0019-eglibc-Help-bootstrap-cross-toolchain.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0020-eglibc-Clear-cache-lines-on-ppc8xx.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0020-eglibc-Resolve-__fpscr_values-on-SH4.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0021-eglibc-Install-PIC-archives.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0021-eglibc-Resolve-__fpscr_values-on-SH4.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0029-Replace-strncpy-with-memccpy-to-fix-Wstringop-trunca.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0029-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0030-intl-Emit-no-lines-in-bison-generated-files.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0030-plural_c_no_preprocessor_lines.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/0031-nativesdk-deprecate-libcrypt.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0031-sysdeps-ieee754-prevent-maybe-uninitialized-errors-w.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0032-sysdeps-ieee754-soft-fp-ignore-maybe-uninitialized-w.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0033-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch create mode 100644 poky/meta/recipes-core/glibc/glibc/0034-inject-file-assembly-directives.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/CVE-2017-18269.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/CVE-2018-11236.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/CVE-2018-11237.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc/archive-path.patch create mode 100755 poky/meta/recipes-core/glibc/glibc/makedbs.sh delete mode 100644 poky/meta/recipes-core/glibc/glibc/relocate-locales.patch delete mode 100644 poky/meta/recipes-core/glibc/glibc_2.27.bb create mode 100644 poky/meta/recipes-core/glibc/glibc_2.28.bb create mode 100644 poky/meta/recipes-core/initrdscripts/initramfs-framework/nfsrootfs delete mode 100644 poky/meta/recipes-core/libxcrypt/libxcrypt_4.0.1.bb create mode 100644 poky/meta/recipes-core/libxcrypt/libxcrypt_4.1.1.bb create mode 100644 poky/meta/recipes-core/libxml/libxml2/0001-Fix-infinite-loop-in-LZMA-decompression.patch delete mode 100644 poky/meta/recipes-core/libxml/libxml2/CVE-2018-14404.patch delete mode 100644 poky/meta/recipes-core/libxml/libxml2/ansidecl.patch create mode 100644 poky/meta/recipes-core/libxml/libxml2/fix-CVE-2017-8872.patch create mode 100644 poky/meta/recipes-core/libxml/libxml2/fix-CVE-2018-14404.patch delete mode 100644 poky/meta/recipes-core/libxml/libxml2_2.9.7.bb create mode 100644 poky/meta/recipes-core/libxml/libxml2_2.9.8.bb create mode 100644 poky/meta/recipes-core/musl/libssp-nonshared.bb create mode 100644 poky/meta/recipes-core/musl/libssp-nonshared/ssp-local.c delete mode 100644 poky/meta/recipes-core/ncurses/ncurses_6.0+20171125.bb create mode 100644 poky/meta/recipes-core/ncurses/ncurses_6.1+20180630.bb create mode 100644 poky/meta/recipes-core/newlib/libgloss/fix-rs6000-crt0.patch create mode 100644 poky/meta/recipes-core/newlib/libgloss/fix_makefile_include_arm_h.patch create mode 100644 poky/meta/recipes-core/newlib/libgloss_3.0.0.bb create mode 100644 poky/meta/recipes-core/newlib/newlib.inc create mode 100644 poky/meta/recipes-core/newlib/newlib_3.0.0.bb delete mode 100644 poky/meta/recipes-core/systemd/systemd-boot_237.bb create mode 100644 poky/meta/recipes-core/systemd/systemd-boot_239.bb create mode 100644 poky/meta/recipes-core/systemd/systemd-conf.bb delete mode 100644 poky/meta/recipes-core/systemd/systemd/0001-Also-check-i386-i586-and-i686-for-ia32.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0001-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-chown-recursive-let-s-rework-the-recursive-logic-to-.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0001-core-device.c-Change-the-default-device-timeout-to-2.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-core-when-deserializing-state-always-use-read_line-L.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-dhcp6-make-sure-we-have-enough-space-for-the-DHCP6-o.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-login-use-parse_uid-when-unmounting-user-runtime-dir.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0001-sd-bus-make-BUS_DEFAULT_TIMEOUT-configurable.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0002-use-lnr-wrapper-instead-of-looking-for-relative-opti.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0003-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0003-use-lnr-wrapper-instead-of-looking-for-relative-opti.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0004-implment-systemd-sysv-install-for-OE.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0004-rules-whitelist-hd-devices.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0005-Make-root-s-home-directory-configurable.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0005-include-gshadow-only-if-ENABLE_GSHADOW-is-1.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0005-rules-whitelist-hd-devices.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0006-Make-root-s-home-directory-configurable.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0006-remove-nobody-user-group-checking.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0006-src-basic-missing.h-check-for-missing-strndupa.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0007-Include-netinet-if_ether.h.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0007-Revert-rules-remove-firmware-loading-rules.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0007-rules-watch-metadata-changes-in-ide-devices.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0008-Do-not-enable-nss-tests-if-nss-systemd-is-not-enable.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0008-Revert-udev-remove-userspace-firmware-loading-suppor.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0008-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0009-add-missing-FTW_-macros-for-musl.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0009-nss-mymachines-Build-conditionally-when-ENABLE_MYHOS.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0009-remove-duplicate-include-uchar.h.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0010-check-for-uchar.h-in-meson.build.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0010-socket-util-don-t-fail-if-libc-doesn-t-support-IDN.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0011-socket-util-don-t-fail-if-libc-doesn-t-support-IDN.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0011-src-basic-missing.h-check-for-missing-__compar_fn_t-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0012-fix-missing-of-__register_atfork-for-non-glibc-build.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0012-rules-watch-metadata-changes-in-ide-devices.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0013-Use-uintmax_t-for-handling-rlim_t.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0013-add-fallback-parse_printf_format-implementation.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0014-fix-missing-ULONG_LONG_MAX-definition-in-case-of-mus.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0014-src-basic-missing.h-check-for-missing-strndupa.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0015-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0015-test-hexdecoct.c-Include-missing.h-for-strndupa.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0016-src-basic-missing.h-check-for-missing-__compar_fn_t-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0016-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0017-Include-netinet-if_ether.h.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0017-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0018-Define-glibc-compatible-basename-for-non-glibc-syste.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0018-check-for-missing-canonicalize_file_name.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0019-Do-not-disable-buffering-when-writing-to-oom_score_a.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0019-Do-not-enable-nss-tests-if-nss-systemd-is-not-enable.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0020-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0020-test-hexdecoct.c-Include-missing.h-for-strndupa.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0021-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0021-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0022-build-sys-Detect-whether-struct-statx-is-defined-in-.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0022-don-t-use-glibc-specific-qsort_r.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0023-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch create mode 100644 poky/meta/recipes-core/systemd/systemd/0023-resolvconf-fixes-for-the-compatibility-interface.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0024-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0025-Define-_PATH_WTMPX-and-_PATH_UTMPX-if-not-defined.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0026-Use-uintmax_t-for-handling-rlim_t.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0027-remove-nobody-user-group-checking.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0028-add-missing-FTW_-macros-for-musl.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0029-nss-mymachines-Build-conditionally-when-ENABLE_MYHOS.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0030-fix-missing-of-__register_atfork-for-non-glibc-build.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0031-fix-missing-ULONG_LONG_MAX-definition-in-case-of-mus.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0032-memfd.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0033-basic-macros-rename-noreturn-into-_noreturn_-8456.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0034-Fix-format-truncation-compile-failure-by-typecasting.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/0035-Define-glibc-compatible-basename-for-non-glibc-syste.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd/libmount.patch delete mode 100644 poky/meta/recipes-core/systemd/systemd_237.bb create mode 100644 poky/meta/recipes-core/systemd/systemd_239.bb create mode 100644 poky/meta/recipes-core/sysvinit/sysvinit-2.88dsf/0001-include-sys-sysmacros.h-for-major-minor-defines-in-g.patch delete mode 100644 poky/meta/recipes-core/update-rc.d/update-rc.d/add-verbose.patch delete mode 100644 poky/meta/recipes-core/update-rc.d/update-rc.d/check-if-symlinks-are-valid.patch delete mode 100644 poky/meta/recipes-core/update-rc.d/update-rc.d/fix-to-handle-priority-numbers-correctly.patch delete mode 100644 poky/meta/recipes-core/update-rc.d/update-rc.d_0.7.bb create mode 100644 poky/meta/recipes-core/update-rc.d/update-rc.d_0.8.bb create mode 100644 poky/meta/recipes-devtools/automake/automake/0001-build-fix-race-in-parallel-builds.patch delete mode 100644 poky/meta/recipes-devtools/automake/automake_1.15.1.bb create mode 100644 poky/meta/recipes-devtools/automake/automake_1.16.1.bb delete mode 100644 poky/meta/recipes-devtools/binutils/binutils-2.30.inc create mode 100644 poky/meta/recipes-devtools/binutils/binutils-2.31.inc delete mode 100644 poky/meta/recipes-devtools/binutils/binutils-cross-canadian_2.30.bb create mode 100644 poky/meta/recipes-devtools/binutils/binutils-cross-canadian_2.31.bb delete mode 100644 poky/meta/recipes-devtools/binutils/binutils-cross_2.30.bb create mode 100644 poky/meta/recipes-devtools/binutils/binutils-cross_2.31.bb delete mode 100644 poky/meta/recipes-devtools/binutils/binutils-crosssdk_2.30.bb create mode 100644 poky/meta/recipes-devtools/binutils/binutils-crosssdk_2.31.bb delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0016-add-i386pep-emulation-for-x86_64.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0018-Refactored-location-where-GOT-information-is-collect.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0019-Improved-robustness.-Return-FALSE-in-case-of-NULL-po.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0020-Make-sure-global-symbol-is-not-an-indirect-or-warnin.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/0021-PLT-information-was-still-being-generated-when-symbo.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-10372.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-10373.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-10534.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-10535.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-17358.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-17360.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-18309.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-18605.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-18606.patch create mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-18607.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-6759.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-6872.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-7208.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-7568.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-7569.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-7642.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-7643.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils/CVE-2018-8945.patch delete mode 100644 poky/meta/recipes-devtools/binutils/binutils_2.30.bb create mode 100644 poky/meta/recipes-devtools/binutils/binutils_2.31.bb delete mode 100644 poky/meta/recipes-devtools/bootchart2/bootchart2/0001-Fixed-Missing-default-value-for-BOOTLOG_DEST.patch create mode 100644 poky/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-LDFLAGS-when-building-libbtrfsutil.so.patch create mode 100644 poky/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Add-a-possibility-to-specify-where-python-modules-ar.patch delete mode 100644 poky/meta/recipes-devtools/btrfs-tools/btrfs-tools/0001-Fix-build-with-musl-missing-header-include-for-dev_t.patch delete mode 100644 poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_4.13.3.bb create mode 100644 poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_4.17.1.bb delete mode 100644 poky/meta/recipes-devtools/ccache/ccache_3.3.5.bb create mode 100644 poky/meta/recipes-devtools/ccache/ccache_3.4.2.bb delete mode 100644 poky/meta/recipes-devtools/ccache/files/Revert-Create-man-page-in-the-make-install-from-git-.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake-native_3.10.3.bb create mode 100644 poky/meta/recipes-devtools/cmake/cmake-native_3.12.2.bb create mode 100644 poky/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/0001-FindBoost-Boost-1.66.0-dependency-and-release-update.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/0001-FindBoost-Fix-incorrect-alphabetisation-of-headers-l.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/0002-FindBoost-Implement-Architecture-and-Address-Model-t.patch create mode 100644 poky/meta/recipes-devtools/cmake/cmake/0002-cmake-Prevent-the-detection-of-Qt5.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/0003-FindBoost-Search-for-upstream-packaged-libs-next-to-.patch create mode 100644 poky/meta/recipes-devtools/cmake/cmake/0003-cmake-support-OpenEmbedded-Qt4-tool-binary-names.patch create mode 100644 poky/meta/recipes-devtools/cmake/cmake/0004-Fail-silently-if-system-Qt-installation-is-broken.patch create mode 100644 poky/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/cmake-Prevent-the-detection-of-Qt5.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/cmlibarchive-disable-ext2fs.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/qt4-fail-silent.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake/support-oe-qt4-tools-names.patch delete mode 100644 poky/meta/recipes-devtools/cmake/cmake_3.10.3.bb create mode 100644 poky/meta/recipes-devtools/cmake/cmake_3.12.2.bb delete mode 100644 poky/meta/recipes-devtools/desktop-file-utils/desktop-file-utils-native_0.23.bb create mode 100644 poky/meta/recipes-devtools/desktop-file-utils/desktop-file-utils_0.23.bb create mode 100644 poky/meta/recipes-devtools/diffstat/diffstat/avoid-check-user-break-cc.patch delete mode 100644 poky/meta/recipes-devtools/diffstat/diffstat_1.61.bb create mode 100644 poky/meta/recipes-devtools/diffstat/diffstat_1.62.bb delete mode 100644 poky/meta/recipes-devtools/distcc/distcc_3.2.bb create mode 100644 poky/meta/recipes-devtools/distcc/distcc_3.3.2.bb delete mode 100644 poky/meta/recipes-devtools/distcc/files/0001-zeroconf-Include-fcntl.h.patch delete mode 100644 poky/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-libext2fs-fix-build-failure-in-swapfs.c-on-big-endia.patch delete mode 100644 poky/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.8.bb create mode 100644 poky/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.44.3.bb delete mode 100644 poky/meta/recipes-devtools/elfutils/elfutils_0.170.bb create mode 100644 poky/meta/recipes-devtools/elfutils/elfutils_0.174.bb delete mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-Ensure-that-packed-structs-follow-the-gcc-memory-lay.patch delete mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-Use-fallthrough-attribute.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-arlib-Check-that-sh_entsize-isn-t-zero.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-libdwfl-Sanity-check-partial-core-file-data-reads.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/0001-size-Handle-recursive-ELF-ar-files.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-arm_backend.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-disable_werror.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-fix-gcc7-ftbfs.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-hppa_backend.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-mips_backend.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-mips_readelf_w.patch create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/0001-testsuite-ignore-elflint.patch delete mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/arm_backend.diff delete mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/hppa_backend.diff create mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/ignore_strmerge.diff delete mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/mips_backend.patch delete mode 100644 poky/meta/recipes-devtools/elfutils/files/debian/mips_readelf_w.patch delete mode 100644 poky/meta/recipes-devtools/fdisk/gptfdisk_1.0.3.bb create mode 100644 poky/meta/recipes-devtools/fdisk/gptfdisk_1.0.4.bb delete mode 100644 poky/meta/recipes-devtools/file/file/0001-Add-P-prompt-into-Usage-info.patch delete mode 100644 poky/meta/recipes-devtools/file/file_5.32.bb create mode 100644 poky/meta/recipes-devtools/file/file_5.34.bb delete mode 100644 poky/meta/recipes-devtools/gcc/gcc-7.3/0008-c99-snprintf.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-7.3/0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2.inc create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0003-gcc-poison-system-directories.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0005-gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0006-64-bit-multilib-hack.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0007-optional-libstdc.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0008-gcc-disable-MASK_RELAX_PIC_CALLS-bit.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0009-COLLECT_GCC_OPTIONS.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0010-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0011-fortran-cross-compile-hack.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0012-cpp-honor-sysroot.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0013-MIPS64-Default-to-N64-ABI.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0014-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0015-gcc-Fix-argument-list-too-long-error.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0016-Disable-sdt.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0017-libtool.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0018-gcc-armv4-pass-fix-v4bx-to-linker-to-support-EABI.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0019-Use-the-multilib-config-files-from-B-instead-of-usin.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0020-Avoid-using-libdir-from-.la-which-usually-points-to-.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0021-export-CPP.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0022-Disable-the-MULTILIB_OSDIRNAMES-and-other-multilib-o.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0023-Ensure-target-gcc-headers-can-be-included.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0024-gcc-4.8-won-t-build-with-disable-dependency-tracking.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0025-Don-t-search-host-directory-during-relink-if-inst_pr.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0026-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0027-aarch64-Add-support-for-musl-ldso.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0028-libcc1-fix-libcc1-s-install-path-and-rpath.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0029-handle-sysroot-support-for-nativesdk-gcc.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0030-Search-target-sysroot-gcc-version-specific-dirs-with.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0031-Fix-various-_FOR_BUILD-and-related-variables.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0032-nios2-Define-MUSL_DYNAMIC_LINKER.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0033-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0034-libgcc-Add-knob-to-use-ldbl-128-on-ppc.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0035-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0036-libgcc_s-Use-alias-for-__cpu_indicator_init-instead-.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0037-sync-gcc-stddef.h-with-musl.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0038-fix-segmentation-fault-in-precompiled-header-generat.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0039-Fix-for-testsuite-failure.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0040-Re-introduce-spe-commandline-options.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-8.2/0041-ARC-fix-spec-gen.patch create mode 100644 poky/meta/recipes-devtools/gcc/gcc-cross-canadian_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-cross-initial_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-cross_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-crosssdk-initial_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-crosssdk_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-runtime_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-sanitizers_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc-source_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/gcc_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/libgcc-initial_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/libgcc_8.2.bb create mode 100644 poky/meta/recipes-devtools/gcc/libgfortran_8.2.bb delete mode 100644 poky/meta/recipes-devtools/gdb/gdb-8.0.1.inc create mode 100644 poky/meta/recipes-devtools/gdb/gdb-8.2.inc delete mode 100644 poky/meta/recipes-devtools/gdb/gdb-cross-canadian_8.0.1.bb create mode 100644 poky/meta/recipes-devtools/gdb/gdb-cross-canadian_8.2.bb delete mode 100644 poky/meta/recipes-devtools/gdb/gdb-cross_8.0.1.bb create mode 100644 poky/meta/recipes-devtools/gdb/gdb-cross_8.2.bb create mode 100644 poky/meta/recipes-devtools/gdb/gdb/0011-Fix-invalid-sigprocmask-call.patch delete mode 100644 poky/meta/recipes-devtools/gdb/gdb/0012-Unbreak-GDBserver-build-for-x32.patch delete mode 100644 poky/meta/recipes-devtools/gdb/gdb/gdb-Fix-ia64-defining-TRAP_HWBKPT-before-including-g.patch create mode 100644 poky/meta/recipes-devtools/gdb/gdb/gdbserver-ctrl-c-handling.patch delete mode 100644 poky/meta/recipes-devtools/gdb/gdb/package_devel_gdb_patches_120-sigprocmask-invalid-call.patch delete mode 100644 poky/meta/recipes-devtools/gdb/gdb_8.0.1.bb create mode 100644 poky/meta/recipes-devtools/gdb/gdb_8.2.bb delete mode 100644 poky/meta/recipes-devtools/git/files/CVE-2018-11233.patch delete mode 100644 poky/meta/recipes-devtools/git/files/CVE-2018-11235.patch delete mode 100644 poky/meta/recipes-devtools/git/git_2.16.1.bb create mode 100644 poky/meta/recipes-devtools/git/git_2.18.1.bb delete mode 100644 poky/meta/recipes-devtools/glide/glide_0.13.1.bb create mode 100644 poky/meta/recipes-devtools/glide/glide_0.13.2.bb delete mode 100644 poky/meta/recipes-devtools/gnu-config/gnu-config/musl-support.patch delete mode 100644 poky/meta/recipes-devtools/gnu-config/gnu-config_20120814.bb delete mode 100644 poky/meta/recipes-devtools/go/go-1.10.inc delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0001-allow-CC-and-CXX-to-have-multiple-words.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0004-ld-add-soname-to-shareable-objects.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0006-cmd-dist-separate-host-and-target-builds.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0007-cmd-go-make-GOROOT-precious-by-default.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0008-cmd-internal-obj-arm64-fix-branch-too-far-with-TBZ-l.patch delete mode 100644 poky/meta/recipes-devtools/go/go-1.10/0009-ld-replace-glibc-dynamic-linker-with-musl.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11.inc create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0001-allow-CC-and-CXX-to-have-multiple-words.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0004-ld-add-soname-to-shareable-objects.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0006-cmd-dist-separate-host-and-target-builds.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0007-cmd-go-make-GOROOT-precious-by-default.patch create mode 100644 poky/meta/recipes-devtools/go/go-1.11/0009-ld-replace-glibc-dynamic-linker-with-musl.patch delete mode 100644 poky/meta/recipes-devtools/go/go-cross-canadian_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go-cross-canadian_1.11.bb delete mode 100644 poky/meta/recipes-devtools/go/go-cross_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go-cross_1.11.bb delete mode 100644 poky/meta/recipes-devtools/go/go-crosssdk_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go-crosssdk_1.11.bb delete mode 100644 poky/meta/recipes-devtools/go/go-dep_0.4.1.bb create mode 100644 poky/meta/recipes-devtools/go/go-dep_0.5.0.bb delete mode 100644 poky/meta/recipes-devtools/go/go-native_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go-native_1.11.bb delete mode 100644 poky/meta/recipes-devtools/go/go-runtime_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go-runtime_1.11.bb delete mode 100644 poky/meta/recipes-devtools/go/go_1.10.bb create mode 100644 poky/meta/recipes-devtools/go/go_1.11.bb delete mode 100644 poky/meta/recipes-devtools/help2man/help2man-native_1.47.5.bb create mode 100644 poky/meta/recipes-devtools/help2man/help2man-native_1.47.6.bb delete mode 100644 poky/meta/recipes-devtools/icon-naming-utils/icon-naming-utils_0.8.90.bb create mode 100644 poky/meta/recipes-devtools/json-c/json-c_0.13.1.bb delete mode 100644 poky/meta/recipes-devtools/json-c/json-c_0.13.bb create mode 100644 poky/meta/recipes-devtools/libtool/libtool/multilib.patch delete mode 100644 poky/meta/recipes-devtools/llvm/llvm/0001-Disable-generating-a-native-llvm-config.patch create mode 100644 poky/meta/recipes-devtools/meson/meson.inc create mode 100644 poky/meta/recipes-devtools/meson/meson/0001-Support-building-allarch-recipes-again.patch create mode 100644 poky/meta/recipes-devtools/meson/meson/0002-Make-CPU-family-warnings-fatal.patch create mode 100644 poky/meta/recipes-devtools/meson/meson/gi-flags.patch create mode 100644 poky/meta/recipes-devtools/meson/meson/gtkdoc-flags.patch create mode 100755 poky/meta/recipes-devtools/meson/meson/meson-setup.py create mode 100755 poky/meta/recipes-devtools/meson/meson/meson-wrapper delete mode 100644 poky/meta/recipes-devtools/meson/meson_0.44.1.bb create mode 100644 poky/meta/recipes-devtools/meson/meson_0.47.2.bb create mode 100644 poky/meta/recipes-devtools/meson/nativesdk-meson_0.47.2.bb create mode 100644 poky/meta/recipes-devtools/mtools/mtools/0001-remove-LOCK_NB-to-use-blocking-request.patch create mode 100644 poky/meta/recipes-devtools/mtools/mtools/clang_UNUSED.patch create mode 100644 poky/meta/recipes-devtools/opkg-utils/opkg-utils/pigz.patch create mode 100644 poky/meta/recipes-devtools/opkg/opkg/0001-remove_maintainer_scripts-use-strict-matching.patch delete mode 100644 poky/meta/recipes-devtools/opkg/opkg/opkg-configure.service delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/0001-Change-library-name.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/0002-uuid-preserve-m-option-status-in-v-option-handling.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/0003-Fix-whatis-entries.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/0004-fix-data-uuid-from-string.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/install-pc.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/ldflags.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/libtool-tag.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/uuid-libtool.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid/uuid-nostrip.patch delete mode 100644 poky/meta/recipes-devtools/ossp-uuid/ossp-uuid_1.6.2.bb delete mode 100644 poky/meta/recipes-devtools/pax-utils/pax-utils_1.2.2.bb delete mode 100644 poky/meta/recipes-devtools/perl/liberror-perl_0.17025.bb create mode 100644 poky/meta/recipes-devtools/perl/liberror-perl_0.17026.bb delete mode 100644 poky/meta/recipes-devtools/perl/liburi-perl_1.73.bb create mode 100644 poky/meta/recipes-devtools/perl/liburi-perl_1.74.bb delete mode 100644 poky/meta/recipes-devtools/perl/libxml-simple-perl_2.24.bb create mode 100644 poky/meta/recipes-devtools/perl/libxml-simple-perl_2.25.bb delete mode 100644 poky/meta/recipes-devtools/perl/perl-native_5.24.1.bb create mode 100644 poky/meta/recipes-devtools/perl/perl-native_5.24.4.bb delete mode 100644 poky/meta/recipes-devtools/perl/perl-rdepends_5.24.1.inc create mode 100644 poky/meta/recipes-devtools/perl/perl-rdepends_5.24.4.inc create mode 100644 poky/meta/recipes-devtools/perl/perl/0001-ExtUtils-MM_Unix.pm-fix-race-issues.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2017-12837.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2017-12883.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2018-6797.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2018-6798-1.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2018-6798-2.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl/CVE-2018-6913.patch delete mode 100644 poky/meta/recipes-devtools/perl/perl_5.24.1.bb create mode 100644 poky/meta/recipes-devtools/perl/perl_5.24.4.bb delete mode 100644 poky/meta/recipes-devtools/pkgconf/pkgconf_1.4.2.bb create mode 100644 poky/meta/recipes-devtools/pkgconf/pkgconf_1.5.3.bb create mode 100644 poky/meta/recipes-devtools/prelink/prelink/0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch delete mode 100644 poky/meta/recipes-devtools/python-numpy/python-numpy_1.14.2.bb create mode 100644 poky/meta/recipes-devtools/python-numpy/python-numpy_1.14.5.bb delete mode 100644 poky/meta/recipes-devtools/python-numpy/python3-numpy_1.14.2.bb create mode 100644 poky/meta/recipes-devtools/python-numpy/python3-numpy_1.14.5.bb create mode 100644 poky/meta/recipes-devtools/python/files/0001-conditionally-do-not-fetch-code-by-easy_install.patch create mode 100644 poky/meta/recipes-devtools/python/python-extras.inc create mode 100644 poky/meta/recipes-devtools/python/python-pbr.inc delete mode 100644 poky/meta/recipes-devtools/python/python-setuptools_39.0.0.bb create mode 100644 poky/meta/recipes-devtools/python/python-setuptools_40.0.0.bb create mode 100644 poky/meta/recipes-devtools/python/python-subunit.inc create mode 100644 poky/meta/recipes-devtools/python/python-testtools.inc create mode 100644 poky/meta/recipes-devtools/python/python/0001-bpo-33354-Fix-test_ssl-when-a-filename-cannot-be-enc.patch create mode 100644 poky/meta/recipes-devtools/python/python/0001-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976-.patch create mode 100644 poky/meta/recipes-devtools/python/python/0002-bpo-34818-Add-missing-closing-wrapper-in-test_tls1_3.patch create mode 100644 poky/meta/recipes-devtools/python/python/0003-bpo-34834-Fix-test_ssl.test_options-to-account-for-O.patch create mode 100644 poky/meta/recipes-devtools/python/python/0004-bpo-34836-fix-test_default_ecdh_curve-needs-no-tlsv1.patch delete mode 100644 poky/meta/recipes-devtools/python/python3-dbus_1.2.6.bb create mode 100644 poky/meta/recipes-devtools/python/python3-dbus_1.2.8.bb create mode 100644 poky/meta/recipes-devtools/python/python3-extras_1.0.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3-git_2.1.11.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-git_2.1.8.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-gitdb_2.0.3.bb create mode 100644 poky/meta/recipes-devtools/python/python3-gitdb_2.0.4.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-native_3.5.5.bb create mode 100644 poky/meta/recipes-devtools/python/python3-native_3.5.6.bb create mode 100644 poky/meta/recipes-devtools/python/python3-pbr_4.2.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3-pip_18.0.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-pip_9.0.2.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-pygobject_3.28.1.bb create mode 100644 poky/meta/recipes-devtools/python/python3-pygobject_3.28.3.bb delete mode 100644 poky/meta/recipes-devtools/python/python3-setuptools_39.0.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3-setuptools_40.0.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3-subunit_1.3.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3-testtools_2.3.0.bb create mode 100644 poky/meta/recipes-devtools/python/python3.inc create mode 100644 poky/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch delete mode 100644 poky/meta/recipes-devtools/python/python3/0001-cross-compile-support.patch create mode 100644 poky/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch create mode 100644 poky/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch create mode 100644 poky/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch create mode 100644 poky/meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch create mode 100644 poky/meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch delete mode 100644 poky/meta/recipes-devtools/python/python3/CVE-2018-1061.patch create mode 100644 poky/meta/recipes-devtools/python/python3/Use-correct-CFLAGS-for-extensions-when-cross-compili.patch create mode 100644 poky/meta/recipes-devtools/python/python3/float-endian.patch create mode 100644 poky/meta/recipes-devtools/python/python3/ftplib.patch create mode 100644 poky/meta/recipes-devtools/python/python3/run-ptest delete mode 100644 poky/meta/recipes-devtools/python/python3/shutil-follow-symlink-fix.patch create mode 100644 poky/meta/recipes-devtools/python/python3/signal.patch delete mode 100644 poky/meta/recipes-devtools/python/python3_3.5.5.bb create mode 100644 poky/meta/recipes-devtools/python/python3_3.5.6.bb delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0001-CVE-2018-11806-QEMU-slirp-heap-buffer-overflow.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/0011-Revert-linux-user-fix-mmap-munmap-mprotect-mremap-sh.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0011-memfd-fix-configure-test.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0012-arm-translate-a64-treat-DISAS_UPDATE-as-variant-of-D.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/0012-fix-libcap-header-issue-on-some-distro.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0013-ps2-check-PS2Queue-pointers-in-post_load-routine.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0014-fix-libcap-header-issue-on-some-distro.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/0015-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-10839.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-12617.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-15746.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-17958.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-17962.patch create mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-17963.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu/CVE-2018-7550.patch delete mode 100644 poky/meta/recipes-devtools/qemu/qemu_2.11.1.bb create mode 100644 poky/meta/recipes-devtools/qemu/qemu_3.0.0.bb delete mode 100644 poky/meta/recipes-devtools/rpm/files/0001-Factor-out-and-unify-setting-CLOEXEC.patch delete mode 100644 poky/meta/recipes-devtools/rpm/files/0001-configure.ac-add-option-for-dbus.patch create mode 100644 poky/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch delete mode 100644 poky/meta/recipes-devtools/rpm/files/0002-Optimize-rpmSetCloseOnExec.patch delete mode 100644 poky/meta/recipes-devtools/rpm/files/0003-rpmSetCloseOnExec-use-getrlimit.patch delete mode 100644 poky/meta/recipes-devtools/rpm/rpm_4.14.1.bb create mode 100644 poky/meta/recipes-devtools/rpm/rpm_4.14.2.bb delete mode 100644 poky/meta/recipes-devtools/rsync/rsync.inc create mode 100644 poky/meta/recipes-devtools/ruby/ruby/CVE-2018-1000073.patch delete mode 100644 poky/meta/recipes-devtools/ruby/ruby_2.5.0.bb create mode 100644 poky/meta/recipes-devtools/ruby/ruby_2.5.1.bb delete mode 100644 poky/meta/recipes-devtools/strace/strace_4.20.bb create mode 100644 poky/meta/recipes-devtools/strace/strace_4.24.bb create mode 100644 poky/meta/recipes-devtools/subversion/subversion_1.10.0.bb delete mode 100644 poky/meta/recipes-devtools/subversion/subversion_1.9.7.bb create mode 100644 poky/meta/recipes-devtools/swig/swig/Python-Fix-new-GCC8-warnings-in-generated-code.patch create mode 100644 poky/meta/recipes-devtools/swig/swig/swig-3.0.12-Coverity-fix-issue-reported-for-SWIG_Python_FixMetho.patch delete mode 100644 poky/meta/recipes-devtools/tcf-agent/tcf-agent/0001-canonicalize_file_name-is-specific-to-glibc.patch create mode 100644 poky/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch delete mode 100644 poky/meta/recipes-devtools/vala/vala_0.38.8.bb create mode 100644 poky/meta/recipes-devtools/vala/vala_0.42.0.bb create mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch create mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/0001-Make-local-functions-static-to-avoid-assembler-error.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/0001-memcheck-tests-Use-ucontext_t-instead-of-struct-ucon.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/0002-fix-broken-inline-asm-in-tests-on-mips32-linux.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/link-gz-tests.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/mask-CPUID-support-in-HWCAP-on-aarch64.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind/ppc-headers.patch delete mode 100644 poky/meta/recipes-devtools/valgrind/valgrind_3.13.0.bb create mode 100644 poky/meta/recipes-devtools/valgrind/valgrind_3.14.0.bb delete mode 100644 poky/meta/recipes-devtools/yasm/yasm_1.3.0.bb delete mode 100644 poky/meta/recipes-extended/acpica/acpica_20170303.bb create mode 100644 poky/meta/recipes-extended/acpica/acpica_20180508.bb delete mode 100644 poky/meta/recipes-extended/acpica/files/0001-Linux-add-support-for-X32-ABI-compilation.patch delete mode 100644 poky/meta/recipes-extended/bash/bash/bash-memleak-bug-fix-for-builtin-command-read.patch delete mode 100644 poky/meta/recipes-extended/bash/bash_4.4.12.bb create mode 100644 poky/meta/recipes-extended/bash/bash_4.4.18.bb create mode 100644 poky/meta/recipes-extended/bc/bc/libmath.h create mode 100644 poky/meta/recipes-extended/bc/bc/no-gen-libmath.patch delete mode 100644 poky/meta/recipes-extended/bc/bc_1.06.bb create mode 100644 poky/meta/recipes-extended/bc/bc_1.07.1.bb delete mode 100644 poky/meta/recipes-extended/bc/files/fix-segment-fault.patch create mode 100644 poky/meta/recipes-extended/blktool/blktool/blktool-gnulib-makedev.patch delete mode 100644 poky/meta/recipes-extended/cronie/cronie_1.5.1.bb create mode 100644 poky/meta/recipes-extended/cronie/cronie_1.5.2.bb create mode 100644 poky/meta/recipes-extended/cups/cups/cups-avoid-install-file-conflicts.patch delete mode 100644 poky/meta/recipes-extended/cups/cups_2.2.6.bb create mode 100644 poky/meta/recipes-extended/cups/cups_2.2.8.bb delete mode 100644 poky/meta/recipes-extended/ethtool/ethtool_4.13.bb create mode 100644 poky/meta/recipes-extended/ethtool/ethtool_4.17.bb create mode 100644 poky/meta/recipes-extended/findutils/findutils/0001-find-make-delete-honour-the-ignore_readdir_race-opti.patch create mode 100644 poky/meta/recipes-extended/findutils/findutils/findutils-4.6.0-gnulib-fflush.patch create mode 100644 poky/meta/recipes-extended/findutils/findutils/findutils-4.6.0-gnulib-makedev.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0001-Bug-699795-add-operand-checking-to-.setnativefontmap.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0002-Bug-699816-Improve-hiding-of-security-critical-custo.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0003-Bug-699832-add-control-over-hiding-error-handlers.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0004-For-hidden-operators-pass-a-name-object-to-error-han.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0005-Bug-699938-.loadfontloop-must-be-an-operator.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0006-Undefine-some-additional-internal-operators.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0007-Bug-699927-don-t-include-operator-arrays-in-execstac.patch create mode 100644 poky/meta/recipes-extended/ghostscript/files/0008-Make-.forceput-unavailable-from-.policyprocs-helper-.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-11714.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-5951.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-7207.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-7975.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9216.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9611.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9612.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9726.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9727.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9739.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript/CVE-2017-9835.patch delete mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript_9.21.bb create mode 100644 poky/meta/recipes-extended/ghostscript/ghostscript_9.25.bb create mode 100644 poky/meta/recipes-extended/groff/groff-1.22.3/groff-not-search-fonts-on-build-host.patch create mode 100644 poky/meta/recipes-extended/gzip/gzip-1.9/gnulib.patch delete mode 100644 poky/meta/recipes-extended/hdparm/hdparm_9.53.bb create mode 100644 poky/meta/recipes-extended/hdparm/hdparm_9.56.bb delete mode 100644 poky/meta/recipes-extended/iputils/files/0001-Fix-build-on-MUSL.patch create mode 100644 poky/meta/recipes-extended/iputils/iputils/ai_canonidn.patch create mode 100644 poky/meta/recipes-extended/iputils/iputils/install.patch delete mode 100644 poky/meta/recipes-extended/iputils/iputils_s20161105.bb create mode 100644 poky/meta/recipes-extended/iputils/iputils_s20180629.bb delete mode 100644 poky/meta/recipes-extended/less/less_529.bb create mode 100644 poky/meta/recipes-extended/less/less_530.bb delete mode 100644 poky/meta/recipes-extended/libaio/libaio/generic-arch-dectection-for-padding-defines.patch delete mode 100644 poky/meta/recipes-extended/libaio/libaio/libaio_fix_for_x32.patch delete mode 100644 poky/meta/recipes-extended/libaio/libaio_0.3.110.bb create mode 100644 poky/meta/recipes-extended/libaio/libaio_0.3.111.bb delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive/CVE-2017-14166.patch delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive/CVE-2017-14501.patch delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive/CVE-2017-14502.patch delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive/CVE-2017-14503.patch create mode 100644 poky/meta/recipes-extended/libarchive/libarchive/bug1066.patch delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive/bug929.patch delete mode 100644 poky/meta/recipes-extended/libarchive/libarchive_3.3.2.bb create mode 100644 poky/meta/recipes-extended/libarchive/libarchive_3.3.3.bb delete mode 100644 poky/meta/recipes-extended/libidn/libidn/0001-idn-fix-printf-format-security-warnings.patch delete mode 100644 poky/meta/recipes-extended/libidn/libidn/gcc7-compatibility.patch create mode 100644 poky/meta/recipes-extended/libidn/libidn2/Unset-need_charset_alias-when-building-for-musl.patch create mode 100644 poky/meta/recipes-extended/libidn/libidn2_2.0.5.bb delete mode 100644 poky/meta/recipes-extended/libidn/libidn_1.33.bb create mode 100644 poky/meta/recipes-extended/libidn/libidn_1.35.bb delete mode 100644 poky/meta/recipes-extended/libnsl/libnsl2/0001-include-sys-cdefs.h-explicitly.patch delete mode 100644 poky/meta/recipes-extended/libnsl/libnsl2/0001-nis_call.c-Include-stdint.h-for-uintptr_t-definition.patch delete mode 100644 poky/meta/recipes-extended/libnsl/libnsl2/0002-Define-glibc-specific-macros.patch create mode 100644 poky/meta/recipes-extended/libnss-nis/libnss-nis.bb delete mode 100644 poky/meta/recipes-extended/libsolv/libsolv_0.6.33.bb create mode 100644 poky/meta/recipes-extended/libsolv/libsolv_0.6.35.bb delete mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/0001-include-stdint.h-for-uintptr_t.patch delete mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/0001-replace-__bzero-with-memset-API.patch delete mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/Use-netbsd-queue.h.patch delete mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/export_key_secretkey_is_set.patch create mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/libtirpc-1.0.4-rc1.patch create mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc/musl.patch delete mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc_1.0.2.bb create mode 100644 poky/meta/recipes-extended/libtirpc/libtirpc_1.0.3.bb delete mode 100644 poky/meta/recipes-extended/libuser/libuser/0001-Check-for-issetugid.patch delete mode 100644 poky/meta/recipes-extended/libuser/libuser/0001-modules-files.c-parse_field-fix-string-formating-in-.patch delete mode 100644 poky/meta/recipes-extended/libuser/libuser/0002-remove-unused-execinfo.h.patch delete mode 100644 poky/meta/recipes-extended/libuser/libuser_0.62.bb delete mode 100644 poky/meta/recipes-extended/lighttpd/lighttpd_1.4.48.bb create mode 100644 poky/meta/recipes-extended/lighttpd/lighttpd_1.4.50.bb delete mode 100644 poky/meta/recipes-extended/logrotate/logrotate_3.13.0.bb create mode 100644 poky/meta/recipes-extended/logrotate/logrotate_3.14.0.bb delete mode 100644 poky/meta/recipes-extended/lsof/lsof_4.89.bb create mode 100644 poky/meta/recipes-extended/lsof/lsof_4.91.bb delete mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-configure-Fix-default-value-of-without-numa-switch-i.patch delete mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-configure-add-knob-to-control-numa-support.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-mmap15-mips64-return-EINVAL.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-netns_helper.sh-use-ping-6-when-ping6-is-not-avaliab.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-open_posix_testsuite-mmap24-2-Relax-condition-a-bit.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-sigwaitinfo01-recent-glibc-calls-syscall-directly.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch delete mode 100644 poky/meta/recipes-extended/ltp/ltp/0003-Add-knob-to-control-tirpc-support.patch delete mode 100644 poky/meta/recipes-extended/ltp/ltp/0010-replace-__BEGIN_DECLS-and-__END_DECLS.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0040-read_all-Define-FNM_EXTMATCH-if-not-already-like-und.patch delete mode 100644 poky/meta/recipes-extended/ltp/ltp/0040-safe_macros-make-is_fuse-return-zero-if-fs_type-is-N.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0041-cve-2017-5669-shmat-for-0-or-PAGESIZE-with-RND-flag-.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0042-fs-ftest-ftest06.c-Fix-too-small-name-string-and-rel.patch create mode 100644 poky/meta/recipes-extended/ltp/ltp/0043-open-creat-skip-S_ISGID-check-on-files-created-by-no.patch delete mode 100644 poky/meta/recipes-extended/ltp/ltp_20180118.bb create mode 100644 poky/meta/recipes-extended/ltp/ltp_20180515.bb delete mode 100644 poky/meta/recipes-extended/lzip/lzip_1.19.bb create mode 100644 poky/meta/recipes-extended/lzip/lzip_1.20.bb create mode 100644 poky/meta/recipes-extended/man-db/files/99_mandb create mode 100644 poky/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch delete mode 100644 poky/meta/recipes-extended/man-db/man-db_2.8.1.bb create mode 100644 poky/meta/recipes-extended/man-db/man-db_2.8.3.bb delete mode 100644 poky/meta/recipes-extended/man-pages/man-pages_4.14.bb create mode 100644 poky/meta/recipes-extended/man-pages/man-pages_4.16.bb delete mode 100644 poky/meta/recipes-extended/mc/mc_4.8.20.bb create mode 100644 poky/meta/recipes-extended/mc/mc_4.8.21.bb create mode 100644 poky/meta/recipes-extended/mdadm/files/0001-Disable-gcc8-warnings.patch create mode 100644 poky/meta/recipes-extended/mdadm/files/0001-use-memmove-instead-of-memcpy-on-overlapping-region.patch delete mode 100644 poky/meta/recipes-extended/mktemp/files/disable-strip.patch delete mode 100644 poky/meta/recipes-extended/mktemp/files/fix-parallel-make.patch delete mode 100644 poky/meta/recipes-extended/mktemp/mktemp_1.7.bb create mode 100644 poky/meta/recipes-extended/pbzip2/pbzip2/0001-pbzip2-Fix-invalid-suffix-on-literal-C-11-warning.patch delete mode 100644 poky/meta/recipes-extended/perl/libxml-sax-perl_0.99.bb create mode 100644 poky/meta/recipes-extended/perl/libxml-sax-perl_1.00.bb delete mode 100644 poky/meta/recipes-extended/pixz/pixz/0001-configure-Detect-headers-before-using-them.patch delete mode 100644 poky/meta/recipes-extended/pixz/pixz/0002-endian-Use-macro-bswap_64-instead-of-__bswap_64.patch delete mode 100644 poky/meta/recipes-extended/pixz/pixz/936d8068ae19d95260d3058f41dd6cf718101cd6.patch delete mode 100644 poky/meta/recipes-extended/pixz/pixz_1.0.6.bb create mode 100644 poky/meta/recipes-extended/procps/procps/0001-Fix-out-of-tree-builds.patch delete mode 100644 poky/meta/recipes-extended/procps/procps/CVE-2018-1124.patch delete mode 100644 poky/meta/recipes-extended/procps/procps_3.3.12.bb create mode 100644 poky/meta/recipes-extended/procps/procps_3.3.15.bb delete mode 100644 poky/meta/recipes-extended/psmisc/psmisc_23.0.bb create mode 100644 poky/meta/recipes-extended/psmisc/psmisc_23.1.bb create mode 100644 poky/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch create mode 100644 poky/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto.bb create mode 100644 poky/meta/recipes-extended/rpcsvc-proto/rpcsvc-proto/0001-Use-cross-compiled-rpcgen.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/0001-Do-not-read-login.defs-before-doing-chroot.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/0001-shadow-CVE-2017-12424 delete mode 100644 poky/meta/recipes-extended/shadow/files/CVE-2017-2616.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/CVE-2018-7169.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/check_size_of_uid_t_and_gid_t_using_AC_CHECK_SIZEOF.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/fix-installation-failure-with-subids-disabled.patch delete mode 100644 poky/meta/recipes-extended/shadow/files/usermod-fix-compilation-failure-with-subids-disabled.patch delete mode 100644 poky/meta/recipes-extended/shadow/shadow-securetty_4.2.1.bb create mode 100644 poky/meta/recipes-extended/shadow/shadow-securetty_4.6.bb delete mode 100644 poky/meta/recipes-extended/shadow/shadow-sysroot_4.2.1.bb create mode 100644 poky/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb delete mode 100644 poky/meta/recipes-extended/shadow/shadow_4.2.1.bb create mode 100644 poky/meta/recipes-extended/shadow/shadow_4.6.bb delete mode 100644 poky/meta/recipes-extended/sudo/sudo_1.8.22.bb create mode 100644 poky/meta/recipes-extended/sudo/sudo_1.8.23.bb delete mode 100644 poky/meta/recipes-extended/sysstat/sysstat_11.7.1.bb create mode 100644 poky/meta/recipes-extended/sysstat/sysstat_11.7.4.bb delete mode 100644 poky/meta/recipes-extended/tar/tar.inc delete mode 100644 poky/meta/recipes-extended/time/time_1.8.bb create mode 100644 poky/meta/recipes-extended/time/time_1.9.bb delete mode 100644 poky/meta/recipes-extended/tzcode/tzcode-native_2018f.bb create mode 100644 poky/meta/recipes-extended/tzcode/tzcode-native_2018g.bb delete mode 100644 poky/meta/recipes-extended/tzdata/tzdata_2018f.bb create mode 100644 poky/meta/recipes-extended/tzdata/tzdata_2018g.bb delete mode 100644 poky/meta/recipes-extended/watchdog/watchdog/watchdog-conf.patch delete mode 100644 poky/meta/recipes-extended/watchdog/watchdog/watchdog-init.patch create mode 100644 poky/meta/recipes-extended/watchdog/watchdog/watchdog.init delete mode 100644 poky/meta/recipes-extended/xdg-utils/xdg-utils_1.1.2.bb create mode 100644 poky/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb delete mode 100644 poky/meta/recipes-extended/xz/xz_5.2.3.bb create mode 100644 poky/meta/recipes-extended/xz/xz_5.2.4.bb delete mode 100644 poky/meta/recipes-gnome/epiphany/epiphany_3.26.6.bb create mode 100644 poky/meta/recipes-gnome/epiphany/epiphany_3.28.3.1.bb delete mode 100644 poky/meta/recipes-gnome/gcr/files/gcr-add-missing-dependencies-for-vapi.patch delete mode 100644 poky/meta/recipes-gnome/gcr/gcr_3.20.0.bb create mode 100644 poky/meta/recipes-gnome/gcr/gcr_3.28.0.bb delete mode 100644 poky/meta/recipes-gnome/gnome-desktop/gnome-desktop/0001-Disable-libseccomp-sycall-filtering-mechanism.patch delete mode 100644 poky/meta/recipes-gnome/gnome-desktop/gnome-desktop/0001-configure.ac-Remove-gnome-common-macro-calls.patch delete mode 100644 poky/meta/recipes-gnome/gnome-desktop/gnome-desktop/gnome-desktop-thumbnail-don-t-assume-time_t-is-long.patch delete mode 100644 poky/meta/recipes-gnome/gnome-desktop/gnome-desktop3_3.26.2.bb delete mode 100644 poky/meta/recipes-gnome/gnome/adwaita-icon-theme_3.26.1.bb create mode 100644 poky/meta/recipes-gnome/gnome/adwaita-icon-theme_3.28.0.bb create mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch create mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-configure.ac-make-GIR_DIR-configurable.patch create mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch create mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0002-g-ir-tools-respect-gir_dir_prefix.patch delete mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.54.1.bb create mode 100644 poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.58.0.bb delete mode 100644 poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.24.1.bb create mode 100644 poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_3.28.0.bb create mode 100644 poky/meta/recipes-gnome/gtk+/gtk+/0001-Do-not-look-into-HOME-when-looking-for-gtk-modules.patch delete mode 100644 poky/meta/recipes-gnome/gtk+/gtk+3_3.22.28.bb create mode 100644 poky/meta/recipes-gnome/gtk+/gtk+3_3.22.30.bb delete mode 100644 poky/meta/recipes-gnome/gtk+/gtk-icon-utils-native_3.22.28.bb create mode 100644 poky/meta/recipes-gnome/gtk+/gtk-icon-utils-native_3.22.30.bb delete mode 100644 poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.27.bb create mode 100644 poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.29.bb delete mode 100644 poky/meta/recipes-gnome/libsecret/libsecret_0.18.5.bb create mode 100644 poky/meta/recipes-gnome/libsecret/libsecret_0.18.6.bb delete mode 100644 poky/meta/recipes-graphics/cairo/cairo-fpu.inc delete mode 100644 poky/meta/recipes-graphics/cairo/cairo.inc delete mode 100644 poky/meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.24.bb create mode 100644 poky/meta/recipes-graphics/clutter/clutter-gst-3.0_3.0.26.bb delete mode 100644 poky/meta/recipes-graphics/drm/libdrm/0001-configure.ac-Allow-explicit-enabling-of-cunit-tests.patch delete mode 100644 poky/meta/recipes-graphics/drm/libdrm/fix_O_CLOEXEC_undeclared.patch delete mode 100644 poky/meta/recipes-graphics/drm/libdrm/installtests.patch create mode 100644 poky/meta/recipes-graphics/drm/libdrm/musl-ioctl.patch delete mode 100644 poky/meta/recipes-graphics/drm/libdrm_2.4.91.bb create mode 100644 poky/meta/recipes-graphics/drm/libdrm_2.4.94.bb create mode 100644 poky/meta/recipes-graphics/eglinfo/files/0001-Check-for-libegl-using-pkg-config.patch create mode 100755 poky/meta/recipes-graphics/eglinfo/files/waf create mode 100644 poky/meta/recipes-graphics/freetype/freetype_2.9.1.bb delete mode 100644 poky/meta/recipes-graphics/freetype/freetype_2.9.bb delete mode 100644 poky/meta/recipes-graphics/fstests/fstests_git.bb delete mode 100644 poky/meta/recipes-graphics/harfbuzz/harfbuzz_1.7.5.bb create mode 100644 poky/meta/recipes-graphics/harfbuzz/harfbuzz_1.8.8.bb create mode 100644 poky/meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-package_qa-error.patch create mode 100644 poky/meta/recipes-graphics/jpeg/files/0001-libjpeg-turbo-fix-wrongly-defined-define-HAVE_STDLIB.patch delete mode 100644 poky/meta/recipes-graphics/jpeg/libjpeg-turbo_1.5.3.bb create mode 100644 poky/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.0.bb delete mode 100644 poky/meta/recipes-graphics/libepoxy/libepoxy/no-tests.patch delete mode 100644 poky/meta/recipes-graphics/libepoxy/libepoxy_1.5.0.bb create mode 100644 poky/meta/recipes-graphics/libepoxy/libepoxy_1.5.2.bb create mode 100644 poky/meta/recipes-graphics/libsdl2/libsdl2/more-gen-depends.patch delete mode 100644 poky/meta/recipes-graphics/libva/libva-utils_2.1.0.bb create mode 100644 poky/meta/recipes-graphics/libva/libva-utils_2.2.0.bb delete mode 100644 poky/meta/recipes-graphics/libva/libva_2.1.0.bb create mode 100644 poky/meta/recipes-graphics/libva/libva_2.2.0.bb delete mode 100644 poky/meta/recipes-graphics/mesa/files/0001-Makefile.vulkan.am-explictly-add-lib-expat-to-intel-.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0001-Simplify-wayland-scanner-lookup.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/0001-Use-wayland-scanner-in-the-path.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/0001-st-dri-Initialise-modifier-to-INVALID-for-DRI2.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/0001-winsys-svga-drm-Include-sys-types.h.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/0002-hardware-gloat.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0002-winsys-svga-drm-Include-sys-types.h.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0003-Properly-get-LLVM-version-when-using-LLVM-Git-releas.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0004-Use-Python-3-to-execute-the-scripts.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0005-dri-i965-Add-missing-time.h-include.patch create mode 100644 poky/meta/recipes-graphics/mesa/files/0006-use-PKG_CHECK_VAR-for-defining-WAYLAND_PROTOCOLS_DAT.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/Use-Python-3-to-execute-the-scripts.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/disable-asm-on-non-gcc.patch delete mode 100644 poky/meta/recipes-graphics/mesa/files/llvm-config-version.patch delete mode 100644 poky/meta/recipes-graphics/mesa/mesa-gl_17.3.8.bb create mode 100644 poky/meta/recipes-graphics/mesa/mesa-gl_18.1.9.bb delete mode 100644 poky/meta/recipes-graphics/mesa/mesa_17.3.8.bb create mode 100644 poky/meta/recipes-graphics/mesa/mesa_18.1.9.bb delete mode 100644 poky/meta/recipes-graphics/pango/pango/0001-Drop-introspection-macros-from-acinclude.m4.patch delete mode 100644 poky/meta/recipes-graphics/pango/pango_1.40.14.bb create mode 100644 poky/meta/recipes-graphics/pango/pango_1.42.4.bb create mode 100644 poky/meta/recipes-graphics/piglit/piglit/0001-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch delete mode 100644 poky/meta/recipes-graphics/vulkan/vulkan-demos/0001-Fix-build-on-x86.patch delete mode 100644 poky/meta/recipes-graphics/vulkan/vulkan-demos/0001-Support-installing-demos-support-out-of-tree-builds.patch delete mode 100644 poky/meta/recipes-graphics/vulkan/vulkan_1.0.65.2.bb create mode 100644 poky/meta/recipes-graphics/vulkan/vulkan_1.1.73.0.bb create mode 100644 poky/meta/recipes-graphics/wayland/libinput_1.11.3.bb delete mode 100644 poky/meta/recipes-graphics/wayland/libinput_1.9.4.bb delete mode 100644 poky/meta/recipes-graphics/wayland/wayland-protocols_1.13.bb create mode 100644 poky/meta/recipes-graphics/wayland/wayland-protocols_1.16.bb delete mode 100644 poky/meta/recipes-graphics/wayland/wayland_1.14.0.bb create mode 100644 poky/meta/recipes-graphics/wayland/wayland_1.16.0.bb create mode 100644 poky/meta/recipes-graphics/wayland/weston-conf.bb delete mode 100644 poky/meta/recipes-graphics/wayland/weston/fix-missing-header.patch delete mode 100644 poky/meta/recipes-graphics/wayland/weston/weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch delete mode 100644 poky/meta/recipes-graphics/wayland/weston_3.0.0.bb create mode 100644 poky/meta/recipes-graphics/wayland/weston_5.0.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/mkfontscale_1.1.2.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/mkfontscale_1.1.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xeyes_1.1.1.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xeyes_1.1.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xinit_1.3.4.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xinit_1.4.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xkbcomp_1.4.0.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xkbcomp_1.4.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xprop_1.2.2.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xprop_1.2.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xset_1.2.3.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xset_1.2.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-app/xwininfo_1.1.3.bb create mode 100644 poky/meta/recipes-graphics/xorg-app/xwininfo_1.1.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-evdev_2.10.5.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-evdev_2.10.6.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.26.0.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_0.28.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.2.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-mouse_1.9.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.0.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-input-synaptics_1.9.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-fbdev_0.4.4.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-fbdev_0.5.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-intel/always_include_xorg_server.h.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-intel/disable-x11-dri3.patch create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-intel/glibc.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omap_0.4.5.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0001-Prevents-omapfb-from-from-crashing-when-pixelclock-o.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0003-force-plain-mode.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0004-blacklist-tv-out.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0005-Attempt-to-fix-VRFB.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0006-omapfb-port-to-new-xserver-video-API.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0007-always_include_xorg_server.h.patch delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-omapfb_git.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.3.4.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-vesa_2.4.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.2.1.bb create mode 100644 poky/meta/recipes-graphics/xorg-driver/xf86-video-vmware_13.3.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libdmx_1.1.3.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libdmx_1.1.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11-diet_1.6.5.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11-diet_1.6.6.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11/X18NCMSstubs.diff create mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11/X18NCMSstubs.patch delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11/fix-disable-xlocale.diff create mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11/fix-disable-xlocale.patch delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11_1.6.5.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libx11_1.6.6.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxcalibrate/fix-xcb.patch delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxcalibrate_git.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxcb/Fix-inconsistent-use-of-tabs-vs.-space.patch delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxcb_1.12.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxcb_1.13.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxinerama_1.1.3.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxinerama_1.1.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxkbcommon_0.8.0.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxkbcommon_0.8.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.2.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxscrnsaver_1.2.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxshmfence/extensions.patch delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxshmfence_1.2.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/libxxf86misc_1.0.3.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/libxxf86misc_1.0.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.22.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.24.bb create mode 100644 poky/meta/recipes-graphics/xorg-lib/xtrans/multilibfix.patch delete mode 100644 poky/meta/recipes-graphics/xorg-proto/bigreqsproto_1.1.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/calibrateproto/fix.patch delete mode 100644 poky/meta/recipes-graphics/xorg-proto/calibrateproto_git.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/compositeproto_0.4.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/damageproto_1.2.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/dmxproto_2.3.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/dri2proto_2.8.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/dri3proto_1.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/fixesproto_5.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/fontsproto_2.1.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/glproto_1.4.17.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/inputproto_2.3.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/kbproto_1.0.7.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/presentproto_git.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/randrproto_1.5.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/recordproto_1.14.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/renderproto_0.11.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/resourceproto_1.2.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/scrnsaverproto_1.2.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/videoproto_2.3.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xcb-proto/0001-Make-whitespace-use-consistent.patch delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xcb-proto/0002-print-is-a-function-and-needs-parentheses.patch delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.12.bb create mode 100644 poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.13.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xcmiscproto_1.2.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xextproto_7.3.0.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xf86dgaproto_2.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xf86driproto_2.1.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xf86miscproto_0.9.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xf86vidmodeproto_2.3.1.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xineramaproto_1.2.1.bb create mode 100644 poky/meta/recipes-graphics/xorg-proto/xorgproto/0001-Remove-libdir-specification.patch create mode 100644 poky/meta/recipes-graphics/xorg-proto/xorgproto_2018.4.bb delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xproto/xproto_fix_for_x32.patch delete mode 100644 poky/meta/recipes-graphics/xorg-proto/xproto_7.0.31.bb delete mode 100644 poky/meta/recipes-graphics/xorg-util/gccmakedep_1.0.3.bb delete mode 100644 poky/meta/recipes-graphics/xorg-util/util-macros_1.19.1.bb create mode 100644 poky/meta/recipes-graphics/xorg-util/util-macros_1.19.2.bb delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-config-fix-NULL-value-detection-for-ID_INPUT-being-u.patch delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/0001-configure.ac-Fix-check-for-CLOCK_MONOTONIC.patch delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/0003-Remove-check-for-useSIGIO-option.patch delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/0003-modesetting-Fix-16-bit-depth-bpp-mode.patch create mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2018-14665.patch delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/macro_tweak.patch create mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg/pkgconfig.patch delete mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.19.6.bb create mode 100644 poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.1.bb create mode 100644 poky/meta/recipes-kernel/cryptodev/files/0001-Port-tests-to-openssl-1.1.patch create mode 100644 poky/meta/recipes-kernel/cryptodev/files/0001-refactoring-split-big-function-to-simplify-maintaina.patch create mode 100644 poky/meta/recipes-kernel/cryptodev/files/0002-refactoring-relocate-code-to-simplify-later-patches.patch create mode 100644 poky/meta/recipes-kernel/cryptodev/files/0003-convert-to-new-AEAD-interface-in-kernels-v4.2.patch delete mode 100644 poky/meta/recipes-kernel/dtc/dtc/0001-checks-Use-proper-format-modifier-for-size_t.patch delete mode 100644 poky/meta/recipes-kernel/dtc/dtc_1.4.5.bb create mode 100644 poky/meta/recipes-kernel/dtc/dtc_1.4.7.bb create mode 100644 poky/meta/recipes-kernel/kexec/kexec-tools/0001-kexec-fix-for-Unhandled-rela-relocation-R_X86_64_PLT.patch delete mode 100644 poky/meta/recipes-kernel/kexec/kexec-tools_2.0.16.bb create mode 100644 poky/meta/recipes-kernel/kexec/kexec-tools_2.0.17.bb create mode 100644 poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-include-linux-stddef.h-in-swab.h-uapi-header.patch delete mode 100644 poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_4.15.7.bb create mode 100644 poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_4.18.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-rt_4.12.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-rt_4.15.bb create mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-rt_4.18.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-tiny_4.12.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-tiny_4.15.bb create mode 100644 poky/meta/recipes-kernel/linux/linux-yocto-tiny_4.18.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto_4.12.bb delete mode 100644 poky/meta/recipes-kernel/linux/linux-yocto_4.15.bb create mode 100644 poky/meta/recipes-kernel/linux/linux-yocto_4.18.bb delete mode 100644 poky/meta/recipes-kernel/lttng/babeltrace_1.5.4.bb create mode 100644 poky/meta/recipes-kernel/lttng/babeltrace_1.5.6.bb create mode 100644 poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-btrfs-Remove-unnecessary-fs_info-parameter.patch create mode 100644 poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-net-expose-sk-wmem-in-sock_exceed_buf_limit-trac.patch delete mode 100644 poky/meta/recipes-kernel/lttng/lttng-modules_2.10.6.bb create mode 100644 poky/meta/recipes-kernel/lttng/lttng-modules_2.10.7.bb create mode 100644 poky/meta/recipes-kernel/lttng/lttng-tools/0001-Allow-multiple-attempts-to-connect-to-relayd.patch create mode 100644 poky/meta/recipes-kernel/lttng/lttng-tools/lttng-sessiond.service create mode 100644 poky/meta/recipes-kernel/perf/perf-perl.inc create mode 100644 poky/meta/recipes-kernel/sysprof/files/0001-fix-non-literal-format-string-issues.patch create mode 100644 poky/meta/recipes-kernel/sysprof/files/wordsize.patch delete mode 100644 poky/meta/recipes-kernel/sysprof/sysprof_3.26.1.bb create mode 100644 poky/meta/recipes-kernel/sysprof/sysprof_3.30.0.bb delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Added-a-couple-of-small-sysroot-fixes.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Delay-adding-sysroot-path-to-module-name-in-case-of-.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Fixes-for-gcc-8.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Make-sure-sysroot-paths-don-t-end-with-a-slash.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-Use-sysroot-when-looking-for-the-System.map-file.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-_stp_umodule_relocate-needs-target-file-path-not-hos.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-buildrun-remove-quotes-around-I-include-line.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-debuginfo-lookup-with-sysroot-case-do-not-remove-sys.patch create mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-improve-reproducibility-for-c-compiling.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-sysroot-fix-short-release-r-option-handling-follow-u.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-sysroot-fix-short-release-r-option-handling.patch delete mode 100644 poky/meta/recipes-kernel/systemtap/systemtap/0001-sysroot-handle-symbolic-links-with-absolute-name-rel.patch delete mode 100644 poky/meta/recipes-kernel/trace-cmd/kernelshark_git.bb delete mode 100644 poky/meta/recipes-kernel/trace-cmd/trace-cmd.inc delete mode 100644 poky/meta/recipes-kernel/trace-cmd/trace-cmd/0001-Include-limits.h-so-that-PATH_MAX-is-defined-an-issu.patch delete mode 100644 poky/meta/recipes-kernel/trace-cmd/trace-cmd/blktrace-api-compatibility.patch delete mode 100644 poky/meta/recipes-kernel/trace-cmd/trace-cmd_git.bb delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-fpu.inc delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-lib_1.1.5.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-lib_1.1.6.bb delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-plugins_1.1.5.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-plugins_1.1.6.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools/0002-Fix-clang-Wreserved-user-defined-literal-warnings.patch delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools/autotools.patch delete mode 100755 poky/meta/recipes-multimedia/alsa/alsa-tools/gitcompile_hdajacksensetest delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools/makefile_no_gtk.patch create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools/musl.patch delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools_1.1.5.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-tools_1.1.6.bb delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.1.5.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.1.6.bb delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-don-t-let-systemd-unit-restore-the-volume-wh.patch delete mode 100644 poky/meta/recipes-multimedia/alsa/alsa-utils_1.1.5.bb create mode 100644 poky/meta/recipes-multimedia/alsa/alsa-utils_1.1.6.bb create mode 100644 poky/meta/recipes-multimedia/ffmpeg/ffmpeg/CVE-2018-15822.patch delete mode 100644 poky/meta/recipes-multimedia/ffmpeg/ffmpeg_3.4.2.bb create mode 100644 poky/meta/recipes-multimedia/ffmpeg/ffmpeg_4.0.2.bb delete mode 100644 poky/meta/recipes-multimedia/flac/files/CVE-2017-6888.patch create mode 100644 poky/meta/recipes-multimedia/flac/flac/CVE-2017-6888.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/files/0001-connect-has-a-different-signature-on-musl.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/files/add-a-target-to-compile-tests.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/files/run-ptest delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gst-validate_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gst-validate_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-fix-host-contamination.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-hevcpred_msa.c-Fix-build-by-Including-libavcodec-hev.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gstreamer-gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-vkdisplay-Use-ifdef-for-platform-specific-defines.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-vulkan-Use-the-generated-version-of-vkconfig.h.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0009-glimagesink-Downrank-to-marginal.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/link-with-libvchostif.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-gstreamer-gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0009-glimagesink-Downrank-to-marginal.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0010-gl-Add-switch-for-explicitely-enabling-disabling-GBM.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0011-gl-Add-switches-for-explicitely-enabling-disabling-P.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/link-with-libvchostif.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi.inc create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-gst-vaapi-Makefile.am-Add-EGL_CFLAGS-to-libgstvaapi-.patch create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi/0001-vaapsink-downgrade-to-marginal.patch delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0.inc delete mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.12.4.bb create mode 100644 poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.14.2.bb delete mode 100644 poky/meta/recipes-multimedia/libpng/files/CVE-2018-13785.patch delete mode 100644 poky/meta/recipes-multimedia/libpng/libpng_1.6.34.bb create mode 100644 poky/meta/recipes-multimedia/libpng/libpng_1.6.35.bb delete mode 100644 poky/meta/recipes-multimedia/libvorbis/libvorbis/CVE-2017-14632.patch delete mode 100644 poky/meta/recipes-multimedia/libvorbis/libvorbis/CVE-2017-14633.patch delete mode 100644 poky/meta/recipes-multimedia/libvorbis/libvorbis/CVE-2018-5146.patch delete mode 100644 poky/meta/recipes-multimedia/libvorbis/libvorbis_1.3.5.bb create mode 100644 poky/meta/recipes-multimedia/libvorbis/libvorbis_1.3.6.bb delete mode 100644 poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch delete mode 100644 poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch delete mode 100644 poky/meta/recipes-multimedia/pulseaudio/pulseaudio_11.1.bb create mode 100644 poky/meta/recipes-multimedia/pulseaudio/pulseaudio_12.2.bb delete mode 100644 poky/meta/recipes-multimedia/webp/libwebp_0.6.1.bb create mode 100644 poky/meta/recipes-multimedia/webp/libwebp_1.0.0.bb delete mode 100644 poky/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.1.bb create mode 100644 poky/meta/recipes-sato/matchbox-terminal/matchbox-terminal_0.2.bb delete mode 100644 poky/meta/recipes-sato/pcmanfm/pcmanfm_1.2.5.bb create mode 100644 poky/meta/recipes-sato/pcmanfm/pcmanfm_1.3.0.bb create mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/0001-Fix-PaintingData-has-no-member-named-lightVector-on-.patch delete mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/0001-Fix-gles3-header-when-gles2-is-enabled.patch create mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/0001-webkitgtk-fix-CVE-2017-17821.patch create mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/0012-soup-Forward-declare-URL-class.patch delete mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/detect-atomics-during-configure.patch create mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/detect-gstreamer-gl.patch delete mode 100644 poky/meta/recipes-sato/webkit/webkitgtk/fix-configure-failure-aarch64.patch delete mode 100644 poky/meta/recipes-sato/webkit/webkitgtk_2.18.6.bb create mode 100644 poky/meta/recipes-sato/webkit/webkitgtk_2.20.5.bb create mode 100644 poky/meta/recipes-support/apr/apr/0008-apr-fix-ptest-hang-in-teststr.patch delete mode 100644 poky/meta/recipes-support/atk/at-spi2-atk_2.26.1.bb create mode 100644 poky/meta/recipes-support/atk/at-spi2-atk_2.26.2.bb delete mode 100644 poky/meta/recipes-support/atk/at-spi2-core/0001-build-Add-with-systemduserunitdir.patch delete mode 100644 poky/meta/recipes-support/atk/at-spi2-core_2.26.2.bb create mode 100644 poky/meta/recipes-support/atk/at-spi2-core_2.28.0.bb create mode 100644 poky/meta/recipes-support/atk/atk/0001-Switch-from-filename-to-basename.patch create mode 100644 poky/meta/recipes-support/atk/atk/0001-meson.build-enable-introspection-for-cross-compile.patch delete mode 100644 poky/meta/recipes-support/atk/atk_2.26.1.bb create mode 100644 poky/meta/recipes-support/atk/atk_2.28.1.bb delete mode 100644 poky/meta/recipes-support/bash-completion/bash-completion_2.7.bb create mode 100644 poky/meta/recipes-support/bash-completion/bash-completion_2.8.bb delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/add-option-dev-dsp.patch delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/beecrypt-enable-ptest-support.patch delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/disable-icu-check.patch delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/fix-for-gcc-4.7.patch delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/fix-security.patch delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt/run-ptest delete mode 100644 poky/meta/recipes-support/beecrypt/beecrypt_4.2.1.bb delete mode 100644 poky/meta/recipes-support/boost/bjam-native_1.66.0.bb create mode 100644 poky/meta/recipes-support/boost/bjam-native_1.68.0.bb delete mode 100644 poky/meta/recipes-support/boost/boost-1.66.0.inc create mode 100644 poky/meta/recipes-support/boost/boost-1.68.0.inc create mode 100644 poky/meta/recipes-support/boost/boost/0001-make_x86_64_sysv_elf_gas.S-set-.file-section.patch delete mode 100644 poky/meta/recipes-support/boost/boost/0002-Don-t-set-up-m32-m64-we-do-that-ourselves.patch delete mode 100644 poky/meta/recipes-support/boost/boost_1.66.0.bb create mode 100644 poky/meta/recipes-support/boost/boost_1.68.0.bb delete mode 100644 poky/meta/recipes-support/boost/files/0001-Fix-a-strange-assert-typo-how-was-this-released-with.patch delete mode 100644 poky/meta/recipes-support/ca-certificates/ca-certificates_20170717.bb create mode 100644 poky/meta/recipes-support/ca-certificates/ca-certificates_20180409.bb delete mode 100644 poky/meta/recipes-support/db/db/arm-thumb-mutex_db5.patch delete mode 100644 poky/meta/recipes-support/debianutils/debianutils_4.8.4.bb create mode 100644 poky/meta/recipes-support/debianutils/debianutils_4.8.6.bb create mode 100644 poky/meta/recipes-support/dos2unix/dos2unix_7.4.0.bb create mode 100644 poky/meta/recipes-support/fribidi/fribidi/meson.patch create mode 100644 poky/meta/recipes-support/fribidi/fribidi_1.0.5.bb delete mode 100644 poky/meta/recipes-support/gdbm/gdbm_1.14.1.bb create mode 100644 poky/meta/recipes-support/gdbm/gdbm_1.18.bb delete mode 100644 poky/meta/recipes-support/gnupg/gnupg/CVE-2018-12020.patch delete mode 100644 poky/meta/recipes-support/gnupg/gnupg/CVE-2018-9234.patch delete mode 100644 poky/meta/recipes-support/gnupg/gnupg_2.2.4.bb create mode 100644 poky/meta/recipes-support/gnupg/gnupg_2.2.9.bb delete mode 100644 poky/meta/recipes-support/gnutls/gnutls.inc delete mode 100644 poky/meta/recipes-support/gnutls/gnutls/0001-configure.ac-fix-sed-command.patch delete mode 100644 poky/meta/recipes-support/gnutls/gnutls_3.6.1.bb create mode 100644 poky/meta/recipes-support/gnutls/gnutls_3.6.3.bb delete mode 100644 poky/meta/recipes-support/gpgme/gpgme_1.10.0.bb create mode 100644 poky/meta/recipes-support/gpgme/gpgme_1.11.1.bb delete mode 100644 poky/meta/recipes-support/icu/icu/0001-i18n-Drop-include-xlocale.h.patch create mode 100644 poky/meta/recipes-support/icu/icu/0002-Add-ARC-support.patch delete mode 100644 poky/meta/recipes-support/icu/icu_60.2.bb create mode 100644 poky/meta/recipes-support/icu/icu_62.1.bb delete mode 100644 poky/meta/recipes-support/iso-codes/iso-codes_3.77.bb create mode 100644 poky/meta/recipes-support/iso-codes/iso-codes_4.1.bb delete mode 100644 poky/meta/recipes-support/libatomic-ops/libatomic-ops_7.6.2.bb create mode 100644 poky/meta/recipes-support/libatomic-ops/libatomic-ops_7.6.6.bb delete mode 100644 poky/meta/recipes-support/libbsd/libbsd/0001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch create mode 100644 poky/meta/recipes-support/libbsd/libbsd/0001-flopen-Add-missing-fcntl.h-include.patch delete mode 100644 poky/meta/recipes-support/libbsd/libbsd/0001-src-libbsd-overlay.pc.in-Set-Cflags-to-use-I-instead.patch delete mode 100644 poky/meta/recipes-support/libbsd/libbsd/0002-Remove-funopen.patch delete mode 100644 poky/meta/recipes-support/libbsd/libbsd_0.8.7.bb create mode 100644 poky/meta/recipes-support/libbsd/libbsd_0.9.1.bb delete mode 100644 poky/meta/recipes-support/libcap-ng/libcap-ng_0.7.8.bb create mode 100644 poky/meta/recipes-support/libcap-ng/libcap-ng_0.7.9.bb create mode 100644 poky/meta/recipes-support/libcheck/libcheck/not-echo-compiler-info-to-check_stdint.h.patch delete mode 100644 poky/meta/recipes-support/libcroco/libcroco/CVE-2017-7961.patch delete mode 100644 poky/meta/recipes-support/libevdev/libevdev_1.5.8.bb create mode 100644 poky/meta/recipes-support/libevdev/libevdev_1.5.9.bb delete mode 100644 poky/meta/recipes-support/libfm/libfm-extra_1.2.5.bb create mode 100644 poky/meta/recipes-support/libfm/libfm-extra_1.3.0.2.bb create mode 100644 poky/meta/recipes-support/libfm/libfm/0001-Do-not-add-library-path-to-avoid-host-contamination.patch delete mode 100644 poky/meta/recipes-support/libfm/libfm/0001-Enclose-text-in-programlisting-into-CDATA.patch delete mode 100644 poky/meta/recipes-support/libfm/libfm_1.2.5.bb create mode 100644 poky/meta/recipes-support/libfm/libfm_1.3.0.2.bb delete mode 100644 poky/meta/recipes-support/libgcrypt/files/CVE-2018-0495.patch delete mode 100644 poky/meta/recipes-support/libgcrypt/libgcrypt_1.8.2.bb create mode 100644 poky/meta/recipes-support/libgcrypt/libgcrypt_1.8.3.bb create mode 100644 poky/meta/recipes-support/libgpg-error/libgpg-error/0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch create mode 100644 poky/meta/recipes-support/libgpg-error/libgpg-error/0002-syscfg-Add-support-for-arc-unknown-linux-gnu.patch delete mode 100644 poky/meta/recipes-support/libgpg-error/libgpg-error_1.27.bb create mode 100644 poky/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb delete mode 100644 poky/meta/recipes-support/libpcre/libpcre2_10.30.bb create mode 100644 poky/meta/recipes-support/libpcre/libpcre2_10.31.bb delete mode 100644 poky/meta/recipes-support/libpcre/libpcre_8.41.bb create mode 100644 poky/meta/recipes-support/libpcre/libpcre_8.42.bb delete mode 100644 poky/meta/recipes-support/libsoup/libsoup-2.4_2.60.3.bb create mode 100644 poky/meta/recipes-support/libsoup/libsoup-2.4_2.62.3.bb create mode 100644 poky/meta/recipes-support/libunistring/libunistring_0.9.10.bb delete mode 100644 poky/meta/recipes-support/libunistring/libunistring_0.9.9.bb create mode 100644 poky/meta/recipes-support/liburcu/files/Add-support-for-the-RISC-V-architecture.patch delete mode 100644 poky/meta/recipes-support/libusb/libusb-compat/0001-usb.h-Include-sys-types.h.patch delete mode 100644 poky/meta/recipes-support/libusb/libusb-compat_0.1.5.bb create mode 100755 poky/meta/recipes-support/libusb/libusb1/run-ptest delete mode 100644 poky/meta/recipes-support/libusb/libusb1_1.0.21.bb create mode 100644 poky/meta/recipes-support/libusb/libusb1_1.0.22.bb create mode 100644 poky/meta/recipes-support/libxslt/libxslt/fix-rvts-handling.patch delete mode 100644 poky/meta/recipes-support/libyaml/libyaml_0.1.7.bb create mode 100644 poky/meta/recipes-support/libyaml/libyaml_0.2.1.bb delete mode 100644 poky/meta/recipes-support/lz4/files/0001-tests-Makefile-don-t-use-LIBDIR-as-variable.patch delete mode 100644 poky/meta/recipes-support/lz4/lz4_1.7.4.bb create mode 100644 poky/meta/recipes-support/lz4/lz4_1.8.2.bb create mode 100644 poky/meta/recipes-support/mpfr/mpfr/0001-Fix-obsolete-ARC-asm-constraints.patch delete mode 100644 poky/meta/recipes-support/mpfr/mpfr/long-long-thumb.patch delete mode 100644 poky/meta/recipes-support/mpfr/mpfr_3.1.5.bb create mode 100644 poky/meta/recipes-support/mpfr/mpfr_4.0.1.bb delete mode 100644 poky/meta/recipes-support/npth/npth_1.5.bb create mode 100644 poky/meta/recipes-support/npth/npth_1.6.bb create mode 100644 poky/meta/recipes-support/nspr/nspr/0003-Add-type-definitions-for-the-RISC-V-architecture.patch create mode 100644 poky/meta/recipes-support/nspr/nspr/0004-Add-ARC-support.patch delete mode 100644 poky/meta/recipes-support/nss/nss/0001-Bug-1437734-Use-snprintf-in-sign.c-r-ttaubert.patch delete mode 100644 poky/meta/recipes-support/nss/nss/Fix-compilation-for-X32.patch create mode 100644 poky/meta/recipes-support/nss/nss/blank-cert9.db create mode 100644 poky/meta/recipes-support/nss/nss/blank-key4.db delete mode 100644 poky/meta/recipes-support/nss/nss/nss-build-hacl-poly1305-aarch64.patch create mode 100644 poky/meta/recipes-support/nss/nss/system-pkcs11.txt delete mode 100644 poky/meta/recipes-support/nss/nss_3.35.bb create mode 100644 poky/meta/recipes-support/nss/nss_3.39.bb delete mode 100644 poky/meta/recipes-support/p11-kit/p11-kit_0.22.1.bb create mode 100644 poky/meta/recipes-support/p11-kit/p11-kit_0.23.14.bb delete mode 100644 poky/meta/recipes-support/ptest-runner/ptest-runner_2.1.1.bb create mode 100644 poky/meta/recipes-support/ptest-runner/ptest-runner_2.2.bb delete mode 100644 poky/meta/recipes-support/re2c/re2c/mkdir.patch delete mode 100644 poky/meta/recipes-support/re2c/re2c_0.16.bb create mode 100644 poky/meta/recipes-support/re2c/re2c_1.0.1.bb create mode 100644 poky/meta/recipes-support/shared-mime-info/shared-mime-info_1.10.bb delete mode 100644 poky/meta/recipes-support/shared-mime-info/shared-mime-info_1.9.bb delete mode 100644 poky/meta/recipes-support/sqlite/files/CVE-2018-8740.patch delete mode 100644 poky/meta/recipes-support/sqlite/sqlite3_3.22.0.bb create mode 100644 poky/meta/recipes-support/sqlite/sqlite3_3.23.1.bb delete mode 100644 poky/meta/recipes-support/vte/vte_0.50.2.bb create mode 100644 poky/meta/recipes-support/vte/vte_0.52.2.bb create mode 100644 poky/meta/site/arc-common create mode 100755 poky/scripts/autobuilder-worker-prereq-tests delete mode 100755 poky/scripts/contrib/mkefidisk.sh create mode 100644 poky/scripts/lib/recipetool/edit.py create mode 100644 poky/scripts/postinst-intercepts/update_gtk_immodules_cache create mode 100644 poky/scripts/postinst-intercepts/update_udev_hwdb (limited to 'poky') diff --git a/poky/.gitignore b/poky/.gitignore index d3ef473b0..ad1cb83ab 100644 --- a/poky/.gitignore +++ b/poky/.gitignore @@ -1,6 +1,7 @@ *.pyc *.pyo /*.patch +/.repo/ /build*/ pyshtables.py pstage/ diff --git a/poky/bitbake/bin/bitbake b/poky/bitbake/bin/bitbake index 342cef916..57dec2a4c 100755 --- a/poky/bitbake/bin/bitbake +++ b/poky/bitbake/bin/bitbake @@ -38,7 +38,7 @@ from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException if sys.getfilesystemencoding() != "utf-8": sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.") -__version__ = "1.38.0" +__version__ = "1.40.0" if __name__ == "__main__": if __version__ != bb.__version__: diff --git a/poky/bitbake/bin/bitbake-selftest b/poky/bitbake/bin/bitbake-selftest index afe1603d0..cfa7ac539 100755 --- a/poky/bitbake/bin/bitbake-selftest +++ b/poky/bitbake/bin/bitbake-selftest @@ -22,16 +22,21 @@ sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib import unittest try: import bb + import layerindexlib except RuntimeError as exc: sys.exit(str(exc)) tests = ["bb.tests.codeparser", + "bb.tests.cooker", "bb.tests.cow", "bb.tests.data", "bb.tests.event", "bb.tests.fetch", "bb.tests.parse", - "bb.tests.utils"] + "bb.tests.utils", + "layerindexlib.tests.layerindexobj", + "layerindexlib.tests.restapi", + "layerindexlib.tests.cooker"] for t in tests: t = '.'.join(t.split('.')[:3]) diff --git a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml index 4cf0ed9d1..f7d312a32 100644 --- a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml +++ b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml @@ -342,13 +342,14 @@ When you name an append file, you can use the - wildcard character (%) to allow for matching recipe names. + "%" wildcard character to allow for matching + recipe names. For example, suppose you have an append file named as follows: busybox_1.21.%.bbappend - That append file would match any busybox_1.21.x.bb + That append file would match any busybox_1.21.x.bb version of the recipe. So, the append file would match the following recipe names: @@ -356,6 +357,14 @@ busybox_1.21.2.bb busybox_1.21.3.bb + Important + The use of the "%" character + is limited in that it only works directly in front of the + .bbappend portion of the append file's + name. + You cannot use the wildcard character in any other + location of the name. + If the busybox recipe was updated to busybox_1.3.0.bb, the append name would not match. @@ -723,6 +732,163 @@ + +
+ Executing a Multiple Configuration Build + + + BitBake is able to build multiple images or packages + using a single command where the different targets + require different configurations (multiple configuration + builds). + Each target, in this scenario, is referred to as a + "multiconfig". + + + + To accomplish a multiple configuration build, you must + define each target's configuration separately using + a parallel configuration file in the build directory. + The location for these multiconfig configuration files + is specific. + They must reside in the current build directory in + a sub-directory of conf named + multiconfig. + Following is an example for two separate targets: + + + + + The reason for this required file hierarchy + is because the BBPATH variable + is not constructed until the layers are parsed. + Consequently, using the configuration file as a + pre-configuration file is not possible unless it is + located in the current working directory. + + + + Minimally, each configuration file must define the + machine and the temporary directory BitBake uses + for the build. + Suggested practice dictates that you do not + overlap the temporary directories used during the + builds. + + + + Aside from separate configuration files for each + target, you must also enable BitBake to perform multiple + configuration builds. + Enabling is accomplished by setting the + BBMULTICONFIG + variable in the local.conf + configuration file. + As an example, suppose you had configuration files + for target1 and + target2 defined in the build + directory. + The following statement in the + local.conf file both enables + BitBake to perform multiple configuration builds and + specifies the two multiconfigs: + + BBMULTICONFIG = "target1 target2" + + + + + Once the target configuration files are in place and + BitBake has been enabled to perform multiple configuration + builds, use the following command form to start the + builds: + + $ bitbake [multiconfig:multiconfigname:]target [[[multiconfig:multiconfigname:]target] ... ] + + Here is an example for two multiconfigs: + target1 and + target2: + + $ bitbake multiconfig:target1:target multiconfig:target2:target + + +
+ +
+ Enabling Multiple Configuration Build Dependencies + + + Sometimes dependencies can exist between targets + (multiconfigs) in a multiple configuration build. + For example, suppose that in order to build an image + for a particular architecture, the root filesystem of + another build for a different architecture needs to + exist. + In other words, the image for the first multiconfig depends + on the root filesystem of the second multiconfig. + This dependency is essentially that the task in the recipe + that builds one multiconfig is dependent on the + completion of the task in the recipe that builds + another multiconfig. + + + + To enable dependencies in a multiple configuration + build, you must declare the dependencies in the recipe + using the following statement form: + + task_or_package[mcdepends] = "multiconfig:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend" + + To better show how to use this statement, consider an + example with two multiconfigs: target1 + and target2: + + image_task[mcdepends] = "multiconfig:target1:target2:image2:rootfs_task" + + In this example, the + from_multiconfig is "target1" and + the to_multiconfig is "target2". + The task on which the image whose recipe contains + image_task depends on the + completion of the rootfs_task + used to build out image2, which + is associated with the "target2" multiconfig. + + + + Once you set up this dependency, you can build the + "target1" multiconfig using a BitBake command as follows: + + $ bitbake multiconfig:target1:image1 + + This command executes all the tasks needed to create + image1 for the "target1" + multiconfig. + Because of the dependency, BitBake also executes through + the rootfs_task for the "target2" + multiconfig build. + + + + Having a recipe depend on the root filesystem of another + build might not seem that useful. + Consider this change to the statement in the + image1 recipe: + + image_task[mcdepends] = "multiconfig:target1:target2:image2:image_task" + + In this case, BitBake must create + image2 for the "target2" + build since the "target1" build depends on it. + + + + Because "target1" and "target2" are enabled for multiple + configuration builds and have separate configuration + files, BitBake places the artifacts for each build in the + respective temporary build directories. + +
diff --git a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml index b4fc64e75..2490f6e4b 100644 --- a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml +++ b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml @@ -342,7 +342,7 @@ When you use this syntax, BitBake expects one or more strings. - Surrounding spaces are removed as well. + Surrounding spaces and spacing are preserved. Here is an example: FOO = "123 456 789 123456 123 456 123 456" @@ -352,8 +352,9 @@ FOO2_remove = "abc def" The variable FOO becomes - "789 123456" and FOO2 becomes - "ghi abcdef". + "  789 123456    " + and FOO2 becomes + "  ghi abcdef    ". @@ -1929,6 +1930,38 @@ not careful. + [number_threads]: + Limits tasks to a specific number of simultaneous threads + during execution. + This varflag is useful when your build host has a large number + of cores but certain tasks need to be rate-limited due to various + kinds of resource constraints (e.g. to avoid network throttling). + number_threads works similarly to the + BB_NUMBER_THREADS + variable but is task-specific. + + Set the value globally. + For example, the following makes sure the + do_fetch task uses no more than two + simultaneous execution threads: + + do_fetch[number_threads] = "2" + + Warnings + + + Setting the varflag in individual recipes rather + than globally can result in unpredictable behavior. + + + Setting the varflag to a value greater than the + value used in the BB_NUMBER_THREADS + variable causes number_threads + to have no effect. + + + + [postfuncs]: List of functions to call after the completion of the task. @@ -2719,4 +2752,30 @@ + +
+ Wildcard Support in Variables + + + Support for wildcard use in variables varies depending on the + context in which it is used. + For example, some variables and file names allow limited use of + wildcards through the "%" and + "*" characters. + Other variables or names support Python's + glob + syntax, + fnmatch + syntax, or + Regular Expression (re) + syntax. + + + + For variables that have wildcard suport, the + documentation describes which form of wildcard, its + use, and its limitations. + +
+ diff --git a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml index 0313359d9..a84b2bc99 100644 --- a/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml +++ b/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml @@ -115,7 +115,8 @@ is either not set or set to "0". - Limited support for wildcard matching against the + Limited support for the "*" + wildcard character for matching against the beginning of host names exists. For example, the following setting matches git.gnu.org, @@ -124,6 +125,20 @@ BB_ALLOWED_NETWORKS = "*.gnu.org" + Important + The use of the "*" + character only works at the beginning of + a host name and it must be isolated from + the remainder of the host name. + You cannot use the wildcard character in any + other location of the name or combined with + the front part of the name. + + For example, + *.foo.bar is supported, + while *aa.foo.bar is not. + + Mirrors not in the host list are skipped and @@ -646,10 +661,10 @@ Contains the name of the currently executing task. - The value does not include the "do_" prefix. + The value includes the "do_" prefix. For example, if the currently executing task is do_config, the value is - "config". + "do_config". @@ -1082,7 +1097,19 @@ BBFILES - List of recipe files BitBake uses to build software. + + A space-separated list of recipe files BitBake uses to + build software. + + + + When specifying recipe files, you can pattern match using + Python's + glob + syntax. + For details on the syntax, see the documentation by + following the previous link. + @@ -1166,15 +1193,19 @@ match any of the expressions. It is as if BitBake does not see them at all. Consequently, matching files are not parsed or otherwise - used by BitBake. + used by BitBake. + + The values you provide are passed to Python's regular expression compiler. + Consequently, the syntax follows Python's Regular + Expression (re) syntax. The expressions are compared against the full paths to the files. For complete syntax information, see Python's documentation at - . + . @@ -1205,6 +1236,45 @@ + BBMULTICONFIG + + BBMULTICONFIG[doc] = "Enables BitBake to perform multiple configuration builds and lists each separate configuration (multiconfig)." + + + + + Enables BitBake to perform multiple configuration builds + and lists each separate configuration (multiconfig). + You can use this variable to cause BitBake to build + multiple targets where each target has a separate + configuration. + Define BBMULTICONFIG in your + conf/local.conf configuration file. + + + + As an example, the following line specifies three + multiconfigs, each having a separate configuration file: + + BBMULTIFONFIG = "configA configB configC" + + Each configuration file you use must reside in the + build directory within a directory named + conf/multiconfig (e.g. + build_directory/conf/multiconfig/configA.conf). + + + + For information on how to use + BBMULTICONFIG in an environment that + supports building targets with multiple configurations, + see the + "Executing a Multiple Configuration Build" + section. + + + + BBPATH @@ -1894,15 +1964,27 @@ you want to select, and you should set PV accordingly for precedence. - You can use the "%" character as a - wildcard to match any number of characters, which can be - useful when specifying versions that contain long revision - numbers that could potentially change. + + + + The PREFERRED_VERSION variable + supports limited wildcard use through the + "%" character. + You can use the character to match any number of + characters, which can be useful when specifying versions + that contain long revision numbers that potentially change. Here are two examples: PREFERRED_VERSION_python = "2.7.3" PREFERRED_VERSION_linux-yocto = "4.12%" + Important + The use of the "%" character + is limited in that it only works at the end of the + string. + You cannot use the wildcard character in any other + location of the string. + diff --git a/poky/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png b/poky/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png new file mode 100644 index 000000000..041f06403 Binary files /dev/null and b/poky/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png differ diff --git a/poky/bitbake/lib/bb/COW.py b/poky/bitbake/lib/bb/COW.py index bec620809..7817473ab 100644 --- a/poky/bitbake/lib/bb/COW.py +++ b/poky/bitbake/lib/bb/COW.py @@ -150,7 +150,7 @@ class COWDictMeta(COWMeta): yield value if type == "items": yield (key, value) - raise StopIteration() + return def iterkeys(cls): return cls.iter("keys") diff --git a/poky/bitbake/lib/bb/__init__.py b/poky/bitbake/lib/bb/__init__.py index d24adb8ea..4bc47c8ab 100644 --- a/poky/bitbake/lib/bb/__init__.py +++ b/poky/bitbake/lib/bb/__init__.py @@ -21,7 +21,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -__version__ = "1.38.0" +__version__ = "1.40.0" import sys if sys.version_info < (3, 4, 0): @@ -63,6 +63,10 @@ class BBLogger(Logger): def verbose(self, msg, *args, **kwargs): return self.log(logging.INFO - 1, msg, *args, **kwargs) + def verbnote(self, msg, *args, **kwargs): + return self.log(logging.INFO + 2, msg, *args, **kwargs) + + logging.raiseExceptions = False logging.setLoggerClass(BBLogger) @@ -93,6 +97,18 @@ def debug(lvl, *args): def note(*args): mainlogger.info(''.join(args)) +# +# A higher prioity note which will show on the console but isn't a warning +# +# Something is happening the user should be aware of but they probably did +# something to make it happen +# +def verbnote(*args): + mainlogger.verbnote(''.join(args)) + +# +# Warnings - things the user likely needs to pay attention to and fix +# def warn(*args): mainlogger.warning(''.join(args)) diff --git a/poky/bitbake/lib/bb/build.py b/poky/bitbake/lib/bb/build.py index 4631abdde..3e2a94edb 100644 --- a/poky/bitbake/lib/bb/build.py +++ b/poky/bitbake/lib/bb/build.py @@ -41,8 +41,6 @@ from bb import data, event, utils bblogger = logging.getLogger('BitBake') logger = logging.getLogger('BitBake.Build') -NULL = open(os.devnull, 'r+') - __mtime_cache = {} def cached_mtime_noerror(f): @@ -533,7 +531,6 @@ def _exec_task(fn, task, d, quieterr): self.triggered = True # Handle logfiles - si = open('/dev/null', 'r') try: bb.utils.mkdirhier(os.path.dirname(logfn)) logfile = open(logfn, 'w') @@ -547,7 +544,8 @@ def _exec_task(fn, task, d, quieterr): ose = [os.dup(sys.stderr.fileno()), sys.stderr.fileno()] # Replace those fds with our own - os.dup2(si.fileno(), osi[1]) + with open('/dev/null', 'r') as si: + os.dup2(si.fileno(), osi[1]) os.dup2(logfile.fileno(), oso[1]) os.dup2(logfile.fileno(), ose[1]) @@ -608,7 +606,6 @@ def _exec_task(fn, task, d, quieterr): os.close(osi[0]) os.close(oso[0]) os.close(ose[0]) - si.close() logfile.close() if os.path.exists(logfn) and os.path.getsize(logfn) == 0: @@ -803,6 +800,7 @@ def add_tasks(tasklist, d): if name in flags: deptask = d.expand(flags[name]) task_deps[name][task] = deptask + getTask('mcdepends') getTask('depends') getTask('rdepends') getTask('deptask') diff --git a/poky/bitbake/lib/bb/cache.py b/poky/bitbake/lib/bb/cache.py index 168a77ac0..258d679dc 100644 --- a/poky/bitbake/lib/bb/cache.py +++ b/poky/bitbake/lib/bb/cache.py @@ -37,7 +37,7 @@ import bb.utils logger = logging.getLogger("BitBake.Cache") -__cache_version__ = "151" +__cache_version__ = "152" def getCacheFile(path, filename, data_hash): return os.path.join(path, filename + "." + data_hash) diff --git a/poky/bitbake/lib/bb/codeparser.py b/poky/bitbake/lib/bb/codeparser.py index 530f44e57..ddd1b97dc 100644 --- a/poky/bitbake/lib/bb/codeparser.py +++ b/poky/bitbake/lib/bb/codeparser.py @@ -140,7 +140,7 @@ class CodeParserCache(MultiProcessCache): # so that an existing cache gets invalidated. Additionally you'll need # to increment __cache_version__ in cache.py in order to ensure that old # recipe caches don't trigger "Taskhash mismatch" errors. - CACHE_VERSION = 9 + CACHE_VERSION = 10 def __init__(self): MultiProcessCache.__init__(self) @@ -214,7 +214,7 @@ class BufferedLogger(Logger): self.buffer = [] class PythonParser(): - getvars = (".getVar", ".appendVar", ".prependVar") + getvars = (".getVar", ".appendVar", ".prependVar", "oe.utils.conditional") getvarflags = (".getVarFlag", ".appendVarFlag", ".prependVarFlag") containsfuncs = ("bb.utils.contains", "base_contains") containsanyfuncs = ("bb.utils.contains_any", "bb.utils.filter") diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py index 1fda40dd4..16681ba24 100644 --- a/poky/bitbake/lib/bb/cooker.py +++ b/poky/bitbake/lib/bb/cooker.py @@ -620,6 +620,27 @@ class BBCooker: runlist.append([mc, k, ktask, fn]) bb.event.fire(bb.event.TreeDataPreparationProgress(current, len(fulltargetlist)), self.data) + mcdeps = taskdata[mc].get_mcdepends() + # No need to do check providers if there are no mcdeps or not an mc build + if mcdeps and mc: + # Make sure we can provide the multiconfig dependency + seen = set() + new = True + while new: + new = False + for mc in self.multiconfigs: + for k in mcdeps: + if k in seen: + continue + l = k.split(':') + depmc = l[2] + if depmc not in self.multiconfigs: + bb.fatal("Multiconfig dependency %s depends on nonexistent mc configuration %s" % (k,depmc)) + else: + logger.debug(1, "Adding providers for multiconfig dependency %s" % l[3]) + taskdata[depmc].add_provider(localdata[depmc], self.recipecaches[depmc], l[3]) + seen.add(k) + new = True for mc in self.multiconfigs: taskdata[mc].add_unresolved(localdata[mc], self.recipecaches[mc]) @@ -706,8 +727,8 @@ class BBCooker: if not dotname in depend_tree["tdepends"]: depend_tree["tdepends"][dotname] = [] for dep in rq.rqdata.runtaskentries[tid].depends: - (depmc, depfn, deptaskname, deptaskfn) = bb.runqueue.split_tid_mcfn(dep) - deppn = self.recipecaches[mc].pkg_fn[deptaskfn] + (depmc, depfn, _, deptaskfn) = bb.runqueue.split_tid_mcfn(dep) + deppn = self.recipecaches[depmc].pkg_fn[deptaskfn] depend_tree["tdepends"][dotname].append("%s.%s" % (deppn, bb.runqueue.taskname_from_tid(dep))) if taskfn not in seen_fns: seen_fns.append(taskfn) @@ -1566,7 +1587,7 @@ class BBCooker: pkgs_to_build.append(t) if 'universe' in pkgs_to_build: - parselog.warning("The \"universe\" target is only intended for testing and may produce errors.") + parselog.verbnote("The \"universe\" target is only intended for testing and may produce errors.") parselog.debug(1, "collating packages for \"universe\"") pkgs_to_build.remove('universe') for mc in self.multiconfigs: @@ -1633,7 +1654,10 @@ class CookerExit(bb.event.Event): class CookerCollectFiles(object): def __init__(self, priorities): self.bbappends = [] - self.bbfile_config_priorities = priorities + # Priorities is a list of tupples, with the second element as the pattern. + # We need to sort the list with the longest pattern first, and so on to + # the shortest. This allows nested layers to be properly evaluated. + self.bbfile_config_priorities = sorted(priorities, key=lambda tup: tup[1], reverse=True) def calc_bbfile_priority( self, filename, matched = None ): for _, _, regex, pri in self.bbfile_config_priorities: diff --git a/poky/bitbake/lib/bb/daemonize.py b/poky/bitbake/lib/bb/daemonize.py index 8300d1d0f..c937675eb 100644 --- a/poky/bitbake/lib/bb/daemonize.py +++ b/poky/bitbake/lib/bb/daemonize.py @@ -16,6 +16,10 @@ def createDaemon(function, logfile): background as a daemon, returning control to the caller. """ + # Ensure stdout/stderror are flushed before forking to avoid duplicate output + sys.stdout.flush() + sys.stderr.flush() + try: # Fork a child process so the parent can exit. This returns control to # the command-line or shell. It also guarantees that the child will not @@ -49,8 +53,8 @@ def createDaemon(function, logfile): # exit() or _exit()? # _exit is like exit(), but it doesn't call any functions registered # with atexit (and on_exit) or any registered signal handlers. It also - # closes any open file descriptors. Using exit() may cause all stdio - # streams to be flushed twice and any temporary files may be unexpectedly + # closes any open file descriptors, but doesn't flush any buffered output. + # Using exit() may cause all any temporary files to be unexpectedly # removed. It's therefore recommended that child branches of a fork() # and the parent branch(es) of a daemon use _exit(). os._exit(0) @@ -61,17 +65,19 @@ def createDaemon(function, logfile): # The second child. # Replace standard fds with our own - si = open('/dev/null', 'r') - os.dup2(si.fileno(), sys.stdin.fileno()) + with open('/dev/null', 'r') as si: + os.dup2(si.fileno(), sys.stdin.fileno()) try: so = open(logfile, 'a+') - se = so os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) + os.dup2(so.fileno(), sys.stderr.fileno()) except io.UnsupportedOperation: sys.stdout = open(logfile, 'a+') - sys.stderr = sys.stdout + + # Have stdout and stderr be the same so log output matches chronologically + # and there aren't two seperate buffers + sys.stderr = sys.stdout try: function() @@ -79,4 +85,9 @@ def createDaemon(function, logfile): traceback.print_exc() finally: bb.event.print_ui_queue() + # os._exit() doesn't flush open files like os.exit() does. Manually flush + # stdout and stderr so that any logging output will be seen, particularly + # exception tracebacks. + sys.stdout.flush() + sys.stderr.flush() os._exit(0) diff --git a/poky/bitbake/lib/bb/data.py b/poky/bitbake/lib/bb/data.py index 80a7879cb..d66d98cc8 100644 --- a/poky/bitbake/lib/bb/data.py +++ b/poky/bitbake/lib/bb/data.py @@ -38,6 +38,7 @@ the speed is more critical here. # Based on functions from the base bb module, Copyright 2003 Holger Schurig import sys, os, re +import hashlib if sys.argv[0][-5:] == "pydoc": path = os.path.dirname(os.path.dirname(sys.argv[1])) else: @@ -283,14 +284,12 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): try: if key[-1] == ']': vf = key[:-1].split('[') - value = d.getVarFlag(vf[0], vf[1], False) - parser = d.expandWithRefs(value, key) + value, parser = d.getVarFlag(vf[0], vf[1], False, retparser=True) deps |= parser.references deps = deps | (keys & parser.execs) return deps, value varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {} vardeps = varflags.get("vardeps") - value = d.getVarFlag(key, "_content", False) def handle_contains(value, contains, d): newvalue = "" @@ -309,10 +308,19 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): return newvalue return value + newvalue + def handle_remove(value, deps, removes, d): + for r in sorted(removes): + r2 = d.expandWithRefs(r, None) + value += "\n_remove of %s" % r + deps |= r2.references + deps = deps | (keys & r2.execs) + return value + if "vardepvalue" in varflags: - value = varflags.get("vardepvalue") + value = varflags.get("vardepvalue") elif varflags.get("func"): if varflags.get("python"): + value = d.getVarFlag(key, "_content", False) parser = bb.codeparser.PythonParser(key, logger) if value and "\t" in value: logger.warning("Variable %s contains tabs, please remove these (%s)" % (key, d.getVar("FILE"))) @@ -321,13 +329,15 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): deps = deps | (keys & parser.execs) value = handle_contains(value, parser.contains, d) else: - parsedvar = d.expandWithRefs(value, key) + value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True) parser = bb.codeparser.ShellParser(key, logger) parser.parse_shell(parsedvar.value) deps = deps | shelldeps deps = deps | parsedvar.references deps = deps | (keys & parser.execs) | (keys & parsedvar.execs) value = handle_contains(value, parsedvar.contains, d) + if hasattr(parsedvar, "removes"): + value = handle_remove(value, deps, parsedvar.removes, d) if vardeps is None: parser.log.flush() if "prefuncs" in varflags: @@ -337,10 +347,12 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): if "exports" in varflags: deps = deps | set(varflags["exports"].split()) else: - parser = d.expandWithRefs(value, key) + value, parser = d.getVarFlag(key, "_content", False, retparser=True) deps |= parser.references deps = deps | (keys & parser.execs) value = handle_contains(value, parser.contains, d) + if hasattr(parser, "removes"): + value = handle_remove(value, deps, parser.removes, d) if "vardepvalueexclude" in varflags: exclude = varflags.get("vardepvalueexclude") @@ -394,6 +406,43 @@ def generate_dependencies(d): #print "For %s: %s" % (task, str(deps[task])) return tasklist, deps, values +def generate_dependency_hash(tasklist, gendeps, lookupcache, whitelist, fn): + taskdeps = {} + basehash = {} + + for task in tasklist: + data = lookupcache[task] + + if data is None: + bb.error("Task %s from %s seems to be empty?!" % (task, fn)) + data = '' + + gendeps[task] -= whitelist + newdeps = gendeps[task] + seen = set() + while newdeps: + nextdeps = newdeps + seen |= nextdeps + newdeps = set() + for dep in nextdeps: + if dep in whitelist: + continue + gendeps[dep] -= whitelist + newdeps |= gendeps[dep] + newdeps -= seen + + alldeps = sorted(seen) + for dep in alldeps: + data = data + dep + var = lookupcache[dep] + if var is not None: + data = data + str(var) + k = fn + "." + task + basehash[k] = hashlib.md5(data.encode("utf-8")).hexdigest() + taskdeps[task] = alldeps + + return taskdeps, basehash + def inherits_class(klass, d): val = d.getVar('__inherit_cache', False) or [] needle = os.path.join('classes', '%s.bbclass' % klass) diff --git a/poky/bitbake/lib/bb/data_smart.py b/poky/bitbake/lib/bb/data_smart.py index 7b09af5cf..6b94fc4b4 100644 --- a/poky/bitbake/lib/bb/data_smart.py +++ b/poky/bitbake/lib/bb/data_smart.py @@ -42,6 +42,7 @@ __setvar_keyword__ = ["_append", "_prepend", "_remove"] __setvar_regexp__ = re.compile('(?P.*?)(?P_append|_prepend|_remove)(_(?P[^A-Z]*))?$') __expand_var_regexp__ = re.compile(r"\${[^{}@\n\t :]+}") __expand_python_regexp__ = re.compile(r"\${@.+?}") +__whitespace_split__ = re.compile('(\s)') def infer_caller_details(loginfo, parent = False, varval = True): """Save the caller the trouble of specifying everything.""" @@ -104,11 +105,7 @@ class VariableParse: if self.varname and key: if self.varname == key: raise Exception("variable %s references itself!" % self.varname) - if key in self.d.expand_cache: - varparse = self.d.expand_cache[key] - var = varparse.value - else: - var = self.d.getVarFlag(key, "_content") + var = self.d.getVarFlag(key, "_content") self.references.add(key) if var is not None: return var @@ -267,6 +264,16 @@ class VariableHistory(object): return self.variables[var].append(loginfo.copy()) + def rename_variable_hist(self, oldvar, newvar): + if not self.dataroot._tracking: + return + if oldvar not in self.variables: + return + if newvar not in self.variables: + self.variables[newvar] = [] + for i in self.variables[oldvar]: + self.variables[newvar].append(i.copy()) + def variable(self, var): remote_connector = self.dataroot.getVar('_remote_data', False) if remote_connector: @@ -401,9 +408,6 @@ class DataSmart(MutableMapping): if not isinstance(s, str): # sanity check return VariableParse(varname, self, s) - if varname and varname in self.expand_cache: - return self.expand_cache[varname] - varparse = VariableParse(varname, self) while s.find('${') != -1: @@ -427,9 +431,6 @@ class DataSmart(MutableMapping): varparse.value = s - if varname: - self.expand_cache[varname] = varparse - return varparse def expand(self, s, varname = None): @@ -498,6 +499,7 @@ class DataSmart(MutableMapping): def setVar(self, var, value, **loginfo): #print("var=" + str(var) + " val=" + str(value)) + self.expand_cache = {} parsing=False if 'parsing' in loginfo: parsing=True @@ -510,7 +512,7 @@ class DataSmart(MutableMapping): if 'op' not in loginfo: loginfo['op'] = "set" - self.expand_cache = {} + match = __setvar_regexp__.match(var) if match and match.group("keyword") in __setvar_keyword__: base = match.group('base') @@ -619,6 +621,7 @@ class DataSmart(MutableMapping): val = self.getVar(key, 0, parsing=True) if val is not None: + self.varhistory.rename_variable_hist(key, newkey) loginfo['variable'] = newkey loginfo['op'] = 'rename from %s' % key loginfo['detail'] = val @@ -660,6 +663,7 @@ class DataSmart(MutableMapping): self.setVar(var + "_prepend", value, ignore=True, parsing=True) def delVar(self, var, **loginfo): + self.expand_cache = {} if '_remote_data' in self.dict: connector = self.dict["_remote_data"]["_content"] res = connector.delVar(var) @@ -669,7 +673,6 @@ class DataSmart(MutableMapping): loginfo['detail'] = "" loginfo['op'] = 'del' self.varhistory.record(**loginfo) - self.expand_cache = {} self.dict[var] = {} if var in self.overridedata: del self.overridedata[var] @@ -692,13 +695,13 @@ class DataSmart(MutableMapping): override = None def setVarFlag(self, var, flag, value, **loginfo): + self.expand_cache = {} if '_remote_data' in self.dict: connector = self.dict["_remote_data"]["_content"] res = connector.setVarFlag(var, flag, value) if not res: return - self.expand_cache = {} if 'op' not in loginfo: loginfo['op'] = "set" loginfo['flag'] = flag @@ -719,9 +722,21 @@ class DataSmart(MutableMapping): self.dict["__exportlist"]["_content"] = set() self.dict["__exportlist"]["_content"].add(var) - def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False): + def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False, retparser=False): + if flag == "_content": + cachename = var + else: + if not flag: + bb.warn("Calling getVarFlag with flag unset is invalid") + return None + cachename = var + "[" + flag + "]" + + if expand and cachename in self.expand_cache: + return self.expand_cache[cachename].value + local_var, overridedata = self._findVar(var) value = None + removes = set() if flag == "_content" and overridedata is not None and not parsing: match = False active = {} @@ -748,7 +763,11 @@ class DataSmart(MutableMapping): match = active[a] del active[a] if match: - value = self.getVar(match, False) + value, subparser = self.getVarFlag(match, "_content", False, retparser=True) + if hasattr(subparser, "removes"): + # We have to carry the removes from the overridden variable to apply at the + # end of processing + removes = subparser.removes if local_var is not None and value is None: if flag in local_var: @@ -784,17 +803,13 @@ class DataSmart(MutableMapping): if match: value = r + value - if expand and value: - # Only getvar (flag == _content) hits the expand cache - cachename = None - if flag == "_content": - cachename = var - else: - cachename = var + "[" + flag + "]" - value = self.expand(value, cachename) + parser = None + if expand or retparser: + parser = self.expandWithRefs(value, cachename) + if expand: + value = parser.value - if value and flag == "_content" and local_var is not None and "_remove" in local_var: - removes = [] + if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing: self.need_overrides() for (r, o) in local_var["_remove"]: match = True @@ -803,26 +818,45 @@ class DataSmart(MutableMapping): if not o2 in self.overrides: match = False if match: - removes.extend(self.expand(r).split()) - - if removes: - filtered = filter(lambda v: v not in removes, - value.split()) - value = " ".join(filtered) - if expand and var in self.expand_cache: - # We need to ensure the expand cache has the correct value - # flag == "_content" here - self.expand_cache[var].value = value + removes.add(r) + + if value and flag == "_content" and not parsing: + if removes and parser: + expanded_removes = {} + for r in removes: + expanded_removes[r] = self.expand(r).split() + + parser.removes = set() + val = "" + for v in __whitespace_split__.split(parser.value): + skip = False + for r in removes: + if v in expanded_removes[r]: + parser.removes.add(r) + skip = True + if skip: + continue + val = val + v + parser.value = val + if expand: + value = parser.value + + if parser: + self.expand_cache[cachename] = parser + + if retparser: + return value, parser + return value def delVarFlag(self, var, flag, **loginfo): + self.expand_cache = {} if '_remote_data' in self.dict: connector = self.dict["_remote_data"]["_content"] res = connector.delVarFlag(var, flag) if not res: return - self.expand_cache = {} local_var, _ = self._findVar(var) if not local_var: return diff --git a/poky/bitbake/lib/bb/event.py b/poky/bitbake/lib/bb/event.py index 5d0049626..5b1b094a8 100644 --- a/poky/bitbake/lib/bb/event.py +++ b/poky/bitbake/lib/bb/event.py @@ -141,6 +141,9 @@ def print_ui_queue(): logger = logging.getLogger("BitBake") if not _uiready: from bb.msg import BBLogFormatter + # Flush any existing buffered content + sys.stdout.flush() + sys.stderr.flush() stdout = logging.StreamHandler(sys.stdout) stderr = logging.StreamHandler(sys.stderr) formatter = BBLogFormatter("%(levelname)s: %(message)s") @@ -395,7 +398,7 @@ class RecipeEvent(Event): Event.__init__(self) class RecipePreFinalise(RecipeEvent): - """ Recipe Parsing Complete but not yet finialised""" + """ Recipe Parsing Complete but not yet finalised""" class RecipeTaskPreProcess(RecipeEvent): """ diff --git a/poky/bitbake/lib/bb/fetch2/__init__.py b/poky/bitbake/lib/bb/fetch2/__init__.py index 72d6092de..3b8389e0a 100644 --- a/poky/bitbake/lib/bb/fetch2/__init__.py +++ b/poky/bitbake/lib/bb/fetch2/__init__.py @@ -256,7 +256,7 @@ class URI(object): # Identify if the URI is relative or not if urlp.scheme in self._relative_schemes and \ - re.compile("^\w+:(?!//)").match(uri): + re.compile(r"^\w+:(?!//)").match(uri): self.relative = True if not self.relative: @@ -383,7 +383,7 @@ def decodeurl(url): path = location else: host = location - path = "" + path = "/" if user: m = re.compile('(?P[^:]+)(:?(?P.*))').match(user) if m: @@ -452,8 +452,8 @@ def uri_replace(ud, uri_find, uri_replace, replacements, d, mirrortarball=None): # Handle URL parameters if i: # Any specified URL parameters must match - for k in uri_replace_decoded[loc]: - if uri_decoded[loc][k] != uri_replace_decoded[loc][k]: + for k in uri_find_decoded[loc]: + if uri_decoded[loc][k] != uri_find_decoded[loc][k]: return None # Overwrite any specified replacement parameters for k in uri_replace_decoded[loc]: @@ -827,6 +827,7 @@ def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None): 'NO_PROXY', 'no_proxy', 'ALL_PROXY', 'all_proxy', 'GIT_PROXY_COMMAND', + 'GIT_SSH', 'GIT_SSL_CAINFO', 'GIT_SMART_HTTP', 'SSH_AUTH_SOCK', 'SSH_AGENT_PID', @@ -837,14 +838,16 @@ def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None): if not cleanup: cleanup = [] - # If PATH contains WORKDIR which contains PV which contains SRCPV we + # If PATH contains WORKDIR which contains PV-PR which contains SRCPV we # can end up in circular recursion here so give the option of breaking it # in a data store copy. try: d.getVar("PV") + d.getVar("PR") except bb.data_smart.ExpansionError: d = bb.data.createCopy(d) d.setVar("PV", "fetcheravoidrecurse") + d.setVar("PR", "fetcheravoidrecurse") origenv = d.getVar("BB_ORIGENV", False) for var in exportvars: @@ -1016,16 +1019,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): origud.method.build_mirror_data(origud, ld) return origud.localpath # Otherwise the result is a local file:// and we symlink to it - if not os.path.exists(origud.localpath): - if os.path.islink(origud.localpath): - # Broken symbolic link - os.unlink(origud.localpath) - - # As per above, in case two tasks end up here simultaneously. - try: - os.symlink(ud.localpath, origud.localpath) - except FileExistsError: - pass + ensure_symlink(ud.localpath, origud.localpath) update_stamp(origud, ld) return ud.localpath @@ -1059,6 +1053,22 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): bb.utils.unlockfile(lf) +def ensure_symlink(target, link_name): + if not os.path.exists(link_name): + if os.path.islink(link_name): + # Broken symbolic link + os.unlink(link_name) + + # In case this is executing without any file locks held (as is + # the case for file:// URLs), two tasks may end up here at the + # same time, in which case we do not want the second task to + # fail when the link has already been created by the first task. + try: + os.symlink(target, link_name) + except FileExistsError: + pass + + def try_mirrors(fetch, d, origud, mirrors, check = False): """ Try to use a mirrored version of the sources. @@ -1088,7 +1098,9 @@ def trusted_network(d, url): return True pkgname = d.expand(d.getVar('PN', False)) - trusted_hosts = d.getVarFlag('BB_ALLOWED_NETWORKS', pkgname, False) + trusted_hosts = None + if pkgname: + trusted_hosts = d.getVarFlag('BB_ALLOWED_NETWORKS', pkgname, False) if not trusted_hosts: trusted_hosts = d.getVar('BB_ALLOWED_NETWORKS') diff --git a/poky/bitbake/lib/bb/fetch2/bzr.py b/poky/bitbake/lib/bb/fetch2/bzr.py index 16123f8af..658502f9a 100644 --- a/poky/bitbake/lib/bb/fetch2/bzr.py +++ b/poky/bitbake/lib/bb/fetch2/bzr.py @@ -41,8 +41,9 @@ class Bzr(FetchMethod): init bzr specific variable within url data """ # Create paths to bzr checkouts + bzrdir = d.getVar("BZRDIR") or (d.getVar("DL_DIR") + "/bzr") relpath = self._strip_leading_slashes(ud.path) - ud.pkgdir = os.path.join(d.expand('${BZRDIR}'), ud.host, relpath) + ud.pkgdir = os.path.join(bzrdir, ud.host, relpath) ud.setup_revisions(d) @@ -57,7 +58,7 @@ class Bzr(FetchMethod): command is "fetch", "update", "revno" """ - basecmd = d.expand('${FETCHCMD_bzr}') + basecmd = d.getVar("FETCHCMD_bzr") or "/usr/bin/env bzr" proto = ud.parm.get('protocol', 'http') diff --git a/poky/bitbake/lib/bb/fetch2/cvs.py b/poky/bitbake/lib/bb/fetch2/cvs.py index 490c95471..0e0a3196f 100644 --- a/poky/bitbake/lib/bb/fetch2/cvs.py +++ b/poky/bitbake/lib/bb/fetch2/cvs.py @@ -110,7 +110,7 @@ class Cvs(FetchMethod): if ud.tag: options.append("-r %s" % ud.tag) - cvsbasecmd = d.getVar("FETCHCMD_cvs") + cvsbasecmd = d.getVar("FETCHCMD_cvs") or "/usr/bin/env cvs" cvscmd = cvsbasecmd + " '-d" + cvsroot + "' co " + " ".join(options) + " " + ud.module cvsupdatecmd = cvsbasecmd + " '-d" + cvsroot + "' update -d -P " + " ".join(options) @@ -121,7 +121,8 @@ class Cvs(FetchMethod): # create module directory logger.debug(2, "Fetch: checking for module directory") pkg = d.getVar('PN') - pkgdir = os.path.join(d.getVar('CVSDIR'), pkg) + cvsdir = d.getVar("CVSDIR") or (d.getVar("DL_DIR") + "/cvs") + pkgdir = os.path.join(cvsdir, pkg) moddir = os.path.join(pkgdir, localdir) workdir = None if os.access(os.path.join(moddir, 'CVS'), os.R_OK): diff --git a/poky/bitbake/lib/bb/fetch2/git.py b/poky/bitbake/lib/bb/fetch2/git.py index 7b618c6fb..59a2ee8f8 100644 --- a/poky/bitbake/lib/bb/fetch2/git.py +++ b/poky/bitbake/lib/bb/fetch2/git.py @@ -261,7 +261,7 @@ class Git(FetchMethod): gitsrcname = gitsrcname + '_' + ud.revisions[name] dl_dir = d.getVar("DL_DIR") - gitdir = d.getVar("GITDIR") or (dl_dir + "/git2/") + gitdir = d.getVar("GITDIR") or (dl_dir + "/git2") ud.clonedir = os.path.join(gitdir, gitsrcname) ud.localfile = ud.clonedir @@ -299,17 +299,22 @@ class Git(FetchMethod): return ud.clonedir def need_update(self, ud, d): + return self.clonedir_need_update(ud, d) or self.shallow_tarball_need_update(ud) or self.tarball_need_update(ud) + + def clonedir_need_update(self, ud, d): if not os.path.exists(ud.clonedir): return True for name in ud.names: if not self._contains_ref(ud, d, name, ud.clonedir): return True - if ud.shallow and ud.write_shallow_tarballs and not os.path.exists(ud.fullshallow): - return True - if ud.write_tarballs and not os.path.exists(ud.fullmirror): - return True return False + def shallow_tarball_need_update(self, ud): + return ud.shallow and ud.write_shallow_tarballs and not os.path.exists(ud.fullshallow) + + def tarball_need_update(self, ud): + return ud.write_tarballs and not os.path.exists(ud.fullmirror) + def try_premirror(self, ud, d): # If we don't do this, updating an existing checkout with only premirrors # is not possible @@ -322,16 +327,13 @@ class Git(FetchMethod): def download(self, ud, d): """Fetch url""" - no_clone = not os.path.exists(ud.clonedir) - need_update = no_clone or self.need_update(ud, d) - # A current clone is preferred to either tarball, a shallow tarball is # preferred to an out of date clone, and a missing clone will use # either tarball. - if ud.shallow and os.path.exists(ud.fullshallow) and need_update: + if ud.shallow and os.path.exists(ud.fullshallow) and self.need_update(ud, d): ud.localpath = ud.fullshallow return - elif os.path.exists(ud.fullmirror) and no_clone: + elif os.path.exists(ud.fullmirror) and not os.path.exists(ud.clonedir): bb.utils.mkdirhier(ud.clonedir) runfetchcmd("tar -xzf %s" % ud.fullmirror, d, workdir=ud.clonedir) @@ -353,6 +355,8 @@ class Git(FetchMethod): for name in ud.names: if not self._contains_ref(ud, d, name, ud.clonedir): needupdate = True + break + if needupdate: output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True, workdir=ud.clonedir) if "origin" in output: @@ -372,6 +376,7 @@ class Git(FetchMethod): except OSError as exc: if exc.errno != errno.ENOENT: raise + for name in ud.names: if not self._contains_ref(ud, d, name, ud.clonedir): raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) @@ -471,11 +476,30 @@ class Git(FetchMethod): if os.path.exists(destdir): bb.utils.prunedir(destdir) - if ud.shallow and (not os.path.exists(ud.clonedir) or self.need_update(ud, d)): - bb.utils.mkdirhier(destdir) - runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=destdir) - else: - runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, ud.cloneflags, ud.clonedir, destdir), d) + source_found = False + source_error = [] + + if not source_found: + clonedir_is_up_to_date = not self.clonedir_need_update(ud, d) + if clonedir_is_up_to_date: + runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, ud.cloneflags, ud.clonedir, destdir), d) + source_found = True + else: + source_error.append("clone directory not available or not up to date: " + ud.clonedir) + + if not source_found: + if ud.shallow: + if os.path.exists(ud.fullshallow): + bb.utils.mkdirhier(destdir) + runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=destdir) + source_found = True + else: + source_error.append("shallow clone not available: " + ud.fullshallow) + else: + source_error.append("shallow clone not enabled") + + if not source_found: + raise bb.fetch2.UnpackError("No up to date source found: " + "; ".join(source_error), ud.url) repourl = self._get_repo_url(ud) runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir) diff --git a/poky/bitbake/lib/bb/fetch2/gitsm.py b/poky/bitbake/lib/bb/fetch2/gitsm.py index 0aff1008e..35729dbc0 100644 --- a/poky/bitbake/lib/bb/fetch2/gitsm.py +++ b/poky/bitbake/lib/bb/fetch2/gitsm.py @@ -31,9 +31,12 @@ NOTE: Switching a SRC_URI from "git://" to "gitsm://" requires a clean of your r import os import bb +import copy from bb.fetch2.git import Git from bb.fetch2 import runfetchcmd from bb.fetch2 import logger +from bb.fetch2 import Fetch +from bb.fetch2 import BBFetchException class GitSM(Git): def supports(self, ud, d): @@ -42,94 +45,206 @@ class GitSM(Git): """ return ud.type in ['gitsm'] - def uses_submodules(self, ud, d, wd): - for name in ud.names: - try: - runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revisions[name]), d, quiet=True, workdir=wd) - return True - except bb.fetch.FetchError: - pass - return False + @staticmethod + def parse_gitmodules(gitmodules): + modules = {} + module = "" + for line in gitmodules.splitlines(): + if line.startswith('[submodule'): + module = line.split('"')[1] + modules[module] = {} + elif module and line.strip().startswith('path'): + path = line.split('=')[1].strip() + modules[module]['path'] = path + elif module and line.strip().startswith('url'): + url = line.split('=')[1].strip() + modules[module]['url'] = url + return modules - def _set_relative_paths(self, repopath): - """ - Fix submodule paths to be relative instead of absolute, - so that when we move the repo it doesn't break - (In Git 1.7.10+ this is done automatically) - """ + def update_submodules(self, ud, d): submodules = [] - with open(os.path.join(repopath, '.gitmodules'), 'r') as f: - for line in f.readlines(): - if line.startswith('[submodule'): - submodules.append(line.split('"')[1]) + paths = {} + uris = {} + local_paths = {} - for module in submodules: - repo_conf = os.path.join(repopath, module, '.git') - if os.path.exists(repo_conf): - with open(repo_conf, 'r') as f: - lines = f.readlines() - newpath = '' - for i, line in enumerate(lines): - if line.startswith('gitdir:'): - oldpath = line.split(': ')[-1].rstrip() - if oldpath.startswith('/'): - newpath = '../' * (module.count('/') + 1) + '.git/modules/' + module - lines[i] = 'gitdir: %s\n' % newpath - break - if newpath: - with open(repo_conf, 'w') as f: - for line in lines: - f.write(line) - - repo_conf2 = os.path.join(repopath, '.git', 'modules', module, 'config') - if os.path.exists(repo_conf2): - with open(repo_conf2, 'r') as f: - lines = f.readlines() - newpath = '' - for i, line in enumerate(lines): - if line.lstrip().startswith('worktree = '): - oldpath = line.split(' = ')[-1].rstrip() - if oldpath.startswith('/'): - newpath = '../' * (module.count('/') + 3) + module - lines[i] = '\tworktree = %s\n' % newpath - break - if newpath: - with open(repo_conf2, 'w') as f: - for line in lines: - f.write(line) + for name in ud.names: + try: + gitmodules = runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revisions[name]), d, quiet=True, workdir=ud.clonedir) + except: + # No submodules to update + continue + + for m, md in self.parse_gitmodules(gitmodules).items(): + submodules.append(m) + paths[m] = md['path'] + uris[m] = md['url'] + if uris[m].startswith('..'): + newud = copy.copy(ud) + newud.path = os.path.realpath(os.path.join(newud.path, md['url'])) + uris[m] = Git._get_repo_url(self, newud) - def update_submodules(self, ud, d): - # We have to convert bare -> full repo, do the submodule bit, then convert back - tmpclonedir = ud.clonedir + ".tmp" - gitdir = tmpclonedir + os.sep + ".git" - bb.utils.remove(tmpclonedir, True) - os.mkdir(tmpclonedir) - os.rename(ud.clonedir, gitdir) - runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*true/bare = false/'", d) - runfetchcmd(ud.basecmd + " reset --hard", d, workdir=tmpclonedir) - runfetchcmd(ud.basecmd + " checkout -f " + ud.revisions[ud.names[0]], d, workdir=tmpclonedir) - runfetchcmd(ud.basecmd + " submodule update --init --recursive", d, workdir=tmpclonedir) - self._set_relative_paths(tmpclonedir) - runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*false/bare = true/'", d, workdir=tmpclonedir) - os.rename(gitdir, ud.clonedir,) - bb.utils.remove(tmpclonedir, True) + for module in submodules: + module_hash = runfetchcmd("%s ls-tree -z -d %s %s" % (ud.basecmd, ud.revisions[name], paths[module]), d, quiet=True, workdir=ud.clonedir) + module_hash = module_hash.split()[2] + + # Build new SRC_URI + proto = uris[module].split(':', 1)[0] + url = uris[module].replace('%s:' % proto, 'gitsm:', 1) + url += ';protocol=%s' % proto + url += ";name=%s" % module + url += ";bareclone=1;nocheckout=1;nobranch=1" + + ld = d.createCopy() + # Not necessary to set SRC_URI, since we're passing the URI to + # Fetch. + #ld.setVar('SRC_URI', url) + ld.setVar('SRCREV_%s' % module, module_hash) + + # Workaround for issues with SRCPV/SRCREV_FORMAT errors + # error refer to 'multiple' repositories. Only the repository + # in the original SRC_URI actually matters... + ld.setVar('SRCPV', d.getVar('SRCPV')) + ld.setVar('SRCREV_FORMAT', module) + + newfetch = Fetch([url], ld, cache=False) + newfetch.download() + local_paths[module] = newfetch.localpath(url) + + # Correct the submodule references to the local download version... + runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.clonedir) + + symlink_path = os.path.join(ud.clonedir, 'modules', paths[module]) + if not os.path.exists(symlink_path): + try: + os.makedirs(os.path.dirname(symlink_path), exist_ok=True) + except OSError: + pass + os.symlink(local_paths[module], symlink_path) + + return True + + def need_update(self, ud, d): + main_repo_needs_update = Git.need_update(self, ud, d) + + # First check that the main repository has enough history fetched. If it doesn't, then we don't + # even have the .gitmodules and gitlinks for the submodules to attempt asking whether the + # submodules' histories are recent enough. + if main_repo_needs_update: + return True + + # Now check that the submodule histories are new enough. The git-submodule command doesn't have + # any clean interface for doing this aside from just attempting the checkout (with network + # fetched disabled). + return not self.update_submodules(ud, d) def download(self, ud, d): Git.download(self, ud, d) if not ud.shallow or ud.localpath != ud.fullshallow: - submodules = self.uses_submodules(ud, d, ud.clonedir) - if submodules: - self.update_submodules(ud, d) + self.update_submodules(ud, d) + + def copy_submodules(self, submodules, ud, destdir, d): + if ud.bareclone: + repo_conf = destdir + else: + repo_conf = os.path.join(destdir, '.git') + + if submodules and not os.path.exists(os.path.join(repo_conf, 'modules')): + os.mkdir(os.path.join(repo_conf, 'modules')) + + for module, md in submodules.items(): + srcpath = os.path.join(ud.clonedir, 'modules', md['path']) + modpath = os.path.join(repo_conf, 'modules', md['path']) + + if os.path.exists(srcpath): + if os.path.exists(os.path.join(srcpath, '.git')): + srcpath = os.path.join(srcpath, '.git') + + target = modpath + if os.path.exists(modpath): + target = os.path.dirname(modpath) + + os.makedirs(os.path.dirname(target), exist_ok=True) + runfetchcmd("cp -fpLR %s %s" % (srcpath, target), d) + elif os.path.exists(modpath): + # Module already exists, likely unpacked from a shallow mirror clone + pass + else: + # This is fatal, as we do NOT want git-submodule to hit the network + raise bb.fetch2.FetchError('Submodule %s does not exist in %s or %s.' % (module, srcpath, modpath)) def clone_shallow_local(self, ud, dest, d): super(GitSM, self).clone_shallow_local(ud, dest, d) - runfetchcmd('cp -fpPRH "%s/modules" "%s/"' % (ud.clonedir, os.path.join(dest, '.git')), d) + # Copy over the submodules' fetched histories too. + repo_conf = os.path.join(dest, '.git') + + submodules = [] + for name in ud.names: + try: + gitmodules = runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revision), d, quiet=True, workdir=dest) + except: + # No submodules to update + continue + + submodules = self.parse_gitmodules(gitmodules) + self.copy_submodules(submodules, ud, dest, d) def unpack(self, ud, destdir, d): Git.unpack(self, ud, destdir, d) - if self.uses_submodules(ud, d, ud.destdir): - runfetchcmd(ud.basecmd + " checkout " + ud.revisions[ud.names[0]], d, workdir=ud.destdir) - runfetchcmd(ud.basecmd + " submodule update --init --recursive", d, workdir=ud.destdir) + # Copy over the submodules' fetched histories too. + if ud.bareclone: + repo_conf = ud.destdir + else: + repo_conf = os.path.join(ud.destdir, '.git') + + update_submodules = False + paths = {} + uris = {} + local_paths = {} + for name in ud.names: + try: + gitmodules = runfetchcmd("%s show HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) + except: + # No submodules to update + continue + + submodules = self.parse_gitmodules(gitmodules) + self.copy_submodules(submodules, ud, ud.destdir, d) + + submodules_queue = [(module, os.path.join(repo_conf, 'modules', md['path'])) for module, md in submodules.items()] + while len(submodules_queue) != 0: + module, modpath = submodules_queue.pop() + + # add submodule children recursively + try: + gitmodules = runfetchcmd("%s show HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) + for m, md in self.parse_gitmodules(gitmodules).items(): + submodules_queue.append([m, os.path.join(modpath, 'modules', md['path'])]) + except: + # no children + pass + + + # There are submodules to update + update_submodules = True + + # Determine (from the submodule) the correct url to reference + try: + output = runfetchcmd("%(basecmd)s config remote.origin.url" % {'basecmd': ud.basecmd}, d, workdir=modpath) + except bb.fetch2.FetchError as e: + # No remote url defined in this submodule + continue + + local_paths[module] = output + + # Setup the local URL properly (like git submodule init or sync would do...) + runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.destdir) + + # Ensure the submodule repository is NOT set to bare, since we're checking it out... + runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=modpath) + + if update_submodules: + # Run submodule update, this sets up the directories -- without touching the config + runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) diff --git a/poky/bitbake/lib/bb/fetch2/hg.py b/poky/bitbake/lib/bb/fetch2/hg.py index d0857e63f..936d04311 100644 --- a/poky/bitbake/lib/bb/fetch2/hg.py +++ b/poky/bitbake/lib/bb/fetch2/hg.py @@ -80,7 +80,7 @@ class Hg(FetchMethod): ud.fullmirror = os.path.join(d.getVar("DL_DIR"), mirrortarball) ud.mirrortarballs = [mirrortarball] - hgdir = d.getVar("HGDIR") or (d.getVar("DL_DIR") + "/hg/") + hgdir = d.getVar("HGDIR") or (d.getVar("DL_DIR") + "/hg") ud.pkgdir = os.path.join(hgdir, hgsrcname) ud.moddir = os.path.join(ud.pkgdir, ud.module) ud.localfile = ud.moddir diff --git a/poky/bitbake/lib/bb/fetch2/osc.py b/poky/bitbake/lib/bb/fetch2/osc.py index 2b4f7d9c1..6c60456b5 100644 --- a/poky/bitbake/lib/bb/fetch2/osc.py +++ b/poky/bitbake/lib/bb/fetch2/osc.py @@ -32,8 +32,9 @@ class Osc(FetchMethod): ud.module = ud.parm["module"] # Create paths to osc checkouts + oscdir = d.getVar("OSCDIR") or (d.getVar("DL_DIR") + "/osc") relpath = self._strip_leading_slashes(ud.path) - ud.pkgdir = os.path.join(d.getVar('OSCDIR'), ud.host) + ud.pkgdir = os.path.join(oscdir, ud.host) ud.moddir = os.path.join(ud.pkgdir, relpath, ud.module) if 'rev' in ud.parm: @@ -54,7 +55,7 @@ class Osc(FetchMethod): command is "fetch", "update", "info" """ - basecmd = d.expand('${FETCHCMD_osc}') + basecmd = d.getVar("FETCHCMD_osc") or "/usr/bin/env osc" proto = ud.parm.get('protocol', 'ocs') diff --git a/poky/bitbake/lib/bb/fetch2/perforce.py b/poky/bitbake/lib/bb/fetch2/perforce.py index 3debad59f..903a8e61a 100644 --- a/poky/bitbake/lib/bb/fetch2/perforce.py +++ b/poky/bitbake/lib/bb/fetch2/perforce.py @@ -43,13 +43,9 @@ class Perforce(FetchMethod): provided by the env, use it. If P4PORT is specified by the recipe, use its values, which may override the settings in P4CONFIG. """ - ud.basecmd = d.getVar('FETCHCMD_p4') - if not ud.basecmd: - ud.basecmd = "/usr/bin/env p4" + ud.basecmd = d.getVar("FETCHCMD_p4") or "/usr/bin/env p4" - ud.dldir = d.getVar('P4DIR') - if not ud.dldir: - ud.dldir = '%s/%s' % (d.getVar('DL_DIR'), 'p4') + ud.dldir = d.getVar("P4DIR") or (d.getVar("DL_DIR") + "/p4") path = ud.url.split('://')[1] path = path.split(';')[0] diff --git a/poky/bitbake/lib/bb/fetch2/repo.py b/poky/bitbake/lib/bb/fetch2/repo.py index c22d9b557..8c7e81853 100644 --- a/poky/bitbake/lib/bb/fetch2/repo.py +++ b/poky/bitbake/lib/bb/fetch2/repo.py @@ -45,6 +45,8 @@ class Repo(FetchMethod): "master". """ + ud.basecmd = d.getVar("FETCHCMD_repo") or "/usr/bin/env repo" + ud.proto = ud.parm.get('protocol', 'git') ud.branch = ud.parm.get('branch', 'master') ud.manifest = ud.parm.get('manifest', 'default.xml') @@ -60,8 +62,8 @@ class Repo(FetchMethod): logger.debug(1, "%s already exists (or was stashed). Skipping repo init / sync.", ud.localpath) return + repodir = d.getVar("REPODIR") or (d.getVar("DL_DIR") + "/repo") gitsrcname = "%s%s" % (ud.host, ud.path.replace("/", ".")) - repodir = d.getVar("REPODIR") or os.path.join(d.getVar("DL_DIR"), "repo") codir = os.path.join(repodir, gitsrcname, ud.manifest) if ud.user: @@ -72,11 +74,11 @@ class Repo(FetchMethod): repodir = os.path.join(codir, "repo") bb.utils.mkdirhier(repodir) if not os.path.exists(os.path.join(repodir, ".repo")): - bb.fetch2.check_network_access(d, "repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url) - runfetchcmd("repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), d, workdir=repodir) + bb.fetch2.check_network_access(d, "%s init -m %s -b %s -u %s://%s%s%s" % (ud.basecmd, ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url) + runfetchcmd("%s init -m %s -b %s -u %s://%s%s%s" % (ud.basecmd, ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), d, workdir=repodir) - bb.fetch2.check_network_access(d, "repo sync %s" % ud.url, ud.url) - runfetchcmd("repo sync", d, workdir=repodir) + bb.fetch2.check_network_access(d, "%s sync %s" % (ud.basecmd, ud.url), ud.url) + runfetchcmd("%s sync" % ud.basecmd, d, workdir=repodir) scmdata = ud.parm.get("scmdata", "") if scmdata == "keep": diff --git a/poky/bitbake/lib/bb/fetch2/svn.py b/poky/bitbake/lib/bb/fetch2/svn.py index 3f172eec9..9dcf3eb09 100644 --- a/poky/bitbake/lib/bb/fetch2/svn.py +++ b/poky/bitbake/lib/bb/fetch2/svn.py @@ -49,7 +49,7 @@ class Svn(FetchMethod): if not "module" in ud.parm: raise MissingParameterError('module', ud.url) - ud.basecmd = d.getVar('FETCHCMD_svn') + ud.basecmd = d.getVar("FETCHCMD_svn") or "/usr/bin/env svn --non-interactive --trust-server-cert" ud.module = ud.parm["module"] @@ -59,9 +59,13 @@ class Svn(FetchMethod): ud.path_spec = ud.parm["path_spec"] # Create paths to svn checkouts + svndir = d.getVar("SVNDIR") or (d.getVar("DL_DIR") + "/svn") relpath = self._strip_leading_slashes(ud.path) - ud.pkgdir = os.path.join(d.expand('${SVNDIR}'), ud.host, relpath) + ud.pkgdir = os.path.join(svndir, ud.host, relpath) ud.moddir = os.path.join(ud.pkgdir, ud.module) + # Protects the repository from concurrent updates, e.g. from two + # recipes fetching different revisions at the same time + ud.svnlock = os.path.join(ud.pkgdir, "svn.lock") ud.setup_revisions(d) @@ -122,35 +126,40 @@ class Svn(FetchMethod): logger.debug(2, "Fetch: checking for module directory '" + ud.moddir + "'") - if os.access(os.path.join(ud.moddir, '.svn'), os.R_OK): - svnupdatecmd = self._buildsvncommand(ud, d, "update") - logger.info("Update " + ud.url) - # We need to attempt to run svn upgrade first in case its an older working format - try: - runfetchcmd(ud.basecmd + " upgrade", d, workdir=ud.moddir) - except FetchError: - pass - logger.debug(1, "Running %s", svnupdatecmd) - bb.fetch2.check_network_access(d, svnupdatecmd, ud.url) - runfetchcmd(svnupdatecmd, d, workdir=ud.moddir) - else: - svnfetchcmd = self._buildsvncommand(ud, d, "fetch") - logger.info("Fetch " + ud.url) - # check out sources there - bb.utils.mkdirhier(ud.pkgdir) - logger.debug(1, "Running %s", svnfetchcmd) - bb.fetch2.check_network_access(d, svnfetchcmd, ud.url) - runfetchcmd(svnfetchcmd, d, workdir=ud.pkgdir) - - scmdata = ud.parm.get("scmdata", "") - if scmdata == "keep": - tar_flags = "" - else: - tar_flags = "--exclude='.svn'" + lf = bb.utils.lockfile(ud.svnlock) + + try: + if os.access(os.path.join(ud.moddir, '.svn'), os.R_OK): + svnupdatecmd = self._buildsvncommand(ud, d, "update") + logger.info("Update " + ud.url) + # We need to attempt to run svn upgrade first in case its an older working format + try: + runfetchcmd(ud.basecmd + " upgrade", d, workdir=ud.moddir) + except FetchError: + pass + logger.debug(1, "Running %s", svnupdatecmd) + bb.fetch2.check_network_access(d, svnupdatecmd, ud.url) + runfetchcmd(svnupdatecmd, d, workdir=ud.moddir) + else: + svnfetchcmd = self._buildsvncommand(ud, d, "fetch") + logger.info("Fetch " + ud.url) + # check out sources there + bb.utils.mkdirhier(ud.pkgdir) + logger.debug(1, "Running %s", svnfetchcmd) + bb.fetch2.check_network_access(d, svnfetchcmd, ud.url) + runfetchcmd(svnfetchcmd, d, workdir=ud.pkgdir) + + scmdata = ud.parm.get("scmdata", "") + if scmdata == "keep": + tar_flags = "" + else: + tar_flags = "--exclude='.svn'" - # tar them up to a defined filename - runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.path_spec), d, - cleanup=[ud.localpath], workdir=ud.pkgdir) + # tar them up to a defined filename + runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.path_spec), d, + cleanup=[ud.localpath], workdir=ud.pkgdir) + finally: + bb.utils.unlockfile(lf) def clean(self, ud, d): """ Clean SVN specific files and dirs """ diff --git a/poky/bitbake/lib/bb/msg.py b/poky/bitbake/lib/bb/msg.py index f1723be79..96f077ec4 100644 --- a/poky/bitbake/lib/bb/msg.py +++ b/poky/bitbake/lib/bb/msg.py @@ -40,6 +40,7 @@ class BBLogFormatter(logging.Formatter): VERBOSE = logging.INFO - 1 NOTE = logging.INFO PLAIN = logging.INFO + 1 + VERBNOTE = logging.INFO + 2 ERROR = logging.ERROR WARNING = logging.WARNING CRITICAL = logging.CRITICAL @@ -51,6 +52,7 @@ class BBLogFormatter(logging.Formatter): VERBOSE: 'NOTE', NOTE : 'NOTE', PLAIN : '', + VERBNOTE: 'NOTE', WARNING : 'WARNING', ERROR : 'ERROR', CRITICAL: 'ERROR', @@ -66,6 +68,7 @@ class BBLogFormatter(logging.Formatter): VERBOSE : BASECOLOR, NOTE : BASECOLOR, PLAIN : BASECOLOR, + VERBNOTE: BASECOLOR, WARNING : YELLOW, ERROR : RED, CRITICAL: RED, diff --git a/poky/bitbake/lib/bb/parse/ast.py b/poky/bitbake/lib/bb/parse/ast.py index 6690dc51c..9d20c323f 100644 --- a/poky/bitbake/lib/bb/parse/ast.py +++ b/poky/bitbake/lib/bb/parse/ast.py @@ -343,30 +343,31 @@ def runAnonFuncs(d): def finalize(fn, d, variant = None): saved_handlers = bb.event.get_handlers().copy() + try: + for var in d.getVar('__BBHANDLERS', False) or []: + # try to add the handler + handlerfn = d.getVarFlag(var, "filename", False) + if not handlerfn: + bb.fatal("Undefined event handler function '%s'" % var) + handlerln = int(d.getVarFlag(var, "lineno", False)) + bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) - for var in d.getVar('__BBHANDLERS', False) or []: - # try to add the handler - handlerfn = d.getVarFlag(var, "filename", False) - if not handlerfn: - bb.fatal("Undefined event handler function '%s'" % var) - handlerln = int(d.getVarFlag(var, "lineno", False)) - bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) - - bb.event.fire(bb.event.RecipePreFinalise(fn), d) + bb.event.fire(bb.event.RecipePreFinalise(fn), d) - bb.data.expandKeys(d) - runAnonFuncs(d) + bb.data.expandKeys(d) + runAnonFuncs(d) - tasklist = d.getVar('__BBTASKS', False) or [] - bb.event.fire(bb.event.RecipeTaskPreProcess(fn, list(tasklist)), d) - bb.build.add_tasks(tasklist, d) + tasklist = d.getVar('__BBTASKS', False) or [] + bb.event.fire(bb.event.RecipeTaskPreProcess(fn, list(tasklist)), d) + bb.build.add_tasks(tasklist, d) - bb.parse.siggen.finalise(fn, d, variant) + bb.parse.siggen.finalise(fn, d, variant) - d.setVar('BBINCLUDED', bb.parse.get_file_depends(d)) + d.setVar('BBINCLUDED', bb.parse.get_file_depends(d)) - bb.event.fire(bb.event.RecipeParsed(fn), d) - bb.event.set_handlers(saved_handlers) + bb.event.fire(bb.event.RecipeParsed(fn), d) + finally: + bb.event.set_handlers(saved_handlers) def _create_variants(datastores, names, function, onlyfinalise): def create_variant(name, orig_d, arg = None): diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py index 480a851ef..4d5d87679 100644 --- a/poky/bitbake/lib/bb/runqueue.py +++ b/poky/bitbake/lib/bb/runqueue.py @@ -94,13 +94,13 @@ class RunQueueStats: self.active = self.active - 1 self.failed = self.failed + 1 - def taskCompleted(self, number = 1): - self.active = self.active - number - self.completed = self.completed + number + def taskCompleted(self): + self.active = self.active - 1 + self.completed = self.completed + 1 - def taskSkipped(self, number = 1): - self.active = self.active + number - self.skipped = self.skipped + number + def taskSkipped(self): + self.active = self.active + 1 + self.skipped = self.skipped + 1 def taskActive(self): self.active = self.active + 1 @@ -134,6 +134,7 @@ class RunQueueScheduler(object): self.prio_map = [self.rqdata.runtaskentries.keys()] self.buildable = [] + self.skip_maxthread = {} self.stamps = {} for tid in self.rqdata.runtaskentries: (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) @@ -150,8 +151,25 @@ class RunQueueScheduler(object): self.buildable = [x for x in self.buildable if x not in self.rq.runq_running] if not self.buildable: return None + + # Filter out tasks that have a max number of threads that have been exceeded + skip_buildable = {} + for running in self.rq.runq_running.difference(self.rq.runq_complete): + rtaskname = taskname_from_tid(running) + if rtaskname not in self.skip_maxthread: + self.skip_maxthread[rtaskname] = self.rq.cfgData.getVarFlag(rtaskname, "number_threads") + if not self.skip_maxthread[rtaskname]: + continue + if rtaskname in skip_buildable: + skip_buildable[rtaskname] += 1 + else: + skip_buildable[rtaskname] = 1 + if len(self.buildable) == 1: tid = self.buildable[0] + taskname = taskname_from_tid(tid) + if taskname in skip_buildable and skip_buildable[taskname] >= int(self.skip_maxthread[taskname]): + return None stamp = self.stamps[tid] if stamp not in self.rq.build_stamps.values(): return tid @@ -164,6 +182,9 @@ class RunQueueScheduler(object): best = None bestprio = None for tid in self.buildable: + taskname = taskname_from_tid(tid) + if taskname in skip_buildable and skip_buildable[taskname] >= int(self.skip_maxthread[taskname]): + continue prio = self.rev_prio_map[tid] if bestprio is None or bestprio > prio: stamp = self.stamps[tid] @@ -178,7 +199,7 @@ class RunQueueScheduler(object): """ Return the id of the task we should build next """ - if self.rq.stats.active < self.rq.number_tasks: + if self.rq.can_start_task(): return self.next_buildable_task() def newbuildable(self, task): @@ -581,6 +602,19 @@ class RunQueueData: if t in taskData[mc].taskentries: depends.add(t) + def add_mc_dependencies(mc, tid): + mcdeps = taskData[mc].get_mcdepends() + for dep in mcdeps: + mcdependency = dep.split(':') + pn = mcdependency[3] + frommc = mcdependency[1] + mcdep = mcdependency[2] + deptask = mcdependency[4] + if mc == frommc: + fn = taskData[mcdep].build_targets[pn][0] + newdep = '%s:%s' % (fn,deptask) + taskData[mc].taskentries[tid].tdepends.append(newdep) + for mc in taskData: for tid in taskData[mc].taskentries: @@ -597,12 +631,16 @@ class RunQueueData: if fn in taskData[mc].failed_fns: continue + # We add multiconfig dependencies before processing internal task deps (tdepends) + if 'mcdepends' in task_deps and taskname in task_deps['mcdepends']: + add_mc_dependencies(mc, tid) + # Resolve task internal dependencies # # e.g. addtask before X after Y for t in taskData[mc].taskentries[tid].tdepends: - (_, depfn, deptaskname, _) = split_tid_mcfn(t) - depends.add(build_tid(mc, depfn, deptaskname)) + (depmc, depfn, deptaskname, _) = split_tid_mcfn(t) + depends.add(build_tid(depmc, depfn, deptaskname)) # Resolve 'deptask' dependencies # @@ -1032,7 +1070,7 @@ class RunQueueData: msg += "\n%s has unique rprovides:\n %s" % (provfn, "\n ".join(rprovide_results[provfn] - commonrprovs)) if self.warn_multi_bb: - logger.warning(msg) + logger.verbnote(msg) else: logger.error(msg) @@ -1040,7 +1078,7 @@ class RunQueueData: # Create a whitelist usable by the stamp checks self.stampfnwhitelist = {} - for mc in self.taskData: + for mc in self.taskData: self.stampfnwhitelist[mc] = [] for entry in self.stampwhitelist.split(): if entry not in self.taskData[mc].build_targets: @@ -1072,7 +1110,7 @@ class RunQueueData: bb.debug(1, "Task %s is marked nostamp, cannot invalidate this task" % taskname) else: logger.verbose("Invalidate task %s, %s", taskname, fn) - bb.parse.siggen.invalidate_task(taskname, self.dataCaches[mc], fn) + bb.parse.siggen.invalidate_task(taskname, self.dataCaches[mc], taskfn) self.init_progress_reporter.next_stage() @@ -1717,6 +1755,10 @@ class RunQueueExecute: valid = bb.utils.better_eval(call, locs) return valid + def can_start_task(self): + can_start = self.stats.active < self.number_tasks + return can_start + class RunQueueExecuteDummy(RunQueueExecute): def __init__(self, rq): self.rq = rq @@ -1790,13 +1832,14 @@ class RunQueueExecuteTasks(RunQueueExecute): bb.build.del_stamp(taskname, self.rqdata.dataCaches[mc], taskfn) self.rq.scenequeue_covered.remove(tid) - toremove = covered_remove + toremove = covered_remove | self.rq.scenequeue_notcovered for task in toremove: logger.debug(1, 'Not skipping task %s due to setsceneverify', task) while toremove: covered_remove = [] for task in toremove: - removecoveredtask(task) + if task in self.rq.scenequeue_covered: + removecoveredtask(task) for deptask in self.rqdata.runtaskentries[task].depends: if deptask not in self.rq.scenequeue_covered: continue @@ -1866,14 +1909,13 @@ class RunQueueExecuteTasks(RunQueueExecute): continue if revdep in self.runq_buildable: continue - alldeps = 1 + alldeps = True for dep in self.rqdata.runtaskentries[revdep].depends: if dep not in self.runq_complete: - alldeps = 0 - if alldeps == 1: + alldeps = False + break + if alldeps: self.setbuildable(revdep) - fn = fn_from_tid(revdep) - taskname = taskname_from_tid(revdep) logger.debug(1, "Marking task %s as buildable", revdep) def task_complete(self, task): @@ -1897,8 +1939,8 @@ class RunQueueExecuteTasks(RunQueueExecute): self.setbuildable(task) bb.event.fire(runQueueTaskSkipped(task, self.stats, self.rq, reason), self.cfgData) self.task_completeoutright(task) - self.stats.taskCompleted() self.stats.taskSkipped() + self.stats.taskCompleted() def execute(self): """ @@ -2008,7 +2050,7 @@ class RunQueueExecuteTasks(RunQueueExecute): self.build_stamps2.append(self.build_stamps[task]) self.runq_running.add(task) self.stats.taskActive() - if self.stats.active < self.number_tasks: + if self.can_start_task(): return True if self.stats.active > 0: @@ -2063,6 +2105,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): # If we don't have any setscene functions, skip this step if len(self.rqdata.runq_setscene_tids) == 0: rq.scenequeue_covered = set() + rq.scenequeue_notcovered = set() rq.state = runQueueRunInit return @@ -2278,10 +2321,15 @@ class RunQueueExecuteScenequeue(RunQueueExecute): sq_hash.append(self.rqdata.runtaskentries[tid].hash) sq_taskname.append(taskname) sq_task.append(tid) + + self.cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent)) + call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.data } valid = bb.utils.better_eval(call, locs) + self.cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT") + valid_new = stamppresent for v in valid: valid_new.append(sq_task[v]) @@ -2343,8 +2391,8 @@ class RunQueueExecuteScenequeue(RunQueueExecute): def task_failoutright(self, task): self.runq_running.add(task) self.runq_buildable.add(task) - self.stats.taskCompleted() self.stats.taskSkipped() + self.stats.taskCompleted() self.scenequeue_notcovered.add(task) self.scenequeue_updatecounters(task, True) @@ -2352,8 +2400,8 @@ class RunQueueExecuteScenequeue(RunQueueExecute): self.runq_running.add(task) self.runq_buildable.add(task) self.task_completeoutright(task) - self.stats.taskCompleted() self.stats.taskSkipped() + self.stats.taskCompleted() def execute(self): """ @@ -2363,7 +2411,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): self.rq.read_workers() task = None - if self.stats.active < self.number_tasks: + if self.can_start_task(): # Find the next setscene to run for nexttask in self.rqdata.runq_setscene_tids: if nexttask in self.runq_buildable and nexttask not in self.runq_running and self.stamps[nexttask] not in self.build_stamps.values(): @@ -2422,7 +2470,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): self.build_stamps2.append(self.build_stamps[task]) self.runq_running.add(task) self.stats.taskActive() - if self.stats.active < self.number_tasks: + if self.can_start_task(): return True if self.stats.active > 0: diff --git a/poky/bitbake/lib/bb/server/process.py b/poky/bitbake/lib/bb/server/process.py index 0749b5bc3..42d79079a 100644 --- a/poky/bitbake/lib/bb/server/process.py +++ b/poky/bitbake/lib/bb/server/process.py @@ -377,11 +377,12 @@ class BitBakeServer(object): if os.path.exists(sockname): os.unlink(sockname) + # Place the log in the builddirectory alongside the lock file + logfile = os.path.join(os.path.dirname(self.bitbake_lock.name), "bitbake-cookerdaemon.log") + self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) # AF_UNIX has path length issues so chdir here to workaround cwd = os.getcwd() - logfile = os.path.join(cwd, "bitbake-cookerdaemon.log") - try: os.chdir(os.path.dirname(sockname)) self.sock.bind(os.path.basename(sockname)) @@ -394,11 +395,16 @@ class BitBakeServer(object): bb.daemonize.createDaemon(self._startServer, logfile) self.sock.close() self.bitbake_lock.close() + os.close(self.readypipein) ready = ConnectionReader(self.readypipe) r = ready.poll(30) if r: - r = ready.get() + try: + r = ready.get() + except EOFError: + # Trap the child exitting/closing the pipe and error out + r = None if not r or r != "ready": ready.close() bb.error("Unable to start bitbake server") @@ -424,7 +430,6 @@ class BitBakeServer(object): bb.error("Server log for this session (%s):\n%s" % (logfile, "".join(lines))) raise SystemExit(1) ready.close() - os.close(self.readypipein) def _startServer(self): print(self.start_log_format % (os.getpid(), datetime.datetime.now().strftime(self.start_log_datetime_format))) @@ -432,15 +437,11 @@ class BitBakeServer(object): server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) self.configuration.setServerRegIdleCallback(server.register_idle_function) + os.close(self.readypipe) writer = ConnectionWriter(self.readypipein) - try: - self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) - writer.send("ready") - except: - writer.send("fail") - raise - finally: - os.close(self.readypipein) + self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) + writer.send("ready") + writer.close() server.cooker = self.cooker server.server_timeout = self.configuration.server_timeout server.xmlrpcinterface = self.configuration.xmlrpcinterface @@ -455,9 +456,6 @@ def connectProcessServer(sockname, featureset): # AF_UNIX has path length issues so chdir here to workaround cwd = os.getcwd() - readfd = writefd = readfd1 = writefd1 = readfd2 = writefd2 = None - eq = command_chan_recv = command_chan = None - try: try: os.chdir(os.path.dirname(sockname)) @@ -465,6 +463,9 @@ def connectProcessServer(sockname, featureset): finally: os.chdir(cwd) + readfd = writefd = readfd1 = writefd1 = readfd2 = writefd2 = None + eq = command_chan_recv = command_chan = None + # Send an fd for the remote to write events to readfd, writefd = os.pipe() eq = BBUIEventQueue(readfd) diff --git a/poky/bitbake/lib/bb/siggen.py b/poky/bitbake/lib/bb/siggen.py index 5ef82d7be..fdbb2a399 100644 --- a/poky/bitbake/lib/bb/siggen.py +++ b/poky/bitbake/lib/bb/siggen.py @@ -110,42 +110,13 @@ class SignatureGeneratorBasic(SignatureGenerator): ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1') tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d) - taskdeps = {} - basehash = {} + taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, self.basewhitelist, fn) for task in tasklist: - data = lookupcache[task] - - if data is None: - bb.error("Task %s from %s seems to be empty?!" % (task, fn)) - data = '' - - gendeps[task] -= self.basewhitelist - newdeps = gendeps[task] - seen = set() - while newdeps: - nextdeps = newdeps - seen |= nextdeps - newdeps = set() - for dep in nextdeps: - if dep in self.basewhitelist: - continue - gendeps[dep] -= self.basewhitelist - newdeps |= gendeps[dep] - newdeps -= seen - - alldeps = sorted(seen) - for dep in alldeps: - data = data + dep - var = lookupcache[dep] - if var is not None: - data = data + str(var) - datahash = hashlib.md5(data.encode("utf-8")).hexdigest() k = fn + "." + task - if not ignore_mismatch and k in self.basehash and self.basehash[k] != datahash: - bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (k, self.basehash[k], datahash)) - self.basehash[k] = datahash - taskdeps[task] = alldeps + if not ignore_mismatch and k in self.basehash and self.basehash[k] != basehash[k]: + bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (k, self.basehash[k], basehash[k])) + self.basehash[k] = basehash[k] self.taskdeps[fn] = taskdeps self.gendeps[fn] = gendeps @@ -193,19 +164,28 @@ class SignatureGeneratorBasic(SignatureGenerator): return taint def get_taskhash(self, fn, task, deps, dataCache): + + mc = '' + if fn.startswith('multiconfig:'): + mc = fn.split(':')[1] k = fn + "." + task + data = dataCache.basetaskhash[k] self.basehash[k] = data self.runtaskdeps[k] = [] self.file_checksum_values[k] = [] recipename = dataCache.pkg_fn[fn] - for dep in sorted(deps, key=clean_basepath): - depname = dataCache.pkg_fn[self.pkgnameextract.search(dep).group('fn')] + pkgname = self.pkgnameextract.search(dep).group('fn') + if mc: + depmc = pkgname.split(':')[1] + if mc != depmc: + continue + depname = dataCache.pkg_fn[pkgname] if not self.rundep_check(fn, recipename, task, dep, depname, dataCache): continue if dep not in self.taskhash: - bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep) + bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?" % dep) data = data + self.taskhash[dep] self.runtaskdeps[k].append(dep) @@ -347,7 +327,7 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic): def stampcleanmask(self, stampbase, fn, taskname, extrainfo): return self.stampfile(stampbase, fn, taskname, extrainfo, clean=True) - + def invalidate_task(self, task, d, fn): bb.note("Tainting hash to force rebuild of task %s, %s" % (fn, task)) bb.build.write_taint(task, d, fn) @@ -362,10 +342,10 @@ def dump_this_task(outfile, d): def init_colors(enable_color): """Initialise colour dict for passing to compare_sigfiles()""" # First set up the colours - colors = {'color_title': '\033[1;37;40m', - 'color_default': '\033[0;37;40m', - 'color_add': '\033[1;32;40m', - 'color_remove': '\033[1;31;40m', + colors = {'color_title': '\033[1m', + 'color_default': '\033[0m', + 'color_add': '\033[0;32m', + 'color_remove': '\033[0;31m', } # Leave all keys present but clear the values if not enable_color: @@ -636,7 +616,7 @@ def compare_sigfiles(a, b, recursecb=None, color=False, collapsed=False): if collapsed: output.extend(recout) else: - # If a dependent hash changed, might as well print the line above and then defer to the changes in + # If a dependent hash changed, might as well print the line above and then defer to the changes in # that hash since in all likelyhood, they're the same changes this task also saw. output = [output[-1]] + recout diff --git a/poky/bitbake/lib/bb/taskdata.py b/poky/bitbake/lib/bb/taskdata.py index 0ea6c0bfd..94e822c48 100644 --- a/poky/bitbake/lib/bb/taskdata.py +++ b/poky/bitbake/lib/bb/taskdata.py @@ -70,6 +70,8 @@ class TaskData: self.skiplist = skiplist + self.mcdepends = [] + def add_tasks(self, fn, dataCache): """ Add tasks for a given fn to the database @@ -88,6 +90,13 @@ class TaskData: self.add_extra_deps(fn, dataCache) + def add_mcdepends(task): + for dep in task_deps['mcdepends'][task].split(): + if len(dep.split(':')) != 5: + bb.msg.fatal("TaskData", "Error for %s:%s[%s], multiconfig dependency %s does not contain exactly four ':' characters.\n Task '%s' should be specified in the form 'multiconfig:fromMC:toMC:packagename:task'" % (fn, task, 'mcdepends', dep, 'mcdepends')) + if dep not in self.mcdepends: + self.mcdepends.append(dep) + # Common code for dep_name/depends = 'depends'/idepends and 'rdepends'/irdepends def handle_deps(task, dep_name, depends, seen): if dep_name in task_deps and task in task_deps[dep_name]: @@ -110,16 +119,20 @@ class TaskData: parentids = [] for dep in task_deps['parents'][task]: if dep not in task_deps['tasks']: - bb.debug(2, "Not adding dependeny of %s on %s since %s does not exist" % (task, dep, dep)) + bb.debug(2, "Not adding dependency of %s on %s since %s does not exist" % (task, dep, dep)) continue parentid = "%s:%s" % (fn, dep) parentids.append(parentid) self.taskentries[tid].tdepends.extend(parentids) + # Touch all intertask dependencies handle_deps(task, 'depends', self.taskentries[tid].idepends, self.seen_build_target) handle_deps(task, 'rdepends', self.taskentries[tid].irdepends, self.seen_run_target) + if 'mcdepends' in task_deps and task in task_deps['mcdepends']: + add_mcdepends(task) + # Work out build dependencies if not fn in self.depids: dependids = set() @@ -537,6 +550,9 @@ class TaskData: provmap[name] = provider[0] return provmap + def get_mcdepends(self): + return self.mcdepends + def dump_data(self): """ Dump some debug information on the internal data structures diff --git a/poky/bitbake/lib/bb/tests/cooker.py b/poky/bitbake/lib/bb/tests/cooker.py new file mode 100644 index 000000000..2b4423650 --- /dev/null +++ b/poky/bitbake/lib/bb/tests/cooker.py @@ -0,0 +1,83 @@ +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# BitBake Tests for cooker.py +# +# 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., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +import unittest +import tempfile +import os +import bb, bb.cooker +import re +import logging + +# Cooker tests +class CookerTest(unittest.TestCase): + def setUp(self): + # At least one variable needs to be set + self.d = bb.data.init() + topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "testdata/cooker") + self.d.setVar('TOPDIR', topdir) + + def test_CookerCollectFiles_sublayers(self): + '''Test that a sublayer of an existing layer does not trigger + No bb files matched ...''' + + def append_collection(topdir, path, d): + collection = path.split('/')[-1] + pattern = "^" + topdir + "/" + path + "/" + regex = re.compile(pattern) + priority = 5 + + d.setVar('BBFILE_COLLECTIONS', (d.getVar('BBFILE_COLLECTIONS') or "") + " " + collection) + d.setVar('BBFILE_PATTERN_%s' % (collection), pattern) + d.setVar('BBFILE_PRIORITY_%s' % (collection), priority) + + return (collection, pattern, regex, priority) + + topdir = self.d.getVar("TOPDIR") + + # Priorities: list of (collection, pattern, regex, priority) + bbfile_config_priorities = [] + # Order is important for this test, shortest to longest is typical failure case + bbfile_config_priorities.append( append_collection(topdir, 'first', self.d) ) + bbfile_config_priorities.append( append_collection(topdir, 'second', self.d) ) + bbfile_config_priorities.append( append_collection(topdir, 'second/third', self.d) ) + + pkgfns = [ topdir + '/first/recipes/sample1_1.0.bb', + topdir + '/second/recipes/sample2_1.0.bb', + topdir + '/second/third/recipes/sample3_1.0.bb' ] + + class LogHandler(logging.Handler): + def __init__(self): + logging.Handler.__init__(self) + self.logdata = [] + + def emit(self, record): + self.logdata.append(record.getMessage()) + + # Move cooker to use my special logging + logger = bb.cooker.logger + log_handler = LogHandler() + logger.addHandler(log_handler) + collection = bb.cooker.CookerCollectFiles(bbfile_config_priorities) + collection.collection_priorities(pkgfns, self.d) + logger.removeHandler(log_handler) + + # Should be empty (no generated messages) + expected = [] + + self.assertEqual(log_handler.logdata, expected) diff --git a/poky/bitbake/lib/bb/tests/data.py b/poky/bitbake/lib/bb/tests/data.py index a4a9dd30f..db3e2010a 100644 --- a/poky/bitbake/lib/bb/tests/data.py +++ b/poky/bitbake/lib/bb/tests/data.py @@ -281,7 +281,7 @@ class TestConcatOverride(unittest.TestCase): def test_remove(self): self.d.setVar("TEST", "${VAL} ${BAR}") self.d.setVar("TEST_remove", "val") - self.assertEqual(self.d.getVar("TEST"), "bar") + self.assertEqual(self.d.getVar("TEST"), " bar") def test_remove_cleared(self): self.d.setVar("TEST", "${VAL} ${BAR}") @@ -300,7 +300,7 @@ class TestConcatOverride(unittest.TestCase): self.d.setVar("TEST", "${VAL} ${BAR}") self.d.setVar("TEST_remove", "val") self.d.setVar("TEST_TEST", "${TEST} ${TEST}") - self.assertEqual(self.d.getVar("TEST_TEST"), "bar bar") + self.assertEqual(self.d.getVar("TEST_TEST"), " bar bar") def test_empty_remove(self): self.d.setVar("TEST", "") @@ -311,13 +311,25 @@ class TestConcatOverride(unittest.TestCase): self.d.setVar("BAR", "Z") self.d.setVar("TEST", "${BAR}/X Y") self.d.setVar("TEST_remove", "${BAR}/X") - self.assertEqual(self.d.getVar("TEST"), "Y") + self.assertEqual(self.d.getVar("TEST"), " Y") def test_remove_expansion_items(self): self.d.setVar("TEST", "A B C D") self.d.setVar("BAR", "B D") self.d.setVar("TEST_remove", "${BAR}") - self.assertEqual(self.d.getVar("TEST"), "A C") + self.assertEqual(self.d.getVar("TEST"), "A C ") + + def test_remove_preserve_whitespace(self): + # When the removal isn't active, the original value should be preserved + self.d.setVar("TEST", " A B") + self.d.setVar("TEST_remove", "C") + self.assertEqual(self.d.getVar("TEST"), " A B") + + def test_remove_preserve_whitespace2(self): + # When the removal is active preserve the whitespace + self.d.setVar("TEST", " A B") + self.d.setVar("TEST_remove", "B") + self.assertEqual(self.d.getVar("TEST"), " A ") class TestOverrides(unittest.TestCase): def setUp(self): @@ -374,6 +386,15 @@ class TestOverrides(unittest.TestCase): self.d.setVar("OVERRIDES", "foo:bar:some_val") self.assertEqual(self.d.getVar("TEST"), "testvalue3") + def test_remove_with_override(self): + self.d.setVar("TEST_bar", "testvalue2") + self.d.setVar("TEST_some_val", "testvalue3 testvalue5") + self.d.setVar("TEST_some_val_remove", "testvalue3") + self.d.setVar("TEST_foo", "testvalue4") + self.d.setVar("OVERRIDES", "foo:bar:some_val") + self.assertEqual(self.d.getVar("TEST"), " testvalue5") + + class TestKeyExpansion(unittest.TestCase): def setUp(self): self.d = bb.data.init() @@ -443,6 +464,54 @@ class Contains(unittest.TestCase): self.assertFalse(bb.utils.contains_any("SOMEFLAG", "x y z", True, False, self.d)) +class TaskHash(unittest.TestCase): + def test_taskhashes(self): + def gettask_bashhash(taskname, d): + tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d) + taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, set(), "somefile") + bb.warn(str(lookupcache)) + return basehash["somefile." + taskname] + + d = bb.data.init() + d.setVar("__BBTASKS", ["mytask"]) + d.setVar("__exportlist", []) + d.setVar("mytask", "${MYCOMMAND}") + d.setVar("MYCOMMAND", "${VAR}; foo; bar; exit 0") + d.setVar("VAR", "val") + orighash = gettask_bashhash("mytask", d) + + # Changing a variable should change the hash + d.setVar("VAR", "val2") + nexthash = gettask_bashhash("mytask", d) + self.assertNotEqual(orighash, nexthash) + + d.setVar("VAR", "val") + # Adding an inactive removal shouldn't change the hash + d.setVar("BAR", "notbar") + d.setVar("MYCOMMAND_remove", "${BAR}") + nexthash = gettask_bashhash("mytask", d) + self.assertEqual(orighash, nexthash) + + # Adding an active removal should change the hash + d.setVar("BAR", "bar;") + nexthash = gettask_bashhash("mytask", d) + self.assertNotEqual(orighash, nexthash) + + # Setup an inactive contains() + d.setVar("VAR", "${@bb.utils.contains('VAR2', 'A', 'val', '', d)}") + orighash = gettask_bashhash("mytask", d) + + # Activate the contains() and the hash should change + d.setVar("VAR2", "A") + nexthash = gettask_bashhash("mytask", d) + self.assertNotEqual(orighash, nexthash) + + # The contains should be inactive but even though VAR2 has a + # different value the hash should match the original + d.setVar("VAR2", "B") + nexthash = gettask_bashhash("mytask", d) + self.assertEqual(orighash, nexthash) + class Serialize(unittest.TestCase): def test_serialize(self): diff --git a/poky/bitbake/lib/bb/tests/fetch.py b/poky/bitbake/lib/bb/tests/fetch.py index 68eb38833..6848095cf 100644 --- a/poky/bitbake/lib/bb/tests/fetch.py +++ b/poky/bitbake/lib/bb/tests/fetch.py @@ -402,6 +402,12 @@ class MirrorUriTest(FetcherTest): : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/MIRRORNAME;protocol=http") : "git://somewhere.org/somedir/git.invalid.infradead.org.foo.mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", + ("http://somewhere.org/somedir1/somedir2/somefile_1.2.3.tar.gz", "http://.*/.*", "http://somewhere2.org") + : "http://somewhere2.org/somefile_1.2.3.tar.gz", + ("http://somewhere.org/somedir1/somedir2/somefile_1.2.3.tar.gz", "http://.*/.*", "http://somewhere2.org/") + : "http://somewhere2.org/somefile_1.2.3.tar.gz", + ("git://someserver.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master", "git://someserver.org/bitbake;branch=master", "git://git.openembedded.org/bitbake;protocol=http") + : "git://git.openembedded.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master;protocol=http", #Renaming files doesn't work #("http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz") : "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz" @@ -457,6 +463,124 @@ class MirrorUriTest(FetcherTest): 'https://BBBB/B/B/B/bitbake/bitbake-1.0.tar.gz', 'http://AAAA/A/A/A/B/B/bitbake/bitbake-1.0.tar.gz']) + +class GitDownloadDirectoryNamingTest(FetcherTest): + def setUp(self): + super(GitDownloadDirectoryNamingTest, self).setUp() + self.recipe_url = "git://git.openembedded.org/bitbake" + self.recipe_dir = "git.openembedded.org.bitbake" + self.mirror_url = "git://github.com/openembedded/bitbake.git" + self.mirror_dir = "github.com.openembedded.bitbake.git" + + self.d.setVar('SRCREV', '82ea737a0b42a8b53e11c9cde141e9e9c0bd8c40') + + def setup_mirror_rewrite(self): + self.d.setVar("PREMIRRORS", self.recipe_url + " " + self.mirror_url + " \n") + + @skipIfNoNetwork() + def test_that_directory_is_named_after_recipe_url_when_no_mirroring_is_used(self): + self.setup_mirror_rewrite() + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir + "/git2") + self.assertIn(self.recipe_dir, dir) + + @skipIfNoNetwork() + def test_that_directory_exists_for_mirrored_url_and_recipe_url_when_mirroring_is_used(self): + self.setup_mirror_rewrite() + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir + "/git2") + self.assertIn(self.mirror_dir, dir) + self.assertIn(self.recipe_dir, dir) + + @skipIfNoNetwork() + def test_that_recipe_directory_and_mirrored_directory_exists_when_mirroring_is_used_and_the_mirrored_directory_already_exists(self): + self.setup_mirror_rewrite() + fetcher = bb.fetch.Fetch([self.mirror_url], self.d) + fetcher.download() + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir + "/git2") + self.assertIn(self.mirror_dir, dir) + self.assertIn(self.recipe_dir, dir) + + +class TarballNamingTest(FetcherTest): + def setUp(self): + super(TarballNamingTest, self).setUp() + self.recipe_url = "git://git.openembedded.org/bitbake" + self.recipe_tarball = "git2_git.openembedded.org.bitbake.tar.gz" + self.mirror_url = "git://github.com/openembedded/bitbake.git" + self.mirror_tarball = "git2_github.com.openembedded.bitbake.git.tar.gz" + + self.d.setVar('BB_GENERATE_MIRROR_TARBALLS', '1') + self.d.setVar('SRCREV', '82ea737a0b42a8b53e11c9cde141e9e9c0bd8c40') + + def setup_mirror_rewrite(self): + self.d.setVar("PREMIRRORS", self.recipe_url + " " + self.mirror_url + " \n") + + @skipIfNoNetwork() + def test_that_the_recipe_tarball_is_created_when_no_mirroring_is_used(self): + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir) + self.assertIn(self.recipe_tarball, dir) + + @skipIfNoNetwork() + def test_that_the_mirror_tarball_is_created_when_mirroring_is_used(self): + self.setup_mirror_rewrite() + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir) + self.assertIn(self.mirror_tarball, dir) + + +class GitShallowTarballNamingTest(FetcherTest): + def setUp(self): + super(GitShallowTarballNamingTest, self).setUp() + self.recipe_url = "git://git.openembedded.org/bitbake" + self.recipe_tarball = "gitshallow_git.openembedded.org.bitbake_82ea737-1_master.tar.gz" + self.mirror_url = "git://github.com/openembedded/bitbake.git" + self.mirror_tarball = "gitshallow_github.com.openembedded.bitbake.git_82ea737-1_master.tar.gz" + + self.d.setVar('BB_GIT_SHALLOW', '1') + self.d.setVar('BB_GENERATE_SHALLOW_TARBALLS', '1') + self.d.setVar('SRCREV', '82ea737a0b42a8b53e11c9cde141e9e9c0bd8c40') + + def setup_mirror_rewrite(self): + self.d.setVar("PREMIRRORS", self.recipe_url + " " + self.mirror_url + " \n") + + @skipIfNoNetwork() + def test_that_the_tarball_is_named_after_recipe_url_when_no_mirroring_is_used(self): + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir) + self.assertIn(self.recipe_tarball, dir) + + @skipIfNoNetwork() + def test_that_the_mirror_tarball_is_created_when_mirroring_is_used(self): + self.setup_mirror_rewrite() + fetcher = bb.fetch.Fetch([self.recipe_url], self.d) + + fetcher.download() + + dir = os.listdir(self.dldir) + self.assertIn(self.mirror_tarball, dir) + + class FetcherLocalTest(FetcherTest): def setUp(self): def touch(fn): @@ -745,27 +869,27 @@ class FetcherNetworkTest(FetcherTest): self.assertRaises(bb.fetch.ParameterError, self.gitfetcher, url, url) @skipIfNoNetwork() - def test_gitfetch_premirror(self): - url1 = "git://git.openembedded.org/bitbake" - url2 = "git://someserver.org/bitbake" + def test_gitfetch_finds_local_tarball_for_mirrored_url_when_previous_downloaded_by_the_recipe_url(self): + recipeurl = "git://git.openembedded.org/bitbake" + mirrorurl = "git://someserver.org/bitbake" self.d.setVar("PREMIRRORS", "git://someserver.org/bitbake git://git.openembedded.org/bitbake \n") - self.gitfetcher(url1, url2) + self.gitfetcher(recipeurl, mirrorurl) @skipIfNoNetwork() - def test_gitfetch_premirror2(self): - url1 = url2 = "git://someserver.org/bitbake" + def test_gitfetch_finds_local_tarball_when_previous_downloaded_from_a_premirror(self): + recipeurl = "git://someserver.org/bitbake" self.d.setVar("PREMIRRORS", "git://someserver.org/bitbake git://git.openembedded.org/bitbake \n") - self.gitfetcher(url1, url2) + self.gitfetcher(recipeurl, recipeurl) @skipIfNoNetwork() - def test_gitfetch_premirror3(self): + def test_gitfetch_finds_local_repository_when_premirror_rewrites_the_recipe_url(self): realurl = "git://git.openembedded.org/bitbake" - dummyurl = "git://someserver.org/bitbake" + recipeurl = "git://someserver.org/bitbake" self.sourcedir = self.unpackdir.replace("unpacked", "sourcemirror.git") os.chdir(self.tempdir) bb.process.run("git clone %s %s 2> /dev/null" % (realurl, self.sourcedir), shell=True) - self.d.setVar("PREMIRRORS", "%s git://%s;protocol=file \n" % (dummyurl, self.sourcedir)) - self.gitfetcher(dummyurl, dummyurl) + self.d.setVar("PREMIRRORS", "%s git://%s;protocol=file \n" % (recipeurl, self.sourcedir)) + self.gitfetcher(recipeurl, recipeurl) @skipIfNoNetwork() def test_git_submodule(self): @@ -832,7 +956,7 @@ class URLHandle(unittest.TestCase): # decodeurl and we need to handle them decodedata = datatable.copy() decodedata.update({ - "http://somesite.net;someparam=1": ('http', 'somesite.net', '', '', '', {'someparam': '1'}), + "http://somesite.net;someparam=1": ('http', 'somesite.net', '/', '', '', {'someparam': '1'}), }) def test_decodeurl(self): @@ -861,12 +985,12 @@ class FetchLatestVersionTest(FetcherTest): ("dtc", "git://git.qemu.org/dtc.git", "65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf", "") : "1.4.0", # combination version pattern - ("sysprof", "git://gitlab.gnome.org/GNOME/sysprof;protocol=https", "cd44ee6644c3641507fb53b8a2a69137f2971219", "") + ("sysprof", "git://gitlab.gnome.org/GNOME/sysprof.git;protocol=https", "cd44ee6644c3641507fb53b8a2a69137f2971219", "") : "1.2.0", ("u-boot-mkimage", "git://git.denx.de/u-boot.git;branch=master;protocol=git", "62c175fbb8a0f9a926c88294ea9f7e88eb898f6c", "") : "2014.01", # version pattern "yyyymmdd" - ("mobile-broadband-provider-info", "git://gitlab.gnome.org/GNOME/mobile-broadband-provider-info;protocol=https", "4ed19e11c2975105b71b956440acdb25d46a347d", "") + ("mobile-broadband-provider-info", "git://gitlab.gnome.org/GNOME/mobile-broadband-provider-info.git;protocol=https", "4ed19e11c2975105b71b956440acdb25d46a347d", "") : "20120614", # packages with a valid UPSTREAM_CHECK_GITTAGREGEX ("xf86-video-omap", "git://anongit.freedesktop.org/xorg/driver/xf86-video-omap", "ae0394e687f1a77e966cf72f895da91840dffb8f", "(?P(\d+\.(\d\.?)*))") @@ -1338,6 +1462,9 @@ class GitShallowTest(FetcherTest): smdir = os.path.join(self.tempdir, 'gitsubmodule') bb.utils.mkdirhier(smdir) self.git('init', cwd=smdir) + # Make this look like it was cloned from a remote... + self.git('config --add remote.origin.url "%s"' % smdir, cwd=smdir) + self.git('config --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"', cwd=smdir) self.add_empty_file('asub', cwd=smdir) self.git('submodule init', cwd=self.srcdir) @@ -1571,3 +1698,29 @@ class GitShallowTest(FetcherTest): self.assertNotEqual(orig_revs, revs) self.assertRefs(['master', 'origin/master']) self.assertRevCount(orig_revs - 1758) + + def test_that_unpack_throws_an_error_when_the_git_clone_nor_shallow_tarball_exist(self): + self.add_empty_file('a') + fetcher, ud = self.fetch() + bb.utils.remove(self.gitdir, recurse=True) + bb.utils.remove(self.dldir, recurse=True) + + with self.assertRaises(bb.fetch2.UnpackError) as context: + fetcher.unpack(self.d.getVar('WORKDIR')) + + self.assertIn("No up to date source found", context.exception.msg) + self.assertIn("clone directory not available or not up to date", context.exception.msg) + + @skipIfNoNetwork() + def test_that_unpack_does_work_when_using_git_shallow_tarball_but_tarball_is_not_available(self): + self.d.setVar('SRCREV', 'e5939ff608b95cdd4d0ab0e1935781ab9a276ac0') + self.d.setVar('BB_GIT_SHALLOW', '1') + self.d.setVar('BB_GENERATE_SHALLOW_TARBALLS', '1') + fetcher = bb.fetch.Fetch(["git://git.yoctoproject.org/fstests"], self.d) + fetcher.download() + + bb.utils.remove(self.dldir + "/*.tar.gz") + fetcher.unpack(self.unpackdir) + + dir = os.listdir(self.unpackdir + "/git/") + self.assertIn("fstests.doap", dir) diff --git a/poky/bitbake/lib/bb/tests/parse.py b/poky/bitbake/lib/bb/tests/parse.py index 8f16ba4f4..1bc47405d 100644 --- a/poky/bitbake/lib/bb/tests/parse.py +++ b/poky/bitbake/lib/bb/tests/parse.py @@ -44,9 +44,13 @@ C = "3" """ def setUp(self): + self.origdir = os.getcwd() self.d = bb.data.init() bb.parse.siggen = bb.siggen.init(self.d) + def tearDown(self): + os.chdir(self.origdir) + def parsehelper(self, content, suffix = ".bb"): f = tempfile.NamedTemporaryFile(suffix = suffix) diff --git a/poky/bitbake/lib/bb/ui/buildinfohelper.py b/poky/bitbake/lib/bb/ui/buildinfohelper.py index 524a5b094..31323d281 100644 --- a/poky/bitbake/lib/bb/ui/buildinfohelper.py +++ b/poky/bitbake/lib/bb/ui/buildinfohelper.py @@ -1603,14 +1603,14 @@ class BuildInfoHelper(object): mockevent.lineno = -1 self.store_log_event(mockevent) - def store_log_event(self, event): + def store_log_event(self, event,cli_backlog=True): self._ensure_build() if event.levelno < formatter.WARNING: return # early return for CLI builds - if self.brbe is None: + if cli_backlog and self.brbe is None: if not 'backlog' in self.internal_state: self.internal_state['backlog'] = [] self.internal_state['backlog'].append(event) @@ -1622,7 +1622,7 @@ class BuildInfoHelper(object): tempevent = self.internal_state['backlog'].pop() logger.debug(1, "buildinfohelper: Saving stored event %s " % tempevent) - self.store_log_event(tempevent) + self.store_log_event(tempevent,cli_backlog) else: logger.info("buildinfohelper: All events saved") del self.internal_state['backlog'] @@ -1987,7 +1987,8 @@ class BuildInfoHelper(object): if 'backlog' in self.internal_state: # we save missed events in the database for the current build tempevent = self.internal_state['backlog'].pop() - self.store_log_event(tempevent) + # Do not skip command line build events + self.store_log_event(tempevent,False) if not connection.features.autocommits_when_autocommit_is_off: transaction.set_autocommit(True) diff --git a/poky/bitbake/lib/bb/ui/taskexp.py b/poky/bitbake/lib/bb/ui/taskexp.py index 0e8e9d4cf..8305d70f4 100644 --- a/poky/bitbake/lib/bb/ui/taskexp.py +++ b/poky/bitbake/lib/bb/ui/taskexp.py @@ -103,9 +103,16 @@ class DepExplorer(Gtk.Window): self.pkg_treeview.get_selection().connect("changed", self.on_cursor_changed) column = Gtk.TreeViewColumn("Package", Gtk.CellRendererText(), text=COL_PKG_NAME) self.pkg_treeview.append_column(column) - pane.add1(scrolled) scrolled.add(self.pkg_treeview) + self.search_entry = Gtk.SearchEntry.new() + self.pkg_treeview.set_search_entry(self.search_entry) + + left_panel = Gtk.VPaned() + left_panel.add(self.search_entry) + left_panel.add(scrolled) + pane.add1(left_panel) + box = Gtk.VBox(homogeneous=True, spacing=4) # Task Depends @@ -129,6 +136,7 @@ class DepExplorer(Gtk.Window): pane.add2(box) self.show_all() + self.search_entry.grab_focus() def on_package_activated(self, treeview, path, column, data_col): model = treeview.get_model() diff --git a/poky/bitbake/lib/bb/utils.py b/poky/bitbake/lib/bb/utils.py index 2ff7e8222..73b6cb423 100644 --- a/poky/bitbake/lib/bb/utils.py +++ b/poky/bitbake/lib/bb/utils.py @@ -497,7 +497,11 @@ def lockfile(name, shared=False, retry=True, block=False): if statinfo.st_ino == statinfo2.st_ino: return lf lf.close() - except Exception: + except OSError as e: + if e.errno == errno.EACCES: + logger.error("Unable to acquire lock '%s', %s", + e.strerror, name) + sys.exit(1) try: lf.close() except Exception: @@ -906,6 +910,23 @@ def copyfile(src, dest, newmtime = None, sstat = None): newmtime = sstat[stat.ST_MTIME] return newmtime +def break_hardlinks(src, sstat = None): + """ + Ensures src is the only hardlink to this file. Other hardlinks, + if any, are not affected (other than in their st_nlink value, of + course). Returns true on success and false on failure. + + """ + try: + if not sstat: + sstat = os.lstat(src) + except Exception as e: + logger.warning("break_hardlinks: stat of %s failed (%s)" % (src, e)) + return False + if sstat[stat.ST_NLINK] == 1: + return True + return copyfile(src, src, sstat=sstat) + def which(path, item, direction = 0, history = False, executable=False): """ Locate `item` in the list of paths `path` (colon separated string like $PATH). @@ -1290,7 +1311,7 @@ def edit_metadata_file(meta_file, variables, varfunc): return updated -def edit_bblayers_conf(bblayers_conf, add, remove): +def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): """Edit bblayers.conf, adding and/or removing layers Parameters: bblayers_conf: path to bblayers.conf file to edit @@ -1298,6 +1319,8 @@ def edit_bblayers_conf(bblayers_conf, add, remove): list to add nothing remove: layer path (or list of layer paths) to remove; None or empty list to remove nothing + edit_cb: optional callback function that will be called after + processing adds/removes once per existing entry. Returns a tuple: notadded: list of layers specified to be added but weren't (because they were already in the list) @@ -1361,6 +1384,17 @@ def edit_bblayers_conf(bblayers_conf, add, remove): bblayers.append(addlayer) del addlayers[:] + if edit_cb: + newlist = [] + for layer in bblayers: + res = edit_cb(layer, canonicalise_path(layer)) + if res != layer: + newlist.append(res) + updated = True + else: + newlist.append(layer) + bblayers = newlist + if updated: if op == '+=' and not bblayers: bblayers = None diff --git a/poky/bitbake/lib/bblayers/action.py b/poky/bitbake/lib/bblayers/action.py index aa575d1c0..a3f658f93 100644 --- a/poky/bitbake/lib/bblayers/action.py +++ b/poky/bitbake/lib/bblayers/action.py @@ -45,7 +45,7 @@ class ActionPlugin(LayerPlugin): notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None) if not (args.force or notadded): try: - self.tinfoil.parseRecipes() + self.tinfoil.run_command('parseConfiguration') except bb.tinfoil.TinfoilUIException: # Restore the back up copy of bblayers.conf shutil.copy2(backup, bblayers_conf) diff --git a/poky/bitbake/lib/bblayers/layerindex.py b/poky/bitbake/lib/bblayers/layerindex.py index 9af385db5..9f02a9da2 100644 --- a/poky/bitbake/lib/bblayers/layerindex.py +++ b/poky/bitbake/lib/bblayers/layerindex.py @@ -1,10 +1,9 @@ +import layerindexlib + import argparse -import http.client -import json import logging import os import subprocess -import urllib.parse from bblayers.action import ActionPlugin @@ -21,110 +20,6 @@ class LayerIndexPlugin(ActionPlugin): This class inherits ActionPlugin to get do_add_layer. """ - def get_json_data(self, apiurl): - proxy_settings = os.environ.get("http_proxy", None) - conn = None - _parsedurl = urllib.parse.urlparse(apiurl) - path = _parsedurl.path - query = _parsedurl.query - - def parse_url(url): - parsedurl = urllib.parse.urlparse(url) - if parsedurl.netloc[0] == '[': - host, port = parsedurl.netloc[1:].split(']', 1) - if ':' in port: - port = port.rsplit(':', 1)[1] - else: - port = None - else: - if parsedurl.netloc.count(':') == 1: - (host, port) = parsedurl.netloc.split(":") - else: - host = parsedurl.netloc - port = None - return (host, 80 if port is None else int(port)) - - if proxy_settings is None: - host, port = parse_url(apiurl) - conn = http.client.HTTPConnection(host, port) - conn.request("GET", path + "?" + query) - else: - host, port = parse_url(proxy_settings) - conn = http.client.HTTPConnection(host, port) - conn.request("GET", apiurl) - - r = conn.getresponse() - if r.status != 200: - raise Exception("Failed to read " + path + ": %d %s" % (r.status, r.reason)) - return json.loads(r.read().decode()) - - def get_layer_deps(self, layername, layeritems, layerbranches, layerdependencies, branchnum, selfname=False): - def layeritems_info_id(items_name, layeritems): - litems_id = None - for li in layeritems: - if li['name'] == items_name: - litems_id = li['id'] - break - return litems_id - - def layerbranches_info(items_id, layerbranches): - lbranch = {} - for lb in layerbranches: - if lb['layer'] == items_id and lb['branch'] == branchnum: - lbranch['id'] = lb['id'] - lbranch['vcs_subdir'] = lb['vcs_subdir'] - break - return lbranch - - def layerdependencies_info(lb_id, layerdependencies): - ld_deps = [] - for ld in layerdependencies: - if ld['layerbranch'] == lb_id and not ld['dependency'] in ld_deps: - ld_deps.append(ld['dependency']) - if not ld_deps: - logger.error("The dependency of layerDependencies is not found.") - return ld_deps - - def layeritems_info_name_subdir(items_id, layeritems): - litems = {} - for li in layeritems: - if li['id'] == items_id: - litems['vcs_url'] = li['vcs_url'] - litems['name'] = li['name'] - break - return litems - - if selfname: - selfid = layeritems_info_id(layername, layeritems) - lbinfo = layerbranches_info(selfid, layerbranches) - if lbinfo: - selfsubdir = lbinfo['vcs_subdir'] - else: - logger.error("%s is not found in the specified branch" % layername) - return - selfurl = layeritems_info_name_subdir(selfid, layeritems)['vcs_url'] - if selfurl: - return selfurl, selfsubdir - else: - logger.error("Cannot get layer %s git repo and subdir" % layername) - return - ldict = {} - itemsid = layeritems_info_id(layername, layeritems) - if not itemsid: - return layername, None - lbid = layerbranches_info(itemsid, layerbranches) - if lbid: - lbid = layerbranches_info(itemsid, layerbranches)['id'] - else: - logger.error("%s is not found in the specified branch" % layername) - return None, None - for dependency in layerdependencies_info(lbid, layerdependencies): - lname = layeritems_info_name_subdir(dependency, layeritems)['name'] - lurl = layeritems_info_name_subdir(dependency, layeritems)['vcs_url'] - lsubdir = layerbranches_info(dependency, layerbranches)['vcs_subdir'] - ldict[lname] = lurl, lsubdir - return None, ldict - def get_fetch_layer(self, fetchdir, url, subdir, fetch_layer): layername = self.get_layer_name(url) if os.path.splitext(layername)[1] == '.git': @@ -136,95 +31,124 @@ class LayerIndexPlugin(ActionPlugin): result = subprocess.call('git clone %s %s' % (url, repodir), shell = True) if result: logger.error("Failed to download %s" % url) - return None, None + return None, None, None else: - return layername, layerdir + return subdir, layername, layerdir else: logger.plain("Repository %s needs to be fetched" % url) - return layername, layerdir + return subdir, layername, layerdir elif os.path.exists(layerdir): - return layername, layerdir + return subdir, layername, layerdir else: logger.error("%s is not in %s" % (url, subdir)) - return None, None + return None, None, None def do_layerindex_fetch(self, args): """Fetches a layer from a layer index along with its dependent layers, and adds them to conf/bblayers.conf. """ - apiurl = self.tinfoil.config_data.getVar('BBLAYERS_LAYERINDEX_URL') - if not apiurl: - logger.error("Cannot get BBLAYERS_LAYERINDEX_URL") - return 1 + + def _construct_url(baseurls, branches): + urls = [] + for baseurl in baseurls: + if baseurl[-1] != '/': + baseurl += '/' + + if not baseurl.startswith('cooker'): + baseurl += "api/" + + if branches: + baseurl += ";branch=%s" % ','.join(branches) + + urls.append(baseurl) + + return urls + + + # Set the default... + if args.branch: + branches = [args.branch] else: - if apiurl[-1] != '/': - apiurl += '/' - apiurl += "api/" - apilinks = self.get_json_data(apiurl) - branches = self.get_json_data(apilinks['branches']) - - branchnum = 0 - for branch in branches: - if branch['name'] == args.branch: - branchnum = branch['id'] - break - if branchnum == 0: - validbranches = ', '.join([branch['name'] for branch in branches]) - logger.error('Invalid layer branch name "%s". Valid branches: %s' % (args.branch, validbranches)) - return 1 + branches = (self.tinfoil.config_data.getVar('LAYERSERIES_CORENAMES') or 'master').split() + logger.debug(1, 'Trying branches: %s' % branches) ignore_layers = [] - for collection in self.tinfoil.config_data.getVar('BBFILE_COLLECTIONS').split(): - lname = self.tinfoil.config_data.getVar('BBLAYERS_LAYERINDEX_NAME_%s' % collection) - if lname: - ignore_layers.append(lname) - if args.ignore: ignore_layers.extend(args.ignore.split(',')) - layeritems = self.get_json_data(apilinks['layerItems']) - layerbranches = self.get_json_data(apilinks['layerBranches']) - layerdependencies = self.get_json_data(apilinks['layerDependencies']) - invaluenames = [] - repourls = {} - printlayers = [] - - def query_dependencies(layers, layeritems, layerbranches, layerdependencies, branchnum): - depslayer = [] - for layername in layers: - invaluename, layerdict = self.get_layer_deps(layername, layeritems, layerbranches, layerdependencies, branchnum) - if layerdict: - repourls[layername] = self.get_layer_deps(layername, layeritems, layerbranches, layerdependencies, branchnum, selfname=True) - for layer in layerdict: - if not layer in ignore_layers: - depslayer.append(layer) - printlayers.append((layername, layer, layerdict[layer][0], layerdict[layer][1])) - if not layer in ignore_layers and not layer in repourls: - repourls[layer] = (layerdict[layer][0], layerdict[layer][1]) - if invaluename and not invaluename in invaluenames: - invaluenames.append(invaluename) - return depslayer - - depslayers = query_dependencies(args.layername, layeritems, layerbranches, layerdependencies, branchnum) - while depslayers: - depslayer = query_dependencies(depslayers, layeritems, layerbranches, layerdependencies, branchnum) - depslayers = depslayer - if invaluenames: - for invaluename in invaluenames: - logger.error('Layer "%s" not found in layer index' % invaluename) - return 1 - logger.plain("%s %s %s %s" % ("Layer".ljust(19), "Required by".ljust(19), "Git repository".ljust(54), "Subdirectory")) - logger.plain('=' * 115) - for layername in args.layername: - layerurl = repourls[layername] - logger.plain("%s %s %s %s" % (layername.ljust(20), '-'.ljust(20), layerurl[0].ljust(55), layerurl[1])) - printedlayers = [] - for layer, dependency, gitrepo, subdirectory in printlayers: - if dependency in printedlayers: - continue - logger.plain("%s %s %s %s" % (dependency.ljust(20), layer.ljust(20), gitrepo.ljust(55), subdirectory)) - printedlayers.append(dependency) - - if repourls: + # Load the cooker DB + cookerIndex = layerindexlib.LayerIndex(self.tinfoil.config_data) + cookerIndex.load_layerindex('cooker://', load='layerDependencies') + + # Fast path, check if we already have what has been requested! + (dependencies, invalidnames) = cookerIndex.find_dependencies(names=args.layername, ignores=ignore_layers) + if not args.show_only and not invalidnames: + logger.plain("You already have the requested layer(s): %s" % args.layername) + return 0 + + # The information to show is already in the cookerIndex + if invalidnames: + # General URL to use to access the layer index + # While there is ONE right now, we're expect users could enter several + apiurl = self.tinfoil.config_data.getVar('BBLAYERS_LAYERINDEX_URL').split() + if not apiurl: + logger.error("Cannot get BBLAYERS_LAYERINDEX_URL") + return 1 + + remoteIndex = layerindexlib.LayerIndex(self.tinfoil.config_data) + + for remoteurl in _construct_url(apiurl, branches): + logger.plain("Loading %s..." % remoteurl) + remoteIndex.load_layerindex(remoteurl) + + if remoteIndex.is_empty(): + logger.error("Remote layer index %s is empty for branches %s" % (apiurl, branches)) + return 1 + + lIndex = cookerIndex + remoteIndex + + (dependencies, invalidnames) = lIndex.find_dependencies(names=args.layername, ignores=ignore_layers) + + if invalidnames: + for invaluename in invalidnames: + logger.error('Layer "%s" not found in layer index' % invaluename) + return 1 + + logger.plain("%s %s %s" % ("Layer".ljust(49), "Git repository (branch)".ljust(54), "Subdirectory")) + logger.plain('=' * 125) + + for deplayerbranch in dependencies: + layerBranch = dependencies[deplayerbranch][0] + + # TODO: Determine display behavior + # This is the local content, uncomment to hide local + # layers from the display. + #if layerBranch.index.config['TYPE'] == 'cooker': + # continue + + layerDeps = dependencies[deplayerbranch][1:] + + requiredby = [] + recommendedby = [] + for dep in layerDeps: + if dep.required: + requiredby.append(dep.layer.name) + else: + recommendedby.append(dep.layer.name) + + logger.plain('%s %s %s' % (("%s:%s:%s" % + (layerBranch.index.config['DESCRIPTION'], + layerBranch.branch.name, + layerBranch.layer.name)).ljust(50), + ("%s (%s)" % (layerBranch.layer.vcs_url, + layerBranch.actual_branch)).ljust(55), + layerBranch.vcs_subdir + )) + if requiredby: + logger.plain(' required by: %s' % ' '.join(requiredby)) + if recommendedby: + logger.plain(' recommended by: %s' % ' '.join(recommendedby)) + + if dependencies: fetchdir = self.tinfoil.config_data.getVar('BBLAYERS_FETCH_DIR') if not fetchdir: logger.error("Cannot get BBLAYERS_FETCH_DIR") @@ -232,26 +156,39 @@ class LayerIndexPlugin(ActionPlugin): if not os.path.exists(fetchdir): os.makedirs(fetchdir) addlayers = [] - for repourl, subdir in repourls.values(): - name, layerdir = self.get_fetch_layer(fetchdir, repourl, subdir, not args.show_only) + + for deplayerbranch in dependencies: + layerBranch = dependencies[deplayerbranch][0] + + if layerBranch.index.config['TYPE'] == 'cooker': + # Anything loaded via cooker is already local, skip it + continue + + subdir, name, layerdir = self.get_fetch_layer(fetchdir, + layerBranch.layer.vcs_url, + layerBranch.vcs_subdir, + not args.show_only) if not name: # Error already shown return 1 addlayers.append((subdir, name, layerdir)) if not args.show_only: - for subdir, name, layerdir in set(addlayers): + localargs = argparse.Namespace() + localargs.layerdir = [] + localargs.force = args.force + for subdir, name, layerdir in addlayers: if os.path.exists(layerdir): if subdir: - logger.plain("Adding layer \"%s\" to conf/bblayers.conf" % subdir) + logger.plain("Adding layer \"%s\" (%s) to conf/bblayers.conf" % (subdir, layerdir)) else: - logger.plain("Adding layer \"%s\" to conf/bblayers.conf" % name) - localargs = argparse.Namespace() - localargs.layerdir = layerdir - localargs.force = args.force - self.do_add_layer(localargs) + logger.plain("Adding layer \"%s\" (%s) to conf/bblayers.conf" % (name, layerdir)) + localargs.layerdir.append(layerdir) else: break + if localargs.layerdir: + self.do_add_layer(localargs) + def do_layerindex_show_depends(self, args): """Find layer dependencies from layer index. """ @@ -260,12 +197,12 @@ class LayerIndexPlugin(ActionPlugin): self.do_layerindex_fetch(args) def register_commands(self, sp): - parser_layerindex_fetch = self.add_command(sp, 'layerindex-fetch', self.do_layerindex_fetch) + parser_layerindex_fetch = self.add_command(sp, 'layerindex-fetch', self.do_layerindex_fetch, parserecipes=False) parser_layerindex_fetch.add_argument('-n', '--show-only', help='show dependencies and do nothing else', action='store_true') - parser_layerindex_fetch.add_argument('-b', '--branch', help='branch name to fetch (default %(default)s)', default='master') + parser_layerindex_fetch.add_argument('-b', '--branch', help='branch name to fetch') parser_layerindex_fetch.add_argument('-i', '--ignore', help='assume the specified layers do not need to be fetched/added (separate multiple layers with commas, no spaces)', metavar='LAYER') parser_layerindex_fetch.add_argument('layername', nargs='+', help='layer to fetch') - parser_layerindex_show_depends = self.add_command(sp, 'layerindex-show-depends', self.do_layerindex_show_depends) - parser_layerindex_show_depends.add_argument('-b', '--branch', help='branch name to fetch (default %(default)s)', default='master') + parser_layerindex_show_depends = self.add_command(sp, 'layerindex-show-depends', self.do_layerindex_show_depends, parserecipes=False) + parser_layerindex_show_depends.add_argument('-b', '--branch', help='branch name to fetch') parser_layerindex_show_depends.add_argument('layername', nargs='+', help='layer to query') diff --git a/poky/bitbake/lib/layerindexlib/README b/poky/bitbake/lib/layerindexlib/README new file mode 100644 index 000000000..5d927afdf --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/README @@ -0,0 +1,28 @@ +The layerindexlib module is designed to permit programs to work directly +with layer index information. (See layers.openembedded.org...) + +The layerindexlib module includes a plugin interface that is used to extend +the basic functionality. There are two primary plugins available: restapi +and cooker. + +The restapi plugin works with a web based REST Api compatible with the +layerindex-web project, as well as the ability to store and retried a +the information for one or more files on the disk. + +The cooker plugin works by reading the information from the current build +project and processing it as if it were a layer index. + + +TODO: + +__init__.py: +Implement local on-disk caching (using the rest api store/load) +Implement layer index style query operations on a combined index + +common.py: +Stop network access if BB_NO_NETWORK or allowed hosts is restricted + +cooker.py: +Cooker - Implement recipe parsing + + diff --git a/poky/bitbake/lib/layerindexlib/__init__.py b/poky/bitbake/lib/layerindexlib/__init__.py new file mode 100644 index 000000000..cb79cb37d --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/__init__.py @@ -0,0 +1,1363 @@ +# Copyright (C) 2016-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 datetime + +import logging +import imp + +from collections import OrderedDict +from layerindexlib.plugin import LayerIndexPluginUrlError + +logger = logging.getLogger('BitBake.layerindexlib') + +# Exceptions + +class LayerIndexException(Exception): + '''LayerIndex Generic Exception''' + def __init__(self, message): + self.msg = message + Exception.__init__(self, message) + + def __str__(self): + return self.msg + +class LayerIndexUrlError(LayerIndexException): + '''Exception raised when unable to access a URL for some reason''' + def __init__(self, url, message=""): + if message: + msg = "Unable to access layerindex url %s: %s" % (url, message) + else: + msg = "Unable to access layerindex url %s" % url + self.url = url + LayerIndexException.__init__(self, msg) + +class LayerIndexFetchError(LayerIndexException): + '''General layerindex fetcher exception when something fails''' + def __init__(self, url, message=""): + if message: + msg = "Unable to fetch layerindex url %s: %s" % (url, message) + else: + msg = "Unable to fetch layerindex url %s" % url + self.url = url + LayerIndexException.__init__(self, msg) + + +# Interface to the overall layerindex system +# the layer may contain one or more individual indexes +class LayerIndex(): + def __init__(self, d): + if not d: + raise LayerIndexException("Must be initialized with bb.data.") + + self.data = d + + # List of LayerIndexObj + self.indexes = [] + + self.plugins = [] + + import bb.utils + bb.utils.load_plugins(logger, self.plugins, os.path.dirname(__file__)) + for plugin in self.plugins: + if hasattr(plugin, 'init'): + plugin.init(self) + + def __add__(self, other): + newIndex = LayerIndex(self.data) + + if self.__class__ != newIndex.__class__ or \ + other.__class__ != newIndex.__class__: + raise TypeException("Can not add different types.") + + for indexEnt in self.indexes: + newIndex.indexes.append(indexEnt) + + for indexEnt in other.indexes: + newIndex.indexes.append(indexEnt) + + return newIndex + + def _parse_params(self, params): + '''Take a parameter list, return a dictionary of parameters. + + Expected to be called from the data of urllib.parse.urlparse(url).params + + If there are two conflicting parameters, last in wins... + ''' + + param_dict = {} + for param in params.split(';'): + if not param: + continue + item = param.split('=', 1) + logger.debug(1, item) + param_dict[item[0]] = item[1] + + return param_dict + + def _fetch_url(self, url, username=None, password=None, debuglevel=0): + '''Fetch data from a specific URL. + + Fetch something from a specific URL. This is specifically designed to + fetch data from a layerindex-web instance, but may be useful for other + raw fetch actions. + + It is not designed to be used to fetch recipe sources or similar. the + regular fetcher class should used for that. + + It is the responsibility of the caller to check BB_NO_NETWORK and related + BB_ALLOWED_NETWORKS. + ''' + + if not url: + raise LayerIndexUrlError(url, "empty url") + + import urllib + from urllib.request import urlopen, Request + from urllib.parse import urlparse + + up = urlparse(url) + + if username: + logger.debug(1, "Configuring authentication for %s..." % url) + password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() + password_mgr.add_password(None, "%s://%s" % (up.scheme, up.netloc), username, password) + handler = urllib.request.HTTPBasicAuthHandler(password_mgr) + opener = urllib.request.build_opener(handler, urllib.request.HTTPSHandler(debuglevel=debuglevel)) + else: + opener = urllib.request.build_opener(urllib.request.HTTPSHandler(debuglevel=debuglevel)) + + urllib.request.install_opener(opener) + + logger.debug(1, "Fetching %s (%s)..." % (url, ["without authentication", "with authentication"][bool(username)])) + + try: + res = urlopen(Request(url, headers={'User-Agent': 'Mozilla/5.0 (bitbake/lib/layerindex)'}, unverifiable=True)) + except urllib.error.HTTPError as e: + logger.debug(1, "HTTP Error: %s: %s" % (e.code, e.reason)) + logger.debug(1, " Requested: %s" % (url)) + logger.debug(1, " Actual: %s" % (e.geturl())) + + if e.code == 404: + logger.debug(1, "Request not found.") + raise LayerIndexFetchError(url, e) + else: + logger.debug(1, "Headers:\n%s" % (e.headers)) + raise LayerIndexFetchError(url, e) + except OSError as e: + error = 0 + reason = "" + + # Process base OSError first... + if hasattr(e, 'errno'): + error = e.errno + reason = e.strerror + + # Process gaierror (socket error) subclass if available. + if hasattr(e, 'reason') and hasattr(e.reason, 'errno') and hasattr(e.reason, 'strerror'): + error = e.reason.errno + reason = e.reason.strerror + if error == -2: + raise LayerIndexFetchError(url, "%s: %s" % (e, reason)) + + if error and error != 0: + raise LayerIndexFetchError(url, "Unexpected exception: [Error %s] %s" % (error, reason)) + else: + raise LayerIndexFetchError(url, "Unable to fetch OSError exception: %s" % e) + + finally: + logger.debug(1, "...fetching %s (%s), done." % (url, ["without authentication", "with authentication"][bool(username)])) + + return res + + + def load_layerindex(self, indexURI, load=['layerDependencies', 'recipes', 'machines', 'distros'], reload=False): + '''Load the layerindex. + + indexURI - An index to load. (Use multiple calls to load multiple indexes) + + reload - If reload is True, then any previously loaded indexes will be forgotten. + + load - List of elements to load. Default loads all items. + Note: plugs may ignore this. + +The format of the indexURI: + + ;branch=;cache=;desc= + + Note: the 'branch' parameter if set can select multiple branches by using + comma, such as 'branch=master,morty,pyro'. However, many operations only look + at the -first- branch specified! + + The cache value may be undefined, in this case a network failure will + result in an error, otherwise the system will look for a file of the cache + name and load that instead. + + For example: + + http://layers.openembedded.org/layerindex/api/;branch=master;desc=OpenEmbedded%20Layer%20Index + cooker:// +''' + if reload: + self.indexes = [] + + logger.debug(1, 'Loading: %s' % indexURI) + + if not self.plugins: + raise LayerIndexException("No LayerIndex Plugins available") + + for plugin in self.plugins: + # Check if the plugin was initialized + logger.debug(1, 'Trying %s' % plugin.__class__) + if not hasattr(plugin, 'type') or not plugin.type: + continue + try: + # TODO: Implement 'cache', for when the network is not available + indexEnt = plugin.load_index(indexURI, load) + break + except LayerIndexPluginUrlError as e: + logger.debug(1, "%s doesn't support %s" % (plugin.type, e.url)) + except NotImplementedError: + pass + else: + logger.debug(1, "No plugins support %s" % indexURI) + raise LayerIndexException("No plugins support %s" % indexURI) + + # Mark CONFIG data as something we've added... + indexEnt.config['local'] = [] + indexEnt.config['local'].append('config') + + # No longer permit changes.. + indexEnt.lockData() + + self.indexes.append(indexEnt) + + def store_layerindex(self, indexURI, index=None): + '''Store one layerindex + +Typically this will be used to create a local cache file of a remote index. + + file://;branch= + +We can write out in either the restapi or django formats. The split option +will write out the individual elements split by layer and related components. +''' + if not index: + logger.warning('No index to write, nothing to do.') + return + + if not self.plugins: + raise LayerIndexException("No LayerIndex Plugins available") + + for plugin in self.plugins: + # Check if the plugin was initialized + logger.debug(1, 'Trying %s' % plugin.__class__) + if not hasattr(plugin, 'type') or not plugin.type: + continue + try: + plugin.store_index(indexURI, index) + break + except LayerIndexPluginUrlError as e: + logger.debug(1, "%s doesn't support %s" % (plugin.type, e.url)) + except NotImplementedError: + logger.debug(1, "Store not implemented in %s" % plugin.type) + pass + else: + logger.debug(1, "No plugins support %s" % url) + raise LayerIndexException("No plugins support %s" % url) + + + def is_empty(self): + '''Return True or False if the index has any usable data. + +We check the indexes entries to see if they have a branch set, as well as +layerBranches set. If not, they are effectively blank.''' + + found = False + for index in self.indexes: + if index.__bool__(): + found = True + break + return not found + + + def find_vcs_url(self, vcs_url, branch=None): + '''Return the first layerBranch with the given vcs_url + + If a branch has not been specified, we will iterate over the branches in + the default configuration until the first vcs_url/branch match.''' + + for index in self.indexes: + logger.debug(1, ' searching %s' % index.config['DESCRIPTION']) + layerBranch = index.find_vcs_url(vcs_url, [branch]) + if layerBranch: + return layerBranch + return None + + def find_collection(self, collection, version=None, branch=None): + '''Return the first layerBranch with the given collection name + + If a branch has not been specified, we will iterate over the branches in + the default configuration until the first collection/branch match.''' + + logger.debug(1, 'find_collection: %s (%s) %s' % (collection, version, branch)) + + if branch: + branches = [branch] + else: + branches = None + + for index in self.indexes: + logger.debug(1, ' searching %s' % index.config['DESCRIPTION']) + layerBranch = index.find_collection(collection, version, branches) + if layerBranch: + return layerBranch + else: + logger.debug(1, 'Collection %s (%s) not found for branch (%s)' % (collection, version, branch)) + return None + + def find_layerbranch(self, name, branch=None): + '''Return the layerBranch item for a given name and branch + + If a branch has not been specified, we will iterate over the branches in + the default configuration until the first name/branch match.''' + + if branch: + branches = [branch] + else: + branches = None + + for index in self.indexes: + layerBranch = index.find_layerbranch(name, branches) + if layerBranch: + return layerBranch + return None + + def find_dependencies(self, names=None, layerbranches=None, ignores=None): + '''Return a tuple of all dependencies and valid items for the list of (layer) names + + The dependency scanning happens depth-first. The returned + dependencies should be in the best order to define bblayers. + + names - list of layer names (searching layerItems) + branches - when specified (with names) only this list of branches are evaluated + + layerbranches - list of layerbranches to resolve dependencies + + ignores - list of layer names to ignore + + return: (dependencies, invalid) + + dependencies[LayerItem.name] = [ LayerBranch, LayerDependency1, LayerDependency2, ... ] + invalid = [ LayerItem.name1, LayerItem.name2, ... ] + ''' + + invalid = [] + + # Convert name/branch to layerbranches + if layerbranches is None: + layerbranches = [] + + for name in names: + if ignores and name in ignores: + continue + + for index in self.indexes: + layerbranch = index.find_layerbranch(name) + if not layerbranch: + # Not in this index, hopefully it's in another... + continue + layerbranches.append(layerbranch) + break + else: + invalid.append(name) + + + def _resolve_dependencies(layerbranches, ignores, dependencies, invalid): + for layerbranch in layerbranches: + if ignores and layerbranch.layer.name in ignores: + continue + + # Get a list of dependencies and then recursively process them + for layerdependency in layerbranch.index.layerDependencies_layerBranchId[layerbranch.id]: + deplayerbranch = layerdependency.dependency_layerBranch + + if ignores and deplayerbranch.layer.name in ignores: + continue + + # This little block is why we can't re-use the LayerIndexObj version, + # we must be able to satisfy each dependencies across layer indexes and + # use the layer index order for priority. (r stands for replacement below) + + # If this is the primary index, we can fast path and skip this + if deplayerbranch.index != self.indexes[0]: + # Is there an entry in a prior index for this collection/version? + rdeplayerbranch = self.find_collection( + collection=deplayerbranch.collection, + version=deplayerbranch.version + ) + if rdeplayerbranch != deplayerbranch: + logger.debug(1, 'Replaced %s:%s:%s with %s:%s:%s' % \ + (deplayerbranch.index.config['DESCRIPTION'], + deplayerbranch.branch.name, + deplayerbranch.layer.name, + rdeplayerbranch.index.config['DESCRIPTION'], + rdeplayerbranch.branch.name, + rdeplayerbranch.layer.name)) + deplayerbranch = rdeplayerbranch + + # New dependency, we need to resolve it now... depth-first + if deplayerbranch.layer.name not in dependencies: + (dependencies, invalid) = _resolve_dependencies([deplayerbranch], ignores, dependencies, invalid) + + if deplayerbranch.layer.name not in dependencies: + dependencies[deplayerbranch.layer.name] = [deplayerbranch, layerdependency] + else: + if layerdependency not in dependencies[deplayerbranch.layer.name]: + dependencies[deplayerbranch.layer.name].append(layerdependency) + + return (dependencies, invalid) + + # OK, resolve this one... + dependencies = OrderedDict() + (dependencies, invalid) = _resolve_dependencies(layerbranches, ignores, dependencies, invalid) + + for layerbranch in layerbranches: + if layerbranch.layer.name not in dependencies: + dependencies[layerbranch.layer.name] = [layerbranch] + + return (dependencies, invalid) + + + def list_obj(self, object): + '''Print via the plain logger object information + +This function is used to implement debugging and provide the user info. +''' + for lix in self.indexes: + if not hasattr(lix, object): + continue + + logger.plain ('') + logger.plain ('Index: %s' % lix.config['DESCRIPTION']) + + output = [] + + if object == 'branches': + logger.plain ('%s %s %s' % ('{:26}'.format('branch'), '{:34}'.format('description'), '{:22}'.format('bitbake branch'))) + logger.plain ('{:-^80}'.format("")) + for branchid in lix.branches: + output.append('%s %s %s' % ( + '{:26}'.format(lix.branches[branchid].name), + '{:34}'.format(lix.branches[branchid].short_description), + '{:22}'.format(lix.branches[branchid].bitbake_branch) + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'layerItems': + logger.plain ('%s %s' % ('{:26}'.format('layer'), '{:34}'.format('description'))) + logger.plain ('{:-^80}'.format("")) + for layerid in lix.layerItems: + output.append('%s %s' % ( + '{:26}'.format(lix.layerItems[layerid].name), + '{:34}'.format(lix.layerItems[layerid].summary) + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'layerBranches': + logger.plain ('%s %s %s' % ('{:26}'.format('layer'), '{:34}'.format('description'), '{:19}'.format('collection:version'))) + logger.plain ('{:-^80}'.format("")) + for layerbranchid in lix.layerBranches: + output.append('%s %s %s' % ( + '{:26}'.format(lix.layerBranches[layerbranchid].layer.name), + '{:34}'.format(lix.layerBranches[layerbranchid].layer.summary), + '{:19}'.format("%s:%s" % + (lix.layerBranches[layerbranchid].collection, + lix.layerBranches[layerbranchid].version) + ) + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'layerDependencies': + logger.plain ('%s %s %s %s' % ('{:19}'.format('branch'), '{:26}'.format('layer'), '{:11}'.format('dependency'), '{:26}'.format('layer'))) + logger.plain ('{:-^80}'.format("")) + for layerDependency in lix.layerDependencies: + if not lix.layerDependencies[layerDependency].dependency_layerBranch: + continue + + output.append('%s %s %s %s' % ( + '{:19}'.format(lix.layerDependencies[layerDependency].layerbranch.branch.name), + '{:26}'.format(lix.layerDependencies[layerDependency].layerbranch.layer.name), + '{:11}'.format('requires' if lix.layerDependencies[layerDependency].required else 'recommends'), + '{:26}'.format(lix.layerDependencies[layerDependency].dependency_layerBranch.layer.name) + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'recipes': + logger.plain ('%s %s %s' % ('{:20}'.format('recipe'), '{:10}'.format('version'), 'layer')) + logger.plain ('{:-^80}'.format("")) + output = [] + for recipe in lix.recipes: + output.append('%s %s %s' % ( + '{:30}'.format(lix.recipes[recipe].pn), + '{:30}'.format(lix.recipes[recipe].pv), + lix.recipes[recipe].layer.name + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'machines': + logger.plain ('%s %s %s' % ('{:24}'.format('machine'), '{:34}'.format('description'), '{:19}'.format('layer'))) + logger.plain ('{:-^80}'.format("")) + for machine in lix.machines: + output.append('%s %s %s' % ( + '{:24}'.format(lix.machines[machine].name), + '{:34}'.format(lix.machines[machine].description)[:34], + '{:19}'.format(lix.machines[machine].layerbranch.layer.name) + )) + for line in sorted(output): + logger.plain (line) + + continue + + if object == 'distros': + logger.plain ('%s %s %s' % ('{:24}'.format('distro'), '{:34}'.format('description'), '{:19}'.format('layer'))) + logger.plain ('{:-^80}'.format("")) + for distro in lix.distros: + output.append('%s %s %s' % ( + '{:24}'.format(lix.distros[distro].name), + '{:34}'.format(lix.distros[distro].description)[:34], + '{:19}'.format(lix.distros[distro].layerbranch.layer.name) + )) + for line in sorted(output): + logger.plain (line) + + continue + + logger.plain ('') + + +# This class holds a single layer index instance +# The LayerIndexObj is made up of dictionary of elements, such as: +# index['config'] - configuration data for this index +# index['branches'] - dictionary of Branch objects, by id number +# index['layerItems'] - dictionary of layerItem objects, by id number +# ...etc... (See: http://layers.openembedded.org/layerindex/api/) +# +# The class needs to manage the 'index' entries and allow easily adding +# of new items, as well as simply loading of the items. +class LayerIndexObj(): + def __init__(self): + super().__setattr__('_index', {}) + super().__setattr__('_lock', False) + + def __bool__(self): + '''False if the index is effectively empty + + We check the index to see if it has a branch set, as well as + layerbranches set. If not, it is effectively blank.''' + + if not bool(self._index): + return False + + try: + if self.branches and self.layerBranches: + return True + except AttributeError: + pass + + return False + + def __getattr__(self, name): + if name.startswith('_'): + return super().__getattribute__(name) + + if name not in self._index: + raise AttributeError('%s not in index datastore' % name) + + return self._index[name] + + def __setattr__(self, name, value): + if self.isLocked(): + raise TypeError("Can not set attribute '%s': index is locked" % name) + + if name.startswith('_'): + super().__setattr__(name, value) + return + + self._index[name] = value + + def __delattr__(self, name): + if self.isLocked(): + raise TypeError("Can not delete attribute '%s': index is locked" % name) + + if name.startswith('_'): + super().__delattr__(name) + + self._index.pop(name) + + def lockData(self): + '''Lock data object (make it readonly)''' + super().__setattr__("_lock", True) + + def unlockData(self): + '''unlock data object (make it readonly)''' + super().__setattr__("_lock", False) + + # When the data is unlocked, we have to clear the caches, as + # modification is allowed! + del(self._layerBranches_layerId_branchId) + del(self._layerDependencies_layerBranchId) + del(self._layerBranches_vcsUrl) + + def isLocked(self): + '''Is this object locked (readonly)?''' + return self._lock + + def add_element(self, indexname, objs): + '''Add a layer index object to index.''' + if indexname not in self._index: + self._index[indexname] = {} + + for obj in objs: + if obj.id in self._index[indexname]: + if self._index[indexname][obj.id] == obj: + continue + raise LayerIndexError('Conflict adding object %s(%s) to index' % (indexname, obj.id)) + self._index[indexname][obj.id] = obj + + def add_raw_element(self, indexname, objtype, rawobjs): + '''Convert a raw layer index data item to a layer index item object and add to the index''' + objs = [] + for entry in rawobjs: + objs.append(objtype(self, entry)) + self.add_element(indexname, objs) + + # Quick lookup table for searching layerId and branchID combos + @property + def layerBranches_layerId_branchId(self): + def createCache(self): + cache = {} + for layerbranchid in self.layerBranches: + layerbranch = self.layerBranches[layerbranchid] + cache["%s:%s" % (layerbranch.layer_id, layerbranch.branch_id)] = layerbranch + return cache + + if self.isLocked(): + cache = getattr(self, '_layerBranches_layerId_branchId', None) + else: + cache = None + + if not cache: + cache = createCache(self) + + if self.isLocked(): + super().__setattr__('_layerBranches_layerId_branchId', cache) + + return cache + + # Quick lookup table for finding all dependencies of a layerBranch + @property + def layerDependencies_layerBranchId(self): + def createCache(self): + cache = {} + # This ensures empty lists for all branchids + for layerbranchid in self.layerBranches: + cache[layerbranchid] = [] + + for layerdependencyid in self.layerDependencies: + layerdependency = self.layerDependencies[layerdependencyid] + cache[layerdependency.layerbranch_id].append(layerdependency) + return cache + + if self.isLocked(): + cache = getattr(self, '_layerDependencies_layerBranchId', None) + else: + cache = None + + if not cache: + cache = createCache(self) + + if self.isLocked(): + super().__setattr__('_layerDependencies_layerBranchId', cache) + + return cache + + # Quick lookup table for finding all instances of a vcs_url + @property + def layerBranches_vcsUrl(self): + def createCache(self): + cache = {} + for layerbranchid in self.layerBranches: + layerbranch = self.layerBranches[layerbranchid] + if layerbranch.layer.vcs_url not in cache: + cache[layerbranch.layer.vcs_url] = [layerbranch] + else: + cache[layerbranch.layer.vcs_url].append(layerbranch) + return cache + + if self.isLocked(): + cache = getattr(self, '_layerBranches_vcsUrl', None) + else: + cache = None + + if not cache: + cache = createCache(self) + + if self.isLocked(): + super().__setattr__('_layerBranches_vcsUrl', cache) + + return cache + + + def find_vcs_url(self, vcs_url, branches=None): + ''''Return the first layerBranch with the given vcs_url + + If a list of branches has not been specified, we will iterate on + all branches until the first vcs_url is found.''' + + if not self.__bool__(): + return None + + for layerbranch in self.layerBranches_vcsUrl: + if branches and layerbranch.branch.name not in branches: + continue + + return layerbranch + + return None + + + def find_collection(self, collection, version=None, branches=None): + '''Return the first layerBranch with the given collection name + + If a list of branches has not been specified, we will iterate on + all branches until the first collection is found.''' + + if not self.__bool__(): + return None + + for layerbranchid in self.layerBranches: + layerbranch = self.layerBranches[layerbranchid] + if branches and layerbranch.branch.name not in branches: + continue + + if layerbranch.collection == collection and \ + (version is None or version == layerbranch.version): + return layerbranch + + return None + + + def find_layerbranch(self, name, branches=None): + '''Return the first layerbranch whose layer name matches + + If a list of branches has not been specified, we will iterate on + all branches until the first layer with that name is found.''' + + if not self.__bool__(): + return None + + for layerbranchid in self.layerBranches: + layerbranch = self.layerBranches[layerbranchid] + if branches and layerbranch.branch.name not in branches: + continue + + if layerbranch.layer.name == name: + return layerbranch + + return None + + def find_dependencies(self, names=None, branches=None, layerBranches=None, ignores=None): + '''Return a tuple of all dependencies and valid items for the list of (layer) names + + The dependency scanning happens depth-first. The returned + dependencies should be in the best order to define bblayers. + + names - list of layer names (searching layerItems) + branches - when specified (with names) only this list of branches are evaluated + + layerBranches - list of layerBranches to resolve dependencies + + ignores - list of layer names to ignore + + return: (dependencies, invalid) + + dependencies[LayerItem.name] = [ LayerBranch, LayerDependency1, LayerDependency2, ... ] + invalid = [ LayerItem.name1, LayerItem.name2, ... ]''' + + invalid = [] + + # Convert name/branch to layerBranches + if layerbranches is None: + layerbranches = [] + + for name in names: + if ignores and name in ignores: + continue + + layerbranch = self.find_layerbranch(name, branches) + if not layerbranch: + invalid.append(name) + else: + layerbranches.append(layerbranch) + + for layerbranch in layerbranches: + if layerbranch.index != self: + raise LayerIndexException("Can not resolve dependencies across indexes with this class function!") + + def _resolve_dependencies(layerbranches, ignores, dependencies, invalid): + for layerbranch in layerbranches: + if ignores and layerBranch.layer.name in ignores: + continue + + for layerdependency in layerbranch.index.layerDependencies_layerBranchId[layerBranch.id]: + deplayerbranch = layerDependency.dependency_layerBranch + + if ignores and deplayerbranch.layer.name in ignores: + continue + + # New dependency, we need to resolve it now... depth-first + if deplayerbranch.layer.name not in dependencies: + (dependencies, invalid) = _resolve_dependencies([deplayerbranch], ignores, dependencies, invalid) + + if deplayerbranch.layer.name not in dependencies: + dependencies[deplayerbranch.layer.name] = [deplayerbranch, layerdependency] + else: + if layerdependency not in dependencies[deplayerbranch.layer.name]: + dependencies[deplayerbranch.layer.name].append(layerdependency) + + return (dependencies, invalid) + + # OK, resolve this one... + dependencies = OrderedDict() + (dependencies, invalid) = _resolve_dependencies(layerbranches, ignores, dependencies, invalid) + + # Is this item already in the list, if not add it + for layerbranch in layerbranches: + if layerbranch.layer.name not in dependencies: + dependencies[layerbranch.layer.name] = [layerbranch] + + return (dependencies, invalid) + + +# Define a basic LayerIndexItemObj. This object forms the basis for all other +# objects. The raw Layer Index data is stored in the _data element, but we +# do not want users to access data directly. So wrap this and protect it +# from direct manipulation. +# +# It is up to the insantiators of the objects to fill them out, and once done +# lock the objects to prevent further accidently manipulation. +# +# Using the getattr, setattr and properties we can access and manipulate +# the data within the data element. +class LayerIndexItemObj(): + def __init__(self, index, data=None, lock=False): + if data is None: + data = {} + + if type(data) != type(dict()): + raise TypeError('data (%s) is not a dict' % type(data)) + + super().__setattr__('_lock', lock) + super().__setattr__('index', index) + super().__setattr__('_data', data) + + def __eq__(self, other): + if self.__class__ != other.__class__: + return False + res=(self._data == other._data) + return res + + def __bool__(self): + return bool(self._data) + + def __getattr__(self, name): + # These are internal to THIS class, and not part of data + if name == "index" or name.startswith('_'): + return super().__getattribute__(name) + + if name not in self._data: + raise AttributeError('%s not in datastore' % name) + + return self._data[name] + + def _setattr(self, name, value, prop=True): + '''__setattr__ like function, but with control over property object behavior''' + if self.isLocked(): + raise TypeError("Can not set attribute '%s': Object data is locked" % name) + + if name.startswith('_'): + super().__setattr__(name, value) + return + + # Since __setattr__ runs before properties, we need to check if + # there is a setter property and then execute it + # ... or return self._data[name] + propertyobj = getattr(self.__class__, name, None) + if prop and isinstance(propertyobj, property): + if propertyobj.fset: + propertyobj.fset(self, value) + else: + raise AttributeError('Attribute %s is readonly, and may not be set' % name) + else: + self._data[name] = value + + def __setattr__(self, name, value): + self._setattr(name, value, prop=True) + + def _delattr(self, name, prop=True): + # Since __delattr__ runs before properties, we need to check if + # there is a deleter property and then execute it + # ... or we pop it ourselves.. + propertyobj = getattr(self.__class__, name, None) + if prop and isinstance(propertyobj, property): + if propertyobj.fdel: + propertyobj.fdel(self) + else: + raise AttributeError('Attribute %s is readonly, and may not be deleted' % name) + else: + self._data.pop(name) + + def __delattr__(self, name): + self._delattr(name, prop=True) + + def lockData(self): + '''Lock data object (make it readonly)''' + super().__setattr__("_lock", True) + + def unlockData(self): + '''unlock data object (make it readonly)''' + super().__setattr__("_lock", False) + + def isLocked(self): + '''Is this object locked (readonly)?''' + return self._lock + +# Branch object +class Branch(LayerIndexItemObj): + def define_data(self, id, name, bitbake_branch, + short_description=None, sort_priority=1, + updates_enabled=True, updated=None, + update_environment=None): + self.id = id + self.name = name + self.bitbake_branch = bitbake_branch + self.short_description = short_description or name + self.sort_priority = sort_priority + self.updates_enabled = updates_enabled + self.updated = updated or datetime.datetime.today().isoformat() + self.update_environment = update_environment + + @property + def name(self): + return self.__getattr__('name') + + @name.setter + def name(self, value): + self._data['name'] = value + + if self.bitbake_branch == value: + self.bitbake_branch = "" + + @name.deleter + def name(self): + self._delattr('name', prop=False) + + @property + def bitbake_branch(self): + try: + return self.__getattr__('bitbake_branch') + except AttributeError: + return self.name + + @bitbake_branch.setter + def bitbake_branch(self, value): + if self.name == value: + self._data['bitbake_branch'] = "" + else: + self._data['bitbake_branch'] = value + + @bitbake_branch.deleter + def bitbake_branch(self): + self._delattr('bitbake_branch', prop=False) + + +class LayerItem(LayerIndexItemObj): + def define_data(self, id, name, status='P', + layer_type='A', summary=None, + description=None, + vcs_url=None, vcs_web_url=None, + vcs_web_tree_base_url=None, + vcs_web_file_base_url=None, + usage_url=None, + mailing_list_url=None, + index_preference=1, + classic=False, + updated=None): + self.id = id + self.name = name + self.status = status + self.layer_type = layer_type + self.summary = summary or name + self.description = description or summary or name + self.vcs_url = vcs_url + self.vcs_web_url = vcs_web_url + self.vcs_web_tree_base_url = vcs_web_tree_base_url + self.vcs_web_file_base_url = vcs_web_file_base_url + self.index_preference = index_preference + self.classic = classic + self.updated = updated or datetime.datetime.today().isoformat() + + +class LayerBranch(LayerIndexItemObj): + def define_data(self, id, collection, version, layer, branch, + vcs_subdir="", vcs_last_fetch=None, + vcs_last_rev=None, vcs_last_commit=None, + actual_branch="", + updated=None): + self.id = id + self.collection = collection + self.version = version + if isinstance(layer, LayerItem): + self.layer = layer + else: + self.layer_id = layer + + if isinstance(branch, Branch): + self.branch = branch + else: + self.branch_id = branch + + self.vcs_subdir = vcs_subdir + self.vcs_last_fetch = vcs_last_fetch + self.vcs_last_rev = vcs_last_rev + self.vcs_last_commit = vcs_last_commit + self.actual_branch = actual_branch + self.updated = updated or datetime.datetime.today().isoformat() + + # This is a little odd, the _data attribute is 'layer', but it's really + # referring to the layer id.. so lets adjust this to make it useful + @property + def layer_id(self): + return self.__getattr__('layer') + + @layer_id.setter + def layer_id(self, value): + self._setattr('layer', value, prop=False) + + @layer_id.deleter + def layer_id(self): + self._delattr('layer', prop=False) + + @property + def layer(self): + try: + return self.index.layerItems[self.layer_id] + except KeyError: + raise AttributeError('Unable to find layerItems in index to map layer_id %s' % self.layer_id) + except IndexError: + raise AttributeError('Unable to find layer_id %s in index layerItems' % self.layer_id) + + @layer.setter + def layer(self, value): + if not isinstance(value, LayerItem): + raise TypeError('value is not a LayerItem') + if self.index != value.index: + raise AttributeError('Object and value do not share the same index and thus key set.') + self.layer_id = value.id + + @layer.deleter + def layer(self): + del self.layer_id + + @property + def branch_id(self): + return self.__getattr__('branch') + + @branch_id.setter + def branch_id(self, value): + self._setattr('branch', value, prop=False) + + @branch_id.deleter + def branch_id(self): + self._delattr('branch', prop=False) + + @property + def branch(self): + try: + logger.debug(1, "Get branch object from branches[%s]" % (self.branch_id)) + return self.index.branches[self.branch_id] + except KeyError: + raise AttributeError('Unable to find branches in index to map branch_id %s' % self.branch_id) + except IndexError: + raise AttributeError('Unable to find branch_id %s in index branches' % self.branch_id) + + @branch.setter + def branch(self, value): + if not isinstance(value, LayerItem): + raise TypeError('value is not a LayerItem') + if self.index != value.index: + raise AttributeError('Object and value do not share the same index and thus key set.') + self.branch_id = value.id + + @branch.deleter + def branch(self): + del self.branch_id + + @property + def actual_branch(self): + if self.__getattr__('actual_branch'): + return self.__getattr__('actual_branch') + else: + return self.branch.name + + @actual_branch.setter + def actual_branch(self, value): + logger.debug(1, "Set actual_branch to %s .. name is %s" % (value, self.branch.name)) + if value != self.branch.name: + self._setattr('actual_branch', value, prop=False) + else: + self._setattr('actual_branch', '', prop=False) + + @actual_branch.deleter + def actual_branch(self): + self._delattr('actual_branch', prop=False) + +# Extend LayerIndexItemObj with common LayerBranch manipulations +# All of the remaining LayerIndex objects refer to layerbranch, and it is +# up to the user to follow that back through the LayerBranch object into +# the layer object to get various attributes. So add an intermediate set +# of attributes that can easily get us the layerbranch as well as layer. + +class LayerIndexItemObj_LayerBranch(LayerIndexItemObj): + @property + def layerbranch_id(self): + return self.__getattr__('layerbranch') + + @layerbranch_id.setter + def layerbranch_id(self, value): + self._setattr('layerbranch', value, prop=False) + + @layerbranch_id.deleter + def layerbranch_id(self): + self._delattr('layerbranch', prop=False) + + @property + def layerbranch(self): + try: + return self.index.layerBranches[self.layerbranch_id] + except KeyError: + raise AttributeError('Unable to find layerBranches in index to map layerbranch_id %s' % self.layerbranch_id) + except IndexError: + raise AttributeError('Unable to find layerbranch_id %s in index branches' % self.layerbranch_id) + + @layerbranch.setter + def layerbranch(self, value): + if not isinstance(value, LayerBranch): + raise TypeError('value (%s) is not a layerBranch' % type(value)) + if self.index != value.index: + raise AttributeError('Object and value do not share the same index and thus key set.') + self.layerbranch_id = value.id + + @layerbranch.deleter + def layerbranch(self): + del self.layerbranch_id + + @property + def layer_id(self): + return self.layerbranch.layer_id + + # Doesn't make sense to set or delete layer_id + + @property + def layer(self): + return self.layerbranch.layer + + # Doesn't make sense to set or delete layer + + +class LayerDependency(LayerIndexItemObj_LayerBranch): + def define_data(self, id, layerbranch, dependency, required=True): + self.id = id + if isinstance(layerbranch, LayerBranch): + self.layerbranch = layerbranch + else: + self.layerbranch_id = layerbranch + if isinstance(dependency, LayerDependency): + self.dependency = dependency + else: + self.dependency_id = dependency + self.required = required + + @property + def dependency_id(self): + return self.__getattr__('dependency') + + @dependency_id.setter + def dependency_id(self, value): + self._setattr('dependency', value, prop=False) + + @dependency_id.deleter + def dependency_id(self): + self._delattr('dependency', prop=False) + + @property + def dependency(self): + try: + return self.index.layerItems[self.dependency_id] + except KeyError: + raise AttributeError('Unable to find layerItems in index to map layerbranch_id %s' % self.dependency_id) + except IndexError: + raise AttributeError('Unable to find dependency_id %s in index layerItems' % self.dependency_id) + + @dependency.setter + def dependency(self, value): + if not isinstance(value, LayerDependency): + raise TypeError('value (%s) is not a dependency' % type(value)) + if self.index != value.index: + raise AttributeError('Object and value do not share the same index and thus key set.') + self.dependency_id = value.id + + @dependency.deleter + def dependency(self): + self._delattr('dependency', prop=False) + + @property + def dependency_layerBranch(self): + layerid = self.dependency_id + branchid = self.layerbranch.branch_id + + try: + return self.index.layerBranches_layerId_branchId["%s:%s" % (layerid, branchid)] + except IndexError: + # layerBranches_layerId_branchId -- but not layerId:branchId + raise AttributeError('Unable to find layerId:branchId %s:%s in index layerBranches_layerId_branchId' % (layerid, branchid)) + except KeyError: + raise AttributeError('Unable to find layerId:branchId %s:%s in layerItems and layerBranches' % (layerid, branchid)) + + # dependency_layerBranch doesn't make sense to set or del + + +class Recipe(LayerIndexItemObj_LayerBranch): + def define_data(self, id, + filename, filepath, pn, pv, layerbranch, + summary="", description="", section="", license="", + homepage="", bugtracker="", provides="", bbclassextend="", + inherits="", blacklisted="", updated=None): + self.id = id + self.filename = filename + self.filepath = filepath + self.pn = pn + self.pv = pv + self.summary = summary + self.description = description + self.section = section + self.license = license + self.homepage = homepage + self.bugtracker = bugtracker + self.provides = provides + self.bbclassextend = bbclassextend + self.inherits = inherits + self.updated = updated or datetime.datetime.today().isoformat() + self.blacklisted = blacklisted + if isinstance(layerbranch, LayerBranch): + self.layerbranch = layerbranch + else: + self.layerbranch_id = layerbranch + + @property + def fullpath(self): + return os.path.join(self.filepath, self.filename) + + # Set would need to understand how to split it + # del would we del both parts? + + @property + def inherits(self): + if 'inherits' not in self._data: + # Older indexes may not have this, so emulate it + if '-image-' in self.pn: + return 'image' + return self.__getattr__('inherits') + + @inherits.setter + def inherits(self, value): + return self._setattr('inherits', value, prop=False) + + @inherits.deleter + def inherits(self): + return self._delattr('inherits', prop=False) + + +class Machine(LayerIndexItemObj_LayerBranch): + def define_data(self, id, + name, description, layerbranch, + updated=None): + self.id = id + self.name = name + self.description = description + if isinstance(layerbranch, LayerBranch): + self.layerbranch = layerbranch + else: + self.layerbranch_id = layerbranch + self.updated = updated or datetime.datetime.today().isoformat() + +class Distro(LayerIndexItemObj_LayerBranch): + def define_data(self, id, + name, description, layerbranch, + updated=None): + self.id = id + self.name = name + self.description = description + if isinstance(layerbranch, LayerBranch): + self.layerbranch = layerbranch + else: + self.layerbranch_id = layerbranch + self.updated = updated or datetime.datetime.today().isoformat() + +# When performing certain actions, we may need to sort the data. +# This will allow us to keep it consistent from run to run. +def sort_entry(item): + newitem = item + try: + if type(newitem) == type(dict()): + newitem = OrderedDict(sorted(newitem.items(), key=lambda t: t[0])) + for index in newitem: + newitem[index] = sort_entry(newitem[index]) + elif type(newitem) == type(list()): + newitem.sort(key=lambda obj: obj['id']) + for index, _ in enumerate(newitem): + newitem[index] = sort_entry(newitem[index]) + except: + logger.error('Sort failed for item %s' % type(item)) + pass + + return newitem diff --git a/poky/bitbake/lib/layerindexlib/cooker.py b/poky/bitbake/lib/layerindexlib/cooker.py new file mode 100644 index 000000000..848f0e2ee --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/cooker.py @@ -0,0 +1,344 @@ +# Copyright (C) 2016-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 logging +import json + +from collections import OrderedDict, defaultdict + +from urllib.parse import unquote, urlparse + +import layerindexlib + +import layerindexlib.plugin + +logger = logging.getLogger('BitBake.layerindexlib.cooker') + +import bb.utils + +def plugin_init(plugins): + return CookerPlugin() + +class CookerPlugin(layerindexlib.plugin.IndexPlugin): + def __init__(self): + self.type = "cooker" + + self.server_connection = None + self.ui_module = None + self.server = None + + def _run_command(self, command, path, default=None): + try: + result, _ = bb.process.run(command, cwd=path) + result = result.strip() + except bb.process.ExecutionError: + result = default + return result + + def _handle_git_remote(self, remote): + if "://" not in remote: + if ':' in remote: + # This is assumed to be ssh + remote = "ssh://" + remote + else: + # This is assumed to be a file path + remote = "file://" + remote + return remote + + def _get_bitbake_info(self): + """Return a tuple of bitbake information""" + + # Our path SHOULD be .../bitbake/lib/layerindex/cooker.py + bb_path = os.path.dirname(__file__) # .../bitbake/lib/layerindex/cooker.py + bb_path = os.path.dirname(bb_path) # .../bitbake/lib/layerindex + bb_path = os.path.dirname(bb_path) # .../bitbake/lib + bb_path = os.path.dirname(bb_path) # .../bitbake + bb_path = self._run_command('git rev-parse --show-toplevel', os.path.dirname(__file__), default=bb_path) + bb_branch = self._run_command('git rev-parse --abbrev-ref HEAD', bb_path, default="") + bb_rev = self._run_command('git rev-parse HEAD', bb_path, default="") + for remotes in self._run_command('git remote -v', bb_path, default="").split("\n"): + remote = remotes.split("\t")[1].split(" ")[0] + if "(fetch)" == remotes.split("\t")[1].split(" ")[1]: + bb_remote = self._handle_git_remote(remote) + break + else: + bb_remote = self._handle_git_remote(bb_path) + + return (bb_remote, bb_branch, bb_rev, bb_path) + + def _load_bblayers(self, branches=None): + """Load the BBLAYERS and related collection information""" + + d = self.layerindex.data + + if not branches: + raise LayerIndexFetchError("No branches specified for _load_bblayers!") + + index = layerindexlib.LayerIndexObj() + + branchId = 0 + index.branches = {} + + layerItemId = 0 + index.layerItems = {} + + layerBranchId = 0 + index.layerBranches = {} + + bblayers = d.getVar('BBLAYERS').split() + + if not bblayers: + # It's blank! Nothing to process... + return index + + collections = d.getVar('BBFILE_COLLECTIONS') + layerconfs = d.varhistory.get_variable_items_files('BBFILE_COLLECTIONS', d) + bbfile_collections = {layer: os.path.dirname(os.path.dirname(path)) for layer, path in layerconfs.items()} + + (_, bb_branch, _, _) = self._get_bitbake_info() + + for branch in branches: + branchId += 1 + index.branches[branchId] = layerindexlib.Branch(index, None) + index.branches[branchId].define_data(branchId, branch, bb_branch) + + for entry in collections.split(): + layerpath = entry + if entry in bbfile_collections: + layerpath = bbfile_collections[entry] + + layername = d.getVar('BBLAYERS_LAYERINDEX_NAME_%s' % entry) or os.path.basename(layerpath) + layerversion = d.getVar('LAYERVERSION_%s' % entry) or "" + layerurl = self._handle_git_remote(layerpath) + + layersubdir = "" + layerrev = "" + layerbranch = "" + + if os.path.isdir(layerpath): + layerbasepath = self._run_command('git rev-parse --show-toplevel', layerpath, default=layerpath) + if os.path.abspath(layerpath) != os.path.abspath(layerbasepath): + layersubdir = os.path.abspath(layerpath)[len(layerbasepath) + 1:] + + layerbranch = self._run_command('git rev-parse --abbrev-ref HEAD', layerpath, default="") + layerrev = self._run_command('git rev-parse HEAD', layerpath, default="") + + for remotes in self._run_command('git remote -v', layerpath, default="").split("\n"): + if not remotes: + layerurl = self._handle_git_remote(layerpath) + else: + remote = remotes.split("\t")[1].split(" ")[0] + if "(fetch)" == remotes.split("\t")[1].split(" ")[1]: + layerurl = self._handle_git_remote(remote) + break + + layerItemId += 1 + index.layerItems[layerItemId] = layerindexlib.LayerItem(index, None) + index.layerItems[layerItemId].define_data(layerItemId, layername, description=layerpath, vcs_url=layerurl) + + for branchId in index.branches: + layerBranchId += 1 + index.layerBranches[layerBranchId] = layerindexlib.LayerBranch(index, None) + index.layerBranches[layerBranchId].define_data(layerBranchId, entry, layerversion, layerItemId, branchId, + vcs_subdir=layersubdir, vcs_last_rev=layerrev, actual_branch=layerbranch) + + return index + + + def load_index(self, url, load): + """ + Fetches layer information from a build configuration. + + The return value is a dictionary containing API, + layer, branch, dependency, recipe, machine, distro, information. + + url type should be 'cooker'. + url path is ignored + """ + + up = urlparse(url) + + if up.scheme != 'cooker': + raise layerindexlib.plugin.LayerIndexPluginUrlError(self.type, url) + + d = self.layerindex.data + + params = self.layerindex._parse_params(up.params) + + # Only reason to pass a branch is to emulate them... + if 'branch' in params: + branches = params['branch'].split(',') + else: + branches = ['HEAD'] + + logger.debug(1, "Loading cooker data branches %s" % branches) + + index = self._load_bblayers(branches=branches) + + index.config = {} + index.config['TYPE'] = self.type + index.config['URL'] = url + + if 'desc' in params: + index.config['DESCRIPTION'] = unquote(params['desc']) + else: + index.config['DESCRIPTION'] = 'local' + + if 'cache' in params: + index.config['CACHE'] = params['cache'] + + index.config['BRANCH'] = branches + + # ("layerDependencies", layerindexlib.LayerDependency) + layerDependencyId = 0 + if "layerDependencies" in load: + index.layerDependencies = {} + for layerBranchId in index.layerBranches: + branchName = index.layerBranches[layerBranchId].branch.name + collection = index.layerBranches[layerBranchId].collection + + def add_dependency(layerDependencyId, index, deps, required): + try: + depDict = bb.utils.explode_dep_versions2(deps) + except bb.utils.VersionStringException as vse: + bb.fatal('Error parsing LAYERDEPENDS_%s: %s' % (c, str(vse))) + + for dep, oplist in list(depDict.items()): + # We need to search ourselves, so use the _ version... + depLayerBranch = index.find_collection(dep, branches=[branchName]) + if not depLayerBranch: + # Missing dependency?! + logger.error('Missing dependency %s (%s)' % (dep, branchName)) + continue + + # We assume that the oplist matches... + layerDependencyId += 1 + layerDependency = layerindexlib.LayerDependency(index, None) + layerDependency.define_data(id=layerDependencyId, + required=required, layerbranch=layerBranchId, + dependency=depLayerBranch.layer_id) + + logger.debug(1, '%s requires %s' % (layerDependency.layer.name, layerDependency.dependency.name)) + index.add_element("layerDependencies", [layerDependency]) + + return layerDependencyId + + deps = d.getVar("LAYERDEPENDS_%s" % collection) + if deps: + layerDependencyId = add_dependency(layerDependencyId, index, deps, True) + + deps = d.getVar("LAYERRECOMMENDS_%s" % collection) + if deps: + layerDependencyId = add_dependency(layerDependencyId, index, deps, False) + + # Need to load recipes here (requires cooker access) + recipeId = 0 + ## TODO: NOT IMPLEMENTED + # The code following this is an example of what needs to be + # implemented. However, it does not work as-is. + if False and 'recipes' in load: + index.recipes = {} + + ret = self.ui_module.main(self.server_connection.connection, self.server_connection.events, config_params) + + all_versions = self._run_command('allProviders') + + all_versions_list = defaultdict(list, all_versions) + for pn in all_versions_list: + for ((pe, pv, pr), fpath) in all_versions_list[pn]: + realfn = bb.cache.virtualfn2realfn(fpath) + + filepath = os.path.dirname(realfn[0]) + filename = os.path.basename(realfn[0]) + + # This is all HORRIBLY slow, and likely unnecessary + #dscon = self._run_command('parseRecipeFile', fpath, False, []) + #connector = myDataStoreConnector(self, dscon.dsindex) + #recipe_data = bb.data.init() + #recipe_data.setVar('_remote_data', connector) + + #summary = recipe_data.getVar('SUMMARY') + #description = recipe_data.getVar('DESCRIPTION') + #section = recipe_data.getVar('SECTION') + #license = recipe_data.getVar('LICENSE') + #homepage = recipe_data.getVar('HOMEPAGE') + #bugtracker = recipe_data.getVar('BUGTRACKER') + #provides = recipe_data.getVar('PROVIDES') + + layer = bb.utils.get_file_layer(realfn[0], self.config_data) + + depBranchId = collection_layerbranch[layer] + + recipeId += 1 + recipe = layerindexlib.Recipe(index, None) + recipe.define_data(id=recipeId, + filename=filename, filepath=filepath, + pn=pn, pv=pv, + summary=pn, description=pn, section='?', + license='?', homepage='?', bugtracker='?', + provides='?', bbclassextend='?', inherits='?', + blacklisted='?', layerbranch=depBranchId) + + index = addElement("recipes", [recipe], index) + + # ("machines", layerindexlib.Machine) + machineId = 0 + if 'machines' in load: + index.machines = {} + + for layerBranchId in index.layerBranches: + # load_bblayers uses the description to cache the actual path... + machine_path = index.layerBranches[layerBranchId].layer.description + machine_path = os.path.join(machine_path, 'conf/machine') + if os.path.isdir(machine_path): + for (dirpath, _, filenames) in os.walk(machine_path): + # Ignore subdirs... + if not dirpath.endswith('conf/machine'): + continue + for fname in filenames: + if fname.endswith('.conf'): + machineId += 1 + machine = layerindexlib.Machine(index, None) + machine.define_data(id=machineId, name=fname[:-5], + description=fname[:-5], + layerbranch=index.layerBranches[layerBranchId]) + + index.add_element("machines", [machine]) + + # ("distros", layerindexlib.Distro) + distroId = 0 + if 'distros' in load: + index.distros = {} + + for layerBranchId in index.layerBranches: + # load_bblayers uses the description to cache the actual path... + distro_path = index.layerBranches[layerBranchId].layer.description + distro_path = os.path.join(distro_path, 'conf/distro') + if os.path.isdir(distro_path): + for (dirpath, _, filenames) in os.walk(distro_path): + # Ignore subdirs... + if not dirpath.endswith('conf/distro'): + continue + for fname in filenames: + if fname.endswith('.conf'): + distroId += 1 + distro = layerindexlib.Distro(index, None) + distro.define_data(id=distroId, name=fname[:-5], + description=fname[:-5], + layerbranch=index.layerBranches[layerBranchId]) + + index.add_element("distros", [distro]) + + return index diff --git a/poky/bitbake/lib/layerindexlib/plugin.py b/poky/bitbake/lib/layerindexlib/plugin.py new file mode 100644 index 000000000..92a2e978b --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/plugin.py @@ -0,0 +1,60 @@ +# Copyright (C) 2016-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 + +# The file contains: +# LayerIndex exceptions +# Plugin base class +# Utility Functions for working on layerindex data + +import argparse +import logging +import os +import bb.msg + +logger = logging.getLogger('BitBake.layerindexlib.plugin') + +class LayerIndexPluginException(Exception): + """LayerIndex Generic Exception""" + def __init__(self, message): + self.msg = message + Exception.__init__(self, message) + + def __str__(self): + return self.msg + +class LayerIndexPluginUrlError(LayerIndexPluginException): + """Exception raised when a plugin does not support a given URL type""" + def __init__(self, plugin, url): + msg = "%s does not support %s:" % (plugin, url) + self.plugin = plugin + self.url = url + LayerIndexPluginException.__init__(self, msg) + +class IndexPlugin(): + def __init__(self): + self.type = None + + def init(self, layerindex): + self.layerindex = layerindex + + def plugin_type(self): + return self.type + + def load_index(self, uri): + raise NotImplementedError('load_index is not implemented') + + def store_index(self, uri, index): + raise NotImplementedError('store_index is not implemented') + diff --git a/poky/bitbake/lib/layerindexlib/restapi.py b/poky/bitbake/lib/layerindexlib/restapi.py new file mode 100644 index 000000000..d08eb2055 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/restapi.py @@ -0,0 +1,398 @@ +# Copyright (C) 2016-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 logging +import json +from urllib.parse import unquote +from urllib.parse import urlparse + +import layerindexlib +import layerindexlib.plugin + +logger = logging.getLogger('BitBake.layerindexlib.restapi') + +def plugin_init(plugins): + return RestApiPlugin() + +class RestApiPlugin(layerindexlib.plugin.IndexPlugin): + def __init__(self): + self.type = "restapi" + + def load_index(self, url, load): + """ + Fetches layer information from a local or remote layer index. + + The return value is a LayerIndexObj. + + url is the url to the rest api of the layer index, such as: + http://layers.openembedded.org/layerindex/api/ + + Or a local file... + """ + + up = urlparse(url) + + if up.scheme == 'file': + return self.load_index_file(up, url, load) + + if up.scheme == 'http' or up.scheme == 'https': + return self.load_index_web(up, url, load) + + raise layerindexlib.plugin.LayerIndexPluginUrlError(self.type, url) + + + def load_index_file(self, up, url, load): + """ + Fetches layer information from a local file or directory. + + The return value is a LayerIndexObj. + + ud is the parsed url to the local file or directory. + """ + if not os.path.exists(up.path): + raise FileNotFoundError(up.path) + + index = layerindexlib.LayerIndexObj() + + index.config = {} + index.config['TYPE'] = self.type + index.config['URL'] = url + + params = self.layerindex._parse_params(up.params) + + if 'desc' in params: + index.config['DESCRIPTION'] = unquote(params['desc']) + else: + index.config['DESCRIPTION'] = up.path + + if 'cache' in params: + index.config['CACHE'] = params['cache'] + + if 'branch' in params: + branches = params['branch'].split(',') + index.config['BRANCH'] = branches + else: + branches = ['*'] + + + def load_cache(path, index, branches=[]): + logger.debug(1, 'Loading json file %s' % path) + with open(path, 'rt', encoding='utf-8') as f: + pindex = json.load(f) + + # Filter the branches on loaded files... + newpBranch = [] + for branch in branches: + if branch != '*': + if 'branches' in pindex: + for br in pindex['branches']: + if br['name'] == branch: + newpBranch.append(br) + else: + if 'branches' in pindex: + for br in pindex['branches']: + newpBranch.append(br) + + if newpBranch: + index.add_raw_element('branches', layerindexlib.Branch, newpBranch) + else: + logger.debug(1, 'No matching branches (%s) in index file(s)' % branches) + # No matching branches.. return nothing... + return + + for (lName, lType) in [("layerItems", layerindexlib.LayerItem), + ("layerBranches", layerindexlib.LayerBranch), + ("layerDependencies", layerindexlib.LayerDependency), + ("recipes", layerindexlib.Recipe), + ("machines", layerindexlib.Machine), + ("distros", layerindexlib.Distro)]: + if lName in pindex: + index.add_raw_element(lName, lType, pindex[lName]) + + + if not os.path.isdir(up.path): + load_cache(up.path, index, branches) + return index + + logger.debug(1, 'Loading from dir %s...' % (up.path)) + for (dirpath, _, filenames) in os.walk(up.path): + for filename in filenames: + if not filename.endswith('.json'): + continue + fpath = os.path.join(dirpath, filename) + load_cache(fpath, index, branches) + + return index + + + def load_index_web(self, up, url, load): + """ + Fetches layer information from a remote layer index. + + The return value is a LayerIndexObj. + + ud is the parsed url to the rest api of the layer index, such as: + http://layers.openembedded.org/layerindex/api/ + """ + + def _get_json_response(apiurl=None, username=None, password=None, retry=True): + assert apiurl is not None + + logger.debug(1, "fetching %s" % apiurl) + + up = urlparse(apiurl) + + username=up.username + password=up.password + + # Strip username/password and params + if up.port: + up_stripped = up._replace(params="", netloc="%s:%s" % (up.hostname, up.port)) + else: + up_stripped = up._replace(params="", netloc=up.hostname) + + res = self.layerindex._fetch_url(up_stripped.geturl(), username=username, password=password) + + try: + parsed = json.loads(res.read().decode('utf-8')) + except ConnectionResetError: + if retry: + logger.debug(1, "%s: Connection reset by peer. Retrying..." % url) + parsed = _get_json_response(apiurl=up_stripped.geturl(), username=username, password=password, retry=False) + logger.debug(1, "%s: retry successful.") + else: + raise LayerIndexFetchError('%s: Connection reset by peer. Is there a firewall blocking your connection?' % apiurl) + + return parsed + + index = layerindexlib.LayerIndexObj() + + index.config = {} + index.config['TYPE'] = self.type + index.config['URL'] = url + + params = self.layerindex._parse_params(up.params) + + if 'desc' in params: + index.config['DESCRIPTION'] = unquote(params['desc']) + else: + index.config['DESCRIPTION'] = up.hostname + + if 'cache' in params: + index.config['CACHE'] = params['cache'] + + if 'branch' in params: + branches = params['branch'].split(',') + index.config['BRANCH'] = branches + else: + branches = ['*'] + + try: + index.apilinks = _get_json_response(apiurl=url, username=up.username, password=up.password) + except Exception as e: + raise layerindexlib.LayerIndexFetchError(url, e) + + # Local raw index set... + pindex = {} + + # Load all the requested branches at the same time time, + # a special branch of '*' means load all branches + filter = "" + if "*" not in branches: + filter = "?filter=name:%s" % "OR".join(branches) + + logger.debug(1, "Loading %s from %s" % (branches, index.apilinks['branches'])) + + # The link won't include username/password, so pull it from the original url + pindex['branches'] = _get_json_response(index.apilinks['branches'] + filter, + username=up.username, password=up.password) + if not pindex['branches']: + logger.debug(1, "No valid branches (%s) found at url %s." % (branch, url)) + return index + index.add_raw_element("branches", layerindexlib.Branch, pindex['branches']) + + # Load all of the layerItems (these can not be easily filtered) + logger.debug(1, "Loading %s from %s" % ('layerItems', index.apilinks['layerItems'])) + + + # The link won't include username/password, so pull it from the original url + pindex['layerItems'] = _get_json_response(index.apilinks['layerItems'], + username=up.username, password=up.password) + if not pindex['layerItems']: + logger.debug(1, "No layers were found at url %s." % (url)) + return index + index.add_raw_element("layerItems", layerindexlib.LayerItem, pindex['layerItems']) + + + # From this point on load the contents for each branch. Otherwise we + # could run into a timeout. + for branch in index.branches: + filter = "?filter=branch__name:%s" % index.branches[branch].name + + logger.debug(1, "Loading %s from %s" % ('layerBranches', index.apilinks['layerBranches'])) + + # The link won't include username/password, so pull it from the original url + pindex['layerBranches'] = _get_json_response(index.apilinks['layerBranches'] + filter, + username=up.username, password=up.password) + if not pindex['layerBranches']: + logger.debug(1, "No valid layer branches (%s) found at url %s." % (branches or "*", url)) + return index + index.add_raw_element("layerBranches", layerindexlib.LayerBranch, pindex['layerBranches']) + + + # Load the rest, they all have a similar format + # Note: the layer index has a few more items, we can add them if necessary + # in the future. + filter = "?filter=layerbranch__branch__name:%s" % index.branches[branch].name + for (lName, lType) in [("layerDependencies", layerindexlib.LayerDependency), + ("recipes", layerindexlib.Recipe), + ("machines", layerindexlib.Machine), + ("distros", layerindexlib.Distro)]: + if lName not in load: + continue + logger.debug(1, "Loading %s from %s" % (lName, index.apilinks[lName])) + + # The link won't include username/password, so pull it from the original url + pindex[lName] = _get_json_response(index.apilinks[lName] + filter, + username=up.username, password=up.password) + index.add_raw_element(lName, lType, pindex[lName]) + + return index + + def store_index(self, url, index): + """ + Store layer information into a local file/dir. + + The return value is a dictionary containing API, + layer, branch, dependency, recipe, machine, distro, information. + + ud is a parsed url to a directory or file. If the path is a + directory, we will split the files into one file per layer. + If the path is to a file (exists or not) the entire DB will be + dumped into that one file. + """ + + up = urlparse(url) + + if up.scheme != 'file': + raise layerindexlib.plugin.LayerIndexPluginUrlError(self.type, url) + + logger.debug(1, "Storing to %s..." % up.path) + + try: + layerbranches = index.layerBranches + except KeyError: + logger.error('No layerBranches to write.') + return + + + def filter_item(layerbranchid, objects): + filtered = [] + for obj in getattr(index, objects, None): + try: + if getattr(index, objects)[obj].layerbranch_id == layerbranchid: + filtered.append(getattr(index, objects)[obj]._data) + except AttributeError: + logger.debug(1, 'No obj.layerbranch_id: %s' % objects) + # No simple filter method, just include it... + try: + filtered.append(getattr(index, objects)[obj]._data) + except AttributeError: + logger.debug(1, 'No obj._data: %s %s' % (objects, type(obj))) + filtered.append(obj) + return filtered + + + # Write out to a single file. + # Filter out unnecessary items, then sort as we write for determinism + if not os.path.isdir(up.path): + pindex = {} + + pindex['branches'] = [] + pindex['layerItems'] = [] + pindex['layerBranches'] = [] + + for layerbranchid in layerbranches: + if layerbranches[layerbranchid].branch._data not in pindex['branches']: + pindex['branches'].append(layerbranches[layerbranchid].branch._data) + + if layerbranches[layerbranchid].layer._data not in pindex['layerItems']: + pindex['layerItems'].append(layerbranches[layerbranchid].layer._data) + + if layerbranches[layerbranchid]._data not in pindex['layerBranches']: + pindex['layerBranches'].append(layerbranches[layerbranchid]._data) + + for entry in index._index: + # Skip local items, apilinks and items already processed + if entry in index.config['local'] or \ + entry == 'apilinks' or \ + entry == 'branches' or \ + entry == 'layerBranches' or \ + entry == 'layerItems': + continue + if entry not in pindex: + pindex[entry] = [] + pindex[entry].extend(filter_item(layerbranchid, entry)) + + bb.debug(1, 'Writing index to %s' % up.path) + with open(up.path, 'wt') as f: + json.dump(layerindexlib.sort_entry(pindex), f, indent=4) + return + + + # Write out to a directory one file per layerBranch + # Prepare all layer related items, to create a minimal file. + # We have to sort the entries as we write so they are deterministic + for layerbranchid in layerbranches: + pindex = {} + + for entry in index._index: + # Skip local items, apilinks and items already processed + if entry in index.config['local'] or \ + entry == 'apilinks' or \ + entry == 'branches' or \ + entry == 'layerBranches' or \ + entry == 'layerItems': + continue + pindex[entry] = filter_item(layerbranchid, entry) + + # Add the layer we're processing as the first one... + pindex['branches'] = [layerbranches[layerbranchid].branch._data] + pindex['layerItems'] = [layerbranches[layerbranchid].layer._data] + pindex['layerBranches'] = [layerbranches[layerbranchid]._data] + + # We also need to include the layerbranch for any dependencies... + for layerdep in pindex['layerDependencies']: + layerdependency = layerindexlib.LayerDependency(index, layerdep) + + layeritem = layerdependency.dependency + layerbranch = layerdependency.dependency_layerBranch + + # We need to avoid duplicates... + if layeritem._data not in pindex['layerItems']: + pindex['layerItems'].append(layeritem._data) + + if layerbranch._data not in pindex['layerBranches']: + pindex['layerBranches'].append(layerbranch._data) + + # apply mirroring adjustments here.... + + fname = index.config['DESCRIPTION'] + '__' + pindex['branches'][0]['name'] + '__' + pindex['layerItems'][0]['name'] + fname = fname.translate(str.maketrans('/ ', '__')) + fpath = os.path.join(up.path, fname) + + bb.debug(1, 'Writing index to %s' % fpath + '.json') + with open(fpath + '.json', 'wt') as f: + json.dump(layerindexlib.sort_entry(pindex), f, indent=4) diff --git a/poky/bitbake/lib/layerindexlib/tests/__init__.py b/poky/bitbake/lib/layerindexlib/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/poky/bitbake/lib/layerindexlib/tests/common.py b/poky/bitbake/lib/layerindexlib/tests/common.py new file mode 100644 index 000000000..22a54585c --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/common.py @@ -0,0 +1,43 @@ +# Copyright (C) 2017-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 unittest +import tempfile +import os +import bb + +import logging + +class LayersTest(unittest.TestCase): + + def setUp(self): + self.origdir = os.getcwd() + self.d = bb.data.init() + # At least one variable needs to be set + self.d.setVar('DL_DIR', os.getcwd()) + + if os.environ.get("BB_SKIP_NETTESTS") == "yes": + self.d.setVar('BB_NO_NETWORK', '1') + + self.tempdir = tempfile.mkdtemp() + self.logger = logging.getLogger("BitBake") + + def tearDown(self): + os.chdir(self.origdir) + if os.environ.get("BB_TMPDIR_NOCLEAN") == "yes": + print("Not cleaning up %s. Please remove manually." % self.tempdir) + else: + bb.utils.prunedir(self.tempdir) + diff --git a/poky/bitbake/lib/layerindexlib/tests/cooker.py b/poky/bitbake/lib/layerindexlib/tests/cooker.py new file mode 100644 index 000000000..fdbf09110 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/cooker.py @@ -0,0 +1,123 @@ +# 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 unittest +import tempfile +import os +import bb + +import layerindexlib +from layerindexlib.tests.common import LayersTest + +import logging + +class LayerIndexCookerTest(LayersTest): + + def setUp(self): + LayersTest.setUp(self) + + # Note this is NOT a comprehensive test of cooker, as we can't easily + # configure the test data. But we can emulate the basics of the layer.conf + # files, so that is what we will do. + + new_topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "testdata") + new_bbpath = os.path.join(new_topdir, "build") + + self.d.setVar('TOPDIR', new_topdir) + self.d.setVar('BBPATH', new_bbpath) + + self.d = bb.parse.handle("%s/conf/bblayers.conf" % new_bbpath, self.d, True) + for layer in self.d.getVar('BBLAYERS').split(): + self.d = bb.parse.handle("%s/conf/layer.conf" % layer, self.d, True) + + self.layerindex = layerindexlib.LayerIndex(self.d) + self.layerindex.load_layerindex('cooker://', load=['layerDependencies']) + + def test_layerindex_is_empty(self): + self.assertFalse(self.layerindex.is_empty(), msg="Layerindex is not empty!") + + def test_dependency_resolution(self): + # Verify depth first searching... + (dependencies, invalidnames) = self.layerindex.find_dependencies(names=['meta-python']) + + first = True + for deplayerbranch in dependencies: + layerBranch = dependencies[deplayerbranch][0] + layerDeps = dependencies[deplayerbranch][1:] + + if not first: + continue + + first = False + + # Top of the deps should be openembedded-core, since everything depends on it. + self.assertEqual(layerBranch.layer.name, "openembedded-core", msg='Top dependency not openembedded-core') + + # meta-python should cause an openembedded-core dependency, if not assert! + for dep in layerDeps: + if dep.layer.name == 'meta-python': + break + else: + self.assertTrue(False, msg='meta-python was not found') + + # Only check the first element... + break + else: + if first: + # Empty list, this is bad. + self.assertTrue(False, msg='Empty list of dependencies') + + # Last dep should be the requested item + layerBranch = dependencies[deplayerbranch][0] + self.assertEqual(layerBranch.layer.name, "meta-python", msg='Last dependency not meta-python') + + def test_find_collection(self): + def _check(collection, expected): + self.logger.debug(1, "Looking for collection %s..." % collection) + result = self.layerindex.find_collection(collection) + if expected: + self.assertIsNotNone(result, msg="Did not find %s when it shouldn't be there" % collection) + else: + self.assertIsNone(result, msg="Found %s when it should be there" % collection) + + tests = [ ('core', True), + ('openembedded-core', False), + ('networking-layer', True), + ('meta-python', True), + ('openembedded-layer', True), + ('notpresent', False) ] + + for collection,result in tests: + _check(collection, result) + + def test_find_layerbranch(self): + def _check(name, expected): + self.logger.debug(1, "Looking for layerbranch %s..." % name) + result = self.layerindex.find_layerbranch(name) + if expected: + self.assertIsNotNone(result, msg="Did not find %s when it shouldn't be there" % collection) + else: + self.assertIsNone(result, msg="Found %s when it should be there" % collection) + + tests = [ ('openembedded-core', True), + ('core', False), + ('networking-layer', True), + ('meta-python', True), + ('openembedded-layer', True), + ('notpresent', False) ] + + for collection,result in tests: + _check(collection, result) + diff --git a/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py b/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py new file mode 100644 index 000000000..e2fbb950b --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py @@ -0,0 +1,226 @@ +# Copyright (C) 2017-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 unittest +import tempfile +import os +import bb + +from layerindexlib.tests.common import LayersTest + +import logging + +class LayerIndexObjectsTest(LayersTest): + def setUp(self): + from layerindexlib import LayerIndexObj, Branch, LayerItem, LayerBranch, LayerDependency, Recipe, Machine, Distro + + LayersTest.setUp(self) + + self.index = LayerIndexObj() + + branchId = 0 + layerItemId = 0 + layerBranchId = 0 + layerDependencyId = 0 + recipeId = 0 + machineId = 0 + distroId = 0 + + self.index.branches = {} + self.index.layerItems = {} + self.index.layerBranches = {} + self.index.layerDependencies = {} + self.index.recipes = {} + self.index.machines = {} + self.index.distros = {} + + branchId += 1 + self.index.branches[branchId] = Branch(self.index) + self.index.branches[branchId].define_data(branchId, + 'test_branch', 'bb_test_branch') + self.index.branches[branchId].lockData() + + layerItemId +=1 + self.index.layerItems[layerItemId] = LayerItem(self.index) + self.index.layerItems[layerItemId].define_data(layerItemId, + 'test_layerItem', vcs_url='git://git_test_url/test_layerItem') + self.index.layerItems[layerItemId].lockData() + + layerBranchId +=1 + self.index.layerBranches[layerBranchId] = LayerBranch(self.index) + self.index.layerBranches[layerBranchId].define_data(layerBranchId, + 'test_collection', '99', layerItemId, + branchId) + + recipeId += 1 + self.index.recipes[recipeId] = Recipe(self.index) + self.index.recipes[recipeId].define_data(recipeId, 'test_git.bb', + 'recipes-test', 'test', 'git', + layerBranchId) + + machineId += 1 + self.index.machines[machineId] = Machine(self.index) + self.index.machines[machineId].define_data(machineId, + 'test_machine', 'test_machine', + layerBranchId) + + distroId += 1 + self.index.distros[distroId] = Distro(self.index) + self.index.distros[distroId].define_data(distroId, + 'test_distro', 'test_distro', + layerBranchId) + + layerItemId +=1 + self.index.layerItems[layerItemId] = LayerItem(self.index) + self.index.layerItems[layerItemId].define_data(layerItemId, 'test_layerItem 2', + vcs_url='git://git_test_url/test_layerItem') + + layerBranchId +=1 + self.index.layerBranches[layerBranchId] = LayerBranch(self.index) + self.index.layerBranches[layerBranchId].define_data(layerBranchId, + 'test_collection_2', '72', layerItemId, + branchId, actual_branch='some_other_branch') + + layerDependencyId += 1 + self.index.layerDependencies[layerDependencyId] = LayerDependency(self.index) + self.index.layerDependencies[layerDependencyId].define_data(layerDependencyId, + layerBranchId, 1) + + layerDependencyId += 1 + self.index.layerDependencies[layerDependencyId] = LayerDependency(self.index) + self.index.layerDependencies[layerDependencyId].define_data(layerDependencyId, + layerBranchId, 1, required=False) + + def test_branch(self): + branch = self.index.branches[1] + self.assertEqual(branch.id, 1) + self.assertEqual(branch.name, 'test_branch') + self.assertEqual(branch.short_description, 'test_branch') + self.assertEqual(branch.bitbake_branch, 'bb_test_branch') + + def test_layerItem(self): + layerItem = self.index.layerItems[1] + self.assertEqual(layerItem.id, 1) + self.assertEqual(layerItem.name, 'test_layerItem') + self.assertEqual(layerItem.summary, 'test_layerItem') + self.assertEqual(layerItem.description, 'test_layerItem') + self.assertEqual(layerItem.vcs_url, 'git://git_test_url/test_layerItem') + self.assertEqual(layerItem.vcs_web_url, None) + self.assertIsNone(layerItem.vcs_web_tree_base_url) + self.assertIsNone(layerItem.vcs_web_file_base_url) + self.assertIsNotNone(layerItem.updated) + + layerItem = self.index.layerItems[2] + self.assertEqual(layerItem.id, 2) + self.assertEqual(layerItem.name, 'test_layerItem 2') + self.assertEqual(layerItem.summary, 'test_layerItem 2') + self.assertEqual(layerItem.description, 'test_layerItem 2') + self.assertEqual(layerItem.vcs_url, 'git://git_test_url/test_layerItem') + self.assertIsNone(layerItem.vcs_web_url) + self.assertIsNone(layerItem.vcs_web_tree_base_url) + self.assertIsNone(layerItem.vcs_web_file_base_url) + self.assertIsNotNone(layerItem.updated) + + def test_layerBranch(self): + layerBranch = self.index.layerBranches[1] + self.assertEqual(layerBranch.id, 1) + self.assertEqual(layerBranch.collection, 'test_collection') + self.assertEqual(layerBranch.version, '99') + self.assertEqual(layerBranch.vcs_subdir, '') + self.assertEqual(layerBranch.actual_branch, 'test_branch') + self.assertIsNotNone(layerBranch.updated) + self.assertEqual(layerBranch.layer_id, 1) + self.assertEqual(layerBranch.branch_id, 1) + self.assertEqual(layerBranch.layer, self.index.layerItems[1]) + self.assertEqual(layerBranch.branch, self.index.branches[1]) + + layerBranch = self.index.layerBranches[2] + self.assertEqual(layerBranch.id, 2) + self.assertEqual(layerBranch.collection, 'test_collection_2') + self.assertEqual(layerBranch.version, '72') + self.assertEqual(layerBranch.vcs_subdir, '') + self.assertEqual(layerBranch.actual_branch, 'some_other_branch') + self.assertIsNotNone(layerBranch.updated) + self.assertEqual(layerBranch.layer_id, 2) + self.assertEqual(layerBranch.branch_id, 1) + self.assertEqual(layerBranch.layer, self.index.layerItems[2]) + self.assertEqual(layerBranch.branch, self.index.branches[1]) + + def test_layerDependency(self): + layerDependency = self.index.layerDependencies[1] + self.assertEqual(layerDependency.id, 1) + self.assertEqual(layerDependency.layerbranch_id, 2) + self.assertEqual(layerDependency.layerbranch, self.index.layerBranches[2]) + self.assertEqual(layerDependency.layer_id, 2) + self.assertEqual(layerDependency.layer, self.index.layerItems[2]) + self.assertTrue(layerDependency.required) + self.assertEqual(layerDependency.dependency_id, 1) + self.assertEqual(layerDependency.dependency, self.index.layerItems[1]) + self.assertEqual(layerDependency.dependency_layerBranch, self.index.layerBranches[1]) + + layerDependency = self.index.layerDependencies[2] + self.assertEqual(layerDependency.id, 2) + self.assertEqual(layerDependency.layerbranch_id, 2) + self.assertEqual(layerDependency.layerbranch, self.index.layerBranches[2]) + self.assertEqual(layerDependency.layer_id, 2) + self.assertEqual(layerDependency.layer, self.index.layerItems[2]) + self.assertFalse(layerDependency.required) + self.assertEqual(layerDependency.dependency_id, 1) + self.assertEqual(layerDependency.dependency, self.index.layerItems[1]) + self.assertEqual(layerDependency.dependency_layerBranch, self.index.layerBranches[1]) + + def test_recipe(self): + recipe = self.index.recipes[1] + self.assertEqual(recipe.id, 1) + self.assertEqual(recipe.layerbranch_id, 1) + self.assertEqual(recipe.layerbranch, self.index.layerBranches[1]) + self.assertEqual(recipe.layer_id, 1) + self.assertEqual(recipe.layer, self.index.layerItems[1]) + self.assertEqual(recipe.filename, 'test_git.bb') + self.assertEqual(recipe.filepath, 'recipes-test') + self.assertEqual(recipe.fullpath, 'recipes-test/test_git.bb') + self.assertEqual(recipe.summary, "") + self.assertEqual(recipe.description, "") + self.assertEqual(recipe.section, "") + self.assertEqual(recipe.pn, 'test') + self.assertEqual(recipe.pv, 'git') + self.assertEqual(recipe.license, "") + self.assertEqual(recipe.homepage, "") + self.assertEqual(recipe.bugtracker, "") + self.assertEqual(recipe.provides, "") + self.assertIsNotNone(recipe.updated) + self.assertEqual(recipe.inherits, "") + + def test_machine(self): + machine = self.index.machines[1] + self.assertEqual(machine.id, 1) + self.assertEqual(machine.layerbranch_id, 1) + self.assertEqual(machine.layerbranch, self.index.layerBranches[1]) + self.assertEqual(machine.layer_id, 1) + self.assertEqual(machine.layer, self.index.layerItems[1]) + self.assertEqual(machine.name, 'test_machine') + self.assertEqual(machine.description, 'test_machine') + self.assertIsNotNone(machine.updated) + + def test_distro(self): + distro = self.index.distros[1] + self.assertEqual(distro.id, 1) + self.assertEqual(distro.layerbranch_id, 1) + self.assertEqual(distro.layerbranch, self.index.layerBranches[1]) + self.assertEqual(distro.layer_id, 1) + self.assertEqual(distro.layer, self.index.layerItems[1]) + self.assertEqual(distro.name, 'test_distro') + self.assertEqual(distro.description, 'test_distro') + self.assertIsNotNone(distro.updated) diff --git a/poky/bitbake/lib/layerindexlib/tests/restapi.py b/poky/bitbake/lib/layerindexlib/tests/restapi.py new file mode 100644 index 000000000..58766950c --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/restapi.py @@ -0,0 +1,184 @@ +# Copyright (C) 2017-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 unittest +import tempfile +import os +import bb + +import layerindexlib +from layerindexlib.tests.common import LayersTest + +import logging + +def skipIfNoNetwork(): + if os.environ.get("BB_SKIP_NETTESTS") == "yes": + return unittest.skip("Network tests being skipped") + return lambda f: f + +class LayerIndexWebRestApiTest(LayersTest): + + @skipIfNoNetwork() + def setUp(self): + self.assertFalse(os.environ.get("BB_SKIP_NETTESTS") == "yes", msg="BB_SKIP_NETTESTS set, but we tried to test anyway") + LayersTest.setUp(self) + self.layerindex = layerindexlib.LayerIndex(self.d) + self.layerindex.load_layerindex('http://layers.openembedded.org/layerindex/api/;branch=sumo', load=['layerDependencies']) + + @skipIfNoNetwork() + def test_layerindex_is_empty(self): + self.assertFalse(self.layerindex.is_empty(), msg="Layerindex is empty") + + @skipIfNoNetwork() + def test_layerindex_store_file(self): + self.layerindex.store_layerindex('file://%s/file.json' % self.tempdir, self.layerindex.indexes[0]) + + self.assertTrue(os.path.isfile('%s/file.json' % self.tempdir), msg="Temporary file was not created by store_layerindex") + + reload = layerindexlib.LayerIndex(self.d) + reload.load_layerindex('file://%s/file.json' % self.tempdir) + + self.assertFalse(reload.is_empty(), msg="Layerindex is empty") + + # Calculate layerItems in original index that should NOT be in reload + layerItemNames = [] + for itemId in self.layerindex.indexes[0].layerItems: + layerItemNames.append(self.layerindex.indexes[0].layerItems[itemId].name) + + for layerBranchId in self.layerindex.indexes[0].layerBranches: + layerItemNames.remove(self.layerindex.indexes[0].layerBranches[layerBranchId].layer.name) + + for itemId in reload.indexes[0].layerItems: + self.assertFalse(reload.indexes[0].layerItems[itemId].name in layerItemNames, msg="Item reloaded when it shouldn't have been") + + # Compare the original to what we wrote... + for type in self.layerindex.indexes[0]._index: + if type == 'apilinks' or \ + type == 'layerItems' or \ + type in self.layerindex.indexes[0].config['local']: + continue + for id in getattr(self.layerindex.indexes[0], type): + self.logger.debug(1, "type %s" % (type)) + + self.assertTrue(id in getattr(reload.indexes[0], type), msg="Id number not in reloaded index") + + self.logger.debug(1, "%s ? %s" % (getattr(self.layerindex.indexes[0], type)[id], getattr(reload.indexes[0], type)[id])) + + self.assertEqual(getattr(self.layerindex.indexes[0], type)[id], getattr(reload.indexes[0], type)[id], msg="Reloaded contents different") + + @skipIfNoNetwork() + def test_layerindex_store_split(self): + self.layerindex.store_layerindex('file://%s' % self.tempdir, self.layerindex.indexes[0]) + + reload = layerindexlib.LayerIndex(self.d) + reload.load_layerindex('file://%s' % self.tempdir) + + self.assertFalse(reload.is_empty(), msg="Layer index is empty") + + for type in self.layerindex.indexes[0]._index: + if type == 'apilinks' or \ + type == 'layerItems' or \ + type in self.layerindex.indexes[0].config['local']: + continue + for id in getattr(self.layerindex.indexes[0] ,type): + self.logger.debug(1, "type %s" % (type)) + + self.assertTrue(id in getattr(reload.indexes[0], type), msg="Id number missing from reloaded data") + + self.logger.debug(1, "%s ? %s" % (getattr(self.layerindex.indexes[0] ,type)[id], getattr(reload.indexes[0], type)[id])) + + self.assertEqual(getattr(self.layerindex.indexes[0] ,type)[id], getattr(reload.indexes[0], type)[id], msg="reloaded data does not match original") + + @skipIfNoNetwork() + def test_dependency_resolution(self): + # Verify depth first searching... + (dependencies, invalidnames) = self.layerindex.find_dependencies(names=['meta-python']) + + first = True + for deplayerbranch in dependencies: + layerBranch = dependencies[deplayerbranch][0] + layerDeps = dependencies[deplayerbranch][1:] + + if not first: + continue + + first = False + + # Top of the deps should be openembedded-core, since everything depends on it. + self.assertEqual(layerBranch.layer.name, "openembedded-core", msg='OpenEmbedded-Core is no the first dependency') + + # meta-python should cause an openembedded-core dependency, if not assert! + for dep in layerDeps: + if dep.layer.name == 'meta-python': + break + else: + self.logger.debug(1, "meta-python was not found") + self.assetTrue(False) + + # Only check the first element... + break + else: + # Empty list, this is bad. + self.logger.debug(1, "Empty list of dependencies") + self.assertIsNotNone(first, msg="Empty list of dependencies") + + # Last dep should be the requested item + layerBranch = dependencies[deplayerbranch][0] + self.assertEqual(layerBranch.layer.name, "meta-python", msg="Last dependency not meta-python") + + @skipIfNoNetwork() + def test_find_collection(self): + def _check(collection, expected): + self.logger.debug(1, "Looking for collection %s..." % collection) + result = self.layerindex.find_collection(collection) + if expected: + self.assertIsNotNone(result, msg="Did not find %s when it should be there" % collection) + else: + self.assertIsNone(result, msg="Found %s when it shouldn't be there" % collection) + + tests = [ ('core', True), + ('openembedded-core', False), + ('networking-layer', True), + ('meta-python', True), + ('openembedded-layer', True), + ('notpresent', False) ] + + for collection,result in tests: + _check(collection, result) + + @skipIfNoNetwork() + def test_find_layerbranch(self): + def _check(name, expected): + self.logger.debug(1, "Looking for layerbranch %s..." % name) + + for index in self.layerindex.indexes: + for layerbranchid in index.layerBranches: + self.logger.debug(1, "Present: %s" % index.layerBranches[layerbranchid].layer.name) + result = self.layerindex.find_layerbranch(name) + if expected: + self.assertIsNotNone(result, msg="Did not find %s when it should be there" % collection) + else: + self.assertIsNone(result, msg="Found %s when it shouldn't be there" % collection) + + tests = [ ('openembedded-core', True), + ('core', False), + ('meta-networking', True), + ('meta-python', True), + ('meta-oe', True), + ('notpresent', False) ] + + for collection,result in tests: + _check(collection, result) + diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/README b/poky/bitbake/lib/layerindexlib/tests/testdata/README new file mode 100644 index 000000000..36ab40beb --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/README @@ -0,0 +1,11 @@ +This test data is used to verify the 'cooker' module of the layerindex. + +The module consists of a faux project bblayers.conf with four layers defined. + +layer1 - openembedded-core +layer2 - networking-layer +layer3 - meta-python +layer4 - openembedded-layer (meta-oe) + +Since we do not have a fully populated cooker, we use this to test the +basic index generation, and not any deep recipe based contents. diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/build/conf/bblayers.conf b/poky/bitbake/lib/layerindexlib/tests/testdata/build/conf/bblayers.conf new file mode 100644 index 000000000..40429b2f6 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/build/conf/bblayers.conf @@ -0,0 +1,15 @@ +LAYERSERIES_CORENAMES = "sumo" + +# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf +# changes incompatibly +LCONF_VERSION = "7" + +BBPATH = "${TOPDIR}" +BBFILES ?= "" + +BBLAYERS ?= " \ + ${TOPDIR}/layer1 \ + ${TOPDIR}/layer2 \ + ${TOPDIR}/layer3 \ + ${TOPDIR}/layer4 \ + " diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/layer1/conf/layer.conf b/poky/bitbake/lib/layerindexlib/tests/testdata/layer1/conf/layer.conf new file mode 100644 index 000000000..966d53195 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/layer1/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" + +BBFILE_COLLECTIONS += "core" +BBFILE_PATTERN_core = "^${LAYERDIR}/" +BBFILE_PRIORITY_core = "5" + +LAYERSERIES_CORENAMES = "sumo" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_core = "11" +LAYERSERIES_COMPAT_core = "sumo" + +BBLAYERS_LAYERINDEX_NAME_core = "openembedded-core" diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/layer2/conf/layer.conf b/poky/bitbake/lib/layerindexlib/tests/testdata/layer2/conf/layer.conf new file mode 100644 index 000000000..7569d1c21 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/layer2/conf/layer.conf @@ -0,0 +1,20 @@ +# 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" + +BBFILE_COLLECTIONS += "networking-layer" +BBFILE_PATTERN_networking-layer := "^${LAYERDIR}/" +BBFILE_PRIORITY_networking-layer = "5" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_networking-layer = "1" + +LAYERDEPENDS_networking-layer = "core" +LAYERDEPENDS_networking-layer += "openembedded-layer" +LAYERDEPENDS_networking-layer += "meta-python" + +LAYERSERIES_COMPAT_networking-layer = "sumo" diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/layer3/conf/layer.conf b/poky/bitbake/lib/layerindexlib/tests/testdata/layer3/conf/layer.conf new file mode 100644 index 000000000..7089071fa --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/layer3/conf/layer.conf @@ -0,0 +1,19 @@ +# We might have a conf and classes directory, append to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend" + +BBFILE_COLLECTIONS += "meta-python" +BBFILE_PATTERN_meta-python := "^${LAYERDIR}/" +BBFILE_PRIORITY_meta-python = "7" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_meta-python = "1" + +LAYERDEPENDS_meta-python = "core openembedded-layer" + +LAYERSERIES_COMPAT_meta-python = "sumo" + +LICENSE_PATH += "${LAYERDIR}/licenses" diff --git a/poky/bitbake/lib/layerindexlib/tests/testdata/layer4/conf/layer.conf b/poky/bitbake/lib/layerindexlib/tests/testdata/layer4/conf/layer.conf new file mode 100644 index 000000000..6649ee020 --- /dev/null +++ b/poky/bitbake/lib/layerindexlib/tests/testdata/layer4/conf/layer.conf @@ -0,0 +1,22 @@ +# We have a conf and classes directory, append to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have a recipes directory, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "openembedded-layer" +BBFILE_PATTERN_openembedded-layer := "^${LAYERDIR}/" + +# Define the priority for recipes (.bb files) from this layer, +# choosing carefully how this layer interacts with all of the +# other layers. + +BBFILE_PRIORITY_openembedded-layer = "6" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_openembedded-layer = "1" + +LAYERDEPENDS_openembedded-layer = "core" + +LAYERSERIES_COMPAT_openembedded-layer = "sumo" diff --git a/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py index 63b4187ba..949063593 100644 --- a/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py +++ b/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py @@ -27,8 +27,9 @@ import shutil import time from django.db import transaction from django.db.models import Q -from bldcontrol.models import BuildEnvironment, BRLayer, BRVariable, BRTarget, BRBitbake -from orm.models import CustomImageRecipe, Layer, Layer_Version, ProjectLayer, ToasterSetting +from bldcontrol.models import BuildEnvironment, BuildRequest, BRLayer, BRVariable, BRTarget, BRBitbake, Build +from orm.models import CustomImageRecipe, Layer, Layer_Version, Project, ProjectLayer, ToasterSetting +from orm.models import signal_runbuilds import subprocess from toastermain import settings @@ -38,6 +39,8 @@ from bldcontrol.bbcontroller import BuildEnvironmentController, ShellCmdExceptio import logging logger = logging.getLogger("toaster") +install_dir = os.environ.get('TOASTER_DIR') + from pprint import pprint, pformat class LocalhostBEController(BuildEnvironmentController): @@ -87,10 +90,10 @@ class LocalhostBEController(BuildEnvironmentController): #logger.debug("localhostbecontroller: using HEAD checkout in %s" % local_checkout_path) return local_checkout_path - - def setCloneStatus(self,bitbake,status,total,current): + def setCloneStatus(self,bitbake,status,total,current,repo_name): bitbake.req.build.repos_cloned=current bitbake.req.build.repos_to_clone=total + bitbake.req.build.progress_item=repo_name bitbake.req.build.save() def setLayers(self, bitbake, layers, targets): @@ -100,6 +103,7 @@ class LocalhostBEController(BuildEnvironmentController): layerlist = [] nongitlayerlist = [] + layer_index = 0 git_env = os.environ.copy() # (note: add custom environment settings here) @@ -113,7 +117,7 @@ class LocalhostBEController(BuildEnvironmentController): if bitbake.giturl and bitbake.commit: gitrepos[(bitbake.giturl, bitbake.commit)] = [] gitrepos[(bitbake.giturl, bitbake.commit)].append( - ("bitbake", bitbake.dirpath)) + ("bitbake", bitbake.dirpath, 0)) for layer in layers: # We don't need to git clone the layer for the CustomImageRecipe @@ -124,12 +128,13 @@ class LocalhostBEController(BuildEnvironmentController): # If we have local layers then we don't need clone them # For local layers giturl will be empty if not layer.giturl: - nongitlayerlist.append(layer.layer_version.layer.local_source_dir) + nongitlayerlist.append( "%03d:%s" % (layer_index,layer.local_source_dir) ) continue if not (layer.giturl, layer.commit) in gitrepos: gitrepos[(layer.giturl, layer.commit)] = [] - gitrepos[(layer.giturl, layer.commit)].append( (layer.name, layer.dirpath) ) + gitrepos[(layer.giturl, layer.commit)].append( (layer.name,layer.dirpath,layer_index) ) + layer_index += 1 logger.debug("localhostbecontroller, our git repos are %s" % pformat(gitrepos)) @@ -159,9 +164,9 @@ class LocalhostBEController(BuildEnvironmentController): # 3. checkout the repositories clone_count=0 clone_total=len(gitrepos.keys()) - self.setCloneStatus(bitbake,'Started',clone_total,clone_count) + self.setCloneStatus(bitbake,'Started',clone_total,clone_count,'') for giturl, commit in gitrepos.keys(): - self.setCloneStatus(bitbake,'progress',clone_total,clone_count) + self.setCloneStatus(bitbake,'progress',clone_total,clone_count,gitrepos[(giturl, commit)][0][0]) clone_count += 1 localdirname = os.path.join(self.be.sourcedir, self.getGitCloneDirectory(giturl, commit)) @@ -172,8 +177,11 @@ class LocalhostBEController(BuildEnvironmentController): try: localremotes = self._shellcmd("git remote -v", localdirname,env=git_env) - if not giturl in localremotes and commit != 'HEAD': - raise BuildSetupException("Existing git repository at %s, but with different remotes ('%s', expected '%s'). Toaster will not continue out of fear of damaging something." % (localdirname, ", ".join(localremotes.split("\n")), giturl)) + # NOTE: this nice-to-have check breaks when using git remaping to get past firewall + # Re-enable later with .gitconfig remapping checks + #if not giturl in localremotes and commit != 'HEAD': + # raise BuildSetupException("Existing git repository at %s, but with different remotes ('%s', expected '%s'). Toaster will not continue out of fear of damaging something." % (localdirname, ", ".join(localremotes.split("\n")), giturl)) + pass except ShellCmdException: # our localdirname might not be a git repository #- that's fine @@ -205,16 +213,16 @@ class LocalhostBEController(BuildEnvironmentController): self._shellcmd("git clone -b \"%s\" \"%s\" \"%s\" " % (bitbake.commit, bitbake.giturl, os.path.join(self.pokydirname, 'bitbake')),env=git_env) # verify our repositories - for name, dirpath in gitrepos[(giturl, commit)]: + for name, dirpath, index in gitrepos[(giturl, commit)]: localdirpath = os.path.join(localdirname, dirpath) - logger.debug("localhostbecontroller: localdirpath expected '%s'" % localdirpath) + logger.debug("localhostbecontroller: localdirpath expects '%s'" % localdirpath) if not os.path.exists(localdirpath): raise BuildSetupException("Cannot find layer git path '%s' in checked out repository '%s:%s'. Aborting." % (localdirpath, giturl, commit)) if name != "bitbake": - layerlist.append(localdirpath.rstrip("/")) + layerlist.append("%03d:%s" % (index,localdirpath.rstrip("/"))) - self.setCloneStatus(bitbake,'complete',clone_total,clone_count) + self.setCloneStatus(bitbake,'complete',clone_total,clone_count,'') logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist)) # Resolve self.pokydirname if not resolved yet, consider the scenario @@ -244,7 +252,7 @@ class LocalhostBEController(BuildEnvironmentController): customrecipe, layers) if os.path.isdir(custom_layer_path): - layerlist.append(custom_layer_path) + layerlist.append("%03d:%s" % (layer_index,custom_layer_path)) except CustomImageRecipe.DoesNotExist: continue # not a custom recipe, skip @@ -252,7 +260,11 @@ class LocalhostBEController(BuildEnvironmentController): layerlist.extend(nongitlayerlist) logger.debug("\n\nset layers gives this list %s" % pformat(layerlist)) self.islayerset = True - return layerlist + + # restore the order of layer list for bblayers.conf + layerlist.sort() + sorted_layerlist = [l[4:] for l in layerlist] + return sorted_layerlist def setup_custom_image_recipe(self, customrecipe, layers): """ Set up toaster-custom-images layer and recipe files """ @@ -322,31 +334,115 @@ class LocalhostBEController(BuildEnvironmentController): def triggerBuild(self, bitbake, layers, variables, targets, brbe): layers = self.setLayers(bitbake, layers, targets) + is_merged_attr = bitbake.req.project.merged_attr + + git_env = os.environ.copy() + # (note: add custom environment settings here) + try: + # insure that the project init/build uses the selected bitbake, and not Toaster's + del git_env['TEMPLATECONF'] + del git_env['BBBASEDIR'] + del git_env['BUILDDIR'] + except KeyError: + pass # init build environment from the clone - builddir = '%s-toaster-%d' % (self.be.builddir, bitbake.req.project.id) + if bitbake.req.project.builddir: + builddir = bitbake.req.project.builddir + else: + builddir = '%s-toaster-%d' % (self.be.builddir, bitbake.req.project.id) oe_init = os.path.join(self.pokydirname, 'oe-init-build-env') # init build environment try: custom_script = ToasterSetting.objects.get(name="CUSTOM_BUILD_INIT_SCRIPT").value custom_script = custom_script.replace("%BUILDDIR%" ,builddir) - self._shellcmd("bash -c 'source %s'" % (custom_script)) + self._shellcmd("bash -c 'source %s'" % (custom_script),env=git_env) except ToasterSetting.DoesNotExist: self._shellcmd("bash -c 'source %s %s'" % (oe_init, builddir), - self.be.sourcedir) + self.be.sourcedir,env=git_env) # update bblayers.conf - bblconfpath = os.path.join(builddir, "conf/toaster-bblayers.conf") - with open(bblconfpath, 'w') as bblayers: - bblayers.write('# line added by toaster build control\n' - 'BBLAYERS = "%s"' % ' '.join(layers)) - - # write configuration file - confpath = os.path.join(builddir, 'conf/toaster.conf') - with open(confpath, 'w') as conf: - for var in variables: - conf.write('%s="%s"\n' % (var.name, var.value)) - conf.write('INHERIT+="toaster buildhistory"') + if not is_merged_attr: + bblconfpath = os.path.join(builddir, "conf/toaster-bblayers.conf") + with open(bblconfpath, 'w') as bblayers: + bblayers.write('# line added by toaster build control\n' + 'BBLAYERS = "%s"' % ' '.join(layers)) + + # write configuration file + confpath = os.path.join(builddir, 'conf/toaster.conf') + with open(confpath, 'w') as conf: + for var in variables: + conf.write('%s="%s"\n' % (var.name, var.value)) + conf.write('INHERIT+="toaster buildhistory"') + else: + # Append the Toaster-specific values directly to the bblayers.conf + bblconfpath = os.path.join(builddir, "conf/bblayers.conf") + bblconfpath_save = os.path.join(builddir, "conf/bblayers.conf.save") + shutil.copyfile(bblconfpath, bblconfpath_save) + with open(bblconfpath) as bblayers: + content = bblayers.readlines() + do_write = True + was_toaster = False + with open(bblconfpath,'w') as bblayers: + for line in content: + #line = line.strip('\n') + if 'TOASTER_CONFIG_PROLOG' in line: + do_write = False + was_toaster = True + elif 'TOASTER_CONFIG_EPILOG' in line: + do_write = True + elif do_write: + bblayers.write(line) + if not was_toaster: + bblayers.write('\n') + bblayers.write('#=== TOASTER_CONFIG_PROLOG ===\n') + bblayers.write('BBLAYERS = "\\\n') + for layer in layers: + bblayers.write(' %s \\\n' % layer) + bblayers.write(' "\n') + bblayers.write('#=== TOASTER_CONFIG_EPILOG ===\n') + # Append the Toaster-specific values directly to the local.conf + bbconfpath = os.path.join(builddir, "conf/local.conf") + bbconfpath_save = os.path.join(builddir, "conf/local.conf.save") + shutil.copyfile(bbconfpath, bbconfpath_save) + with open(bbconfpath) as f: + content = f.readlines() + do_write = True + was_toaster = False + with open(bbconfpath,'w') as conf: + for line in content: + #line = line.strip('\n') + if 'TOASTER_CONFIG_PROLOG' in line: + do_write = False + was_toaster = True + elif 'TOASTER_CONFIG_EPILOG' in line: + do_write = True + elif do_write: + conf.write(line) + if not was_toaster: + conf.write('\n') + conf.write('#=== TOASTER_CONFIG_PROLOG ===\n') + for var in variables: + if (not var.name.startswith("INTERNAL_")) and (not var.name == "BBLAYERS"): + conf.write('%s="%s"\n' % (var.name, var.value)) + conf.write('#=== TOASTER_CONFIG_EPILOG ===\n') + + # If 'target' is just the project preparation target, then we are done + for target in targets: + if "_PROJECT_PREPARE_" == target.target: + logger.debug('localhostbecontroller: Project has been prepared. Done.') + # Update the Build Request and release the build environment + bitbake.req.state = BuildRequest.REQ_COMPLETED + bitbake.req.save() + self.be.lock = BuildEnvironment.LOCK_FREE + self.be.save() + # Close the project build and progress bar + bitbake.req.build.outcome = Build.SUCCEEDED + bitbake.req.build.save() + # Update the project status + bitbake.req.project.set_variable(Project.PROJECT_SPECIFIC_STATUS,Project.PROJECT_SPECIFIC_CLONING_SUCCESS) + signal_runbuilds() + return # clean the Toaster to build environment env_clean = 'unset BBPATH;' # clean BBPATH for <= YP-2.4.0 @@ -360,16 +456,19 @@ class LocalhostBEController(BuildEnvironmentController): for path in os.environ["PATH"].split(os.pathsep): if os.path.exists(os.path.join(path, 'bitbake')): bitbake = os.path.join(path, 'bitbake') - logger.info("Found Bitbake at: %s" % path) break else: logger.error("Looks like Bitbake is not available, please fix your environment") - # run bitbake server from the clone toasterlayers = os.path.join(builddir,"conf/toaster-bblayers.conf") - self._shellcmd('%s bash -c \"source %s %s; BITBAKE_UI="knotty" %s --read %s --read %s ' - '--server-only -B 0.0.0.0:0\"' % (env_clean, oe_init, - builddir, bitbake, confpath, toasterlayers), self.be.sourcedir) + if not is_merged_attr: + self._shellcmd('%s bash -c \"source %s %s; BITBAKE_UI="knotty" %s --read %s --read %s ' + '--server-only -B 0.0.0.0:0\"' % (env_clean, oe_init, + builddir, bitbake, confpath, toasterlayers), self.be.sourcedir) + else: + self._shellcmd('%s bash -c \"source %s %s; BITBAKE_UI="knotty" %s ' + '--server-only -B 0.0.0.0:0\"' % (env_clean, oe_init, + builddir, bitbake), self.be.sourcedir) # read port number from bitbake.lock self.be.bbport = -1 @@ -415,12 +514,20 @@ class LocalhostBEController(BuildEnvironmentController): log = os.path.join(builddir, 'toaster_ui.log') local_bitbake = os.path.join(os.path.dirname(os.getenv('BBBASEDIR')), 'bitbake') - self._shellcmd(['%s bash -c \"(TOASTER_BRBE="%s" BBSERVER="0.0.0.0:%s" ' + if not is_merged_attr: + self._shellcmd(['%s bash -c \"(TOASTER_BRBE="%s" BBSERVER="0.0.0.0:%s" ' '%s %s -u toasterui --read %s --read %s --token="" >>%s 2>&1;' 'BITBAKE_UI="knotty" BBSERVER=0.0.0.0:%s %s -m)&\"' \ % (env_clean, brbe, self.be.bbport, local_bitbake, bbtargets, confpath, toasterlayers, log, self.be.bbport, bitbake,)], builddir, nowait=True) + else: + self._shellcmd(['%s bash -c \"(TOASTER_BRBE="%s" BBSERVER="0.0.0.0:%s" ' + '%s %s -u toasterui --token="" >>%s 2>&1;' + 'BITBAKE_UI="knotty" BBSERVER=0.0.0.0:%s %s -m)&\"' \ + % (env_clean, brbe, self.be.bbport, local_bitbake, bbtargets, log, + self.be.bbport, bitbake,)], + builddir, nowait=True) logger.debug('localhostbecontroller: Build launched, exiting. ' 'Follow build logs at %s' % log) diff --git a/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py b/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py index 791e53eab..6a55dd46c 100644 --- a/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py +++ b/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py @@ -49,7 +49,7 @@ class Command(BaseCommand): # we could not find a BEC; postpone the BR br.state = BuildRequest.REQ_QUEUED br.save() - logger.debug("runbuilds: No build env") + logger.debug("runbuilds: No build env (%s)" % e) return logger.info("runbuilds: starting build %s, environment %s" % diff --git a/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml b/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml index d7ea78dc2..fec93aba1 100644 --- a/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml +++ b/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml @@ -23,14 +23,14 @@ master - rocko + thud git://git.openembedded.org/bitbake - 1.36 + 1.40 - rocko + sumo Openembedded Sumo 1 sumo @@ -51,11 +51,11 @@ Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/\">OpenEmbedded master</a> branch. - rocko + thud Openembedded Rocko 1 - rocko - Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=rocko\">OpenEmbedded Rocko</a> branch. + thud + Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=thud\">OpenEmbedded Thud</a> branch. diff --git a/poky/bitbake/lib/toaster/orm/fixtures/poky.xml b/poky/bitbake/lib/toaster/orm/fixtures/poky.xml index 6c966da4a..fb9a77188 100644 --- a/poky/bitbake/lib/toaster/orm/fixtures/poky.xml +++ b/poky/bitbake/lib/toaster/orm/fixtures/poky.xml @@ -26,9 +26,9 @@ bitbake - rocko + thud git://git.yoctoproject.org/poky - rocko + thud bitbake @@ -57,10 +57,10 @@ rocko - Yocto Project 2.4 "Rocko" + Yocto Project 2.6 "Thud" 1 - rocko - Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=rocko">Yocto Project Rocko branch</a>. + thud + Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=thud">Yocto Project Thud branch</a>. diff --git a/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py b/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py index efc6b3a94..66114ff89 100644 --- a/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py +++ b/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py @@ -29,7 +29,6 @@ from orm.models import ToasterSetting import os import sys -import json import logging import threading import time @@ -37,6 +36,18 @@ logger = logging.getLogger("toaster") DEFAULT_LAYERINDEX_SERVER = "http://layers.openembedded.org/layerindex/api/" +# Add path to bitbake modules for layerindexlib +# lib/toaster/orm/management/commands/lsupdates.py (abspath) +# lib/toaster/orm/management/commands (dirname) +# lib/toaster/orm/management (dirname) +# lib/toaster/orm (dirname) +# lib/toaster/ (dirname) +# lib/ (dirname) +path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) +sys.path.insert(0, path) + +import layerindexlib + class Spinner(threading.Thread): """ A simple progress spinner to indicate download/parsing is happening""" @@ -86,45 +97,6 @@ class Command(BaseCommand): self.apiurl = ToasterSetting.objects.get(name = 'CUSTOM_LAYERINDEX_SERVER').value assert self.apiurl is not None - try: - from urllib.request import urlopen, URLError - from urllib.parse import urlparse - except ImportError: - from urllib2 import urlopen, URLError - from urlparse import urlparse - - proxy_settings = os.environ.get("http_proxy", None) - - def _get_json_response(apiurl=None): - if None == apiurl: - apiurl=self.apiurl - http_progress = Spinner() - http_progress.start() - - _parsedurl = urlparse(apiurl) - path = _parsedurl.path - - # logger.debug("Fetching %s", apiurl) - try: - res = urlopen(apiurl) - except URLError as e: - raise Exception("Failed to read %s: %s" % (path, e.reason)) - - parsed = json.loads(res.read().decode('utf-8')) - - http_progress.stop() - return parsed - - # verify we can get the basic api - try: - apilinks = _get_json_response() - except Exception as e: - import traceback - if proxy_settings is not None: - logger.info("EE: Using proxy %s" % proxy_settings) - logger.warning("EE: could not connect to %s, skipping update:" - "%s\n%s" % (self.apiurl, e, traceback.format_exc())) - return # update branches; only those that we already have names listed in the # Releases table @@ -133,112 +105,118 @@ class Command(BaseCommand): if len(whitelist_branch_names) == 0: raise Exception("Failed to make list of branches to fetch") - logger.info("Fetching metadata releases for %s", + logger.info("Fetching metadata for %s", " ".join(whitelist_branch_names)) - branches_info = _get_json_response(apilinks['branches'] + - "?filter=name:%s" - % "OR".join(whitelist_branch_names)) + # We require a non-empty bb.data, but we can fake it with a dictionary + layerindex = layerindexlib.LayerIndex({"DUMMY" : "VALUE"}) + + http_progress = Spinner() + http_progress.start() + + if whitelist_branch_names: + url_branches = ";branch=%s" % ','.join(whitelist_branch_names) + else: + url_branches = "" + layerindex.load_layerindex("%s%s" % (self.apiurl, url_branches)) + + http_progress.stop() + + # We know we're only processing one entry, so we reference it here + # (this is cheating...) + index = layerindex.indexes[0] # Map the layer index branches to toaster releases li_branch_id_to_toaster_release = {} - total = len(branches_info) - for i, branch in enumerate(branches_info): - li_branch_id_to_toaster_release[branch['id']] = \ - Release.objects.get(name=branch['name']) + logger.info("Processing releases") + + total = len(index.branches) + for i, id in enumerate(index.branches): + li_branch_id_to_toaster_release[id] = \ + Release.objects.get(name=index.branches[id].name) self.mini_progress("Releases", i, total) # keep a track of the layerindex (li) id mappings so that # layer_versions can be created for these layers later on li_layer_id_to_toaster_layer_id = {} - logger.info("Fetching layers") - - layers_info = _get_json_response(apilinks['layerItems']) + logger.info("Processing layers") - total = len(layers_info) - for i, li in enumerate(layers_info): + total = len(index.layerItems) + for i, id in enumerate(index.layerItems): try: - l, created = Layer.objects.get_or_create(name=li['name']) - l.up_date = li['updated'] - l.summary = li['summary'] - l.description = li['description'] + l, created = Layer.objects.get_or_create(name=index.layerItems[id].name) + l.up_date = index.layerItems[id].updated + l.summary = index.layerItems[id].summary + l.description = index.layerItems[id].description if created: # predefined layers in the fixtures (for example poky.xml) # always preempt the Layer Index for these values - l.vcs_url = li['vcs_url'] - l.vcs_web_url = li['vcs_web_url'] - l.vcs_web_tree_base_url = li['vcs_web_tree_base_url'] - l.vcs_web_file_base_url = li['vcs_web_file_base_url'] + l.vcs_url = index.layerItems[id].vcs_url + l.vcs_web_url = index.layerItems[id].vcs_web_url + l.vcs_web_tree_base_url = index.layerItems[id].vcs_web_tree_base_url + l.vcs_web_file_base_url = index.layerItems[id].vcs_web_file_base_url l.save() except Layer.MultipleObjectsReturned: logger.info("Skipped %s as we found multiple layers and " "don't know which to update" % - li['name']) + index.layerItems[id].name) - li_layer_id_to_toaster_layer_id[li['id']] = l.pk + li_layer_id_to_toaster_layer_id[id] = l.pk self.mini_progress("layers", i, total) # update layer_versions - logger.info("Fetching layer versions") - layerbranches_info = _get_json_response( - apilinks['layerBranches'] + "?filter=branch__name:%s" % - "OR".join(whitelist_branch_names)) + logger.info("Processing layer versions") # Map Layer index layer_branch object id to # layer_version toaster object id li_layer_branch_id_to_toaster_lv_id = {} - total = len(layerbranches_info) - for i, lbi in enumerate(layerbranches_info): + total = len(index.layerBranches) + for i, id in enumerate(index.layerBranches): # release as defined by toaster map to layerindex branch - release = li_branch_id_to_toaster_release[lbi['branch']] + release = li_branch_id_to_toaster_release[index.layerBranches[id].branch_id] try: lv, created = Layer_Version.objects.get_or_create( layer=Layer.objects.get( - pk=li_layer_id_to_toaster_layer_id[lbi['layer']]), + pk=li_layer_id_to_toaster_layer_id[index.layerBranches[id].layer_id]), release=release ) except KeyError: logger.warning( "No such layerindex layer referenced by layerbranch %d" % - lbi['layer']) + index.layerBranches[id].layer_id) continue if created: - lv.release = li_branch_id_to_toaster_release[lbi['branch']] - lv.up_date = lbi['updated'] - lv.commit = lbi['actual_branch'] - lv.dirpath = lbi['vcs_subdir'] + lv.release = li_branch_id_to_toaster_release[index.layerBranches[id].branch_id] + lv.up_date = index.layerBranches[id].updated + lv.commit = index.layerBranches[id].actual_branch + lv.dirpath = index.layerBranches[id].vcs_subdir lv.save() - li_layer_branch_id_to_toaster_lv_id[lbi['id']] =\ + li_layer_branch_id_to_toaster_lv_id[index.layerBranches[id].id] =\ lv.pk self.mini_progress("layer versions", i, total) - logger.info("Fetching layer version dependencies") - # update layer dependencies - layerdependencies_info = _get_json_response( - apilinks['layerDependencies'] + - "?filter=layerbranch__branch__name:%s" % - "OR".join(whitelist_branch_names)) + logger.info("Processing layer version dependencies") dependlist = {} - for ldi in layerdependencies_info: + for id in index.layerDependencies: try: lv = Layer_Version.objects.get( - pk=li_layer_branch_id_to_toaster_lv_id[ldi['layerbranch']]) + pk=li_layer_branch_id_to_toaster_lv_id[index.layerDependencies[id].layerbranch_id]) except Layer_Version.DoesNotExist as e: continue if lv not in dependlist: dependlist[lv] = [] try: - layer_id = li_layer_id_to_toaster_layer_id[ldi['dependency']] + layer_id = li_layer_id_to_toaster_layer_id[index.layerDependencies[id].dependency_id] dependlist[lv].append( Layer_Version.objects.get(layer__pk=layer_id, @@ -247,7 +225,7 @@ class Command(BaseCommand): except Layer_Version.DoesNotExist: logger.warning("Cannot find layer version (ls:%s)," "up_id:%s lv:%s" % - (self, ldi['dependency'], lv)) + (self, index.layerDependencies[id].dependency_id, lv)) total = len(dependlist) for i, lv in enumerate(dependlist): @@ -258,73 +236,61 @@ class Command(BaseCommand): self.mini_progress("Layer version dependencies", i, total) # update Distros - logger.info("Fetching distro information") - distros_info = _get_json_response( - apilinks['distros'] + "?filter=layerbranch__branch__name:%s" % - "OR".join(whitelist_branch_names)) + logger.info("Processing distro information") - total = len(distros_info) - for i, di in enumerate(distros_info): + total = len(index.distros) + for i, id in enumerate(index.distros): distro, created = Distro.objects.get_or_create( - name=di['name'], + name=index.distros[id].name, layer_version=Layer_Version.objects.get( - pk=li_layer_branch_id_to_toaster_lv_id[di['layerbranch']])) - distro.up_date = di['updated'] - distro.name = di['name'] - distro.description = di['description'] + pk=li_layer_branch_id_to_toaster_lv_id[index.distros[id].layerbranch_id])) + distro.up_date = index.distros[id].updated + distro.name = index.distros[id].name + distro.description = index.distros[id].description distro.save() self.mini_progress("distros", i, total) # update machines - logger.info("Fetching machine information") - machines_info = _get_json_response( - apilinks['machines'] + "?filter=layerbranch__branch__name:%s" % - "OR".join(whitelist_branch_names)) + logger.info("Processing machine information") - total = len(machines_info) - for i, mi in enumerate(machines_info): + total = len(index.machines) + for i, id in enumerate(index.machines): mo, created = Machine.objects.get_or_create( - name=mi['name'], + name=index.machines[id].name, layer_version=Layer_Version.objects.get( - pk=li_layer_branch_id_to_toaster_lv_id[mi['layerbranch']])) - mo.up_date = mi['updated'] - mo.name = mi['name'] - mo.description = mi['description'] + pk=li_layer_branch_id_to_toaster_lv_id[index.machines[id].layerbranch_id])) + mo.up_date = index.machines[id].updated + mo.name = index.machines[id].name + mo.description = index.machines[id].description mo.save() self.mini_progress("machines", i, total) # update recipes; paginate by layer version / layer branch - logger.info("Fetching recipe information") - recipes_info = _get_json_response( - apilinks['recipes'] + "?filter=layerbranch__branch__name:%s" % - "OR".join(whitelist_branch_names)) + logger.info("Processing recipe information") - total = len(recipes_info) - for i, ri in enumerate(recipes_info): + total = len(index.recipes) + for i, id in enumerate(index.recipes): try: - lv_id = li_layer_branch_id_to_toaster_lv_id[ri['layerbranch']] + lv_id = li_layer_branch_id_to_toaster_lv_id[index.recipes[id].layerbranch_id] lv = Layer_Version.objects.get(pk=lv_id) ro, created = Recipe.objects.get_or_create( layer_version=lv, - name=ri['pn'] + name=index.recipes[id].pn ) ro.layer_version = lv - ro.up_date = ri['updated'] - ro.name = ri['pn'] - ro.version = ri['pv'] - ro.summary = ri['summary'] - ro.description = ri['description'] - ro.section = ri['section'] - ro.license = ri['license'] - ro.homepage = ri['homepage'] - ro.bugtracker = ri['bugtracker'] - ro.file_path = ri['filepath'] + "/" + ri['filename'] - if 'inherits' in ri: - ro.is_image = 'image' in ri['inherits'].split() - else: # workaround for old style layer index - ro.is_image = "-image-" in ri['pn'] + ro.up_date = index.recipes[id].updated + ro.name = index.recipes[id].pn + ro.version = index.recipes[id].pv + ro.summary = index.recipes[id].summary + ro.description = index.recipes[id].description + ro.section = index.recipes[id].section + ro.license = index.recipes[id].license + ro.homepage = index.recipes[id].homepage + ro.bugtracker = index.recipes[id].bugtracker + ro.file_path = index.recipes[id].fullpath + ro.is_image = 'image' in index.recipes[id].inherits.split() ro.save() except Exception as e: logger.warning("Failed saving recipe %s", e) diff --git a/poky/bitbake/lib/toaster/orm/migrations/0018_project_specific.py b/poky/bitbake/lib/toaster/orm/migrations/0018_project_specific.py new file mode 100644 index 000000000..084ecad7b --- /dev/null +++ b/poky/bitbake/lib/toaster/orm/migrations/0018_project_specific.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('orm', '0017_distro_clone'), + ] + + operations = [ + migrations.AddField( + model_name='Project', + name='builddir', + field=models.TextField(), + ), + migrations.AddField( + model_name='Project', + name='merged_attr', + field=models.BooleanField(default=False) + ), + migrations.AddField( + model_name='Build', + name='progress_item', + field=models.CharField(max_length=40) + ), + ] diff --git a/poky/bitbake/lib/toaster/orm/models.py b/poky/bitbake/lib/toaster/orm/models.py index 4b77e8fda..772029021 100644 --- a/poky/bitbake/lib/toaster/orm/models.py +++ b/poky/bitbake/lib/toaster/orm/models.py @@ -121,8 +121,15 @@ class ToasterSetting(models.Model): class ProjectManager(models.Manager): - def create_project(self, name, release): - if release is not None: + def create_project(self, name, release, existing_project=None): + if existing_project and (release is not None): + prj = existing_project + prj.bitbake_version = release.bitbake_version + prj.release = release + # Delete the previous ProjectLayer mappings + for pl in ProjectLayer.objects.filter(project=prj): + pl.delete() + elif release is not None: prj = self.model(name=name, bitbake_version=release.bitbake_version, release=release) @@ -130,15 +137,14 @@ class ProjectManager(models.Manager): prj = self.model(name=name, bitbake_version=None, release=None) - prj.save() for defaultconf in ToasterSetting.objects.filter( name__startswith="DEFCONF_"): name = defaultconf.name[8:] - ProjectVariable.objects.create(project=prj, - name=name, - value=defaultconf.value) + pv,create = ProjectVariable.objects.get_or_create(project=prj,name=name) + pv.value = defaultconf.value + pv.save() if release is None: return prj @@ -197,6 +203,11 @@ class Project(models.Model): user_id = models.IntegerField(null=True) objects = ProjectManager() + # build directory override (e.g. imported) + builddir = models.TextField() + # merge the Toaster configure attributes directly into the standard conf files + merged_attr = models.BooleanField(default=False) + # set to True for the project which is the default container # for builds initiated by the command line etc. is_default= models.BooleanField(default=False) @@ -305,6 +316,15 @@ class Project(models.Model): return layer_versions + def get_default_image_recipe(self): + try: + return self.projectvariable_set.get(name="DEFAULT_IMAGE").value + except (ProjectVariable.DoesNotExist,IndexError): + return None; + + def get_is_new(self): + return self.get_variable(Project.PROJECT_SPECIFIC_ISNEW) + def get_available_machines(self): """ Returns QuerySet of all Machines which are provided by the Layers currently added to the Project """ @@ -353,6 +373,32 @@ class Project(models.Model): return queryset + # Project Specific status management + PROJECT_SPECIFIC_STATUS = 'INTERNAL_PROJECT_SPECIFIC_STATUS' + PROJECT_SPECIFIC_CALLBACK = 'INTERNAL_PROJECT_SPECIFIC_CALLBACK' + PROJECT_SPECIFIC_ISNEW = 'INTERNAL_PROJECT_SPECIFIC_ISNEW' + PROJECT_SPECIFIC_DEFAULTIMAGE = 'PROJECT_SPECIFIC_DEFAULTIMAGE' + PROJECT_SPECIFIC_NONE = '' + PROJECT_SPECIFIC_NEW = '1' + PROJECT_SPECIFIC_EDIT = '2' + PROJECT_SPECIFIC_CLONING = '3' + PROJECT_SPECIFIC_CLONING_SUCCESS = '4' + PROJECT_SPECIFIC_CLONING_FAIL = '5' + + def get_variable(self,variable,default_value = ''): + try: + return self.projectvariable_set.get(name=variable).value + except (ProjectVariable.DoesNotExist,IndexError): + return default_value + + def set_variable(self,variable,value): + pv,create = ProjectVariable.objects.get_or_create(project = self, name = variable) + pv.value = value + pv.save() + + def get_default_image(self): + return self.get_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE) + def schedule_build(self): from bldcontrol.models import BuildRequest, BRTarget, BRLayer @@ -459,6 +505,9 @@ class Build(models.Model): # number of repos cloned so far for this build (default off) repos_cloned = models.IntegerField(default=1) + # Hint on current progress item + progress_item = models.CharField(max_length=40) + @staticmethod def get_recent(project=None): """ @@ -1701,8 +1750,8 @@ class CustomImageRecipe(Recipe): if base_recipe_path: base_recipe = open(base_recipe_path, 'r').read() else: - raise IOError("Based on recipe file not found: %s" % - base_recipe_path) + # Pass back None to trigger error message to user + return None # Add a special case for when the recipe we have based a custom image # recipe on requires another recipe. @@ -1828,7 +1877,7 @@ class Distro(models.Model): description = models.CharField(max_length=255) def get_vcs_distro_file_link_url(self): - path = self.name+'.conf' + path = 'conf/distro/%s.conf' % self.name return self.layer_version.get_vcs_file_link_url(path) def __unicode__(self): diff --git a/poky/bitbake/lib/toaster/toastergui/api.py b/poky/bitbake/lib/toaster/toastergui/api.py index ab6ba69e0..564d595a1 100644 --- a/poky/bitbake/lib/toaster/toastergui/api.py +++ b/poky/bitbake/lib/toaster/toastergui/api.py @@ -22,7 +22,9 @@ import os import re import logging import json +import subprocess from collections import Counter +from shutil import copyfile from orm.models import Project, ProjectTarget, Build, Layer_Version from orm.models import LayerVersionDependency, LayerSource, ProjectLayer @@ -38,6 +40,18 @@ from django.core.urlresolvers import reverse from django.db.models import Q, F from django.db import Error from toastergui.templatetags.projecttags import filtered_filesizeformat +from django.utils import timezone +import pytz + +# development/debugging support +verbose = 2 +def _log(msg): + if 1 == verbose: + print(msg) + elif 2 == verbose: + f1=open('/tmp/toaster.log', 'a') + f1.write("|" + msg + "|\n" ) + f1.close() logger = logging.getLogger("toaster") @@ -137,6 +151,130 @@ class XhrBuildRequest(View): return response +class XhrProjectUpdate(View): + + def get(self, request, *args, **kwargs): + return HttpResponse() + + def post(self, request, *args, **kwargs): + """ + Project Update + + Entry point: /xhr_projectupdate/ + Method: POST + + Args: + pid: pid of project to update + + Returns: + {"error": "ok"} + or + {"error": } + """ + + project = Project.objects.get(pk=kwargs['pid']) + logger.debug("ProjectUpdateCallback:project.pk=%d,project.builddir=%s" % (project.pk,project.builddir)) + + if 'do_update' in request.POST: + + # Extract any default image recipe + if 'default_image' in request.POST: + project.set_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE,str(request.POST['default_image'])) + else: + project.set_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE,'') + + logger.debug("ProjectUpdateCallback:Chain to the build request") + + # Chain to the build request + xhrBuildRequest = XhrBuildRequest() + return xhrBuildRequest.post(request, *args, **kwargs) + + logger.warning("ERROR:XhrProjectUpdate") + response = HttpResponse() + response.status_code = 500 + return response + +class XhrSetDefaultImageUrl(View): + + def get(self, request, *args, **kwargs): + return HttpResponse() + + def post(self, request, *args, **kwargs): + """ + Project Update + + Entry point: /xhr_setdefaultimage/ + Method: POST + + Args: + pid: pid of project to update default image + + Returns: + {"error": "ok"} + or + {"error": } + """ + + project = Project.objects.get(pk=kwargs['pid']) + logger.debug("XhrSetDefaultImageUrl:project.pk=%d" % (project.pk)) + + # set any default image recipe + if 'targets' in request.POST: + default_target = str(request.POST['targets']) + project.set_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE,default_target) + logger.debug("XhrSetDefaultImageUrl,project.pk=%d,project.builddir=%s" % (project.pk,project.builddir)) + return error_response('ok') + + logger.warning("ERROR:XhrSetDefaultImageUrl") + response = HttpResponse() + response.status_code = 500 + return response + + +# +# Layer Management +# +# Rules for 'local_source_dir' layers +# * Layers must have a unique name in the Layers table +# * A 'local_source_dir' layer is supposed to be shared +# by all projects that use it, so that it can have the +# same logical name +# * Each project that uses a layer will have its own +# LayerVersion and Project Layer for it +# * During the Paroject delete process, when the last +# LayerVersion for a 'local_source_dir' layer is deleted +# then the Layer record is deleted to remove orphans +# + +def scan_layer_content(layer,layer_version): + # if this is a local layer directory, we can immediately scan its content + if layer.local_source_dir: + try: + # recipes-*/*/*.bb + cmd = '%s %s' % ('ls', os.path.join(layer.local_source_dir,'recipes-*/*/*.bb')) + recipes_list = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read() + recipes_list = recipes_list.decode("utf-8").strip() + if recipes_list and 'No such' not in recipes_list: + for recipe in recipes_list.split('\n'): + recipe_path = recipe[recipe.rfind('recipes-'):] + recipe_name = recipe[recipe.rfind('/')+1:].replace('.bb','') + recipe_ver = recipe_name.rfind('_') + if recipe_ver > 0: + recipe_name = recipe_name[0:recipe_ver] + if recipe_name: + ro, created = Recipe.objects.get_or_create( + layer_version=layer_version, + name=recipe_name + ) + if created: + ro.file_path = recipe_path + ro.summary = 'Recipe %s from layer %s' % (recipe_name,layer.name) + ro.description = ro.summary + ro.save() + + except Exception as e: + logger.warning("ERROR:scan_layer_content: %s" % e) + class XhrLayer(View): """ Delete, Get, Add and Update Layer information @@ -265,6 +403,7 @@ class XhrLayer(View): (csv)] """ + try: project = Project.objects.get(pk=kwargs['pid']) @@ -285,7 +424,13 @@ class XhrLayer(View): if layer_data['name'] in existing_layers: return JsonResponse({"error": "layer-name-exists"}) - layer = Layer.objects.create(name=layer_data['name']) + if ('local_source_dir' in layer_data): + # Local layer can be shared across projects. They have no 'release' + # and are not included in get_all_compatible_layer_versions() above + layer,created = Layer.objects.get_or_create(name=layer_data['name']) + _log("Local Layer created=%s" % created) + else: + layer = Layer.objects.create(name=layer_data['name']) layer_version = Layer_Version.objects.create( layer=layer, @@ -293,7 +438,7 @@ class XhrLayer(View): layer_source=LayerSource.TYPE_IMPORTED) # Local layer - if ('local_source_dir' in layer_data) and layer.local_source_dir: + if ('local_source_dir' in layer_data): ### and layer.local_source_dir: layer.local_source_dir = layer_data['local_source_dir'] # git layer elif 'vcs_url' in layer_data: @@ -325,6 +470,9 @@ class XhrLayer(View): 'layerdetailurl': layer_dep.get_detailspage_url(project.pk)}) + # Scan the layer's content and update components + scan_layer_content(layer,layer_version) + except Layer_Version.DoesNotExist: return error_response("layer-dep-not-found") except Project.DoesNotExist: @@ -529,7 +677,13 @@ class XhrCustomRecipe(View): recipe_path = os.path.join(layerpath, "recipes", "%s.bb" % recipe.name) with open(recipe_path, "w") as recipef: - recipef.write(recipe.generate_recipe_file_contents()) + content = recipe.generate_recipe_file_contents() + if not content: + # Delete this incomplete image recipe object + recipe.delete() + return error_response("recipe-parent-not-exist") + else: + recipef.write(recipe.generate_recipe_file_contents()) return JsonResponse( {"error": "ok", @@ -1014,8 +1168,24 @@ class XhrProject(View): state=BuildRequest.REQ_INPROGRESS): XhrBuildRequest.cancel_build(br) + # gather potential orphaned local layers attached to this project + project_local_layer_list = [] + for pl in ProjectLayer.objects.filter(project=project): + if pl.layercommit.layer_source == LayerSource.TYPE_IMPORTED: + project_local_layer_list.append(pl.layercommit.layer) + + # deep delete the project and its dependencies project.delete() + # delete any local layers now orphaned + _log("LAYER_ORPHAN_CHECK:Check for orphaned layers") + for layer in project_local_layer_list: + layer_refs = Layer_Version.objects.filter(layer=layer) + _log("LAYER_ORPHAN_CHECK:Ref Count for '%s' = %d" % (layer.name,len(layer_refs))) + if 0 == len(layer_refs): + _log("LAYER_ORPHAN_CHECK:DELETE orpahned '%s'" % (layer.name)) + Layer.objects.filter(pk=layer.id).delete() + except Project.DoesNotExist: return error_response("Project %s does not exist" % kwargs['project_id']) diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/layerBtn.js b/poky/bitbake/lib/toaster/toastergui/static/js/layerBtn.js index 9f9eda1e1..a5a6563d1 100644 --- a/poky/bitbake/lib/toaster/toastergui/static/js/layerBtn.js +++ b/poky/bitbake/lib/toaster/toastergui/static/js/layerBtn.js @@ -67,6 +67,18 @@ function layerBtnsInit() { }); }); + $("td .set-default-recipe-btn").unbind('click'); + $("td .set-default-recipe-btn").click(function(e){ + e.preventDefault(); + var recipe = $(this).data('recipe-name'); + + libtoaster.setDefaultImage(null, recipe, + function(){ + /* Success */ + window.location.replace(libtoaster.ctx.projectSpecificPageUrl); + }); + }); + $(".customise-btn").unbind('click'); $(".customise-btn").click(function(e){ diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js index 6f9b5d0f0..f2c45c833 100644 --- a/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js +++ b/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js @@ -275,7 +275,8 @@ var libtoaster = (function () { function _addRmLayer(layerObj, add, doneCb){ if (layerObj.xhrLayerUrl === undefined){ - throw("xhrLayerUrl is undefined") + alert("ERROR: missing xhrLayerUrl object. Please file a bug."); + return; } if (add === true) { @@ -465,6 +466,108 @@ var libtoaster = (function () { $.cookie('toaster-notification', JSON.stringify(data), { path: '/'}); } + /* _updateProject: + * url: xhrProjectUpdateUrl or null for current project + * onsuccess: callback for successful execution + * onfail: callback for failed execution + */ + function _updateProject (url, targets, default_image, onsuccess, onfail) { + + if (!url) + url = libtoaster.ctx.xhrProjectUpdateUrl; + + /* Flatten the array of targets into a space spearated list */ + if (targets instanceof Array){ + targets = targets.reduce(function(prevV, nextV){ + return prev + ' ' + next; + }); + } + + $.ajax( { + type: "POST", + url: url, + data: { 'do_update' : 'True' , 'targets' : targets , 'default_image' : default_image , }, + headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, + success: function (_data) { + if (_data.error !== "ok") { + console.warn(_data.error); + } else { + if (onsuccess !== undefined) onsuccess(_data); + } + }, + error: function (_data) { + console.warn("Call failed"); + console.warn(_data); + if (onfail) onfail(data); + } }); + } + + /* _cancelProject: + * url: xhrProjectUpdateUrl or null for current project + * onsuccess: callback for successful execution + * onfail: callback for failed execution + */ + function _cancelProject (url, onsuccess, onfail) { + + if (!url) + url = libtoaster.ctx.xhrProjectCancelUrl; + + $.ajax( { + type: "POST", + url: url, + data: { 'do_cancel' : 'True' }, + headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, + success: function (_data) { + if (_data.error !== "ok") { + console.warn(_data.error); + } else { + if (onsuccess !== undefined) onsuccess(_data); + } + }, + error: function (_data) { + console.warn("Call failed"); + console.warn(_data); + if (onfail) onfail(data); + } }); + } + + /* _setDefaultImage: + * url: xhrSetDefaultImageUrl or null for current project + * targets: an array or space separated list of targets to set as default + * onsuccess: callback for successful execution + * onfail: callback for failed execution + */ + function _setDefaultImage (url, targets, onsuccess, onfail) { + + if (!url) + url = libtoaster.ctx.xhrSetDefaultImageUrl; + + /* Flatten the array of targets into a space spearated list */ + if (targets instanceof Array){ + targets = targets.reduce(function(prevV, nextV){ + return prev + ' ' + next; + }); + } + + $.ajax( { + type: "POST", + url: url, + data: { 'targets' : targets }, + headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, + success: function (_data) { + if (_data.error !== "ok") { + console.warn(_data.error); + } else { + if (onsuccess !== undefined) onsuccess(_data); + } + }, + error: function (_data) { + console.warn("Call failed"); + console.warn(_data); + if (onfail) onfail(data); + } }); + } + return { enableAjaxLoadingTimer: _enableAjaxLoadingTimer, disableAjaxLoadingTimer: _disableAjaxLoadingTimer, @@ -485,6 +588,9 @@ var libtoaster = (function () { createCustomRecipe: _createCustomRecipe, makeProjectNameValidation: _makeProjectNameValidation, setNotification: _setNotification, + updateProject : _updateProject, + cancelProject : _cancelProject, + setDefaultImage : _setDefaultImage, }; })(); diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/mrbsection.js b/poky/bitbake/lib/toaster/toastergui/static/js/mrbsection.js index c0c5fa958..f07ccf818 100644 --- a/poky/bitbake/lib/toaster/toastergui/static/js/mrbsection.js +++ b/poky/bitbake/lib/toaster/toastergui/static/js/mrbsection.js @@ -86,7 +86,7 @@ function mrbSectionInit(ctx){ if (buildFinished(build)) { // a build finished: reload the whole page so that the build // shows up in the builds table - window.location.reload(); + window.location.reload(true); } else if (stateChanged(build)) { // update the whole template @@ -110,6 +110,8 @@ function mrbSectionInit(ctx){ // update the clone progress text selector = '#repos-cloned-percentage-' + build.id; $(selector).html(build.repos_cloned_percentage); + selector = '#repos-cloned-progressitem-' + build.id; + $(selector).html('('+build.progress_item+')'); // update the recipe progress bar selector = '#repos-cloned-percentage-bar-' + build.id; diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js b/poky/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js index dace8e325..e55fffcef 100644 --- a/poky/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js +++ b/poky/bitbake/lib/toaster/toastergui/static/js/newcustomimage_modal.js @@ -25,6 +25,8 @@ function newCustomImageModalInit(){ var duplicateNameMsg = "An image with this name already exists. Image names must be unique."; var duplicateImageInProjectMsg = "An image with this name already exists in this project." var invalidBaseRecipeIdMsg = "Please select an image to customise."; + var missingParentRecipe = "The parent recipe file was not found. Cancel this action, build any target (like 'quilt-native') to force all new layers to clone, and try again"; + var unknownError = "Unexpected error: "; // set button to "submit" state and enable text entry so user can // enter the custom recipe name @@ -62,6 +64,7 @@ function newCustomImageModalInit(){ if (nameInput.val().length > 0) { libtoaster.createCustomRecipe(nameInput.val(), baseRecipeId, function(ret) { + showSubmitState(); if (ret.error !== "ok") { console.warn(ret.error); if (ret.error === "invalid-name") { @@ -73,6 +76,10 @@ function newCustomImageModalInit(){ } else if (ret.error === "image-already-exists") { showNameError(duplicateImageInProjectMsg); return; + } else if (ret.error === "recipe-parent-not-exist") { + showNameError(missingParentRecipe); + } else { + showNameError(unknownError + ret.error); } } else { imgCustomModal.modal('hide'); diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js b/poky/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js index 69220aaf5..3f9e18670 100644 --- a/poky/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js +++ b/poky/bitbake/lib/toaster/toastergui/static/js/projecttopbar.js @@ -14,6 +14,9 @@ function projectTopBarInit(ctx) { var newBuildTargetBuildBtn = $("#build-button"); var selectedTarget; + var updateProjectBtn = $("#update-project-button"); + var cancelProjectBtn = $("#cancel-project-button"); + /* Project name change functionality */ projectNameFormToggle.click(function(e){ e.preventDefault(); @@ -89,6 +92,25 @@ function projectTopBarInit(ctx) { }, null); }); + updateProjectBtn.click(function (e) { + e.preventDefault(); + + selectedTarget = { name: "_PROJECT_PREPARE_" }; + + /* Save current default build image, fire off the build */ + libtoaster.updateProject(null, selectedTarget.name, newBuildTargetInput.val().trim(), + function(){ + window.location.replace(libtoaster.ctx.projectSpecificPageUrl); + }, null); + }); + + cancelProjectBtn.click(function (e) { + e.preventDefault(); + + /* redirect to 'done/canceled' landing page */ + window.location.replace(libtoaster.ctx.landingSpecificCancelURL); + }); + /* Call makeProjectNameValidation function */ libtoaster.makeProjectNameValidation($("#project-name-change-input"), $("#hint-error-project-name"), $("#validate-project-name"), diff --git a/poky/bitbake/lib/toaster/toastergui/tables.py b/poky/bitbake/lib/toaster/toastergui/tables.py index dca2fa291..9ff756bc8 100644 --- a/poky/bitbake/lib/toaster/toastergui/tables.py +++ b/poky/bitbake/lib/toaster/toastergui/tables.py @@ -35,6 +35,8 @@ from toastergui.tablefilter import TableFilterActionToggle from toastergui.tablefilter import TableFilterActionDateRange from toastergui.tablefilter import TableFilterActionDay +import os + class ProjectFilters(object): @staticmethod def in_project(project_layers): @@ -339,6 +341,8 @@ class RecipesTable(ToasterTable): 'filter_name' : "in_current_project", 'static_data_name' : "add-del-layers", 'static_data_template' : '{% include "recipe_btn.html" %}'} + if '1' == os.environ.get('TOASTER_PROJECTSPECIFIC'): + build_col['static_data_template'] = '{% include "recipe_add_btn.html" %}' def get_context_data(self, **kwargs): project = Project.objects.get(pk=kwargs['pid']) @@ -1611,14 +1615,12 @@ class DistrosTable(ToasterTable): hidden=True, field_name="layer_version__get_vcs_reference") - wrtemplate_file_template = '''conf/machine/{{data.name}}.conf - ''' - + distro_file_template = '''conf/distro/{{data.name}}.conf + {% if 'None' not in data.get_vcs_distro_file_link_url %}{% endif %}''' self.add_column(title="Distro file", hidden=True, static_data_name="templatefile", - static_data_template=wrtemplate_file_template) - + static_data_template=distro_file_template) self.add_column(title="Select", help_text="Sets the selected distro to the project", diff --git a/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html b/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html new file mode 100644 index 000000000..e377cadd7 --- /dev/null +++ b/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html @@ -0,0 +1,128 @@ + +{% load static %} +{% load projecttags %} +{% load project_url_tag %} + + + + {% block title %} Toaster {% endblock %} + + + + + + + + + + + + + + + + {% if DEBUG %} + + {% endif %} + + {% block extraheadcontent %} + {% endblock %} + + + + + {% csrf_token %} + + + + + + +
+ {% block pagecontent %} + {% endblock %} +
+ + diff --git a/poky/bitbake/lib/toaster/toastergui/templates/baseprojectspecificpage.html b/poky/bitbake/lib/toaster/toastergui/templates/baseprojectspecificpage.html new file mode 100644 index 000000000..d0b588de9 --- /dev/null +++ b/poky/bitbake/lib/toaster/toastergui/templates/baseprojectspecificpage.html @@ -0,0 +1,48 @@ +{% extends "base_specific.html" %} + +{% load projecttags %} +{% load humanize %} + +{% block title %} {{title}} - {{project.name}} - Toaster {% endblock %} + +{% block pagecontent %} + +
+ {% include "project_specific_topbar.html" %} + + + +
+ +
+
+ {% block projectinfomain %}{% endblock %} +
+ +
+{% endblock %} + diff --git a/poky/bitbake/lib/toaster/toastergui/templates/customise_btn.html b/poky/bitbake/lib/toaster/toastergui/templates/customise_btn.html index 38c258ac3..ce462401c 100644 --- a/poky/bitbake/lib/toaster/toastergui/templates/customise_btn.html +++ b/poky/bitbake/lib/toaster/toastergui/templates/customise_btn.html @@ -5,7 +5,11 @@ > Customise - + {% endif %}

Project release

@@ -157,5 +159,6 @@
+ {% endblock %} diff --git a/poky/bitbake/lib/toaster/toastergui/templates/project_specific.html b/poky/bitbake/lib/toaster/toastergui/templates/project_specific.html new file mode 100644 index 000000000..f625d18ba --- /dev/null +++ b/poky/bitbake/lib/toaster/toastergui/templates/project_specific.html @@ -0,0 +1,162 @@ +{% extends "baseprojectspecificpage.html" %} + +{% load projecttags %} +{% load humanize %} +{% load static %} + +{% block title %} Configuration - {{project.name}} - Toaster {% endblock %} +{% block projectinfomain %} + + + + + + + + +