build:waf dist: factor out function to add list of files to the tarball
[metze/samba/wip.git] / buildtools / wafsamba / samba_dist.py
index 79cb721b257a81ca2b516dc047c4e66a9d67e3b5..871c11101967ef15a9f9903e411bb86d053b425d 100644 (file)
@@ -5,6 +5,7 @@ import Utils, os, sys, tarfile, stat, Scripting, Logs, Options
 from samba_utils import *
 
 dist_dirs = None
+dist_files = None
 dist_blacklist = ""
 
 def add_symlink(tar, fname, abspath, basedir):
@@ -98,6 +99,34 @@ def vcs_dir_contents(path):
 
 
 def dist(appname='',version=''):
+
+    def add_files_to_tarball(tar, srcdir, srcsubdir, dstdir, dstsubdir, blacklist, files):
+        if blacklist == None:
+            blacklist = []
+        for f in files:
+            abspath = os.path.join(srcdir, f)
+
+            if srcsubdir != '.':
+                f = f[len(srcsubdir)+1:]
+
+            # Remove files in the blacklist
+            if f in blacklist:
+                continue
+            blacklisted = False
+            # Remove directories in the blacklist
+            for d in blacklist:
+                if f.startswith(d):
+                    blacklisted = True
+            if blacklisted:
+                continue
+            if os.path.isdir(abspath):
+                continue
+            if dstsubdir != '.':
+                f = dstsubdir + '/' + f
+            fname = dstdir + '/' + f
+            add_tarfile(tar, fname, abspath, srcsubdir)
+
+
     if not isinstance(appname, str) or not appname:
         # this copes with a mismatch in the calling arguments for dist()
         appname = Utils.g_module.APPNAME
@@ -134,28 +163,23 @@ def dist(appname='',version=''):
         except Exception, e:
             Logs.error('unable to get contents of %s: %s' % (absdir, e))
             sys.exit(1)
-        for f in files:
-            abspath = os.path.join(srcdir, f)
+        add_files_to_tarball(tar, srcdir, dir, dist_base, destdir, blacklist, files)
 
-            if dir != '.':
-                f = f[len(dir)+1:]
+    if dist_files:
+        for file in dist_files.split():
+            if file.find(':') != -1:
+                destfile = file.split(':')[1]
+                file = file.split(':')[0]
+            else:
+                destfile = file
 
-            # Remove files in the blacklist
-            if f in blacklist:
-                continue
-            blacklisted = False
-            # Remove directories in the blacklist
-            for d in blacklist:
-                if f.startswith(d):
-                    blacklisted = True
-            if blacklisted:
-                continue
-            if os.path.isdir(abspath):
-                continue
-            if destdir != '.':
-                f = destdir + '/' + f
-            fname = dist_base + '/' + f
-            add_tarfile(tar, fname, abspath, dir)
+            absfile = os.path.join(srcdir, file)
+
+            if destfile != file:
+                file = destfile
+
+            fname = dist_base + '/' + file
+            add_tarfile(tar, fname, absfile, file)
 
     tar.close()
 
@@ -194,6 +218,13 @@ def DIST_DIRS(dirs):
     if not dist_dirs:
         dist_dirs = dirs
 
+@conf
+def DIST_FILES(files):
+    '''set additional files for packaging, relative to top srcdir'''
+    global dist_files
+    if not dist_files:
+        dist_files = files
+
 @conf
 def DIST_BLACKLIST(blacklist):
     '''set the files to exclude from packaging, relative to top srcdir'''