bin/chroot-maint: Enhance the `CROSS_TOOLS' pattern machinery.
[distorted-chroot] / 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)