From: Mark Wooding Date: Tue, 11 May 2021 22:16:33 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/deploy' into deploy.gibson X-Git-Url: https://git.distorted.org.uk/~mdw/distorted-chroot/commitdiff_plain/refs/heads/deploy.gibson?hp=ee30f53de86280ac63b991b8e0b72294def5b4d5 Merge remote-tracking branch 'origin/deploy' into deploy.gibson * origin/deploy: Makefile: Don't insist on `/usr/lib/.../coreutils/'. bin/chroot-maint: Enhance the `CROSS_TOOLS' pattern machinery. Makefile: Include C++ headers in the cross-tools bundle. Makefile: Use buster's Qemu on stretch. Makefile, bin/chroot-maint: Allow source distribution selection for Qemu. bin/chroot-maint: Add missing format argument to diagnostic. --- diff --git a/Makefile b/Makefile index 3b431a2..fb888c0 100644 --- a/Makefile +++ b/Makefile @@ -134,7 +134,7 @@ CROSS_PATHS += \ sha256sum sha384sum sha512sum shred shuf sort split stat \ stdbuf sum tac tail tee test timeout tr truncate tsort tty \ unexpand uniq unlink users wc who whoami yes) \ - /usr/lib/MULTI/coreutils/ \ + ?/usr/lib/MULTI/coreutils/ \ $(addprefix /lib/MULTI/, \ libnsl.so.* libnss_*.so.*) \ /usr/bin/gpgv \ @@ -155,7 +155,8 @@ CROSS_PATHS += \ $(addprefix /usr/bin/$a-, \ cpp gcc g++ gcov gcov-dump gcov-tool gprof \ gcc-ar gcc-nm gcc-ranlib) \ - /usr/lib/gcc-cross/$a/) + /usr/lib/gcc-cross/$a/ \ + /usr/$a/include/c++) ## Local packages to be compiled and installed in chroots. Archives can be ## found in `pkg/'. @@ -178,6 +179,10 @@ arm64_QEMUHOST = $(64BIT_QEMUHOST) i386_QEMUHOST = $(32BIT_QEMUHOST) amd64_QEMUHOST = $(64BIT_QEMUHOST) +## Which distribution of Qemu to use. +CONFIG_VARS += $(foreach d,$(DISTS),$d_QEMUDIST) +stretch_QEMUDIST = buster + ## Qemu architecture names. These tell us which Qemu binary to use for a ## particular Debian architecture. CONFIG_VARS += $(foreach a,$(FOREIGN_ARCHS),$a_QEMUARCH) diff --git a/bin/chroot-maint b/bin/chroot-maint index 21e5c21..fbd45e3 100755 --- a/bin/chroot-maint +++ b/bin/chroot-maint @@ -1431,6 +1431,7 @@ class Config (object): "*_DEPS": ("PKGDEPS", _conv_list), "*_QEMUHOST": ("QEMUHOST", _conv_str), "*_QEMUARCH": ("QEMUARCH", _conv_str), + "*_QEMUDIST": ("QEMUDIST", _conv_str), "*_ALIASES": ("DISTALIAS", _conv_str) } @@ -1858,7 +1859,8 @@ class ChrootJob (BaseJob): me._tools_chroot = CrossToolsJob.ensure\ ("%s-%s" % (me._dist, C.TOOLSARCH), FRESH) me._qemu_chroot = CrossToolsJob.ensure\ - ("%s-%s" % (me._dist, C.QEMUHOST[me._arch]), FRESH) + ("%s-%s" % (C.QEMUDIST.get(me._dist, me._dist), + C.QEMUHOST[me._arch]), FRESH) me.await(me._tools_chroot) me.await(me._qemu_chroot) @@ -1895,9 +1897,10 @@ class ChrootJob (BaseJob): crossdir = OS.path.join(C.LOCAL, "cross", "%s-%s" % (dist, C.TOOLSARCH)) - qarch, qhost = C.QEMUARCH[arch], C.QEMUHOST[arch] + qarch, qhost, qdist = \ + C.QEMUARCH[arch], C.QEMUHOST[arch], C.QEMUDIST.get(dist, dist) qemudir = OS.path.join(C.LOCAL, "cross", - "%s-%s" % (dist, qhost), "QEMU") + "%s-%s" % (qdist, qhost), "QEMU") ## Acquire lockfiles in a canonical order to prevent deadlocks. donors = [C.TOOLSARCH] @@ -2051,8 +2054,9 @@ class ChrootJob (BaseJob): run_root(["mv", new, real]) for path in have_link.iterkeys(): if path in want_link: continue - progress("remove obsolete link `%s' -> `%s'" % path) real = root + path + progress("remove obsolete link `%s' -> `%s'" % + (path, OS.readlink(real))) run_root(["rm", "-f", real]) ## Remove diversions from paths which don't need them any more. Here @@ -2380,15 +2384,25 @@ class CrossToolsJob (BaseJob): ## Work through the shopping list, copying the things it names into the ## cross-tools tree. + ## + ## Each thing in the `CROSS_PATHS' list is a `|'-separated list of glob + ## patterns, optionally preceded by `?'. Unless the list starts with + ## `?', at least one of the patterns must match at least one file. + ## Patterns may contain the token `MULTI', which is replaced by the + ## donor architecture's multiarch triplet. scan = [] for pat in C.CROSS_PATHS: - pat = pat.replace("MULTI", mymulti) any = False - for rootpath in GLOB.iglob(root + pat): + pat = pat.replace("MULTI", mymulti) + if pat.startswith("?"): + pat = pat[1:] any = True - path = rootpath[len(root):] - progress("copy `%s'" % path) - run_program(["rsync", "-aHR", "%s/.%s" % (root, path), crossnew]) + for subpat in pat.split("|"): + for rootpath in GLOB.iglob(root + subpat): + any = True + path = rootpath[len(root):] + progress("copy `%s'" % path) + run_program(["rsync", "-aHR", "%s/.%s" % (root, path), crossnew]) if not any: raise RuntimeError("no matches for cross-tool pattern `%s'" % pat)