bin/chroot-maint: Enhance the `CROSS_TOOLS' pattern machinery.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 4 Aug 2020 22:40:35 +0000 (23:40 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 9 Aug 2020 00:08:14 +0000 (01:08 +0100)
There's now a way to list alternative and optional patterns.

bin/chroot-maint

index 34dec2e..fbd45e3 100755 (executable)
@@ -2384,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)