blob: ef4eade06bbd852cd916df327bda222c47cb1fa6 [file] [log] [blame]
Alexander Afanasyev2aa39622014-01-22 11:51:11 -08001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -07002
3"""
4Copyright (c) 2014 Regents of the University of California,
5 Arizona Board of Regents,
6 Colorado State University,
7 University Pierre & Marie Curie, Sorbonne University,
8 Washington University in St. Louis,
9 Beijing Institute of Technology
10
11This file is part of NFD (Named Data Networking Forwarding Daemon).
12See AUTHORS.md for complete list of NFD authors and contributors.
13
14NFD is free software: you can redistribute it and/or modify it under the terms
15of the GNU General Public License as published by the Free Software Foundation,
16either version 3 of the License, or (at your option) any later version.
17
18NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20PURPOSE. See the GNU General Public License for more details.
21
22You should have received a copy of the GNU General Public License along with
23NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24"""
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080025
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070026VERSION = '0.1.0'
27APPNAME = "nfd"
28BUGREPORT = "http://redmine.named-data.net/projects/nfd"
29URL = "https://github.com/named-data/NFD"
30
31from waflib import Logs
hilata198cadb2014-02-15 23:46:19 -060032import os
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080033
34def options(opt):
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070035 opt.load(['compiler_cxx', 'gnu_dirs'])
36 opt.load(['boost', 'unix-socket', 'dependency-checker',
37 'default-compiler-flags', 'coverage',
38 'doxygen', 'sphinx_build'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070039 tooldir=['.waf-tools'])
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080040
41 nfdopt = opt.add_option_group('NFD Options')
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070042 opt.addDependencyOptions(nfdopt, 'libpcap', '(optional)')
43 opt.addDependencyOptions(nfdopt, 'librt', '(optional)')
44 opt.addDependencyOptions(nfdopt, 'libresolv', '(optional)')
45
Davide Pesavento1bdef282014-04-08 20:59:50 +020046 nfdopt.add_option('--with-c++11', action='store_true', default=False, dest='use_cxx11',
47 help='''Enable C++11 mode (experimental, may not work)''')
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070048 nfdopt.add_option('--with-tests', action='store_true', default=False,
49 dest='with_tests', help='''Build unit tests''')
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040050 nfdopt.add_option('--with-other-tests', action='store_true', default=False,
51 dest='with_other_tests', help='''Build other tests''')
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060052
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080053def configure(conf):
Alexander Afanasyev49272f72014-04-06 21:49:46 -070054 conf.load("compiler_cxx boost gnu_dirs sphinx_build")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080055
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070056 try: conf.load("doxygen")
57 except: pass
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080058
Alexander Afanasyev49272f72014-04-06 21:49:46 -070059 try: conf.load("sphinx_build")
60 except: pass
61
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070062 conf.load('default-compiler-flags')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070063
64 conf.check_cfg(package='libndn-cpp-dev', args=['--cflags', '--libs'],
65 uselib_store='NDN_CPP', mandatory=True)
Davide Pesavento44deacc2014-02-19 10:48:07 +010066
Alexander Afanasyev82afa1a2014-03-20 16:56:56 -070067 boost_libs = 'system chrono program_options'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080068 if conf.options.with_tests:
69 conf.env['WITH_TESTS'] = 1
Junxiao Shi88884492014-02-15 15:57:43 -070070 conf.define('WITH_TESTS', 1);
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070071 boost_libs += ' unit_test_framework'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080072
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040073 if conf.options.with_other_tests:
74 conf.env['WITH_OTHER_TESTS'] = 1
75
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080076 conf.check_boost(lib=boost_libs)
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060077
Alexander Afanasyeve1724c42014-02-26 22:00:54 -080078 if conf.env.BOOST_VERSION_NUMBER < 104800:
Junxiao Shiea48d8b2014-03-16 13:53:47 -070079 Logs.error("Minimum required boost version is 1.48.0")
80 Logs.error("Please upgrade your distribution or install custom boost libraries" +
81 " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080082 return
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080083
84 conf.load('unix-socket')
Davide Pesavento44deacc2014-02-19 10:48:07 +010085
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070086 conf.checkDependency(name='librt', lib='rt', mandatory=False)
87 conf.checkDependency(name='libpcap', lib='pcap', mandatory=False)
88 conf.checkDependency(name='libresolv', lib='resolv', mandatory=False)
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070089
Alexander Afanasyev689569b2014-02-16 20:20:07 -080090 conf.load('coverage')
91
Steve DiBenedettofbb40a82014-03-11 19:40:15 -060092 conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env['SYSCONFDIR'])
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070093
Junxiao Shi61c5ef32014-01-24 20:59:30 -070094 conf.write_config_header('daemon/config.hpp')
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080095
Junxiao Shi09bf7c42014-01-31 11:10:25 -070096def build(bld):
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080097 nfd_objects = bld(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070098 target='nfd-objects',
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040099 name='nfd-objects',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700100 features='cxx',
101 source=bld.path.ant_glob(['daemon/**/*.cpp'],
102 excl=['daemon/face/ethernet-*.cpp',
103 'daemon/face/unix-*.cpp',
104 'daemon/main.cpp']),
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -0700105 use='BOOST NDN_CPP LIBRT',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700106 includes='. daemon',
Junxiao Shi0fcb41e2014-01-24 10:29:43 -0700107 )
108
Davide Pesavento44deacc2014-02-19 10:48:07 +0100109 if bld.env['HAVE_PCAP']:
110 nfd_objects.source += bld.path.ant_glob('daemon/face/ethernet-*.cpp')
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -0700111 nfd_objects.use += ' LIBPCAP'
Davide Pesavento44deacc2014-02-19 10:48:07 +0100112
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800113 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100114 nfd_objects.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800115
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700116 bld(target='nfd',
117 features='cxx cxxprogram',
118 source='daemon/main.cpp',
119 use='nfd-objects',
120 includes='. daemon',
hilata198cadb2014-02-15 23:46:19 -0600121 )
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -0600122
hilata198cadb2014-02-15 23:46:19 -0600123 for app in bld.path.ant_glob('tools/*.cpp'):
124 bld(features=['cxx', 'cxxprogram'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700125 target='bin/%s' % (str(app.change_ext(''))),
126 source=['tools/%s' % (str(app))],
127 includes='. daemon',
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -0700128 use='nfd-objects LIBRESOLV',
hilata198cadb2014-02-15 23:46:19 -0600129 )
Davide Pesavento44deacc2014-02-19 10:48:07 +0100130
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800131 # Unit tests
132 if bld.env['WITH_TESTS']:
Junxiao Shiea48d8b2014-03-16 13:53:47 -0700133 unit_tests = bld.program(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700134 target='unit-tests',
135 features='cxx cxxprogram',
136 source=bld.path.ant_glob(['tests/**/*.cpp'],
137 excl=['tests/face/ethernet.cpp',
138 'tests/face/unix-*.cpp']),
139 use='nfd-objects',
140 includes='. daemon',
141 install_prefix=None,
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800142 )
143
Davide Pesavento44deacc2014-02-19 10:48:07 +0100144 if bld.env['HAVE_PCAP']:
145 unit_tests.source += bld.path.ant_glob('tests/face/ethernet.cpp')
146
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800147 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100148 unit_tests.source += bld.path.ant_glob('tests/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800149
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -0400150 if bld.env['WITH_OTHER_TESTS']:
151 bld.recurse("tests-other")
152
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700153 bld(features="subst",
154 source='nfd.conf.sample.in',
155 target='nfd.conf.sample',
156 install_path="${SYSCONFDIR}/ndn")
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800157
Chengyu Fanb07788a2014-03-31 12:15:36 -0600158 bld(features='subst',
159 source='tools/nfd-status-http-server.py',
160 target='nfd-status-http-server',
161 install_path="${BINDIR}",
162 chmod=0755)
163
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700164 if bld.env['SPHINX_BUILD']:
165 bld(features="sphinx",
166 builder="man",
167 outdir="docs/manpages",
168 config="docs/conf.py",
169 source=bld.path.ant_glob('docs/manpages/**/*.rst'),
170 install_path="${MANDIR}/")
171
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800172def doxygen(bld):
173 if not bld.env.DOXYGEN:
174 bld.fatal("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
175 bld(features="doxygen",
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700176 doxyfile='docs/doxygen.conf',
177 install_path=None)
178
179def sphinx(bld):
180 bld(features="sphinx",
181 outdir="docs",
182 source=bld.path.ant_glob('docs/**/*.rst'),
183 config="docs/conf.py",
184 install_path=None)