build: update waf to version 2.0.6

Cleanup in most build scripts

Change-Id: Ib024e95fb6f80e72b0c00e1dc8bb9300d6c5f191
This commit is contained in:
Alexander Afanasyev committed 2018-03-08 21:49:25 -05:00
1 parent 5e2ccca06f
commit 5560fd40ae
10 files changed
+243 -221

No files matched your search

+22 -11
View File
@@ -1,18 +1,29 @@
# Emacs temp files
# Emacs
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
.\#*
# macOS stuff
.DS_*
# Visual Studio Code
.vscode/
# waf build system
.waf-1*
.waf3-*
.lock*
build/
# macOS
.DS_Store
.AppleDouble
.LSOverride
._*
# Waf build system
/build/
.waf-*-*/
.waf3-*-*/
.lock-waf*
# Compiled python code
*.pyc
*.pyo
__pycache__/
*.py[cod]
# Other
VERSION
/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
+2 -7
View File
@@ -52,7 +52,7 @@ Note that precompiled header must have multiple inclusion guards. If the guards
"""
import os
from waflib import Task, TaskGen, Logs, Utils
from waflib import Task, TaskGen, Utils
from waflib.Tools import c_preproc, cxx
@@ -67,11 +67,6 @@ def options(opt):
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]
@@ -134,7 +129,7 @@ def add_pch(self):
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()}'
run_str = '${CXX} ${ARCH_ST:ARCH} ${CXXFLAGS} ${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()} ${CPPFLAGS}'
scan = c_preproc.scan
color = 'BLUE'
ext_out=['.h']
+3 -2
View File
@@ -46,8 +46,9 @@ def addExtensionIfExists(extension):
addExtensionIfExists('sphinxcontrib.doxylink')
if os.getenv('GOOGLE_ANALYTICS', None):
addExtensionIfExists('sphinxcontrib.googleanalytics')
# sphinxcontrib.googleanalytics is currently not working with the latest version of Sphinx
# if os.getenv('GOOGLE_ANALYTICS', None):
# addExtensionIfExists('sphinxcontrib.googleanalytics')
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
+7 -9
View File
@@ -2,14 +2,12 @@
from waflib import Utils
top = '..'
top = '../..'
def build(bld):
for i in bld.path.ant_glob(['*.cpp']):
name = str(i)[:-len(".cpp")]
bld(features='cxx cxxprogram',
target=name,
source=[i],
use='ndn-cxx boost-tests-base BOOST',
includes='..',
install_path=None)
for test in bld.path.ant_glob('*.cpp'):
name = test.change_ext('').path_from(bld.path.get_bld())
bld.program(target=name,
source=[test],
use='ndn-cxx tests-base BOOST',
install_path=None)
+23 -33
View File
@@ -5,46 +5,36 @@ from waflib import Utils
top = '..'
def build(bld):
# precompiled headers (if enabled)
bld(features=['cxx', 'pch'],
name='tests-base',
target='tests-base',
headers=['../src/common-pch.hpp', 'boost-test.hpp'],
use='ndn-cxx BOOST',
includes='.')
# core objects that can be shared between unit and integrated tests
bld(features="cxx",
target="boost-tests-base",
source=bld.path.ant_glob(['*.cpp'], excl=['main.cpp']),
use='ndn-cxx tests-base BOOST',
includes='.',
install_path=None)
bld.objects(target='tests-base',
features='pch',
source=bld.path.ant_glob('*.cpp', excl=['main.cpp']),
headers=['../src/common-pch.hpp', 'boost-test.hpp'],
includes='.',
export_includes='.',
use='ndn-cxx BOOST')
config_path = 'UNIT_TEST_CONFIG_PATH="%s"' % bld.bldnode.make_node('tmp-files')
# unit test objects
unit_tests = bld(
target="unit-test-objects",
name="unit-test-objects",
features="cxx",
source=bld.path.ant_glob(['unit-tests/**/*.cpp'],
excl=['**/*-osx.t.cpp', '**/*-sqlite3.t.cpp']),
use='ndn-cxx tests-base BOOST',
includes='.',
defines='UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' %(bld.bldnode),
install_path=None)
src = bld.path.ant_glob(['unit-tests/**/*.cpp'],
excl=['**/*-osx.t.cpp', '**/*-sqlite3.t.cpp'])
if bld.env['HAVE_OSX_FRAMEWORKS']:
unit_tests.source += bld.path.ant_glob('unit-tests/**/*-osx.t.cpp')
src += bld.path.ant_glob('unit-tests/**/*-osx.t.cpp')
# In case we want to make it optional later
unit_tests.source += bld.path.ant_glob('unit-tests/**/*-sqlite3.t.cpp')
src += bld.path.ant_glob('unit-tests/**/*-sqlite3.t.cpp')
bld.objects(target='unit-test-objects',
source=src,
use='tests-base',
defines=[config_path])
# unit test app
bld(features='cxx cxxprogram',
target='../unit-tests',
name='unit-tests-main-unit',
source="main.cpp",
use='ndn-cxx unit-test-objects boost-tests-base BOOST',
install_path=None)
bld.program(target='../unit-tests',
name='unit-tests',
source='main.cpp',
use='unit-test-objects',
install_path=None)
bld.recurse('integrated')
+50 -26
View File
@@ -4,32 +4,56 @@ from waflib import Utils
top = '..'
def configure(conf):
conf.find_program('sh')
def build(bld):
# List all .cpp files (whole tool should be in one .cpp)
for i in bld.path.ant_glob(['*.cpp']):
name = str(i)[:-len(".cpp")]
bld(features=['cxx', 'cxxprogram'],
target="../bin/%s" % name,
source=[i] + bld.path.ant_glob(['%s/**/*.cpp' % name]),
use='ndn-cxx'
)
# Single object tools:
# tools/example-tool.cpp is a self-contained tool with a main() function
# and is built as build/bin/example-tool.
# These tools cannot be unit-tested.
for tool in bld.path.ant_glob('*.cpp'):
name = tool.change_ext('').path_from(bld.path.get_bld())
bld.program(name=name,
target='../bin/%s' % name,
source=[tool],
use='ndn-cxx')
# List all directories files (tool can has multiple .cpp in the directory)
for name in bld.path.ant_glob(['*'], dir=True, src=False, excl=['wrapper']):
bld(features=['cxx', 'cxxprogram'],
target="../bin/%s" % name,
source=bld.path.ant_glob(['%s/**/*.cpp' % name]),
use='ndn-cxx',
includes='%s' % name,
)
# Sub-directory tools:
# tools/example-tool/**/*.cpp is compiled and linked into build/bin/example-tool.
# tools/example-tool/main.cpp must exist and must contain the main() function.
# All other objects are collected into 'tools-objects' and can be unit-tested.
testableObjects = []
for subdir in bld.path.ant_glob('*', dir=True, src=False):
mainFile = subdir.find_node('main.cpp')
if mainFile is None:
continue # not a C++ tool
bld(features="subst",
source=bld.path.ant_glob(['wrapper/*.sh']),
target=['%s' % node.change_ext('', '.sh')
for node in bld.path.ant_glob(['wrapper/*.sh'])],
install_path="${BINDIR}",
chmod=Utils.O755,
)
name = subdir.path_from(bld.path)
srcFiles = subdir.ant_glob('**/*.cpp', excl=['main.cpp'])
srcObjects = ''
if srcFiles:
srcObjects = 'tools-%s-objects' % name
bld.objects(target=srcObjects,
source=srcFiles,
use='ndn-cxx',
includes=name)
testableObjects.append(srcObjects)
bld.program(name=name,
target='../bin/%s' % name,
source=[mainFile],
use='ndn-cxx ' + srcObjects,
includes=name)
bld.objects(target='tools-objects',
source=[],
export_includes='.',
use=testableObjects)
# Tool wrappers
wrapperFiles = bld.path.ant_glob('wrapper/*.sh')
bld(name='wrappers',
features='subst',
source=wrapperFiles,
target=['../bin/%s' % node.change_ext('', '.sh').path_from(bld.path.find_dir('wrapper').get_bld())
for node in wrapperFiles],
install_path='${BINDIR}',
chmod=Utils.O755)
Vendored
+11 -10
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# encoding: ISO8859-1
# Thomas Nagy, 2005-2015
# encoding: latin-1
# Thomas Nagy, 2005-2018
#
"""
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -32,13 +32,13 @@ POSSIBILITY OF SUCH DAMAGE.
import os, sys, inspect
VERSION="1.8.9"
REVISION="849024857bd41c3cf8e87dc01ecf79b0"
GIT="2b3bb0af33c07b93a72803a332ea8286427006bc"
VERSION="2.0.6"
REVISION="593191f496fe8c66231dfd5df26167ae"
GIT="459ddf50b622573ecfe36c12c076e0fcc610b01e"
INSTALL=''
C1='#-'
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¢í¦* ÿÿÿ´�AÿÿÿÿÿÿÿÿÿÿÿD #&††"¢Dˆ H¨8aðÜ÷<˜8#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&žDeX2ÚM©öÒŽmª5Í›gÛîÉÖØ´Úú>æ”U/+îÎúgGÎÎm–¦Ë#-í„)çtûï§RǵPpô¬%GnÜ]»c»zÃv{‹Þç]ÖWUÓ¥¾óW–o]sosÁì÷vGwsÞÕÂö�³ëç�ðúÖ'‹´öÚvöûÎŽ»Æ;g×�#&#&#-#&#&ùö#&>¥­€&û#-h#&>ûØá½³#&.³©°w7Ð^=;�¡¶ ÙGCwŠƒÃÐzè]†…#&(kAAÑ…DI#- Š‹ÝºEìh(@(%!é¢]˜"õÓºN�}mu÷»�·¸y­c½¬–ÞjrÀ;š” ë-šR—›_w»l�«Qô®æøà^÷z�²½[î˜7ž÷xû5›»»{f[Îû½Îùç#Ë.êÏ­ÖÇ×>K»ºïo}¢»>ï¸#&Ûo<¸³#&©#&žÊ(kA�ž�ÞæÝî{ÜÏ2#*#&hz»×EGM­¶‰Þ{ÎÛxÒ€Q@#-‰B€=@ÝÛ´i^»SÙëÓ]Þ÷<µ;½¼½¹÷¹¯}€hM ®î²]:}ÞpøÞšÕ6{šW©:tvw|�ì¶5�½#&}»ç}òîûíóå^ût½Ï+Û4ú÷aÃÖz#&ÕA÷Î8šaã¾¼®U=k¾÷w¾—wÎzïi­­�®ß{{¶îöç½tßmÚÔ»7¼¹wQ»m¨Ï¦ó̼w½±ö»�k×P•Å]\zdÑÉât§NCÝŠÓ诂^Þì÷AD)jòç3â{Ý÷¼Nì}kݾïKmÛÙÇÛO/¥î=èÛî݇­æ÷½®žKŸ{ŽtzÛ§Ï5€#*ß^5ïw¼;:#-çÃÚyé *%( 6Á]ÙÛ*eWsµh#&úsÍéëÓAÜÇ'S‡yÛµê^»h­ÊçYŽæ¢8ïnÃJƒ»çÝëÑï€#&o;‡@GÛ­íÞÍßc/=÷}Çœø]¯O¹ï=ºµÝ¹ì{¼‡Ú§œèíÖÜã‰××C¾ õÞ´×»¹í–ÝÉ�wyˆn÷«Ö÷6Ï}Ÿ>ÝõgÓÆ÷>UÈïŸ[¼{Ï£¯µðêõ)õ½õÂ#-¾µZôsí¼�ï¾xdÜõ®o±ï{—›�¤{]ܾëµíï3_aåÍíßKo»�öï,«4 jÐ>îhr»8§×W�‚ßgP]÷tíáói{è^·�qöçzvϽ#&ÀQ+V#*¬síž¼ûÝÛ®Ž½Ý#*}Ûí�Ϟν.—{×}rì/_#*îÎwf]w6[æì=åö¾}Ï«fìuÑ R‚:Ý4§Mw»«o^èØë3ƒT}÷‡.îŽÚ[àÛFì#&h»"ô™+Ó#&;ØîÃ<�l¼ø»»w@û`z#&Ô”ÛËÛîõ§v€a¾×69Ù×XzêÜáÓÛžŸ>Ûl÷u·îêJŠH³�Öæiõײ›gyÕro}ÞóÛq°Ý2ïX¯­4Þç=öûç½{×ÅÒ÷Êû×Xv¼çΘ„�ôiïcžÍÎØÆœ÷y·>¼÷w<g¢«¾÷/½fL;²Ëo.�½]½5ð°”Ò#&@Ð#&€ ˆ4Á#*#&™'“!ôžHié¨ #&#&”Ð!˜€&�OôÉSØšdÐ$?I=5=M…2#&#&#&€#&#&�Hˆ ! &A¦©é•›U4ýOOÊMS'¨d44óPF#&44#&#& =R’"dM£$Ñž§å2žD@õ#*#& ÄÐiˆ@#*4#&Ð"HA#&@4#&M#&Mš4LIšž§ªhh#*#&€´Ô~¨$ÔDh �ÐhÔô¦Õ¤ÍIêzŸª~T=5ÒƒõOQ #&#&#&#&GÿËýËm«¸Dßð›Rmlº'ìíµw)£ã¶Ôå,’%!,€1Vžö©h �d0 ~¬~Ÿëüê¡ÞõÍÍØ¢H½¢¯ŒÖÞád¸•4ù‹U”ä¬ã8&¡î?Ò@|�÷^â%<Ò¼�A#&º�ÖgS fBÙÛ „e²ÌðÌ.K1åÉ+.­yŽá1Í=K‰(æ¦& ÅÍÕÀõ/QŒV<(R<¤õP÷%C=â¥Ô¾ ¢¢&V(ÅÛ#&Æ¿——~{Ê8E Å@¨Ñ#& ª„€ˆH(""ˆÝT*�Q�FÈ(3  âHb(Ž#pB7"ŠBí‚E *#-AƒTH�"2*ˆ ~-ªÕT�H Ĥ34ĈLˆhÆm3DIMH¥Œ‰’”SÛIPÔÉ%Š„ѵ*+%�&h›([&2VeYš%� ¦ ±¤ŠMˆ´bˆ¤”©LÕ ËII ˜2’$[i5BÁ™fÆ–&¤b‚’QM"FfÅ£QZmZkU)&ÔL™&HÔ[KRµŒÓ Ù”ËRY2›lJ›bcf©$ÔÂÈ¢I¨¶djFkFÒ²iš#-d”h)-$ŠR©!›˜!`£3Jbi± ¥6 „#&SÆa©’dJ"JJ¤�"– !“C$D¤!"’RRÅ&H6Šc%)6¡-Af5#*‘Pʼn…R�0"Àd¢M"”LbÄÅA²e6ŠI–�ÊHš YHÉ*QE3#*i#-†EÃbBHØ�I`l´IÈ)QQQli)#-fÆ $Ô˜ŠHÈ„‰™š@“1˜FJ̳BTb$"HJ“a I4ÒÐbLš,¥0lÚ#M"�¢¤�”fƒH“5K,²”PbR4²MšeRÅ%™2²LÄ’(´62É#-‰,�² ¥™£EšFÉFe6h’šÚl„Êc`�I’“0ÓIK5K*TlQ0‚ŠJ‚&$È‚JPSF€a$d†™$KkH�¡šÈC)dY3#-RÚM’‹d‹F’d’P”Y(iÀhØ2ˆŠ$›5˜É¨Æ#¥C)šS�ØTÉ¢*XÅš›™E‘“P¦É$,¢¦Eˆ™¦#-4FÐb“&”“0Ù6M2#* �a&VRa´M’�$"IdÊ2M4#)”Œ±-%*›4TmˆL ™’"´cli&k"†“0’FTi @KÑ´jRf(¬L´™4Ra%‘„1K F“!Œ£4†Íª›[h(ª(É© k%ÊHÚ)’™&1¬–‹4ic)ši²R”Z™Ù¶%6Q”ŒÐ!B–¿K[£HYZC!,£%5�­‹EF„̨‰¦(Ù-©Š’Z¦"†Á¥ˆ¡¥) ¤�f62T2Ô%¨²)¬™#*Œ¢Ò£H´,L™�KK1’F“™MVhÓ!«#dU6±M”IeFR«Õ¤ÚB³ek5)Ji†Úb…2"Æ´i©Q%¦Q¢2ÆÑXÛ3FØJ¬ÍQªÂF¤£m�£`²Qª3DB¨¤*#*±ª6©#*¬Bk$(�´Ñ ¥QH&Š0ÍJ%6¥Q¨Ù$Ú1© ¦LÕµ›Vš±a©µ,‰•5‘&fjiH¤™mRÔRÒS54ÙšÒ©Y*¥Lm¥L¥&ÔÒ´Ù‹I¡­šÌÌ’VX¡›¤¶–ÒÈXµ4£D@`f£IF‘£`$# ˆb´É0)µRD¤Ø¦Slm)4ÑQ“&ƒIL(QH¥*#b�ZY�"i¢™)“ÊlÐʼn B£bÌ�Æ)Y©,6̲if2˜*B*&¥bÁ„Ù‰±F£bJJ24E™E©˜ÙˆRV4ÂfÁ£&ʼn†6e¨ÑBQ@R!©M£!fm66(Ð�¤´Ð‘I‚°¥–ƒ "LVBi)Mƒ%±#-MJ"I6jQ UU31°Ø©M&ÈÚL¢Í%¬A!�¢J$L›)&„©-&dlÍ1 *[,ØÚ#-ÊlÑDlblRi©&S&Š™mHÉ”´l””fÀ‰& b&4cL£E5–M’”11RBE¢±a6-(ÛZi0É3D”šE¢˜ؤˆÅ‚ÙiI&¤0ɘi)fCL+F�„6�Elš4&XV‚ ’-%±Pca@ÑIªR‰«ÆS3B�’JÌŠ’‰-!¢,²Ö¦,ɨ´c+%¡¥(TiIMT²J’™JQkb#*REJ4•FFÉcY4•5TÌS(©Kd-b¡¤™²E&ņ�B"Å‹LÉC4`ÚL‰3DŠ©Di„Ê[1¢ÑZ-Ф„*%0c)Q¨Ú6™%  QI„I«J#--)ªSi5±¬Vɬ–³H#-Ñlš’‹Å(#(1³B$¡1²SŒª £ll[FÆ”Ûi(e¢#-Æ&¢¢B´LÛ,Ú�¢±QkI¶¥³d4²±*ŒZ)–*¦¤ÓiFQ¢”K&,©Qh$¨¢²VKd£lš±I´¦eM£B‘¨¤£E¢ÛmšÖš3P²X‰*eEF° Z#*&¥³VLdbÅ­E´V�lZ-¶�ªdÚØ‹TÔ¬Ú‰²�6$m$Æ#*•…”¢É4¨Š ˜Ø’$“)&DBÔ›b̵L|oè?ÝA¾Õ/Z?¹Jf†(24”ÍŠè\Ñ0š¡„ÿsûöi ‚’™Z¨‰e?ÅXñÿoöÄÛ8 àäOý©Ðe?·äDW¶yÒ!óÙÎ2�âÅX4×,†ä°RÊHe7HZ#uR#µ‹·ñò»{CþMRñyðÿ£�ã²±—Ž2ꊦ#-YÛ]¬±Ga, ‘Ñ;fî!Ã?Uñaùs[hÔB“ºêa?‰#-îœuƒ±Z8(Ò<|­1îFõru½�c,“#-J˜ÛuÊãk´ðb­¡Ø£Â&9’#*¶ùaºÉ¢CLƃ³–{]¶wØò›ºÛ�2ñ{+Æø8UðW³Ñü޽Jô·³ÍÍFÈ!4ÛcìBŒv1 h&íV7gTOó:½üí™{74”X"�ÖƒÓŠtŠƒÿzèP1�YŒ;U%z¤Ù–1SÛFRÆE‘Wáþë.NÎÚјN‰R÷»CG›(BС€§†t+ü3’ãJÕRKD²¤1Žqœû†_eƒ-‚È#°Äšzšzjft4­™”ú4&ÓrPõì³oõ×ß /®-ÃNj‘2gžÞo¦»¹Ñw+›™4…&´�TX´~9}RÖX#-t¯žI "e¦PSÛA@¨ÈØ4øëD}.C¿zl\7¾ÚÃ/‚ö%Ëß@’�ñWùmoyé›h KMA¡·b��íéddAu#-4{úEZ9`ˆÜPÓJ•„܄r䛺ì;®š*#*ðU¼ó¿â¾WyÑü«½ºuºMFÑ­”­Ä H±_¥R>Ê+_ÏZcΟõ½0L´?ñHÎY$社ÆØ@‰V"À d)¤•ü˜Îçݘ]DE53‰`cm¸ÅÕ'•_®(¹û|zfn"µYÁÚúêæ$Ï% u‘Äó™ßýˆ½Ã:Œ'h�^ÐJ¤j¶�æCf„PèK¹û{_jZGc)>w;]å¢Y­NÆÄÑO½“˜Þá êУbÔ~vN¸<åKŒ‡zZôZPÿ 9!„‹i;Ë#-X,ôëxûŸ–(ÃÕ¢uÖ‹6j#*�((‹^)y¬[ÃÝ¿£ZÄ›#*KHíÿFAzHi¶›LkÉÔX‹<(¨vBÈÇAœl¢eÖ뛑/VR¢ÿÚi{ʤyµ½áj±IEÕ«þÑb$ÅJ�*¥ÑJ dÑ^9™dÞ+šåcUûO)¨Óï¸4mé»ðõ~w„Íþÿo¯øÝ¯�ívŒrÜÖ»«¶#,Äa5'§.WçõõûzÚÛÉÒÅâ†EY×�a0‘y!ByP’ÒRB)„±ôÅÙ¤P;\¶1b©kŒ£~™®CâãIl˜^Ýn¾=ðó¼ã±cX²UôÏø‹Ý\��¡Àm�¢È.!ëx|µ#*ÿâ°##&¦™5ó :m›ƉÏ%CŒEt­¬ÙŸb·©¢B×ÿ‚ò76êoŒº‘#-iDŠ:¡dØd)6ª ¬¡r4÷ê¾Õ¼‰ì»2r×J_ƒµ¾#*j”Ù†ƒ4;ê‹iTM;nà7õyòÁ˜¼Zvõ«"#-I’© ºÜ5BòU"‘ãT–훈%]ÃË4KCFL±–I�†¢�‰<Ü6×MaZ`Û:ϦÁYãÛPófG’÷×�‘<*›ï©~5Gj;#¦u³ÇŒe®±ž×#*ÚG¹V§®™EÓ*j�O©Íñ¾�#-¤V©#¡#*#&¹Ç+ÛÊUÅÚ©#*&wdlBÔ60g«Ê¡û çµ1QT‹8ÑRšC³ÕÇý—{ò¼°øðÞûY:¡°ã�ufÿZäÍ2Ò &�Nˆç�~Ó‰|øÁìMnìzöH£ ™‡@$AÒ’6ï²L±ªÆÝˆÕÊ ñ¢d¶A‹Ÿ‚–˜£Òài­wºb£†EÆ™ý¹3�(S*Ù¾\h¹«Þ¨§7Ãþ&¦,>eÐìÑ/ÎqõÞñïžÛ†ÙŒÅC¾Üc}­¼±•ŒW}¦¤çÜô­Ô?“«@è×åD«c#2O‹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
+99 -99
View File
@@ -1,13 +1,13 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Logs, Utils, Context
import os
from waflib import Context, Logs, Utils
import os, subprocess
VERSION = "0.6.1"
APPNAME = "ndn-cxx"
PACKAGE_BUGREPORT = "https://redmine.named-data.net/projects/ndn-cxx"
PACKAGE_URL = "http://named-data.net/doc/ndn-cxx/"
GIT_TAG_PREFIX = "ndn-cxx-"
VERSION = '0.6.1'
APPNAME = 'ndn-cxx'
PACKAGE_BUGREPORT = 'https://redmine.named-data.net/projects/ndn-cxx'
PACKAGE_URL = 'http://named-data.net/doc/ndn-cxx/'
GIT_TAG_PREFIX = 'ndn-cxx-'
def options(opt):
opt.load(['compiler_cxx', 'gnu_dirs', 'c_osx'])
@@ -64,7 +64,7 @@ def configure(conf):
conf.env.enable_shared = conf.options.enable_shared
if not conf.options.enable_shared and not conf.options.enable_static:
conf.fatal("Either static library or shared library must be enabled")
conf.fatal('Either static library or shared library must be enabled')
conf.load(['compiler_cxx', 'gnu_dirs', 'c_osx',
'default-compiler-flags', 'compiler-features', 'type_traits',
@@ -79,7 +79,10 @@ def configure(conf):
conf.check_cxx(lib='pthread', uselib_store='PTHREAD', define_name='HAVE_PTHREAD', mandatory=False)
conf.check_cxx(lib='rt', uselib_store='RT', define_name='HAVE_RT', mandatory=False)
conf.check_cxx(function_name='getpass', header_name='unistd.h', mandatory=False)
conf.check_cxx(msg='Checking for getpass function', mandatory=False,
define_name='HAVE_GETPASS',
fragment='''#include <unistd.h>
int main() { getpass("Enter password"); }''')
if conf.check_cxx(msg='Checking for rtnetlink', define_name='HAVE_RTNETLINK', mandatory=False,
header_name=['linux/if_addr.h', 'linux/if_link.h',
@@ -106,10 +109,9 @@ def configure(conf):
conf.check_boost(lib=USED_BOOST_LIBS, mandatory=True, mt=True)
if conf.env.BOOST_VERSION_NUMBER < 105400:
Logs.error("Minimum required boost version is 1.54.0")
Logs.error("Please upgrade your distribution or install custom boost libraries" +
" (https://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
return
conf.fatal('Minimum required Boost version is 1.54.0\n'
'Please upgrade your distribution or manually install a newer version of Boost'
' (https://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)')
if conf.env['CXX_NAME'] == 'clang' and conf.env.BOOST_VERSION_NUMBER < 105800:
conf.env.append_value('DEFINES', 'BOOST_ASIO_HAS_STD_ARRAY=1') # Bug #4096
@@ -126,7 +128,7 @@ def configure(conf):
conf.check_compiler_flags()
# Loading "late" to prevent tests to be compiled with profiling flags
# Loading "late" to prevent tests from being compiled with profiling flags
conf.load('coverage')
conf.load('sanitizers')
@@ -147,8 +149,8 @@ def configure(conf):
def build(bld):
version(bld)
bld(features="subst",
name='version',
bld(features='subst',
name='version.hpp',
source='src/version.hpp.in',
target='src/version.hpp',
install_path=None,
@@ -164,28 +166,28 @@ def build(bld):
if bld.env['HAVE_OSX_FRAMEWORKS']:
# Need to disable precompiled headers for Objective-C++ code
bld(features=['cxx'],
target="ndn-cxx-mm",
name="ndn-cxx-mm",
target='ndn-cxx-mm',
name='ndn-cxx-mm',
source=bld.path.ant_glob(['src/**/*-osx.mm']),
use='version BOOST OPENSSL SQLITE3 RT PTHREAD OSX_COREFOUNDATION OSX_CORESERVICES OSX_SECURITY OSX_SYSTEMCONFIGURATION OSX_FOUNDATION OSX_COREWLAN',
includes=". src")
includes='src')
libndn_cxx = dict(
target="ndn-cxx",
name="ndn-cxx",
target='ndn-cxx',
source=bld.path.ant_glob('src/**/*.cpp',
excl=['src/**/*-osx.cpp',
'src/**/*-rtnl.cpp',
'src/**/*-sqlite3.cpp']),
features='pch',
headers='src/common-pch.hpp',
use='version ndn-cxx-mm BOOST OPENSSL SQLITE3 RT PTHREAD',
includes=". src",
export_includes="src",
includes='. src',
export_includes='src',
install_path='${LIBDIR}')
if bld.env['HAVE_OSX_FRAMEWORKS']:
libndn_cxx['source'] += bld.path.ant_glob('src/**/*-osx.cpp')
libndn_cxx['use'] += " OSX_COREFOUNDATION OSX_CORESERVICES OSX_SECURITY OSX_SYSTEMCONFIGURATION OSX_FOUNDATION OSX_COREWLAN"
libndn_cxx['use'] += ' OSX_COREFOUNDATION OSX_CORESERVICES OSX_SECURITY OSX_SYSTEMCONFIGURATION OSX_FOUNDATION OSX_COREWLAN'
if bld.env['HAVE_RTNETLINK']:
libndn_cxx['source'] += bld.path.ant_glob('src/**/*-rtnl.cpp')
@@ -194,14 +196,14 @@ def build(bld):
libndn_cxx['source'] += bld.path.ant_glob('src/**/*-sqlite3.cpp')
if bld.env.enable_shared:
bld(features=['pch', 'cxx', 'cxxshlib'],
vnum=VERSION_BASE,
cnum=VERSION_BASE,
**libndn_cxx)
bld.shlib(name='ndn-cxx',
vnum=VERSION_BASE,
cnum=VERSION_BASE,
**libndn_cxx)
if bld.env.enable_static:
bld(features=['pch', 'cxx', 'cxxstlib'],
**libndn_cxx)
bld.stlib(name='ndn-cxx-static' if bld.env.enable_shared else 'ndn-cxx',
**libndn_cxx)
# Prepare flags that should go to pkgconfig file
pkgconfig_libs = []
@@ -221,37 +223,37 @@ def build(bld):
if bld.env['CXXFLAGS_%s' % lib]:
pkgconfig_cxxflags += Utils.to_list(bld.env['CXXFLAGS_%s' % lib])
EXTRA_FRAMEWORKS = ""
EXTRA_FRAMEWORKS = ''
if bld.env['HAVE_OSX_FRAMEWORKS']:
EXTRA_FRAMEWORKS = "-framework CoreFoundation -framework CoreServices -framework Security -framework SystemConfiguration -framework Foundation -framework CoreWLAN"
EXTRA_FRAMEWORKS = '-framework CoreFoundation -framework CoreServices -framework Security -framework SystemConfiguration -framework Foundation -framework CoreWLAN'
def uniq(alist):
seen = set()
return [x for x in alist if x not in seen and not seen.add(x)]
pkconfig = bld(features="subst",
source="libndn-cxx.pc.in",
target="libndn-cxx.pc",
install_path="${LIBDIR}/pkgconfig",
pkconfig = bld(features='subst',
source='libndn-cxx.pc.in',
target='libndn-cxx.pc',
install_path='${LIBDIR}/pkgconfig',
VERSION=VERSION_BASE,
# This probably not the right thing to do, but to simplify life of apps
# that use the library
EXTRA_LIBS=" ".join([('-l%s' % i) for i in uniq(pkgconfig_libs)]),
EXTRA_LDFLAGS=" ".join([('-L%s' % i) for i in uniq(pkgconfig_ldflags)]),
EXTRA_LINKFLAGS=" ".join(uniq(pkgconfig_linkflags)),
EXTRA_INCLUDES=" ".join([('-I%s' % i) for i in uniq(pkgconfig_includes)]),
EXTRA_CXXFLAGS=" ".join(uniq(pkgconfig_cxxflags)),
EXTRA_LIBS=' '.join([('-l%s' % i) for i in uniq(pkgconfig_libs)]),
EXTRA_LDFLAGS=' '.join([('-L%s' % i) for i in uniq(pkgconfig_ldflags)]),
EXTRA_LINKFLAGS=' '.join(uniq(pkgconfig_linkflags)),
EXTRA_INCLUDES=' '.join([('-I%s' % i) for i in uniq(pkgconfig_includes)]),
EXTRA_CXXFLAGS=' '.join(uniq(pkgconfig_cxxflags)),
EXTRA_FRAMEWORKS=EXTRA_FRAMEWORKS)
if bld.env['WITH_TESTS']:
bld.recurse('tests')
if bld.env['WITH_TOOLS']:
bld.recurse("tools")
bld.recurse('tools')
if bld.env['WITH_EXAMPLES']:
bld.recurse("examples")
bld.recurse('examples')
headers = bld.path.ant_glob('src/**/*.hpp',
excl=['src/**/*-osx.hpp',
@@ -267,24 +269,25 @@ def build(bld):
# In case we want to make it optional later
headers += bld.path.ant_glob('src/**/*-sqlite3.hpp', excl='src/**/detail/**/*')
bld.install_files("%s/ndn-cxx" % bld.env['INCLUDEDIR'], headers,
bld.install_files('%s/ndn-cxx' % bld.env['INCLUDEDIR'], headers,
relative_trick=True, cwd=bld.path.find_node('src'))
bld.install_files("%s/ndn-cxx" % bld.env['INCLUDEDIR'],
bld.install_files('%s/ndn-cxx' % bld.env['INCLUDEDIR'],
bld.path.find_resource('src/ndn-cxx-config.hpp'))
bld.install_files("%s/ndn-cxx" % bld.env['INCLUDEDIR'],
bld.install_files('%s/ndn-cxx' % bld.env['INCLUDEDIR'],
bld.path.find_resource('src/version.hpp'))
bld.install_files("${SYSCONFDIR}/ndn", "client.conf.sample")
bld.install_files('${SYSCONFDIR}/ndn', 'client.conf.sample')
if bld.env['SPHINX_BUILD']:
bld(features="sphinx",
builder="man",
outdir="docs/manpages",
config="docs/conf.py",
if bld.env.SPHINX_BUILD:
bld(features='sphinx',
name='manpages',
builder='man',
outdir='docs/manpages',
config='docs/conf.py',
source=bld.path.ant_glob('docs/manpages/**/*.rst'),
install_path="${MANDIR}/",
install_path='${MANDIR}',
VERSION=VERSION)
def docs(bld):
@@ -295,85 +298,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)