buildtools/wafsamba: use top for waf 2.0
[samba.git] / buildtools / wafsamba / samba_dist.py
index 4d082fe62ae7669e0bf270cf329304bd59faf6ae..0568403aa4411accaa4ab4651aac4e3fb89d4928 100644 (file)
@@ -1,12 +1,42 @@
 # customised version of 'waf dist' for Samba tools
 # uses git ls-files to get file lists
 
-import Utils, os, sys, tarfile, stat, Scripting, Logs, Options
-from samba_utils import *
+import os, sys, tarfile
+from waflib import Utils, Scripting, Logs, Options
+from waflib.Configure import conf
+from samba_utils import os_path_relpath
+from waflib import Context
 
 dist_dirs = None
 dist_files = None
 dist_blacklist = ""
+dist_archive = None
+
+class Dist(Context.Context):
+    # TODO remove
+    cmd = 'dist'
+    fun = 'dist'
+    def execute(self):
+        Context.g_module.dist()
+
+class DistCheck(Scripting.DistCheck):
+    fun = 'distcheck'
+    cmd = 'distcheck'
+    def execute(self):
+        Options.options.distcheck_args = ''
+        if Context.g_module.distcheck is Scripting.distcheck:
+            # default
+            Context.g_module.distcheck(self)
+        else:
+            Context.g_module.distcheck()
+        Context.g_module.dist()
+        self.check()
+    def get_arch_name(self):
+        global dist_archive
+        return dist_archive
+    def make_distcheck_cmd(self, tmpdir):
+        waf = os.path.abspath(sys.argv[0])
+        return [sys.executable, waf, 'configure', 'build', 'install', 'uninstall', '--destdir=' + tmpdir]
 
 def add_symlink(tar, fname, abspath, basedir):
     '''handle symlinks to directories that may move during packaging'''
@@ -86,16 +116,10 @@ def vcs_dir_contents(path):
             env = dict(os.environ)
             env["GIT_DIR"] = os.path.join(repo, ".git")
             break
-        elif os.path.isdir(os.path.join(repo, ".bzr")):
-            ls_files_cmd = [ 'bzr', 'ls', '--recursive', '--versioned',
-                             os_path_relpath(path, repo)]
-            cwd = repo
-            env = None
-            break
         repo = os.path.dirname(repo)
     if repo == "/":
         raise Exception("unsupported or no vcs for %s" % path)
-    return Utils.cmd_output(ls_files_cmd, cwd=cwd, env=env).split()
+    return Utils.cmd_output(ls_files_cmd, cwd=cwd, env=env).split('\n')
 
 
 def dist(appname='', version=''):
@@ -119,7 +143,7 @@ def dist(appname='', version=''):
                     blacklisted = True
             if blacklisted:
                 continue
-            if os.path.isdir(abspath):
+            if os.path.isdir(abspath) and not os.path.islink(abspath):
                 continue
             if dstsubdir != '.':
                 f = dstsubdir + '/' + f
@@ -127,11 +151,11 @@ def dist(appname='', version=''):
             add_tarfile(tar, fname, abspath, srcsubdir)
 
 
-    def list_directory_files(abspath):
+    def list_directory_files(path):
         curdir = os.getcwd()
         os.chdir(srcdir)
         out_files = []
-        for root, dirs, files in os.walk(abspath):
+        for root, dirs, files in os.walk(path):
             for f in files:
                 out_files.append(os.path.join(root, f))
         os.chdir(curdir)
@@ -140,12 +164,14 @@ def dist(appname='', version=''):
 
     if not isinstance(appname, str) or not appname:
         # this copes with a mismatch in the calling arguments for dist()
-        appname = Utils.g_module.APPNAME
-        version = Utils.g_module.VERSION
+        appname = Context.g_module.APPNAME
+        version = Context.g_module.VERSION
     if not version:
-        version = Utils.g_module.VERSION
+        version = Context.g_module.VERSION
 
-    srcdir = os.path.normpath(os.path.join(os.path.dirname(Utils.g_module.root_path), Utils.g_module.srcdir))
+    srcdir = os.path.normpath(
+                os.path.join(os.path.dirname(Context.g_module.root_path),
+                    Context.g_module.top))
 
     if not dist_dirs:
         Logs.error('You must use samba_dist.DIST_DIRS() to set which directories to package')
@@ -171,7 +197,7 @@ def dist(appname='', version=''):
         absdir = os.path.join(srcdir, dir)
         try:
             files = vcs_dir_contents(absdir)
-        except Exception, e:
+        except Exception as e:
             Logs.error('unable to get contents of %s: %s' % (absdir, e))
             sys.exit(1)
         add_files_to_tarball(tar, srcdir, dir, dist_base, destdir, blacklist, files)
@@ -186,7 +212,7 @@ def dist(appname='', version=''):
 
             absfile = os.path.join(srcdir, file)
 
-            if os.path.isdir(absfile):
+            if os.path.isdir(absfile) and not os.path.islink(absfile):
                 destdir = destfile
                 dir = file
                 files = list_directory_files(dir)
@@ -222,6 +248,9 @@ def dist(appname='', version=''):
     else:
         Logs.info('Created %s' % dist_name)
 
+    # TODO use the ctx object instead
+    global dist_archive
+    dist_archive = dist_name
     return dist_name