#!/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/sorted_array.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', 'sorted_array_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) for i in ['tree_test', 'sorted_array_test']: autowaf.run_tests(ctx, APPNAME, ['test/%s' % i], dirs=['./src','./test']) autowaf.post_test(ctx, APPNAME)