summaryrefslogtreecommitdiffstats
path: root/wscript
diff options
context:
space:
mode:
Diffstat (limited to 'wscript')
-rw-r--r--wscript143
1 files changed, 143 insertions, 0 deletions
diff --git a/wscript b/wscript
new file mode 100644
index 0000000..ec7f46a
--- /dev/null
+++ b/wscript
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+import filecmp
+import glob
+import os
+import shutil
+import subprocess
+
+from waflib.extras import autowaf as autowaf
+import waflib.Logs as Logs, waflib.Options as Options
+
+# Version of this package (even if built as a child)
+ZIX_VERSION = '0.0.2'
+
+# Library version (UNIX style major, minor, micro)
+# major increment <=> incompatible changes
+# minor increment <=> compatible changes (additions)
+# micro increment <=> no interface changes
+# Zix uses the same version number for both library and package
+ZIX_LIB_VERSION = ZIX_VERSION
+
+# Variables for 'waf dist'
+APPNAME = 'zix'
+VERSION = ZIX_VERSION
+
+# Mandatory variables
+top = '.'
+out = 'build'
+
+def options(opt):
+ autowaf.set_options(opt)
+ opt.load('compiler_c')
+ opt.add_option('--test', action='store_true', default=False, dest='build_tests',
+ help="Build unit tests")
+ opt.add_option('--bench', action='store_true', default=False, dest='build_bench',
+ help="Build benchmarks")
+
+def configure(conf):
+ conf.line_just = max(conf.line_just, 59)
+ autowaf.configure(conf)
+ autowaf.display_header('Zix Configuration')
+
+ conf.load('compiler_c')
+ conf.env.append_value('CFLAGS', '-std=c99')
+
+ autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB',
+ atleast_version='2.0.0', mandatory=False)
+
+ conf.env['BUILD_TESTS'] = Options.options.build_tests
+ if conf.is_defined('HAVE_GLIB'):
+ conf.env['BUILD_BENCH'] = Options.options.build_bench
+
+ autowaf.define(conf, 'ZIX_VERSION', ZIX_VERSION)
+ conf.write_config_header('zix-config.h', remove=False)
+
+ autowaf.display_msg(conf, "Unit tests", str(conf.env['BUILD_TESTS']))
+ autowaf.display_msg(conf, "Benchmarks", str(conf.env['BUILD_BENCHx']))
+ print('')
+
+def build(bld):
+ # C Headers
+ bld.install_files('${INCLUDEDIR}/zix', bld.path.ant_glob('zix/*.h'))
+
+ # Pkgconfig file
+ autowaf.build_pc(bld, 'ZIX', ZIX_VERSION, [])
+
+ lib_source = '''
+ src/tree.c
+ src/strindex.c
+ '''
+
+ # Library
+ obj = bld(features = 'c cshlib')
+ obj.export_includes = ['.']
+ obj.source = lib_source
+ obj.includes = ['.', './src']
+ obj.name = 'libzix'
+ obj.target = 'zix'
+ obj.vnum = ZIX_LIB_VERSION
+ obj.install_path = '${LIBDIR}'
+ obj.cflags = [ '-fvisibility=hidden', '-DZIX_SHARED', '-DZIX_INTERNAL' ]
+
+ if bld.env['BUILD_TESTS']:
+ # Static library (for unit test code coverage)
+ obj = bld(features = 'c cstlib')
+ obj.source = lib_source
+ obj.includes = ['.', './src']
+ obj.name = 'libzix_static'
+ obj.target = 'zix_static'
+ obj.install_path = ''
+ obj.cflags = [ '-fprofile-arcs', '-ftest-coverage' ]
+
+ # Unit test programs
+ for i in ['tree_test']:
+ obj = bld(features = 'c cprogram')
+ obj.source = 'test/%s.c' % i
+ obj.includes = ['.']
+ obj.use = 'libzix_static'
+ obj.linkflags = '-lgcov'
+ obj.target = 'test/%s' % i
+ obj.install_path = ''
+ obj.cflags = [ '-fprofile-arcs', '-ftest-coverage' ]
+
+ if bld.env['BUILD_BENCH']:
+ # Benchmark programs
+ for i in ['tree_bench']:
+ obj = bld(features = 'c cprogram')
+ obj.source = 'test/%s.c' % i
+ obj.includes = ['.']
+ obj.use = 'libzix'
+ obj.uselib = 'GLIB'
+ obj.linkflags = '-lrt'
+ obj.target = 'test/%s' % i
+ obj.install_path = ''
+
+ # Documentation
+ #autowaf.build_dox(bld, 'ZIX', ZIX_VERSION, top, out)
+
+ # Man page
+ #bld.install_files('${MANDIR}/man1', 'doc/zixi.1')
+
+ bld.add_post_fun(autowaf.run_ldconfig)
+
+def lint(ctx):
+ subprocess.call('cpplint.py --filter=-whitespace/tab,-whitespace/braces,-build/header_guard,-readability/casting,-readability/todo src/* zix/*', shell=True)
+
+def fix_docs(ctx):
+ try:
+ os.chdir('build/doc/html')
+ os.system("sed -i 's/ZIX_API //' group__zix.html")
+ os.system("sed -i 's/ZIX_DEPRECATED //' group__zix.html")
+ os.remove('index.html')
+ os.symlink('group__zix.html',
+ 'index.html')
+ except Exception as e:
+ Logs.error("Failed to fix up Doxygen documentation (%s)\n" % e)
+
+def upload_docs(ctx):
+ os.system("rsync -avz --delete -e ssh build/doc/html/* drobilla@drobilla.net:~/drobilla.net/docs/zix")
+
+def test(ctx):
+ autowaf.pre_test(ctx, APPNAME)
+ autowaf.run_tests(ctx, APPNAME, ['test/tree_test'], dirs=['./src','./test'])
+ autowaf.post_test(ctx, APPNAME)