Bug 1245701 - Allow absolute paths with wildcards in FINAL_TARGET_FILES; r?glandium draft
authorMike Shal <mshal@mozilla.com>
Tue, 05 Apr 2016 17:40:31 -0400
changeset 348553 b5cf6d5cd0c96d1b4e9016ae6d0e6cb52be9d035
parent 348506 b6683e141c47c022598c0caac3ea8ba8c6236d42
child 348554 9418a45f527d50628624868b9a2854045afe28ac
push id14852
push userbmo:mshal@mozilla.com
push dateThu, 07 Apr 2016 19:25:15 +0000
reviewersglandium
bugs1245701
milestone48.0a1
Bug 1245701 - Allow absolute paths with wildcards in FINAL_TARGET_FILES; r?glandium MozReview-Commit-ID: AnD0NeQrIpD
python/mozbuild/mozbuild/backend/recursivemake.py
--- a/python/mozbuild/mozbuild/backend/recursivemake.py
+++ b/python/mozbuild/mozbuild/backend/recursivemake.py
@@ -18,16 +18,17 @@ from itertools import chain
 from reftest import ReftestManifest
 
 from mozpack.manifests import (
     InstallManifest,
 )
 import mozpack.path as mozpath
 
 from mozbuild.frontend.context import (
+    AbsolutePath,
     Path,
     RenamedSourcePath,
     SourcePath,
     ObjDirPath,
 )
 from .common import CommonBackend
 from ..frontend.data import (
     AndroidAssetsDirs,
@@ -1248,24 +1249,23 @@ class RecursiveMakeBackend(CommonBackend
             target_var = (mozpath.join(target, path)
                           if path else target).replace('/', '_')
             have_objdir_files = False
             for f in files:
                 assert not isinstance(f, RenamedSourcePath)
                 dest = mozpath.join(reltarget, path, f.target_basename)
                 if not isinstance(f, ObjDirPath):
                     if '*' in f:
-                        if not isinstance(f, SourcePath):
-                            raise Exception("Wildcards are only supported in "
-                                            "SourcePath objects in %s. Path is: %s" % (
-                                                type(obj), f
-                                            ))
-                        if f.startswith('/'):
-                            basepath = f.full_path.rstrip('*')
-                            install_manifest.add_pattern_symlink(basepath, '*', path)
+                        if f.startswith('/') or isinstance(f, AbsolutePath):
+                            basepath, wild = os.path.split(f.full_path)
+                            if '*' in basepath:
+                                raise Exception("Wildcards are only supported in the filename part of "
+                                                "srcdir-relative or absolute paths.")
+
+                            install_manifest.add_pattern_symlink(basepath, wild, path)
                         else:
                             install_manifest.add_pattern_symlink(f.srcdir, f, path)
                     else:
                         install_manifest.add_symlink(f.full_path, dest)
                 else:
                     install_manifest.add_optional_exists(dest)
                     backend_file.write('%s_FILES += %s\n' % (
                         target_var, self._pretty_path(f, backend_file)))