poky: subtree update:c17113f1e2..3b87508a9a

Adrian Bunk (18):
      help2man: Upgrade 1.47.10 -> 1.47.11
      glib-networking: Upgrade 2.60.2 -> 2.60.3
      flac: Upgrade 1.3.2 -> 1.3.3
      subversion: Upgrade 1.12.0 -> 1.12.2
      world-broken.inc: Remove
      meta/recipes.txt: Stop documenting the long removed recipes-lsb4
      python: Remove PYTHONLSBOPTS that hasn't been set for some time
      systemd: Print a buildtime warning about the status with musl
      linux-dtb.inc: Remove
      systemd: Update to the latest 242 branch
      Remove LSB support
      Remove LSB support bits
      libxcrypt: Fix the build with -Os
      systemd: Update to the latest 242 branch
      Remove leftovers from the eglinfo removal
      Update to KERNEL_DEVICETREE variable.
      ref-manual: Remove documentation for the removed bluez5 distro feature
      ref-manual: Remove documentation for the removed gnome class

Alex Kiernan (1):
      iputils: Set prefix correctly for usrmerge

Alexander Kanavin (23):
      python3-numpy: update to 1.17.0
      images: use 512M of RAM in qemu if 'opengl" is in DISTRO_FEATURES
      boost: update to 1.71.0
      beaglebone: use the default of 256M rather than 512M
      rpm: resolve a host contamination issue for mono packaging
      qemu: set default RAM to 256M for all machines
      mesa: disable gallium swrast driver on x86 x32
      ltp: move from python 2.x to python 3.x
      lsb-release: fix upstream version check
      libffi: fix upstream version check
      qemu: switch to '-vga std' emulated hardware from vmware/cirrus for x86/mips
      ca-certificates: use python 3 for builds
      libpsl: use python 3 during builds
      pseudo: use python 3 during builds
      llvm: use python 3 during builds
      virglrenderer: update 0.7.0 -> 0.8.0
      webkitgtk: use Python 3 for builds
      webkitgtk: update 2.24.3 -> 2.24.4
      default-providers.inc: set mesa as the provider for native(sdk) virtual/libgl
      libepoxy: enable x11 PACKAGECONFIG for native/nativesdk
      eglinfo: remove the recipe
      local.conf.sample: add a commented-out option to enable the gtk UI qemu frontend
      package.bbclass: allow shell-style wildcards in PRIVATE_LIBS

Alistair Francis (2):
      linux-yocto-dev: Mark qemuriscv64 as compatible
      qemuriscv: Generate a wic rootFS with a larger filesystem

Andre McCurdy (11):
      bitbake.conf: drop FETCHCMD, GITDIR, etc fetcher over-rides
      tune-arm1136jf-s.inc: add hardfloat support
      tune-arm1176jz-s.inc: add support for arm1176jz-s CPU specific tuning
      tune-ep9312.inc: fix TUNEVALID description
      packagegroup-core-boot: drop duplicate MACHINE_ESSENTIAL_EXTRA_RDEPENDS, etc
      rootfs-postcommands.bbclass: add inittab tweak to read_only_rootfs_hook()
      base-files: nsswitch.conf is glibc specific
      sqlite3: make CFLAGS consistent across native, nativesdk and target cases
      sqlite3: explicitly set target endian-ness
      feature-arm-thumb.inc: fix ARM_THUMB_SUFFIX
      dropbear: don't create invalid symlinks if ssh, scp, etc are disabled

Anuj Mittal (1):
      libjpeg-turbo: upgrade 2.0.2 -> 2.0.3

Armin Kuster (4):
      bitbake: tests/fetch: Resolve fetch error in bitbake-selftest
      gcc-9.2: Security fix for CVE-2019-14250
      gcc-8.3: Security fix for CVE-2019-14250
      gcc-8.3: remove 8.3 from zeus

Bruce Ashfield (11):
      bluez5: fix build against libc-headers 5.2+
      kernel-devsrc: remove python2 dependency
      perf: change dependencies on python to python3
      perf: v5.3+ build fixes
      devsrc: update arm64 scripts/prepare for kernels 5.3+
      linux-libc-headers: update to v5.2 headers
      linux-yocto: introduce 5.2 recipes
      qemu: bump linux-yocto preferred version to 5.2
      linux-yocto/5.2: update qemuriscv64 SRCREV
      linux-yocto/5.2: config tweaks and kallsyms fix
      linux-yocto: drop 5.0 recipes

Changhyeok Bae (1):
      iputils: upgrade to s20190709

Changqing Li (8):
      libedit: fix failed to get history
      avahi-ui: support usrmerge
      bootchart2: support usrmerge
      systemd-bootchart: support usrmerge
      bootchart2: switch to add patch from change source in do_install
      mdadm: skip timeout testcase 11spare-migration
      dnf.py: installroot support usrmerge
      man-db: support usrmerge

Chen Qi (7):
      bbtests.py: remove recipe-depends.dot
      commands.py: fix typo
      bitbake: cooker.py: remove generation of recipe-depends.dot
      bind: fix build with python3 PACKAGECONFIG enabled
      python-testtools: rdepend on doctest module
      python-numpy: rdepend on multiprocessing module
      python3: make misc package rdepend on pydoc and pickle modules

Christophe PRIOUZEAU (1):
      common-licenses: update BSD-2-CLAUSE license text

Dan Callaghan (1):
      autotools: always include config_site.d files in CONFIG_SITE

Daniel Klauer (1):
      image.bbclass: Fix debug output for rootfs size

Denys Zagorui (1):
      gzip: add nativesdk support

Drew Moseley (1):
      runqemu: Fix typo in help text.

He Zhe (4):
      ltp: cve/meltdown.c: Fix kernel symbol finding
      ltp: syscalls: rt_sigwaitinfo01: Fix failure for MIPS arches
      qemu: Add pkg-config handling for libgcrypt
      qemu: Fix dependency of PACKAGECONFIG libcurl

Jacob Kroon (2):
      btrfs-tools: Add PACKAGECONFIG knob for controlling python support
      rm_work: Remove redundant 'after' in addtask statement

Jason Wessel (2):
      serial-getty@.service: Allow device to fast fail if it does not exist
      Revert "kernel.bbclass: adjust a condition checking"

Joshua Watt (9):
      bitbake: bitbake: respect force flag in runall and runonly
      oeqa: reproducible: Cleanup reproducible build
      oeqa: reproducible: Use subTest for packages
      oeqa: Set LD_LIBRARY_PATH when executing native commands
      oeqa: reproducible: Record packages in test results
      oeqa: Enable reproducible build test
      oeqa: reproducible: Do two clean builds
      oeqa: reproducible: Preserve sstate mirror for first build
      resulttool: Add reproducible log extraction

Kai Kang (4):
      avahi: launch avahi-daemon after connman
      cups: redefine CUPS_SERVERBIN
      texinfo: fix multilib file confliction
      sysstat: 12.1.3 -> 12.1.6

Kevin Hao (1):
      meta-yocto-bsp: Bump to the v5.2 kernel

Khem Raj (12):
      go-1.12: update to 1.12.9 minor release
      powerpc-tunes: Introduce bigendian tune
      tune-riscv: Drop littleendian and introduce bigendian tune
      gcc: Move STANDARD_STARTFILE_PREFIX_1 and STANDARD_STARTFILE_PREFIX_2 back to gcc.c
      gcc: Fix ldbl-128 support for musl
      libgpg-error: Fix build with gawk 5.x
      libgpg-error: Fix build with gawk 5.x
      musl: Update to latest master
      gcc-9.2: Fix risc-v dynamic linker relocation
      python3native, pythonnative: export PYTHON_LIBRARY and PYTHON_INCLUDE_DIR
      oeqa: Recognise svlogd as another logger
      python3-manifest.json: Fix typo in summary

Mark Asselstine (1):
      sdkext: use simpler kernel module for devtool test

Mark Hatle (1):
      yocto-check-layer: Allow any case for README file detection

Martin Hundebøll (1):
      initscripts: remove warnings on read-only-rootfs (again)

Martin Jansa (3):
      bitbake: utils: Fix movefile() exception handling with python3
      bitbake: fetch2: show warning when renaming the archive with bad checksum failed
      bitbake: bitbake-user-manual: Improve the example for Removal (Override Style Syntax)

Mazliana (1):
      oeqa/kerneldevelopment: Able to apply a single patch to the Linux kernel source

Ming Liu (1):
      weston: uprev to 7.0.0

Nathan Rossi (30):
      binutils: Fix mips patch which changes default emulation
      oeqa/utils/nfs: Add unfs_server function to setup a userspace NFS server
      scripts/lib/resulttool/report.py: Add more result types
      gcc-common.inc: Process staging fixme with correct target/native sysroot
      oeqa/core/tests: Skip test_fail_duplicated_module
      oeqa/core/tests: Fix test_data module tests
      Clean up remnants of glibc-initial
      oe-selftest: Implement console 'keepalive' output
      dejagnu: Add dejagnu for binutils/gcc test suites
      binutils-cross-testsuite: Create recipe for test suite execution
      gcc-runtime: Add do_check task for executing gcc test suites
      glibc-testsuite: Create a recipe to implement glibc test suite
      gcc-testsuite.inc: Fix ssh.exp, ensure multilib_flags are populated
      security_flags.inc: Add overrides for glibc-testsuite to match glibc
      archiver.bbclass: Do not archive srpm's if there are no package tasks
      oeqa/core: Implement proper extra result collection and serialization
      oeqa/core: Rework OETestTag and remove unused OETestFilter
      oeqa/selftest: Add test run filtering based on test tags
      oeqa/core/runner.py: Fix OETestTag listing
      oeqa/selftest/binutils: Create selftest case for binutils test suite
      oeqa/selftest/gcc: Create selftest case for gcc test suite
      oeqa/selftest/glibc: Create selftest case for glibc test suite
      oeqa/selftest/cases/glibc.py: Don't install python3 and pexpect
      oeqa/selftest: For toolchain tests do not fail if a test failed
      oeqa/selftest: Toolchain tests suffix "-user" for qemu usermode results
      oeqa/selftest: Use extraresults on self instead of self.tc
      oeqa/selftest/context.py: Change -t/-T args to be optional
      oeqa/core/decorator: Fix super class modifying subclass tags
      oeqa/selftest/cases/gcc.py: Split into classes for parallelism
      oeqa/selftest/cases/glibc.py: Rework and tag with toolchain-user/system

Neil Armstrong (1):
      mesa: Add support for the panfrost PACKAGECONFIG

Oleksandr Kravchuk (8):
      libsolv: update to 0.7.6
      libevdev: update to 1.8.0
      ell: update to 0.22
      go-dep: update to 0.5.4
      libsecret: 0.19.0
      python3-pbr: update to 5.4.3
      python3-git: update to 3.0.2
      libxcrypt: update to 4.4.8

Peiran Hong (1):
      diffutils: Added perl to support ptest & Skipped one test case

Peter Kjellerstedt (2):
      libffi: Make it build for MIPS o32
      devtool: Avoid failure for recipes with S == WORKDIR and no local files

Richard Purdie (11):
      poky-altcfg: Replace poky-lsb with poky-altcfg
      ca-certificates: Fix reproducibilty and multilib issue
      gcc-cross: Clean up fixed-includes
      systemtap: Use latest and greatest git version for 5.2 kernel support
      gcc-cross: Fix header file corruption problems
      poky: Use 5.2 kernel by default
      binutils/glibc-testsuite: inherit nopackages to fix world builds
      systemtap: Drop patches merged upstream
      poky-tiny/poky-altcfg: Use busybox-mdev and systemd
      oeqa/selftest: Markup 'machine' specific test cases
      oeqa/selftest: Tweak binutils tests tags as toolchain/user and system

Robert Yang (3):
      ccache: 3.7.1 -> 3.7.3
      nfs-utils: 2.3.3 -> 2.4.1
      build-compare: 2015.02.10 -> 2019.08.14

Ross Burton (11):
      libedit: remove FETCHCMD append
      libnl: upgrade to 3.5.0
      libnl: don't patch libnl-3.0.pc
      systemd: explicitly set the path to nologin
      core-image-sato: don't use 512MB in qemumips
      patch: add CVE tags to patches
      pango: 1.44.6 upgrade
      pango: add PACKAGECONFIG for libthai support
      harfbuzz: upgrade to 2.6.1
      systemd: ensure reproducible builds by clearly exposing the time epoch support
      ref-system-requirements: add Debian 10 to supported distribution list

Scott Rifenbark (5):
      ref-manual: Updated the "AS" variable
      ref-manual: Updates to "Building Your Recipe"
      dev-manual: Updated "Creating a Team Development Environment"
      poky-end: Added "pylint3" package to Ubuntu essentials.
      ref-manual: sync list of image types with source

Tim Blechmann (1):
      icecc: blacklist systemtap

Trevor Gamblin (2):
      lighttpd: drop hard-coded lua version in PACKAGECONFIG
      libevent: add granularity to ptest log

Vijai Kumar K (1):
      lib/oe/gpg_sign.py: Remove unwanted import

Wes Lindauer (1):
      bitbake: bitbake: cooker: Ensure bbappends are found in stable order

Yi Zhao (1):
      libbsd: upgrade 0.9.1 -> 0.10.0

Yuan Chao (1):
      man-db: upgrade 2.8.6.1 -> 2.8.7

Zang Ruochen (7):
      libarchive:upgrade 3.3.3 -> 3.4.0
      python3-pip:upgrade 19.2.2 -> 19.2.3
      logrotate:upgrade 3.15.0 -> 3.15.1
      libogg:upgrade 1.3.3 -> 1.3.4
      dtc:upgrade 1.5.0 -> 1.5.1
      python3-dbus:upgrade 1.2.8 -> 1.2.10
      meson:upgrade 0.51.1 -> 0.51.2

Change-Id: I341e8df65e8196114088a2d6d6eb3a33296188b4
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
index 6dc83d2..eee09d3 100644
--- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -8,6 +8,7 @@
 import functools
 import multiprocessing
 import textwrap
+import json
 import unittest
 
 MISSING = 'MISSING'
@@ -81,14 +82,12 @@
         for v in needed_vars:
             setattr(self, v.lower(), bb_vars[v])
 
-        if not hasattr(self.tc, "extraresults"):
-            self.tc.extraresults = {}
-        self.extras = self.tc.extraresults
-
-        self.extras.setdefault('reproducible.rawlogs', {})['log'] = ''
+        self.extrasresults = {}
+        self.extrasresults.setdefault('reproducible.rawlogs', {})['log'] = ''
+        self.extrasresults.setdefault('reproducible', {}).setdefault('files', {})
 
     def append_to_log(self, msg):
-        self.extras['reproducible.rawlogs']['log'] += msg
+        self.extrasresults['reproducible.rawlogs']['log'] += msg
 
     def compare_packages(self, reference_dir, test_dir, diffutils_sysroot):
         result = PackageCompareResults()
@@ -114,47 +113,70 @@
         result.sort()
         return result
 
-    @unittest.skip("Reproducible builds do not yet pass")
+    def write_package_list(self, package_class, name, packages):
+        self.extrasresults['reproducible']['files'].setdefault(package_class, {})[name] = [
+                {'reference': p.reference, 'test': p.test} for p in packages]
+
     def test_reproducible_builds(self):
         capture_vars = ['DEPLOY_DIR_' + c.upper() for c in self.package_classes]
 
-        common_config = textwrap.dedent('''\
-            INHERIT += "reproducible_build"
-            PACKAGE_CLASSES = "%s"
-            ''') % (' '.join('package_%s' % c for c in self.package_classes))
-
-        # Do an initial build. It's acceptable for this build to use sstate
-        self.write_config(common_config)
-        vars_reference = get_bb_vars(capture_vars)
-        bitbake(' '.join(self.images))
-
         # Build native utilities
+        self.write_config('')
         bitbake("diffutils-native -c addto_recipe_sysroot")
         diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native")
 
-        # Perform another build. This build should *not* share sstate or pull
-        # from any mirrors, but sharing a DL_DIR is fine
-        self.write_config(textwrap.dedent('''\
-            TMPDIR = "${TOPDIR}/reproducible/tmp"
+        # Reproducible builds should not pull from sstate or mirrors, but
+        # sharing DL_DIR is fine
+        common_config = textwrap.dedent('''\
+            INHERIT += "reproducible_build"
+            PACKAGE_CLASSES = "%s"
             SSTATE_DIR = "${TMPDIR}/sstate"
-            SSTATE_MIRROR = ""
-            ''') + common_config)
-        vars_test = get_bb_vars(capture_vars)
+            ''') % (' '.join('package_%s' % c for c in self.package_classes))
+
+        # Perform a build.
+        reproducibleA_tmp = os.path.join(self.topdir, 'reproducibleA', 'tmp')
+        if os.path.exists(reproducibleA_tmp):
+            bb.utils.remove(reproducibleA_tmp, recurse=True)
+
+        self.write_config((textwrap.dedent('''\
+            TMPDIR = "%s"
+            ''') % reproducibleA_tmp) + common_config)
+        vars_A = get_bb_vars(capture_vars)
         bitbake(' '.join(self.images))
 
+        # Perform another build.
+        reproducibleB_tmp = os.path.join(self.topdir, 'reproducibleB', 'tmp')
+        if os.path.exists(reproducibleB_tmp):
+            bb.utils.remove(reproducibleB_tmp, recurse=True)
+
+        self.write_config((textwrap.dedent('''\
+            SSTATE_MIRROR = ""
+            TMPDIR = "%s"
+            ''') % reproducibleB_tmp) + common_config)
+        vars_B = get_bb_vars(capture_vars)
+        bitbake(' '.join(self.images))
+
+        # NOTE: The temp directories from the reproducible build are purposely
+        # kept after the build so it can be diffed for debugging.
+
         for c in self.package_classes:
-            package_class = 'package_' + c
+            with self.subTest(package_class=c):
+                package_class = 'package_' + c
 
-            deploy_reference = vars_reference['DEPLOY_DIR_' + c.upper()]
-            deploy_test = vars_test['DEPLOY_DIR_' + c.upper()]
+                deploy_A = vars_A['DEPLOY_DIR_' + c.upper()]
+                deploy_B = vars_B['DEPLOY_DIR_' + c.upper()]
 
-            result = self.compare_packages(deploy_reference, deploy_test, diffutils_sysroot)
+                result = self.compare_packages(deploy_A, deploy_B, diffutils_sysroot)
 
-            self.logger.info('Reproducibility summary for %s: %s' % (c, result))
+                self.logger.info('Reproducibility summary for %s: %s' % (c, result))
 
-            self.append_to_log('\n'.join("%s: %s" % (r.status, r.test) for r in result.total))
+                self.append_to_log('\n'.join("%s: %s" % (r.status, r.test) for r in result.total))
 
-            if result.missing or result.different:
-                self.fail("The following %s packages are missing or different: %s" %
-                        (c, ' '.join(r.test for r in (result.missing + result.different))))
+                self.write_package_list(package_class, 'missing', result.missing)
+                self.write_package_list(package_class, 'different', result.different)
+                self.write_package_list(package_class, 'same', result.same)
+
+                if result.missing or result.different:
+                    self.fail("The following %s packages are missing or different: %s" %
+                            (c, ' '.join(r.test for r in (result.missing + result.different))))