build: update waf to version 2.0.6

Change-Id: I9cb1f2dbd01312a0b113dd33a4ca9fae344b087c
This commit is contained in:
Alexander Afanasyev committed 2018-03-11 10:53:55 -04:00
1 parent f5fca3a95d
commit 40491df37b
8 files changed
+98 -355

No files matched your search

+2 -2
View File
@@ -25,13 +25,13 @@ if [[ $JOB_NAME != *"code-coverage" && $JOB_NAME != *"limited-build" ]]; then
sudo env "PATH=$PATH" ./waf --color=yes distclean
fi
# Configure/build in debug mode with tests and without precompiled headers
# Configure/build in debug mode with tests
if [[ $JOB_NAME == *"code-coverage" ]]; then
COVERAGE="--with-coverage"
elif [[ -n $BUILD_WITH_ASAN || -z $TRAVIS ]]; then
ASAN="--with-sanitizer=address"
fi
./waf --color=yes configure --debug --with-tests --without-pch $COVERAGE $ASAN
./waf --color=yes configure --debug --with-tests $COVERAGE $ASAN
./waf --color=yes build -j${WAF_JOBS:-1}
# (tests will be run against debug version)
+4 -4
View File
@@ -1,15 +1,15 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import TaskGen, Logs
from waflib import TaskGen
def options(opt):
opt.add_option('--with-coverage', action='store_true', default=False, dest='with_coverage',
help='''Set compiler flags for gcc to enable code coverage information''')
opt.add_option('--with-coverage', action='store_true', default=False,
help='Add compiler flags to enable code coverage information')
def configure(conf):
if conf.options.with_coverage:
if not conf.options.debug:
conf.fatal("Code coverage flags require debug mode compilation (add --debug)")
conf.fatal('Code coverage flags require debug mode compilation (add --debug)')
conf.check_cxx(cxxflags=['-fprofile-arcs', '-ftest-coverage', '-fPIC'],
linkflags=['-fprofile-arcs'], uselib_store='GCOV', mandatory=True)
+22 -20
View File
@@ -1,16 +1,17 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Logs, Configure, Utils
from waflib import Configure, Logs, Utils
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
help='''Compile in debugging mode with minimal optimizations (-O0 or -Og)''')
opt.add_option('--debug', '--with-debug', action='store_true', default=False,
help='Compile in debugging mode with minimal optimizations (-O0 or -Og)')
def configure(conf):
conf.start_msg('Checking C++ compiler version')
cxx = conf.env['CXX_NAME'] # CXX_NAME is the generic name of the compiler
ccver = tuple(int(i) for i in conf.env['CC_VERSION'])
cxx = conf.env.CXX_NAME # generic name of the compiler
ccver = tuple(int(i) for i in conf.env.CC_VERSION)
ccverstr = '.'.join(conf.env.CC_VERSION)
errmsg = ''
warnmsg = ''
if cxx == 'gcc':
@@ -28,13 +29,13 @@ def configure(conf):
conf.flags = CompilerFlags()
if errmsg:
conf.end_msg('.'.join(conf.env['CC_VERSION']), color='RED')
conf.end_msg(ccverstr, color='RED')
conf.fatal(errmsg)
elif warnmsg:
conf.end_msg('.'.join(conf.env['CC_VERSION']), color='YELLOW')
conf.end_msg(ccverstr, color='YELLOW')
Logs.warn(warnmsg)
else:
conf.end_msg('.'.join(conf.env['CC_VERSION']))
conf.end_msg(ccverstr)
conf.areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
@@ -53,10 +54,10 @@ def check_compiler_flags(conf):
extraFlags = conf.flags.getDebugFlags(conf)
if conf.areCustomCxxflagsPresent:
missingFlags = [x for x in extraFlags['CXXFLAGS'] if x not in conf.env.CXXFLAGS]
if len(missingFlags) > 0:
Logs.warn("Selected debug mode, but CXXFLAGS is set to a custom value '%s'"
% " ".join(conf.env.CXXFLAGS))
Logs.warn("Default flags '%s' are not activated" % " ".join(missingFlags))
if missingFlags:
Logs.warn('Selected debug mode, but CXXFLAGS is set to a custom value "%s"'
% ' '.join(conf.env.CXXFLAGS))
Logs.warn('Default flags "%s" will not be used' % ' '.join(missingFlags))
else:
extraFlags = conf.flags.getOptimizedFlags(conf)
@@ -106,6 +107,9 @@ def add_supported_linkflags(self, linkflags):
class CompilerFlags(object):
def getCompilerVersion(self, conf):
return tuple(int(i) for i in conf.env.CC_VERSION)
def getGeneralFlags(self, conf):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are always needed"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
@@ -160,16 +164,14 @@ class GccBasicFlags(CompilerFlags):
class GccFlags(GccBasicFlags):
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (5, 1, 0):
if self.getCompilerVersion(conf) < (5, 1, 0):
flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
return flags
def getOptimizedFlags(self, conf):
flags = super(GccFlags, self).getOptimizedFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (5, 1, 0):
if self.getCompilerVersion(conf) < (5, 1, 0):
flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
return flags
@@ -177,8 +179,8 @@ class GccFlags(GccBasicFlags):
class ClangFlags(GccBasicFlags):
def getGeneralFlags(self, conf):
flags = super(ClangFlags, self).getGeneralFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if Utils.unversioned_sys_platform() == 'darwin' and version >= (9, 0, 0): # Bug #4296
if Utils.unversioned_sys_platform() == 'darwin' and self.getCompilerVersion(conf) >= (9, 0, 0):
# Bug #4296
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include'], # for Homebrew
['-isystem', '/opt/local/include']] # for MacPorts
return flags
@@ -194,7 +196,7 @@ class ClangFlags(GccBasicFlags):
'-Wno-error=unneeded-internal-declaration', # Bug #1588
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
version = tuple(int(i) for i in conf.env['CC_VERSION'])
version = self.getCompilerVersion(conf)
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
return flags
@@ -206,7 +208,7 @@ class ClangFlags(GccBasicFlags):
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
version = tuple(int(i) for i in conf.env['CC_VERSION'])
version = self.getCompilerVersion(conf)
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
return flags
-153
View File
@@ -1,153 +0,0 @@
#! /usr/bin/env python
# encoding: utf-8
# Alexander Afanasyev (UCLA), 2014
"""
Enable precompiled C++ header support (currently only clang++ and g++ are supported)
To use this tool, wscript should look like:
def options(opt):
opt.load('pch')
# This will add `--with-pch` configure option.
# Unless --with-pch during configure stage specified, the precompiled header support is disabled
def configure(conf):
conf.load('pch')
# this will set conf.env.WITH_PCH if --with-pch is specified and the supported compiler is used
# Unless conf.env.WITH_PCH is set, the precompiled header support is disabled
def build(bld):
bld(features='cxx pch',
target='precompiled-headers',
name='precompiled-headers',
headers='a.h b.h c.h', # headers to pre-compile into `precompiled-headers`
# Other parameters to compile precompiled headers
# includes=...,
# export_includes=...,
# use=...,
# ...
# Exported parameters will be propagated even if precompiled headers are disabled
)
bld(
target='test',
features='cxx cxxprogram',
source='a.cpp b.cpp d.cpp main.cpp',
use='precompiled-headers',
)
# or
bld(
target='test',
features='pch cxx cxxprogram',
source='a.cpp b.cpp d.cpp main.cpp',
headers='a.h b.h c.h',
)
Note that precompiled header must have multiple inclusion guards. If the guards are missing, any benefit of precompiled header will be voided and compilation may fail in some cases.
"""
import os
from waflib import Task, TaskGen, Logs, Utils
from waflib.Tools import c_preproc, cxx
PCH_COMPILER_OPTIONS = {
'clang++': [['-include'], '.pch', ['-x', 'c++-header']],
'g++': [['-include'], '.gch', ['-x', 'c++-header']],
}
def options(opt):
opt.add_option('--without-pch', action='store_false', default=True, dest='with_pch', help='''Try to use precompiled header to speed up compilation (only g++ and clang++)''')
def configure(conf):
if (conf.options.with_pch and conf.env['COMPILER_CXX'] in PCH_COMPILER_OPTIONS.keys()):
if Utils.unversioned_sys_platform() == "darwin" and conf.env['CXX_NAME'] == 'clang':
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (6, 1, 0):
# Issue #2804
return
conf.env.WITH_PCH = True
flags = PCH_COMPILER_OPTIONS[conf.env['COMPILER_CXX']]
conf.env.CXXPCH_F = flags[0]
conf.env.CXXPCH_EXT = flags[1]
conf.env.CXXPCH_FLAGS = flags[2]
@TaskGen.feature('pch')
@TaskGen.before('process_source')
def apply_pch(self):
if not self.env.WITH_PCH:
return
if getattr(self.bld, 'pch_tasks', None) is None:
self.bld.pch_tasks = {}
if getattr(self, 'headers', None) is None:
return
self.headers = self.to_nodes(self.headers)
if getattr(self, 'name', None):
try:
task = self.bld.pch_tasks[self.name]
self.bld.fatal("Duplicated 'pch' task with name %r" % self.name)
except KeyError:
pass
out = '%s.%d%s' % (self.target, self.idx, self.env['CXXPCH_EXT'])
out = self.path.find_or_declare(out)
task = self.create_task('gchx', self.headers, out)
# target should be an absolute path of `out`, but without precompiled header extension
task.target = out.abspath()[:-len(out.suffix())]
self.pch_task = task
if getattr(self, 'name', None):
self.bld.pch_tasks[self.name] = task
@TaskGen.feature('cxx')
@TaskGen.after_method('process_source', 'propagate_uselib_vars')
def add_pch(self):
if not (self.env['WITH_PCH'] and getattr(self, 'use', None) and getattr(self, 'compiled_tasks', None) and getattr(self.bld, 'pch_tasks', None)):
return
pch = None
# find pch task, if any
if getattr(self, 'pch_task', None):
pch = self.pch_task
else:
for use in Utils.to_list(self.use):
try:
pch = self.bld.pch_tasks[use]
except KeyError:
pass
if pch:
for x in self.compiled_tasks:
x.env.append_value('CXXFLAGS', self.env['CXXPCH_F'] + [pch.target])
class gchx(Task.Task):
run_str = '${CXX} ${ARCH_ST:ARCH} ${CXXFLAGS} ${CPPFLAGS} ${CXXPCH_FLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CXXPCH_F:SRC} ${CXX_SRC_F}${SRC[0].abspath()} ${CXX_TGT_F}${TGT[0].abspath()}'
scan = c_preproc.scan
color = 'BLUE'
ext_out=['.h']
def runnable_status(self):
try:
node_deps = self.generator.bld.node_deps[self.uid()]
except KeyError:
node_deps = []
ret = Task.Task.runnable_status(self)
if ret == Task.SKIP_ME and self.env.CXX_NAME == 'clang':
t = os.stat(self.outputs[0].abspath()).st_mtime
for n in self.inputs + node_deps:
if os.stat(n.abspath()).st_mtime > t:
return Task.RUN_ME
return ret
-94
View File
@@ -1,94 +0,0 @@
#!/usr/bin/env python
# encoding: utf-8
# Philipp Bender, 2012
# Matt Clarkson, 2012
import re
from waflib.Task import Task
from waflib.TaskGen import extension
"""
A simple tool to integrate protocol buffers into your build system.
Example::
def configure(conf):
conf.load('compiler_cxx cxx protoc')
def build(bld):
bld(
features = 'cxx cxxprogram'
source = 'main.cpp file1.proto proto/file2.proto',
include = '. proto',
target = 'executable')
Notes when using this tool:
- protoc command line parsing is tricky.
The generated files can be put in subfolders which depend on
the order of the include paths.
Try to be simple when creating task generators
containing protoc stuff.
"""
class protoc(Task):
# protoc expects the input proto file to be an absolute path.
run_str = '${PROTOC} ${PROTOC_FLAGS} ${PROTOC_ST:INCPATHS} ${SRC[0].abspath()}'
color = 'BLUE'
ext_out = ['.h', 'pb.cc']
def scan(self):
"""
Scan .proto dependencies
"""
node = self.inputs[0]
nodes = []
names = []
seen = []
if not node: return (nodes, names)
search_paths = [self.generator.path.find_node(x) for x in self.generator.includes]
def parse_node(node):
if node in seen:
return
seen.append(node)
code = node.read().split("\n")
for line in code:
m = re.search(r'^import\s+"(.*)";.*(//)?.*', line)
if m:
dep = m.groups()[0]
for incpath in search_paths:
found = incpath.find_resource(dep)
if found:
nodes.append(found)
parse_node(found)
else:
names.append(dep)
parse_node(node)
return (nodes, names)
@extension('.proto')
def process_protoc(self, node):
cpp_node = node.change_ext('.pb.cc')
hpp_node = node.change_ext('.pb.h')
self.create_task('protoc', node, [cpp_node, hpp_node])
self.source.append(cpp_node)
if 'cxx' in self.features and not self.env.PROTOC_FLAGS:
self.env.PROTOC_FLAGS = '--cpp_out=%s' % node.parent.get_bld().abspath()
use = getattr(self, 'use', '')
if not 'PROTOBUF' in use:
self.use = self.to_list(use) + ['PROTOBUF']
def configure(conf):
conf.check_cfg(package="protobuf", uselib_store="PROTOBUF", args=['--cflags', '--libs'])
conf.find_program('protoc', var='PROTOC')
conf.env.PROTOC_ST = '-I%s'
+6 -11
View File
@@ -4,29 +4,24 @@ from waflib import Utils
top = '..'
def build(bld):
test_main = bld(
bld.objects(
target='tests-main',
name='tests-main',
features='cxx',
source='main.cpp',
use='ChronoSync',
defines=['BOOST_TEST_MODULE=ChronoSync']
)
defines=['BOOST_TEST_MODULE=ChronoSync'])
unit_test = bld.program(
bld.program(
target="../unit-tests",
name='unit-tests',
source=bld.path.ant_glob(['unit-tests/**/*.cpp', 'identity-management-fixture.cpp']),
features=['cxx', 'cxxprogram'],
use='ChronoSync tests-main',
includes=['.'],
install_path=None,
)
install_path=None)
# TODO: Re-enable when there integration tests are implemented
# integrated_test = bld.program(
# bld.program(
# target="../integrated-tests",
# source=bld.path.ant_glob(['integrated-tests/**/*.cpp']),
# features=['cxx', 'cxxprogram'],
# use='ChronoSync tests-main',
# includes=['.'],
# install_path=None,
Vendored
+6 -5
View File
@@ -33,12 +33,12 @@ POSSIBILITY OF SUCH DAMAGE.
import os, sys, inspect
VERSION="2.0.6"
REVISION="784a4c698ea9764e23d81f1ca6a6e8ba"
REVISION="593191f496fe8c66231dfd5df26167ae"
GIT="459ddf50b622573ecfe36c12c076e0fcc610b01e"
INSTALL=''
C1='#1'
C2='#/'
C3='#-'
C1='#2'
C2='#&'
C3='#%'
cwd = os.getcwd()
join = os.path.join
@@ -165,5 +165,6 @@ if __name__ == '__main__':
Scripting.waf_entry_point(cwd, VERSION, wafdir)
#==>
#BZh91AY&SYØeàK°ÿÿ°ÐÿÿÿÿÿÿÿÿÿÿÿÿE ‚„ 0�#-ˆ(b ¼w{>÷#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-Ü}ÔË3cï`wµU¡”öÝ´í}¸®ÛkT‡»Ûw›m›h�›ÛÎóŸx,×ß4íJö[–ìêÐ×Ìóï¾\{i­8{µ³‰TÞÚvÞö[»Ð¤»AÊŽö(Ùmw£D>yöº»aQ¹>ø7Ÿk®á–U�.·½}{ÛÃAÕÛÇÚÝ›oo¾ï+Ü ½Í½¸ëW<àè#-4#-;°Oc@è#1` ÷e#-8ôk¹½íæ{=w´‡®ÝÏAÞÔ{�vµ³Jh#-쮹Ôëè ò€§§¶6’#/h�6Í·Nà#1T¡Aï`áIÓAI:¶:ÅP#-èvàä£ß|ùöû®ŸnãÚ¢öÚófnð¹{�)™×"TvÅÖ%)·]_sÕÍ£ß{§€mîö>ûªëÏmzÊ©w]‘^÷›‡$�tíï½Ý{}ïv{­ó´Ž²jO¾Þ“Ϧõní–O»Ó½óSŽA¥+Q2Ð) ˆ=TwwmîÎóm¯<÷·½ï,tÅu¡í·5†Ù›)"¤œó#/Í=#-‰@¥TEGPŒSÑÞ6ñ—1·»wpÉKîﻹó3äУè#-#-gÖHÙ�µ€7Œ#-˾°vÙ˜#/ó·�h)^÷»opÞ÷�o.wØ÷o§½÷Øô¼ëãºîaÛ:(û¸qz·}ìíO#1×-–Ûxžfù÷×yv®âûžö˜ó®ÛÞ÷HöÝ}½ÝÍ$íåÆî[»»ÞÞ¶—pw§¶ú÷«¾tú÷wgT5ºáu׸hW}Ü%ñ<ž�{Æ#1:{c{îÝìåöåðúE$¶WÞ›¢|ökÛ»›6ÚÙëµ÷9+ÞâcïeÕ-Ük²^ºG;ÞöæžiÉ×Ö¯=MÑó›#-Nz¼Þ�wÞûîá÷lw™^ŠP#1‰UÖ”ª¥@Ùƒs6ÌÏa§bÚÇ­Žû*Ü«ÛÞ„ƒ¼ÍÌ݉Ðô®¦ÏfQ]vÊóx÷²¡o]åÕZw[35ìÏ#-#-Mç8€#-¢÷¯yÞ^®óº÷¬â“›YÙ'"§o»=î;ÜÙnhÍÆå¨l½2èÒŸ{»ÓD½}Õ­SFy#/Έƒ{Þ ÏZÛ8Ÿ=繜¯%Z#1Þ凶¢ãÝnžÙ¯nQ{+¼4ÚÛÓ³ùÞ8ûïs‡dºÞï\÷mÝܼxÔã>n'šìÖ|^�6^àû}ÜøöŒÍƒ`ØÀ>žN…{zé<¯§^ø=·]mƒ5WVêz4mév^öw{UÏ·}ë@ Zí� Èni”ú×¼èÓ¸0:î÷tX»®>æöö;WJë¢Ý¹Ó®Å};.Ã{Þû½wŸUëlr»4ØôÊ»â:�ÖG÷j]máÜ:­-¶ã›r{èÐ Ûˆ>• EížÖAî#-ʸò¯;u÷ž÷8»#1è#-4è{½àëÝÝnØo{›Æï+“Q¢÷87kµwvæçk-ØÙÄŠ;#1éÝ�RîÛ»SÞ9pÍîäèŽ7¼äåJò;3½˺ñy÷ÛoZÁ—£àž±¶!“GŸn=�³ÙÃC+—½™;-i¹×tkäï½Å÷°VS»»r�¼öדݽ>+°ÓD#-€#-™2#-Œš4ÓÓ Dò�FÊ4y@=G©š†'”ü¨%4BhL@#1a1 ”ñIž§©©íPÑ¡“z�#-€#-#-#-$"šhÒdÈ £M ?*§èõOÕ6i0MSô'¥=#/  õ6Ô�Iê#-#-h&‚OT¤‰4SÓFMi)â›ÓTö¨õ='¤i¦Ô#/#-Ñ£CAêP#-#-#-#-#-’€#-@Ȧš54jc$4Á0#13CBG© #-#-#-#-“Q@@#-M#/ OÕOÊ~¦©úÓÊ{Sô”õ¡êiúˆ€h#-d#-Çÿìÿbª×\Hÿv#/ËZœ¿n«]Ò…1äª×tB0m±i«Iïµ[\µmQµi|’`�yúOÑ9ý¤qá5f)Ii¬Ç^—çú='Š|N DáTÑ‚îåMbÞ&Zsþ ¾'ü¶gîW6 9ÁZ‰¤RMr FF‚5›#‘�ºwÃÂÝ׆¦MíÃ,Í–×¹‡:»—Z�Q—Yƒœ=hâFdÖÍÎ+†˜#-… þÞuËòº2H0$¶SººÕ¥¶¢Ú©*Öe"B© ©"£"#-7#-HŠ�Eòça D‚ èRF#-#-b*ŽQA #1A±B=щVòÖ¶šµ5wE±X·´ÚŠÕkm|-µ«TÌ™ %š�LÓd@ÉŒ)66¢&f¡Æ@%”£J)¶“a‰š$ÐJ2Zš‹cA…´f’ɦ‘&¢*1H𔣠Ñ©c@bÊ›F’)6KFÔE K-)¦´@Ä,´†ÍÁ”eŒV�FÔd•”ÙE iŒ” †�,´Œ`E)hÔÓa-¥mf¶´3bM™3!4EY6Ó[M6�5%)*kc-M¶eL´™$ÄPlEšÓE’Š#1dQ²$Z"¢Í#h¤Àh¨�BÁ±IS1šTD)ˆÁ±B‚DIŒ C"2HÚ���,DÛ3C"&)„ˆfIM+,˜‘Idb)d¬›6&"Ä2YHHÑiJ`›RdQ”I£&…1 ©(Ò%¤�+ ¦Æ‰"ÄQ3)iˆ¦`›É ؉1M Í‚ab6¤° ,¬!I)65I¨Å$%ˆ$J4H¢`°`&C%0ŒYBe“Q©•+ ²jH’b iM�$"H²[bË2ŠFÌ’‰³26"fÄÈŠQ›#0Lªi‰!R‚˲H4Ò1©Y,‘±D© ‘M$ÄR%M2�’jIeA�F“4�¢€‚)¦Š%j�ÄË(4–FB1d¤Èš ¦R%FŒÃe#1LTa”‚B�I˜À‰#–He„Ål“*fm¦1¶SX”D̆¤S¤FlYB²š6H¢ˆ"’I6HÆÆ2lÒ53E‹”�¤ÌÌRÈÊͦ±‚"™“MLšd‚�ÆQ…š"¦ÅjT¥%4RFLdȦÒY#£)!HŠ,mŠI1$šSQ²j4‰4��1ÐLÖi16ƒFÆ`Í!4™F"Æ‘2dI)²S"”D!dÈKY³bÖK’Idƨª A2ØR$Ècc"A„e’Æ£L%F RšP(ªa¡&e&)†Y6De0H¥š4Ëj#1I”dHhšÚ•µ£”&¦hÊdlÒŠI™ Ô¥°)f‹1I¤e e•6h‹S+ e�Å6"¢2‘�¤%-1µÑ STˆ‚0ÄfÑF*+ck&S4ÔR¤š44´†ØØFÉ5Y†¡¤ÆQ’,¦T‘¬ˆ33L¶M´bIKcj) FM0‰bk1´,jAJZi“&TšƒbÊ´�6PŠÙ2ȪU+0¦ÍŒÆe­‹DkdÓ+"TË)µ’¬¶R”Ó#[#@d¤mEŠVX’Ò)j5PZ ±«FJ‚Ь•’�ª6ŠŠ“V&ˆ™#lXŠˆ±Z‹ ´mbÀZL˜X6¨#1`%‚XÑ„-2M+Mb-�LJÆ-’,[Ij©mYEBBe3SVMTŒHDÓiY"Ö¥Y¶1Jm6Ë)S,ÓjšDF¶•K$™š¥Hň[BJe5–46Y5•–B¶iˆ„‚†Ti"BÅbÀš01$Ch4&1#1[F¨J%E š¢²M4l™4”Y#-Ùb‘M”�£dEe‘‘Êf%#1J6S4 AE¢¦HDfÓi1Dcll…0ŒÓ bC(ÐÓ š‚ÄbCd Æ‚IšŠ4ILŠQ ³J¨J˜ÒcL%*e’QhÈ@Q™j2”lÊI(È2†,¥b"˜mÔ”d°�’,°…-4) Äš4Y”Ù””²•™’±„h²FÄ1©£TlÖŒÑ#/)¤ØiŠ–+2‹Q HÈI�&2#/16$©*L¡�”Ó$e²R•ƒlÃf’ɱšM6b%#/(ÉY•¬ˆÓB¦h�‘*HˆA²Ì hÛ4�Š4@Öi6Jb&"i)! ´Z-„¨Ôj(ÅcŒÍa¤ÃI&… &FÆ)D±FÀ–‚²Í’ÈfQÅFBÉK4•2 h¨HÖ5F¨“E –V‚ÅjMQ°dðŒj”¡«A¥4Ë!E$ЦE¢Õ"Äe-lŠ”UÆ“E“DS2…©E!™(’¦Ä¢&U¨�¬*eE’£h˜³J-“%bÕ¤Å%e6È[&ÆÐÑ6ILƒ)QaA±cd¢É¢HŒFÙ"CQI25fLTiM™±1Ö5EL¬šÉBšI¨ ˆÅM©6‹e$±²b1¢‚4˜2JÔˆÑie£he¨“Qjб”£i+dA#1£ljJ,R)¡2)‘™jDPjfÉ3Z"ÅRX¶�IRÍ´šÑ3j-�HQ±±’5±Lªi¶�£hضÆ-©3J!,¬¬KQŠÅ™±µJ•¥RŒÅB2“(4X"J�&±¬Y•$Z’¶,›e&Z�ˆiŠJ4mÖÙj±H™P©‰(ŒT0’ÆŠŠi&ÔÃ%XÛØ´Í[F5¬´•42ÖÊY-©©¶BÚ�5bhÊ(ˆÑ‘´’Š#/†³RjLÍ–TEbI2’dFF#!T–Ñf‚±“þÏùv?ñþêþû'–v²e®™ö»*±” ñĹ– #/ÛvOéË RAV 4Ÿ%©Æñ‹kûÅ�0jFã$?ò^íTÙý¿Qm£ËDvÿ’q‰FŠ Ž0)b\0RH9"omF?SòýúÚ'ý¬Ä¿Pgÿ_ºÖ�ûI%#1Zå#-•´+(U!y9äÑþí‹nrzÅZM‡´ëóâ8ßgPø+(2?;;½X´í‰ÉÝæDdq(ÆÃ†.­qÙè£LßœºsÿM¬+Œ™#-’;KµØ½.ô×Dú•ÃÉÉ£®ÉÞwHMíݽ¹w²öUê^5Ë9ܳ.û]fsW ɰ÷ís½ß+{¯a}>½üÞʸ\®T–+e˜¥Í®Å�Ö1¤gQ�]‘m3–¢ÈÍ鹤ÐY"’‹×ž¼Ö@Ö÷.9_ü–X{#-ÝÂ3LAEѧÅßí¹®š<Wå딖ıb‚>ïûõ”;^LV¢eæØŠ)„)´)Nþ9+ï¹$SW‚°-‚‘º&w€£Çôî\�þ¡‡“(ÎÏ£#1ÐA¢#/#/e†ížÓèÿ¹¯.‡*y(Vr¡©·çÚÖ#-ŽŽ·@g7rꔎm²ÁAi¤è»ŠesnšCEsnžw6*'×uñšÞ-"žþêù›ö•âûäS+är5±¹Ò1ÿ©¨\q¨Ûç´B!,;÷Ì!³iå–š&¥µV( +¢3Œ#-¤�XÕ‚ÛLYƶØÅÕ!¦{ÉxÜÞêæ�AÄ×\®ó»£¥ræJ2ëºIæBûZ¥‡þsü¤§ ‚ᑦÄ=�‰1´`…43»leÓ'–¬X+ó¢‘=*iúÜi�©ù=1!—‚•ÿrŠM˜sÓª€¨â¡þ`‡Ù‰[?’jÀ\$¥ÀÎúúâôà…ó§ãþñ¦²Å.2IBhLAù;ôÔ4b§r£Mz­õXä‘A‘LÏYÁDÈ p%•œt²Ýt>8,Ö†«ƒ-ÑÄe''Vv&ŒœÙ%ó¯K® Ë3+·–·„ê÷²�xÕE)ûº}·èç•ô0{S³v·NM|êÁ6�)!ÈYSµ7LèÔš4hR—E)Ñ ª²(5ŠòYlËS““J�ÛE,QÆxÞ>×劜ÕÊEç­&#1ªL]ÁÆF4›O$WØÊ÷†¯GXYc�öï<þ²¾ß]½1ntÇò»C2b—ÏÅ4P²1ÐøPX†ù­±+W¢#cÁÛ —»ží箞±Ð3=�I~6Íí¥`òeká]S ¥4P0YP¯–MFñµsm·ýy(Óëu3!”+‚†*?káüh:戰j‚S ÐÁô|ŸÇæ×¦Ò&1‰MEÄŠ0›pA�qŠ3ÔÏ<€`Îáç{.Xô¸dÑs\Ômbó¾íëÖð�”«&ÃÞîXÔWïKuîì}Ýq�±BoŸ¯‡­âžýÝs�“o™õ7Œj#/%¾ÇEQ`¤uNÛÐCÙŠñÓk0 Ÿ6¦*ÉM08ëRZ?…C—2ƒŒEsZÙ«>ô›Ò”¬û�Ÿw[va‘¬›ô÷³µÐ´Â¹ïeá¨$`²˜,5m’è)J´�âÚDí©–´§t<hðqºQL¡—UiH®Ýõk#¹àèïáYNNYzw]ƒH¨ÀS�E#1lÃQ MZH"JuœëJ» *”ÓÒÛKMZûR—ucg”"ûš'nÔ+MQX�Ry²Ö"<�4º:Q@'…SÉø(õptÝ\qXâ#/bÀ„rXM®îø–¨‹ˆA}É~w¨‡/TïÌ c]¤9ºÃ$ß…J»aÑ�«2Ã<,°"€"Æ+FdiMù{™�ÅÞÓÍ7]\¦Iÿ­›ó‚øúàLine truncated
#BZh91AY&SYü¢K°ÿÿ°ÐÿÿÿÿÿÿÿÿÿÿÿÿE ‚„ 0�#%ˆ(b |wzs*#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%úóJ´¶*«ûÜ=JV;ºîË×v›»ª‹­^\¨IÓ$o£=>í_nÓk!Û®ÖëÓ'›ßO¾X6½³gvÝ”qP{»¯Z´kRÛ]/I±Û1Öï6¡z÷ÎÏ1¶*úwšûè÷yã×¹Z>º{ƆAÝž¾vwÇv]ã}½µ[½7 v9­Kmïk€#%#% #%»€À˜gÛ#%<m™vŒ¥Û·#&;›@Ü9Ù£VÀ#%ŽçUÝÓè®’žƒÐP9¬èÔ´ÑT¢µ¯C#%•H*”R‚ÞáÕ E$C £BT¨(hw¼!»ëo=ÖŸfW}'½»«˜›½êÞn­S3®)PîîZdT§Z·×šèûß]è#%¹äó£^}³í‹Ûky½ìõ×yîôgmíË×¼¾÷;|»í}öÏiÙÒ¹9ï¹ïl°Þ³Ÿ½½÷Þ�¼ø\ôÐè¶ëÎÞ@:AH*ƒÐelkÖ¶Ù»u¬Ý»ÞzÇLWZí±£0îÎl¤Š”ş)è#%*"ˆ h<�ch•=î¹y–cníÝÁ¥7Ð;¾îçÌËìh¢€ 2=˜[ \`]æìÍ€ß{Ý�h{r®ûïyÐö½¹ßcÜûž÷ßcÒ󯫺»ƒ{�vz%¾¸qzµöòõ7�uÛ3{nâñ›ç¯¼ßw¯z{œõí»s¨Û{Ín’mã‹»k»»Ý«Ù]ÃŽž¾½êï�+±GÝ�HÖë…×^á wÝÂ_Éè×¼`£§¶¯®¾ÞÎ_n_I/»« DùökÛ»›6Ù«ÝÛ}Ί÷œ˜ûÙ/½ÁÞKë ôs½ïqé4ò݇k­.�9°tçµçzuß{ﻇݰòÛpJ)@*% *UBftI¶p;=†�‹k7·c¾Ê·*ö÷¡í‚Ì÷3vÖt<«©³Ø1n“«ÍãÞj©o]åÔhAÝf÷s®Ìð#%·g8€#%¢÷«—#»ÎëÞgºÍ¶g'LŸlóÅ÷6[¾ìsx¹ÝCeôË£Ó§ßw}>\o»u{d7:"õÁsÖ¶Î-óÙÆîg%@h{{–Ú‹�u½(¹^)èR»ÃM«Ñ³ß^\}ó0ìå­îõÏ+wrñãÜxûÞÝãÞfk³w>-=íÜ»”Æë}î|{FlÁ°l0äÐ;zé<¯§nñ|ÜîƒVÁš«‡ÖôhÙÕÙ{Ùß/«�»Þ´#%ÀU®Ø¸Õ°¹)O­{Í4n Öïwvn.ë…[îÜ·ŽÕÖíÞŸCÐ÷Ìݾ·µ¯»YA}{îuóêû7±ÑÐ ôÂì¶yާužÏíOwváÜ:­0-¶w¼îò{é÷Ø—ˆ4ô#%vböÍ«`î#%(wm{“­ç¶¾øSßs€;°ª#%#2h2{{a]ÝÖí€Fæ{ÆïMÖÔhš±½iuÝÚë�¬·aô÷oUQCºXWNì®—vÝ·KÃwVsvÜmôïL—Œ¯!G3ñ|»¯÷Ÿ|¯ZÂ³Øø'¬Hš“MëîñÛ×]spÈÊãÞå±;­Úu`ÝñÝ÷Îì ¯ƒ›s¨ñVóÒóŽðèï�|}îh€ #%@h44˜†šbh4§å#%š�Hö¨M6 ÐýSzPJh‚@€ ’`!2b“ÔýSôM¤�4H=A h#%#%#%#%‚DAÑ &)± ‘ªze<Ñ©š¤x“Ôyi#&¦ja=@dd44#%#%Iꔑ&§¢m“%=•=’žÕz�z�¡¡ê4z€=A¦G¨#%@#%#%$!#%L€  #&&L@“ÔÆJf˜ši�Fh#HÈ#%#%#%#%j"@&€ MÉ‘ªŸ…Oõ‰éOÊz†£Ñ¢<¦Ò4Ð#& €Ð#%—ÿÙþÕU®¸‘þô–µ9~åV»¦%1’�ñª×tB2UE¦­'¾ÕmsjÚ¢Õ­ó¤Á>ãï?ø~2ßÀuÒjÌR’ÓYŸŽ]¾%é7Š’› wsRÓŸò‹àºÌþÀ%qDH+Bƒ¯U¢Â»`í™'—æDôðÙ§‹‰ªuN�TÛÍñxyÁ‡ˆ"™¼/p+œb#2‚kg þ\¿¬W}ÆÛMT¶™l§uu«KmEµRU¬ÊÖ’¶Ú-´m¬ˆ#%Ü"*5#ÑʉAФŒ#%#%ÄT ¢‚ ƒaµ©+ô5n•o-ki«SWt 2¡ "¦b¢Šd,”fj3M‘&0H¤ØÚˆ™š„K#%–R�(¦ÚM†&h “A(Éjj-�ÑšK&šDhšˆD¨Å"jRŒ€F¥�#%i‹*mH¤Ù-Q%,´¦šÑ²Ò4Q–1Z5Q’TSd!%¦2P&4²Ò1�¥£SM„¶•µšÚÐ͉4fdÌ„ÑdÛMm4ÚÔ”l¤©­Œµ6Ù•2Òd“A°kLMJ()‘FÈ‘hDŠ‹4�¢“¢¢A Å%LÆiQT¦#Ä!#2 &0- ˆÉ#jBB4±ClÍ ˆ˜¦!™%4¬°fbD#&%‘ˆ¥’²llhؘT‹Ée!#E¥)‚lII‘FQ&ŒšdÄ‚¤£H”F’@¬‚›$‹DÌ¥¦"™‚lk$3b$Å436 …ˆÚ’À$²°„X$¤ØÔ&£�– ‘(ÐE"‰‚Á€˜e d”Â1e ”JMF¦Th¬&É©"IˆD%¥6@�‰"Él@I‹,Ê)2J&ÌÈØ‰›")FlŒÁ2©¦$„YJ ,bÈY ÓHXÄF¥d²FŤ&E4“MH•4È4hBI©%”e5LÒ6Цš(•¨C, ÒYÅ’“"h&™H•3 ”)1Pl†R #2@E&c$Œh"Y!–²L©™¶˜ÆÙMbQ2‘LB‘±e#2ÊhÙ"Š ŠI$Ù#ɳHÔÍ,FRB“31K#+6˜JÄFŠfM52i’#2CDRhŠ›Y©R””ÑHY1“"›HQdŒRŒ¤…"(±¶)$Ä’iMFɨÒ$PÒ6ÄcA3Y¤ÄÚ#&ƒ4„Òe‹DÈY‘$¦ÉLŠQ…“!-fÍ‹Y,HM%“¢¨-ËaH“!�Œ‰”jK�0”M-Ji@¢©†„™”˜¦dÙ”Á"–hÓ,!¨(M&Q‘!¢kjVÖŒPš™£)‘³J)&dDVƒR–À¥š,Å&‘”%–TÙ¢-L¬-”bC؈RˆÊF�”µû­®ˆJš¤D†#6Š1Q[X¨Ù2™¦¢•$Ñ¡¥¤6ÆÂ6I¨ÚÈŒ5#&&2Œ‘e0¤�dA˜™še²m£J[QHZ2i„KY�¡cR#2RÓL™2¤ÔU¤h©²„VÉ–ER©Y…6lf3-lX²#[&™Y¦YM¬•e²”¦™Ù%#j,R²Ä–�ÉKQª‚Õ�Z2TUd¬”mQ´TTš±4DÉbÄTEŠÔXe£kÒdÂÁµ@S(¤ÆŒ!i’iZklhÚbV1l‘bÚH+UKjÊ*)šš²h’¤bB&›H¢Éµ*ͱŠSi¶YJ™f›TÒ"5´ªY$ÌÕ*F,BÚS)¬±¡²É¬¬²³LD$2£I(‹Ñ�ˆ‘"A¡1ˆRÚ5BP!*(dÕ’i£dɤ¢ÈËŠl¤#&"+,ŒˆFS1(RQ²™ b#2-2B#6›IŠ#cd)„f™¨ÉF†˜HÌÔ#!4LÔQ¢JdR�šP5BTÀF“a)S,�š‹FBŒËQ”£fRIF@Ñ�¤1e+ÃhØÆ¤£%„h,‘e„(Éh¡ ±Hf$Ѣ̦̤¥”¬Ì•Œ ³E’6!�Hµ£f´fˆ¨h©M&ÃLT±Y”Z�FBL�1�i‰±%IRe l¦˜Ù £-’”¨Ôf4–MŒÒhѳ(iFJÌ­dFš3D ‰P"DB#&–`ˆcFÙ¤lQ¢³I²S±1II ¢Ñl%F£QF+´fk#&&I4(Y261J �Š6´–l–C2ˆ6*2JY¤©�[EBF±ª5Dš(L²´( “Rj�ƒ&…„cT¥#&XÚ#&)¦Y#2(Ñ$U2-F¨±#)kdT¢¨Ö4˜",š"™”-J) ÉD•6%2­Dm`ÑS*,•FÅšQl™+­&)+)¶BÙ66†‰²JdJ‹#&‹%MDb6ÉŠI�A«2`ÐB£Jl͉ˆ¦±ª*edÖHÒÒMEF(šmI´[)%�“�¤Á’V¤F‹K-C-Dš‹TUŒ¥I["UcRQb‘M ‘LŒÈ˜ÓR"ƒS6IšÑ*’Å´jJ–m¤Ö‰›PljB��Œ‘­ŠeSM´mFŶ1mI˜ÊQ eebZŒV,Í�¨ÚT¨¥*”f*”˜Ù@Ñ¢ÁTi5�bÌ©"Ô•±dÛ)2Ôh¬CH´RQ£hÖ¶ËUŠDÊ…LIDb¡€D–4TSI6¦É*ÆØ¶Å¦jÚ1­e¤©¡–¶RÉmMM²Ôi«FQDFŒ�¤”Pl5š“Rfl²¢(¨“I”“"21#2¤¶‹2Û1ü¿ìý›úßèuoöç?'ÃÏ5§#2‹?âÿV•fˆ)¯¶e"ÃvÝ“ùrÃrÐhÒløÞy·õž–ôæþ¯õzô4Á©Œ�ÿÇ{µSgú~ÂÛGžˆ íÿ$ãŒ#&.`Rĸ`¤�jª#2º2‘ìzÿ?ªõ{ký»´ÿ›Ì¼ÿ§ûyÞ¿ò*Æxdç�,$b/›žmíØ¶ç' «I°ö�~lGìêeGëgw«�±9;¼ÈŒSRR(j“ƒ5â䱈þúÙ³j“þíÚ�FL€I¥Û"lÆLhƒcôav4ŒŠˆÕÕ¨ÌÕLÒVS(�rÎw,Ë¿¬Îjä6.•#2b„ÑàÍ*�˜ÒæP)R�¤H¡"F(M®Û©Š�Ò2Ö‰M^<îÔ2ø·,ŒÞ›šMƒ0lË•Ì�éUOMÿç¥ò´îášb#2,íoU%0¡‚Ú§®ŠAE,PGÝÿ~²‡kÁéŠÔL¼ÛE0…6…"ÉßÇ%cýnIÆ“ÚÛAZ°YÞ�Ó¹rüc6Qœ]ж (`Ì]]×�îÿNzîm+©½…³•uM¿^ÐÆ°=¾,ZµYÞ{xòòŠ9Ë¢î)•ͺi#&UͺyÜhبŸzëå5¼Z4E‹~^êùÛöÕâûäS+âäkcs¤OånªñÎnŸµ¨KýólÚyeͳ™\Cm´ØF¾Ï:×»z{µW)6Œî¹GŽ&×iÏ&Y0Þ¥Z�m„hmmÂk®WyÝŽQÒ¹s%uÜ""ÓLEO6Ytä?¼«5J&©LR…",0!M îÛtÉÄe«#2üè¤OUM?[�1µ?'¦$2ðA¿ÙE&Ì9é‚Õ@TqPÿR!ôÄ­ŸÌš¨Ix5%Èó¯uÐÙŠO<VÜñýæ§#"^„’X£ ;•o›#b§‰Q¦½vúìrH È¦oYÂWæcv\~û,ñ>¼)Ä�Z¯oQœ�YÕ4dà&É/�z®¸3,̬^ÞZÞ{¨CÞÊAãU§îéöß©Ï+è`ö§]ÚÝ95ó¨SXÚ@¤‡!dleNÔÝ3£PRhÑ¡J]§D.ªÈ Ö(wÉe³,YL#2NM*m±Gãxû_–*sW)Ÿå˜I£íËPã#M§’+ìe#2ûÃW£¬,‰±Èj[þv&E�6(àÓﺂ±ˆÅåE4P²1ÐøPX†ù­±+W¢#cÁR…Q4iÑ—ŠE¡UŒrÐ"x³7¶•ƒÉ•¯…v&Jh tl…Exܲj7�«›cÿÖ¬A`÷´ d2…xPPÅGí|?’ƒêöëwVæÒ†§ãü>mzm"c”ÔR|;·+½ÝUº]9JNÄîÅ�5NwYJH¸JV#)×5X¼ïŽzÞ2•dØ{ÝËŠýRÝ{»‹®1¶(MÊ�5Ä´*¨Z)‹"�Y“‹ÚËa¨4–û4Yð__žò¾ß]÷ýù¦Kó8²"4£�n"U�ñˆïà@Æ#\Ö¶jϽ$Â!F£éD•¬E„FEÊ 6vº˜W=ì¼5�š5ðxÛήN]1Ë_;Å—mHµ¥80Ë¡ãGƒ�ÒŠe¤º«JEvï«YøÕÏG#2ÊrrËÓºì²EFœ#2(SfˆZjÒAS¬çXƒ%¡GïŠ4wh�-´´Õ¯µ)wQ4ëEO£#2ãÆÂت+±'›-b#Év0€3Û#îþ.ü�#^pƒ>ËÞ�8ج&×÷|K T;aÇãýÎ{'ˆa̪ƒŒ¸cí!ÍÖq&ý±KZ<ZÓFºÒ�Ф¤Ì(Ì�)¿s1û=¡Ô5ƒLOýL߬ÇÒ¾ð#¼Îì0úª©Ù–e(ªe�{@‰Á¥5¯ÅÜýýøƒåLine truncated
#<==
#-----BEGIN PGP SIGNATURE-----\n\niQIcBAABCgAGBQJaias4AAoJEEm0xnwFJ3qqfmcP/j4ITHGXd3U8tRn4hjvpLLkT\nfTMd9x9hBEwwRqU0EYoAp2+yIoUKvb5JERF0YjGUWoiZqxEmGGp5BFSOJOrYhq0V\nsZIE01wrQQTYMn1jfoXhjywyLVdyMpl9hgb2Z7DnF9GgzUsd5bPWmoNaCMkhZjuD\nSaR13Ff0hAOVIt/fNoJiXYJ2ICDRG5LGKFlkxy0ykXOkrKDmdah4DV6MGVB/tS3n\niBhxgqMc9ILSFQoEQmFAXTid8Ej0OBj+csAk8nvbCEiV+k74BozpQ+QVfR+agX+K\nnf/oMed8F1jKa9uydbvcEn4SXXEBqKztiKvuCGmZIO3xKd+46+5Oh51wKxZYNsyk\nlYBAA/fH8fOZqMzTCRGZM3q6EnKf+zwGyf4lFOHuVzeXHlfcZA62V1Tcr9aQfsq0\n2saI9S9JsxEpFvAa4S+x7oQ+VJ0WM5XLb04KKFgAMjK/kW2Nw6rYQ0eNCdBX6NCc\n6LWnmmrB/TauSNsJSYIfICoKuv+hebjbSIQa5n1/zQeWYt8DKZYS9Lkwl34vMMdx\nDzq/l7QL+I5Z5jDSVkzRS31/K6T6RWiYFzHgabwD/DNBC8cfG4RwTZIEO3C8uLFy\nDo0MG8w5NFkMk7t0KQtBPe+7BK6Nv6Xo5mLTJ+01INvmgHavhgH4bSyg0kD8MbGS\nY4cOEMKnUkHXCpvXsOLz\n=9X3b\n-----END PGP SIGNATURE-----\n
+58 -66
View File
@@ -5,12 +5,12 @@ APPNAME = 'ChronoSync'
GIT_TAG_PREFIX = ''
from waflib import Logs, Utils, Context
import os
import os, subprocess
def options(opt):
opt.load(['compiler_c', 'compiler_cxx', 'gnu_dirs'])
opt.load(['default-compiler-flags', 'boost', 'doxygen', 'sphinx_build',
'coverage', 'sanitizers', 'pch'],
'coverage', 'sanitizers'],
tooldir=['.waf-tools'])
opt.add_option('--with-tests', action='store_true', default=False,
@@ -18,7 +18,7 @@ def options(opt):
def configure(conf):
conf.load(['compiler_c', 'compiler_cxx', 'gnu_dirs',
'default-compiler-flags', 'boost', 'pch', 'coverage',
'default-compiler-flags', 'boost', 'coverage',
'doxygen', 'sphinx_build'])
if 'PKG_CONFIG_PATH' not in os.environ:
@@ -28,8 +28,8 @@ def configure(conf):
boost_libs = 'system iostreams thread log log_setup'
if conf.options.with_tests:
conf.env['CHRONOSYNC_HAVE_TESTS'] = 1
conf.define('CHRONOSYNC_HAVE_TESTS', 1);
conf.env['CHRONOSYNC_HAVE_TESTS'] = True
conf.define('CHRONOSYNC_HAVE_TESTS', 1)
boost_libs += ' unit_test_framework'
conf.check_boost(lib=boost_libs, mt=True)
@@ -48,44 +48,39 @@ def configure(conf):
conf.write_config_header('config.hpp')
def build(bld):
libsync = bld(
target="ChronoSync",
bld.shlib(
target='ChronoSync',
vnum = VERSION,
cnum = VERSION,
features=['cxx', 'cxxshlib'],
source = bld.path.ant_glob(['src/**/*.cpp', 'src/**/*.proto']),
use = 'BOOST NDN_CXX',
includes = ['src', '.'],
export_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']),
dest = '%s/ChronoSync' % bld.env['INCLUDEDIR'],
files = bld.path.ant_glob(['src/*.hpp', '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']),
dest = '%s/ChronoSync' % bld.env['INCLUDEDIR'],
files = bld.path.get_bld().ant_glob(['src/*.hpp', 'common.hpp', 'config.hpp']),
cwd = bld.path.get_bld().find_dir("src"),
relative_trick = False,
)
relative_trick = False)
pc = bld(
features = "subst",
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,
)
VERSION = VERSION)
def docs(bld):
from waflib import Options
@@ -95,85 +90,82 @@ def doxygen(bld):
version(bld)
if not bld.env.DOXYGEN:
Logs.error("ERROR: cannot build documentation (`doxygen' 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.fatal('Cannot build documentation ("doxygen" not found in PATH)')
bld(features="doxygen",
doxyfile="docs/doxygen.conf",
use="doxygen-conf")
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' not found in $PATH)")
else:
bld(features="sphinx",
outdir="docs",
source=bld.path.ant_glob("docs/**/*.rst"),
config="docs/conf.py",
VERSION=VERSION)
bld.fatal('Cannot build documentation ("sphinx-build" not found in PATH)')
bld(features='sphinx',
config='docs/conf.py',
outdir='docs',
source=bld.path.ant_glob('docs/**/*.rst'),
VERSION=VERSION)
def version(ctx):
# don't execute more than once
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('.')]
Context.g_module.VERSION_SPLIT = VERSION_BASE.split('.')
didGetVersion = False
# first, try to get a version string from git
gotVersionFromGit = False
try:
cmd = ['git', 'describe', '--always', '--match', '%s*' % GIT_TAG_PREFIX]
p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE,
stderr=None, stdin=None)
out = str(p.communicate()[0].strip())
didGetVersion = (p.returncode == 0 and out != "")
if didGetVersion:
out = subprocess.check_output(cmd, universal_newlines=True).strip()
if out:
gotVersionFromGit = True
if out.startswith(GIT_TAG_PREFIX):
Context.g_module.VERSION = out[len(GIT_TAG_PREFIX):]
Context.g_module.VERSION = out.lstrip(GIT_TAG_PREFIX)
else:
Context.g_module.VERSION = "%s-commit-%s" % (Context.g_module.VERSION_BASE, out)
except OSError:
# no tags matched
Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
except subprocess.CalledProcessError:
pass
versionFile = ctx.path.find_node('VERSION')
if not didGetVersion and versionFile is not None:
if not gotVersionFromGit and versionFile is not None:
try:
Context.g_module.VERSION = versionFile.read()
return
except (OSError, IOError):
except EnvironmentError:
pass
# version was obtained from git, update VERSION file if necessary
if versionFile is not None:
try:
version = versionFile.read()
if version == Context.g_module.VERSION:
return # no need to update
except (OSError, IOError):
Logs.warn("VERSION file exists, but not readable")
if versionFile.read() == Context.g_module.VERSION:
# already up-to-date
return
except EnvironmentError as e:
Logs.warn('%s exists but is not readable (%s)' % (versionFile, e.strerror))
else:
versionFile = ctx.path.make_node('VERSION')
if versionFile is None:
return
try:
versionFile.write(Context.g_module.VERSION)
except (OSError, IOError):
Logs.warn("VERSION file is not writeable")
except EnvironmentError as e:
Logs.warn('%s is not writable (%s)' % (versionFile, e.strerror))
def dist(ctx):
version(ctx)