# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- from waflib import Logs, Utils, Context import os VERSION = '0.3.0' APPNAME = 'ChronoSync' def options(opt): opt.load(['compiler_c', 'compiler_cxx', 'gnu_dirs']) opt.load(['default-compiler-flags', 'boost', 'doxygen', 'sphinx_build', 'sanitizers', 'coverage', 'pch'], tooldir=['.waf-tools']) syncopt = opt.add_option_group ("ChronoSync Options") syncopt.add_option('--debug', action='store_true', default=False, dest='debug', help='''debugging mode''') syncopt.add_option('--with-log4cxx', action='store_true', default=False, dest='log4cxx', help='''Compile with log4cxx''') syncopt.add_option('--with-tests', action='store_true', default=False, dest='_tests', help='''build unit tests''') def configure(conf): conf.load(['compiler_c', 'compiler_cxx', 'gnu_dirs', 'default-compiler-flags', 'boost', 'pch', 'sanitizers', 'coverage', 'doxygen', 'sphinx_build']) conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX', mandatory=True) boost_libs = 'system iostreams' if conf.options._tests: conf.env['CHRONOSYNC_HAVE_TESTS'] = 1 conf.define('CHRONOSYNC_HAVE_TESTS', 1); boost_libs += ' unit_test_framework' conf.check_boost(lib=boost_libs) if conf.options.log4cxx: conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True) # If there happens to be a static library, waf will put the corresponding -L flags # before dynamic library flags. This can result in compilation failure when the # system has a different version of the ChronoSync library installed. conf.env['STLIBPATH'] = ['.'] + conf.env['STLIBPATH'] conf.write_config_header('config.hpp') def build(bld): libsync = bld( target="ChronoSync", vnum = VERSION, cnum = VERSION, features=['cxx', 'cxxshlib'], source = bld.path.ant_glob(['src/**/*.cpp', 'src/**/*.proto']), use = 'BOOST NDN_CXX LOG4CXX', includes = ['src', '.'], export_includes=['src', '.'], ) # Unit tests if bld.env["CHRONOSYNC_HAVE_TESTS"]: bld.recurse('tests') bld.install_files( dest = "%s/ChronoSync" % bld.env['INCLUDEDIR'], files = bld.path.ant_glob(['src/**/*.hpp', 'src/**/*.h', 'common.hpp']), cwd = bld.path.find_dir("src"), relative_trick = False, ) bld.install_files( dest = "%s/ChronoSync" % bld.env['INCLUDEDIR'], files = bld.path.get_bld().ant_glob(['src/**/*.hpp', 'src/**/*.h', 'common.hpp', 'config.hpp']), cwd = bld.path.get_bld().find_dir("src"), relative_trick = False, ) pc = bld( features = "subst", source='ChronoSync.pc.in', target='ChronoSync.pc', install_path = '${LIBDIR}/pkgconfig', PREFIX = bld.env['PREFIX'], INCLUDEDIR = "%s/ChronoSync" % bld.env['INCLUDEDIR'], VERSION = VERSION, ) # docs def docs(bld): from waflib import Options Options.commands = ['doxygen', 'sphinx'] + Options.commands def doxygen(bld): version(bld) if not bld.env.DOXYGEN: Logs.error("ERROR: cannot build documentation (`doxygen' is not found in $PATH)") else: bld(features="subst", name="doxygen-conf", source=["docs/doxygen.conf.in", "docs/named_data_theme/named_data_footer-with-analytics.html.in"], target=["docs/doxygen.conf", "docs/named_data_theme/named_data_footer-with-analytics.html"], VERSION=VERSION, HTML_FOOTER="../build/docs/named_data_theme/named_data_footer-with-analytics.html" \ if os.getenv('GOOGLE_ANALYTICS', None) \ else "../docs/named_data_theme/named_data_footer.html", GOOGLE_ANALYTICS=os.getenv('GOOGLE_ANALYTICS', ""), ) bld(features="doxygen", doxyfile='docs/doxygen.conf', use="doxygen-conf") def sphinx(bld): version(bld) if not bld.env.SPHINX_BUILD: bld.fatal("ERROR: cannot build documentation (`sphinx-build' is not found in $PATH)") else: bld(features="sphinx", outdir="docs", source=bld.path.ant_glob("docs/**/*.rst"), config="docs/conf.py", VERSION=VERSION) def version(ctx): if getattr(Context.g_module, 'VERSION_BASE', None): return Context.g_module.VERSION_BASE = Context.g_module.VERSION Context.g_module.VERSION_SPLIT = [v for v in VERSION_BASE.split('.')] try: cmd = ['git', 'describe', '--match', 'ChronoSync-*'] p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE, stderr=None, stdin=None) out = p.communicate()[0].strip() if p.returncode == 0 and out != "": Context.g_module.VERSION = out[11:] except: pass def dist(ctx): version(ctx) def distcheck(ctx): version(ctx)