bug+codestyle: Fix compile bugs and adjust code style
Change-Id: I008bb538441c099fa25b8b967fbf23ffce13a220
diff --git a/wscript b/wscript
index 35590be..6e6d1db 100644
--- a/wscript
+++ b/wscript
@@ -2,72 +2,70 @@
VERSION='0.5'
APPNAME='ChronoChat'
-from waflib import Configure, Utils
+from waflib import Configure, Utils, Logs, Context
+import os
def options(opt):
- opt.add_option('--debug',action='store_true',default=False,dest='debug',help='''debugging mode''')
- opt.add_option('--with-log4cxx',action='store_true',default=False,dest='log4cxx',help='''Enable log4cxx''')
- opt.add_option('--with-tests', action='store_true',default=False,dest='with_tests',help='''build unit tests''')
- opt.add_option('--without-security', action='store_false',default=True,dest='with_security',help='''Enable security''')
- opt.load('compiler_c compiler_cxx qt4')
-
+ opt.load(['compiler_c', 'compiler_cxx', 'qt4'])
if Utils.unversioned_sys_platform () != "darwin":
opt.load('gnu_dirs');
- opt.load('boost protoc', tooldir=['waf-tools'])
+ opt.load(['default-compiler-flags', 'boost', 'protoc',
+ 'doxygen', 'sphinx_build'],
+ tooldir=['waf-tools'])
+
+ opt = opt.add_option_group('ChronotChat Options')
+
+ opt.add_option('--with-tests', action='store_true', default=False, dest='with_tests',
+ help='''build unit tests''')
+
+ opt.add_option('--with-log4cxx', action='store_true', default=False, dest='log4cxx',
+ help='''Enable log4cxx''')
def configure(conf):
- conf.load("compiler_c compiler_cxx boost protoc qt4")
-
+ conf.load(['compiler_c', 'compiler_cxx', 'qt4',
+ 'default-compiler-flags', 'boost', 'protoc',
+ 'doxygen', 'sphinx_build'])
if Utils.unversioned_sys_platform () != "darwin":
- conf.load('gnu_dirs');
+ opt.load('gnu_dirs');
- if conf.options.debug:
- conf.define ('_DEBUG', 1)
- conf.env['_DEBUG'] = True;
- flags = ['-O0',
- '-Wall',
- '-Wno-unused-variable',
- '-g3',
- '-Wno-unused-private-field', # only clang supports
- '-fcolor-diagnostics', # only clang supports
- '-Qunused-arguments', # only clang supports
- '-Wno-deprecated-declarations',
- '-Wno-unneeded-internal-declaration',
- ]
-
- conf.add_supported_cxxflags (cxxflags = flags)
- else:
- flags = ['-O3', '-g', '-Wno-tautological-compare', '-Wno-unused-function', '-Wno-deprecated-declarations']
- conf.add_supported_cxxflags (cxxflags = flags)
-
- conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX', mandatory=True)
-
+ conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'],
+ uselib_store='NDN_CXX', mandatory=True)
if conf.options.log4cxx:
- conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True)
- conf.define ("HAVE_LOG4CXX", 1)
+ conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'],
+ uselib_store='LOG4CXX', mandatory=True)
+ conf.define("HAVE_LOG4CXX", 1)
- conf.check_cfg (package='ChronoSync', args=['ChronoSync >= 0.1', '--cflags', '--libs'], uselib_store='SYNC', mandatory=True)
+ conf.check_cfg (package='ChronoSync', args=['ChronoSync >= 0.1', '--cflags', '--libs'],
+ uselib_store='SYNC', mandatory=True)
- conf.check_boost(lib='system random thread filesystem unit_test_framework')
-
+ boost_libs = 'system random thread filesystem'
if conf.options.with_tests:
- conf.env['WITH_TESTS'] = True
- conf.define('WITH_TESTS', 1)
+ conf.env['WITH_TESTS'] = 1
+ conf.define('WITH_TESTS', 1);
+ boost_libs += ' unit_test_framework'
-
- if conf.options.with_security:
- conf.define('WITH_SECURITY', 1)
+ conf.check_boost(lib=boost_libs)
+ if conf.env.BOOST_VERSION_NUMBER < 104800:
+ Logs.error("Minimum required boost version is 1.48.0")
+ Logs.error("Please upgrade your distribution or install custom boost libraries" +
+ " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
+ return
conf.write_config_header('src/config.h')
def build (bld):
+ feature_list = 'qt4 cxx'
+ if bld.env["WITH_TESTS"]:
+ feature_list += ' cxxshlib'
+ else:
+ feature_list += ' cxxprogram'
+
qt = bld (
target = "ChronoChat",
- features = "qt4 cxx cxxprogram",
- # features= "qt4 cxx cxxshlib",
+ features = feature_list,
defines = "WAF",
source = bld.path.ant_glob(['src/*.cpp', 'src/*.ui', '*.qrc', 'logging.cc', 'src/*.proto']),
includes = "src .",
@@ -75,15 +73,15 @@
)
# Unit tests
- # if bld.env["WITH_TESTS"]:
- # unittests = bld.program (
- # target="unit-tests",
- # source = bld.path.ant_glob(['test/**/*.cc']),
- # features=['cxx', 'cxxprogram'],
- # use = 'BOOST ChronoChat',
- # includes = "src",
- # install_path = None,
- # )
+ if bld.env["WITH_TESTS"]:
+ unittests = bld.program (
+ target="unit-tests",
+ source = bld.path.ant_glob(['test/**/*.cpp']),
+ features=['cxx', 'cxxprogram'],
+ use = 'BOOST ChronoChat',
+ includes = "src .",
+ install_path = None,
+ )
# Debug tools
if bld.env["_DEBUG"]:
@@ -92,64 +90,107 @@
target = '%s' % (str(app.change_ext('','.cc'))),
source = app,
use = 'NDN_CXX',
+ includes = "src .",
install_path = None,
)
- # Tmp disable
- if Utils.unversioned_sys_platform () == "darwin":
- app_plist = '''<?xml version="1.0" encoding="UTF-8"?>
+ if not bld.env["WITH_TESTS"]:
+ if Utils.unversioned_sys_platform () == "darwin":
+ app_plist = '''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
-<dict>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleIconFile</key>
- <string>demo.icns</string>
- <key>CFBundleGetInfoString</key>
- <string>Created by Waf</string>
- <key>CFBundleIdentifier</key>
- <string>edu.ucla.cs.irl.ChronoChat</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>NOTE</key>
- <string>THIS IS A GENERATED FILE, DO NOT MODIFY</string>
- <key>CFBundleExecutable</key>
- <string>%s</string>
- <key>SUPublicDSAKeyFile</key>
- <string>dsa_pub.pem</string>
- <key>CFBundleIconFile</key>
- <string>demo.icns</string>
-</dict>
+ <dict>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleIconFile</key>
+ <string>demo.icns</string>
+ <key>CFBundleGetInfoString</key>
+ <string>Created by Waf</string>
+ <key>CFBundleIdentifier</key>
+ <string>edu.ucla.cs.irl.ChronoChat</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>NOTE</key>
+ <string>THIS IS A GENERATED FILE, DO NOT MODIFY</string>
+ <key>CFBundleExecutable</key>
+ <string>%s</string>
+ <key>SUPublicDSAKeyFile</key>
+ <string>dsa_pub.pem</string>
+ <key>CFBundleIconFile</key>
+ <string>demo.icns</string>
+ </dict>
</plist>'''
# <key>LSUIElement</key>
# <string>1</string>
- qt.mac_app = "ChronoChat.app"
- qt.mac_plist = app_plist % "ChronoChat"
- qt.mac_resources = 'demo.icns'
+ qt.mac_app = "ChronoChat.app"
+ qt.mac_plist = app_plist % "ChronoChat"
+ qt.mac_resources = 'demo.icns'
+ else:
+ bld(features = "subst",
+ source = 'linux/chronochat.desktop.in',
+ target = 'linux/chronochat.desktop',
+ BINARY = "ChronoChat",
+ install_path = "${DATAROOTDIR}/applications"
+ )
+ bld.install_files("${DATAROOTDIR}/chronochat",
+ bld.path.ant_glob(['linux/Resources/*']))
+
+
+# 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",
- source = 'linux/chronochat.desktop.in',
- target = 'linux/chronochat.desktop',
- BINARY = "ChronoChat",
- install_path = "${DATAROOTDIR}/applications"
+ 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.install_files("${DATAROOTDIR}/chronochat",
- bld.path.ant_glob(['linux/Resources/*']))
+ bld(features="doxygen",
+ doxyfile='docs/doxygen.conf',
+ use="doxygen-conf")
-@Configure.conf
-def add_supported_cxxflags(self, cxxflags):
- """
- Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
- """
- self.start_msg('Checking allowed flags for c++ compiler')
+def sphinx(bld):
+ version(bld)
- supportedFlags = []
- for flag in cxxflags:
- if self.check_cxx (cxxflags=[flag], mandatory=False):
- supportedFlags += [flag]
+ 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)
- self.end_msg (' '.join (supportedFlags))
- self.env.CXXFLAGS += supportedFlags
+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', 'ChronoChat-*']
+ 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