f3192eb789
Change-Id: I825ea4fdf4f40c4af06b5667af432f1c0eab368d
153 lines
5.2 KiB
Python
153 lines
5.2 KiB
Python
# -*- 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)
|