From c8062fb65ee108fa948fd8d8ed4055ffa3af7027 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 4 Apr 2010 09:57:33 +1000 Subject: s4-waf: added 'waf dist' to build the tarball --- buildtools/wafsamba/samba_dist.py | 67 +++++++++++++++++++++++++++++++++++++++ buildtools/wafsamba/wscript | 3 ++ lib/talloc/wscript | 9 +++++- source4/wscript | 12 ++++++- 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 buildtools/wafsamba/samba_dist.py diff --git a/buildtools/wafsamba/samba_dist.py b/buildtools/wafsamba/samba_dist.py new file mode 100644 index 0000000000..88268b53ce --- /dev/null +++ b/buildtools/wafsamba/samba_dist.py @@ -0,0 +1,67 @@ +# customised version of 'waf dist' for Samba tools +# uses git ls-files to get file lists + +import Utils, os, sys, tarfile, stat +from samba_utils import * + +def add_tarfile(tar, fname, abspath): + '''add a file to the tarball''' + tinfo = tar.gettarinfo(name=abspath, arcname=fname) + tinfo.uid = 0 + tinfo.gid = 0 + tinfo.uname = 'root' + tinfo.gname = 'root' + fh = open(abspath) + tar.addfile(tinfo, fileobj=fh) + fh.close() + + +def dist(appname='', version=''): + + if not appname: appname = Utils.g_module.APPNAME + if not version: version = Utils.g_module.VERSION + + env = LOAD_ENVIRONMENT() + srcdir = os.path.normpath(os.path.join(os.path.dirname(Utils.g_module.root_path), Utils.g_module.srcdir)) + + if not env.DIST_DIRS: + print('You must use conf.DIST_DIRS() to set which directories to package') + sys.exit(1) + + if not env.GIT: + print('You need git installed to run waf dist') + sys.exit(1) + + dist_base = '%s-%s' % (appname, version) + dist_name = '%s.tar.gz' % (dist_base) + + tar = tarfile.open(dist_name, 'w:gz') + + for dir in env.DIST_DIRS.split(): + if dir.find(':') != -1: + destdir=dir.split(':')[1] + dir=dir.split(':')[0] + else: + destdir = '.' + absdir = os.path.join(srcdir, dir) + git_cmd = [ env.GIT, 'ls-files', '--full-name', absdir ] + files = Utils.cmd_output(git_cmd).split() + for f in files: + abspath = os.path.join(srcdir, f) + if dir != '.': + f = f[len(dir)+1:] + if destdir != '.': + f = destdir + '/' + f + fname = dist_base + '/' + f + add_tarfile(tar, fname, abspath) + + tar.close() + + print('Created %s' % dist_name) + + +@conf +def DIST_DIRS(conf, dirs): + '''set the directories to package, relative to top srcdir''' + if not conf.env.DIST_DIRS: + conf.env.DIST_DIRS = dirs diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index 89046f578f..9bef9b63b0 100644 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -76,6 +76,9 @@ def configure(conf): conf.check_tool('compiler_cc') + # we need git for 'waf dist' + conf.find_program('git', var='GIT') + if Options.options.enable_gccdeps: # don't enable gccdeps by default as it needs a very recent version gcc conf.check_tool('gccdeps', tooldir=conf.srcdir + "/buildtools/wafsamba") diff --git a/lib/talloc/wscript b/lib/talloc/wscript index e61d8344d6..4cc21c94d3 100644 --- a/lib/talloc/wscript +++ b/lib/talloc/wscript @@ -1,5 +1,6 @@ #!/usr/bin/env python +APPNAME = 'talloc' VERSION = '2.0.2' srcdir = '../..' @@ -9,7 +10,7 @@ LIBREPLACE_DIR= srcdir + '/lib/replace' import sys sys.path.insert(0, srcdir+"/buildtools/wafsamba") -import wafsamba +import wafsamba, samba_dist def set_options(opt): opt.BUILTIN_DEFAULT('replace') @@ -17,6 +18,7 @@ def set_options(opt): opt.recurse(LIBREPLACE_DIR) def configure(conf): + conf.DIST_DIRS('lib/talloc:. buildtools:buildtools') conf.sub_config(LIBREPLACE_DIR) if conf.CHECK_BUNDLED_SYSTEM('talloc', minversion=VERSION, @@ -50,3 +52,8 @@ def build(bld): bld.env.TALLOC_VERSION = VERSION bld.PKG_CONFIG_FILES('talloc.pc', vnum=VERSION) + +def dist(): + '''makes a tarball for distribution''' + samba_dist.dist() + diff --git a/source4/wscript b/source4/wscript index b0e2368547..816093e293 100644 --- a/source4/wscript +++ b/source4/wscript @@ -3,9 +3,12 @@ srcdir = '..' blddir = 'bin' +APPNAME='samba' +VERSION='4.0.0-alpha13' + import sys, os sys.path.insert(0, srcdir+"/buildtools/wafsamba") -import wafsamba, Options +import wafsamba, Options, samba_dist # install in /usr/local/samba by default Options.default_prefix = '/usr/local/samba' @@ -36,6 +39,7 @@ def configure(conf): conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1) conf.DEFINE('_SAMBA_BUILD_', 4, add_to_cflags=True) conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True) + conf.DIST_DIRS('.') if Options.options.developer: conf.ADD_CFLAGS('-DDEVELOPER -DDEBUG_PASSWORD') @@ -120,3 +124,9 @@ def wafdocs(ctx): cmd += ' --add-module %s' % f print "Running: %s" % cmd os.system(cmd) + + +def dist(): + '''makes a tarball for distribution''' + samba_dist.dist() + -- cgit