blob: a32f7348ff54b6aa83be5130d5b2a8cecfe820ea [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 Afanasyev885a85b2014-04-12 21:01:13 -070042 opt.addUnixOptions(nfdopt)
43 opt.addDependencyOptions(nfdopt, 'libpcap')
44 nfdopt.add_option('--without-libpcap', action='store_true', default=False,
45 dest='without_libpcap',
46 help='''Disable libpcap (Ethernet face support will be disabled)''')
47
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070048 opt.addDependencyOptions(nfdopt, 'librt', '(optional)')
49 opt.addDependencyOptions(nfdopt, 'libresolv', '(optional)')
50
Davide Pesavento1bdef282014-04-08 20:59:50 +020051 nfdopt.add_option('--with-c++11', action='store_true', default=False, dest='use_cxx11',
52 help='''Enable C++11 mode (experimental, may not work)''')
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070053 nfdopt.add_option('--with-tests', action='store_true', default=False,
54 dest='with_tests', help='''Build unit tests''')
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040055 nfdopt.add_option('--with-other-tests', action='store_true', default=False,
56 dest='with_other_tests', help='''Build other tests''')
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060057
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080058def configure(conf):
Alexander Afanasyev49272f72014-04-06 21:49:46 -070059 conf.load("compiler_cxx boost gnu_dirs sphinx_build")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080060
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070061 try: conf.load("doxygen")
62 except: pass
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080063
Alexander Afanasyev49272f72014-04-06 21:49:46 -070064 try: conf.load("sphinx_build")
65 except: pass
66
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070067 conf.load('default-compiler-flags')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070068
69 conf.check_cfg(package='libndn-cpp-dev', args=['--cflags', '--libs'],
70 uselib_store='NDN_CPP', mandatory=True)
Davide Pesavento44deacc2014-02-19 10:48:07 +010071
Alexander Afanasyev82afa1a2014-03-20 16:56:56 -070072 boost_libs = 'system chrono program_options'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080073 if conf.options.with_tests:
74 conf.env['WITH_TESTS'] = 1
Junxiao Shi88884492014-02-15 15:57:43 -070075 conf.define('WITH_TESTS', 1);
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070076 boost_libs += ' unit_test_framework'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080077
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040078 if conf.options.with_other_tests:
79 conf.env['WITH_OTHER_TESTS'] = 1
80
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080081 conf.check_boost(lib=boost_libs)
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060082
Alexander Afanasyeve1724c42014-02-26 22:00:54 -080083 if conf.env.BOOST_VERSION_NUMBER < 104800:
Junxiao Shiea48d8b2014-03-16 13:53:47 -070084 Logs.error("Minimum required boost version is 1.48.0")
85 Logs.error("Please upgrade your distribution or install custom boost libraries" +
86 " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080087 return
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080088
89 conf.load('unix-socket')
Davide Pesavento44deacc2014-02-19 10:48:07 +010090
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070091 conf.checkDependency(name='librt', lib='rt', mandatory=False)
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -070092 conf.checkDependency(name='libresolv', lib='resolv', mandatory=False)
Alexander Afanasyev885a85b2014-04-12 21:01:13 -070093 if not conf.options.without_libpcap:
94 conf.checkDependency(name='libpcap', lib='pcap', mandatory=True,
95 errmsg='not found, but required for Ethernet face support. '
96 'Specify --without-libpcap to disable Ethernet face support.')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070097
Alexander Afanasyev689569b2014-02-16 20:20:07 -080098 conf.load('coverage')
99
Junxiao Shid71d84c2014-04-18 17:22:50 -0700100 conf.find_program('bash', var='BASH')
101
Steve DiBenedettofbb40a82014-03-11 19:40:15 -0600102 conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env['SYSCONFDIR'])
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -0700103
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700104 conf.write_config_header('config.hpp')
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800105
Junxiao Shi09bf7c42014-01-31 11:10:25 -0700106def build(bld):
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700107 core = bld(
108 target='core-objects',
109 name='core-objects',
110 features='cxx',
111 source=bld.path.ant_glob(['core/**/*.cpp']),
112 use='BOOST NDN_CPP LIBRT',
113 includes='. core',
114 export_includes='. core',
115 )
116
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800117 nfd_objects = bld(
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700118 target='daemon-objects',
119 name='daemon-objects',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700120 features='cxx',
121 source=bld.path.ant_glob(['daemon/**/*.cpp'],
122 excl=['daemon/face/ethernet-*.cpp',
123 'daemon/face/unix-*.cpp',
124 'daemon/main.cpp']),
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700125 use='core-objects',
126 includes='daemon',
127 export_includes='daemon',
Junxiao Shi0fcb41e2014-01-24 10:29:43 -0700128 )
129
Alexander Afanasyev885a85b2014-04-12 21:01:13 -0700130 if bld.env['HAVE_LIBPCAP']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100131 nfd_objects.source += bld.path.ant_glob('daemon/face/ethernet-*.cpp')
Alexander Afanasyev5cda2e02014-04-11 13:58:44 -0700132 nfd_objects.use += ' LIBPCAP'
Davide Pesavento44deacc2014-02-19 10:48:07 +0100133
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800134 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100135 nfd_objects.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800136
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700137 bld(target='bin/nfd',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700138 features='cxx cxxprogram',
139 source='daemon/main.cpp',
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700140 use='daemon-objects',
hilata198cadb2014-02-15 23:46:19 -0600141 )
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -0600142
Alexander Afanasyev3ecec502014-04-16 13:42:44 -0700143 rib_objects = bld(
144 target='rib-objects',
145 name='rib-objects',
146 features='cxx',
147 source=bld.path.ant_glob(['rib/**/*.cpp'],
148 excl=['rib/main.cpp']),
149 use='core-objects',
150 )
151
152 bld(target='bin/nrd',
153 features='cxx cxxprogram',
154 source='rib/main.cpp',
155 use='rib-objects',
156 )
157
hilata198cadb2014-02-15 23:46:19 -0600158 for app in bld.path.ant_glob('tools/*.cpp'):
159 bld(features=['cxx', 'cxxprogram'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700160 target='bin/%s' % (str(app.change_ext(''))),
161 source=['tools/%s' % (str(app))],
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700162 use='core-objects LIBRESOLV',
hilata198cadb2014-02-15 23:46:19 -0600163 )
Davide Pesavento44deacc2014-02-19 10:48:07 +0100164
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700165 bld.recurse("tests")
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -0400166
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700167 bld(features="subst",
168 source='nfd.conf.sample.in',
169 target='nfd.conf.sample',
Alexander Afanasyev885a85b2014-04-12 21:01:13 -0700170 install_path="${SYSCONFDIR}/ndn",
171 IF_HAVE_LIBPCAP="" if bld.env['HAVE_LIBPCAP'] else "; ")
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800172
Chengyu Fanb07788a2014-03-31 12:15:36 -0600173 bld(features='subst',
174 source='tools/nfd-status-http-server.py',
Alexander Afanasyev03ea3eb2014-04-17 18:19:06 -0700175 target='bin/nfd-status-http-server',
Chengyu Fanb07788a2014-03-31 12:15:36 -0600176 install_path="${BINDIR}",
177 chmod=0755)
178
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700179 if bld.env['SPHINX_BUILD']:
180 bld(features="sphinx",
181 builder="man",
182 outdir="docs/manpages",
183 config="docs/conf.py",
184 source=bld.path.ant_glob('docs/manpages/**/*.rst'),
185 install_path="${MANDIR}/")
186
Junxiao Shid71d84c2014-04-18 17:22:50 -0700187 for script in bld.path.ant_glob('tools/*.sh'):
188 bld(features='subst',
189 source='tools/%s' % (str(script)),
190 target='bin/%s' % (str(script.change_ext(''))),
191 install_path="${BINDIR}",
192 chmod=0755)
193
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700194def docs(bld):
195 from waflib import Options
196 Options.commands = ['doxygen', 'sphinx'] + Options.commands
197
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800198def doxygen(bld):
199 if not bld.env.DOXYGEN:
200 bld.fatal("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
201 bld(features="doxygen",
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700202 doxyfile='docs/doxygen.conf',
203 install_path=None)
204
205def sphinx(bld):
206 bld(features="sphinx",
207 outdir="docs",
208 source=bld.path.ant_glob('docs/**/*.rst'),
209 config="docs/conf.py",
210 install_path=None)