waf/playground/package/wscript

74 lines
1.8 KiB
Python

#! /usr/bin/env python
"""
Create a tarball of the build results. The package command aggregates
the functionality of build, install and dist in a single command.
$ waf configure package
"""
APPNAME = 'ex'
VERSION = '1.0'
top = '.'
def configure(conf):
pass
def build(bld):
bld(rule='touch ${TGT}', target='foo.txt')
bld.install_files('${PREFIX}/bin', 'foo.txt')
# ---------------------------
import shutil, os
from waflib import Build
class package_cls(Build.InstallContext):
# to skip the installation phase (not recommended!):
# use "package_cls(Build.BuildContext)" instead of "package_cls(Build.InstallContext)",
# remove the "init_dirs" method
# change "self.tmp" to "self.bldnode"
cmd = 'package'
fun = 'build'
def init_dirs(self, *k, **kw):
super(package_cls, self).init_dirs(*k, **kw)
self.tmp = self.bldnode.make_node('package_tmp_dir')
try:
shutil.rmtree(self.tmp.abspath())
except:
pass
if os.path.exists(self.tmp.abspath()):
self.fatal('Could not remove the temporary directory %r' % self.tmp)
self.tmp.mkdir()
self.options.destdir = self.tmp.abspath()
def execute(self, *k, **kw):
back = self.options.destdir
try:
super(package_cls, self).execute(*k, **kw)
finally:
self.options.destdir = back
files = self.tmp.ant_glob('**')
# we could mess with multiple inheritance but this is probably unnecessary
from waflib import Scripting
ctx = Scripting.Dist()
ctx.arch_name = '%s%s-%s.tar.bz2' % (APPNAME, self.variant, VERSION) # if defined
ctx.files = files
ctx.tar_prefix = ''
ctx.base_path = self.tmp
ctx.archive()
shutil.rmtree(self.tmp.abspath())
# for variants, add command subclasses "package_release", "package_debug", etc
def init(ctx):
for x in ['release', 'debug']:
class tmp(package_cls):
cmd = 'package_' + x
variant = x