blob: 9eab3b16b546cb21bbed44fdeffd32958b2367ac [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):
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070035 opt.load('compiler_cxx gnu_dirs')
Alexander Afanasyev49272f72014-04-06 21:49:46 -070036 opt.load('boost doxygen coverage unix-socket default-compiler-flags sphinx_build',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070037 tooldir=['.waf-tools'])
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080038
39 nfdopt = opt.add_option_group('NFD Options')
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070040 nfdopt.add_option('--with-tests', action='store_true', default=False,
41 dest='with_tests', help='''Build unit tests''')
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040042 nfdopt.add_option('--with-other-tests', action='store_true', default=False,
43 dest='with_other_tests', help='''Build other tests''')
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060044
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080045def configure(conf):
Alexander Afanasyev49272f72014-04-06 21:49:46 -070046 conf.load("compiler_cxx boost gnu_dirs sphinx_build")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080047
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070048 try: conf.load("doxygen")
49 except: pass
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080050
Alexander Afanasyev49272f72014-04-06 21:49:46 -070051 try: conf.load("sphinx_build")
52 except: pass
53
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070054 conf.load('default-compiler-flags')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070055
56 conf.check_cfg(package='libndn-cpp-dev', args=['--cflags', '--libs'],
57 uselib_store='NDN_CPP', mandatory=True)
Davide Pesavento44deacc2014-02-19 10:48:07 +010058
Alexander Afanasyev82afa1a2014-03-20 16:56:56 -070059 boost_libs = 'system chrono program_options'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080060 if conf.options.with_tests:
61 conf.env['WITH_TESTS'] = 1
Junxiao Shi88884492014-02-15 15:57:43 -070062 conf.define('WITH_TESTS', 1);
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070063 boost_libs += ' unit_test_framework'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080064
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040065 if conf.options.with_other_tests:
66 conf.env['WITH_OTHER_TESTS'] = 1
67
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080068 conf.check_boost(lib=boost_libs)
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060069
Alexander Afanasyeve1724c42014-02-26 22:00:54 -080070 if conf.env.BOOST_VERSION_NUMBER < 104800:
Junxiao Shiea48d8b2014-03-16 13:53:47 -070071 Logs.error("Minimum required boost version is 1.48.0")
72 Logs.error("Please upgrade your distribution or install custom boost libraries" +
73 " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080074 return
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080075
76 conf.load('unix-socket')
Davide Pesavento44deacc2014-02-19 10:48:07 +010077
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070078 conf.check_cxx(lib='rt', uselib_store='RT',
79 define_name='HAVE_RT', mandatory=False)
80
81 if conf.check_cxx(lib='pcap', uselib_store='PCAP',
82 define_name='HAVE_PCAP', mandatory=False):
Davide Pesavento44deacc2014-02-19 10:48:07 +010083 conf.env['HAVE_PCAP'] = True
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070084
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070085 conf.check_cxx(lib='resolv', uselib_store='RESOLV', mandatory=False)
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070086
Alexander Afanasyev689569b2014-02-16 20:20:07 -080087 conf.load('coverage')
88
Steve DiBenedettofbb40a82014-03-11 19:40:15 -060089 conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env['SYSCONFDIR'])
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070090
Junxiao Shi61c5ef32014-01-24 20:59:30 -070091 conf.write_config_header('daemon/config.hpp')
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080092
Junxiao Shi09bf7c42014-01-31 11:10:25 -070093def build(bld):
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080094 nfd_objects = bld(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070095 target='nfd-objects',
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040096 name='nfd-objects',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070097 features='cxx',
98 source=bld.path.ant_glob(['daemon/**/*.cpp'],
99 excl=['daemon/face/ethernet-*.cpp',
100 'daemon/face/unix-*.cpp',
101 'daemon/main.cpp']),
102 use='BOOST NDN_CPP RT',
103 includes='. daemon',
Junxiao Shi0fcb41e2014-01-24 10:29:43 -0700104 )
105
Davide Pesavento44deacc2014-02-19 10:48:07 +0100106 if bld.env['HAVE_PCAP']:
107 nfd_objects.source += bld.path.ant_glob('daemon/face/ethernet-*.cpp')
108 nfd_objects.use += ' PCAP'
109
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800110 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100111 nfd_objects.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800112
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700113 bld(target='nfd',
114 features='cxx cxxprogram',
115 source='daemon/main.cpp',
116 use='nfd-objects',
117 includes='. daemon',
hilata198cadb2014-02-15 23:46:19 -0600118 )
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -0600119
hilata198cadb2014-02-15 23:46:19 -0600120 for app in bld.path.ant_glob('tools/*.cpp'):
121 bld(features=['cxx', 'cxxprogram'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700122 target='bin/%s' % (str(app.change_ext(''))),
123 source=['tools/%s' % (str(app))],
124 includes='. daemon',
125 use='nfd-objects RESOLV',
hilata198cadb2014-02-15 23:46:19 -0600126 )
Davide Pesavento44deacc2014-02-19 10:48:07 +0100127
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800128 # Unit tests
129 if bld.env['WITH_TESTS']:
Junxiao Shiea48d8b2014-03-16 13:53:47 -0700130 unit_tests = bld.program(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700131 target='unit-tests',
132 features='cxx cxxprogram',
133 source=bld.path.ant_glob(['tests/**/*.cpp'],
134 excl=['tests/face/ethernet.cpp',
135 'tests/face/unix-*.cpp']),
136 use='nfd-objects',
137 includes='. daemon',
138 install_prefix=None,
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800139 )
140
Davide Pesavento44deacc2014-02-19 10:48:07 +0100141 if bld.env['HAVE_PCAP']:
142 unit_tests.source += bld.path.ant_glob('tests/face/ethernet.cpp')
143
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800144 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100145 unit_tests.source += bld.path.ant_glob('tests/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800146
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -0400147 if bld.env['WITH_OTHER_TESTS']:
148 bld.recurse("tests-other")
149
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700150 bld(features="subst",
151 source='nfd.conf.sample.in',
152 target='nfd.conf.sample',
153 install_path="${SYSCONFDIR}/ndn")
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800154
Chengyu Fanb07788a2014-03-31 12:15:36 -0600155 bld(features='subst',
156 source='tools/nfd-status-http-server.py',
157 target='nfd-status-http-server',
158 install_path="${BINDIR}",
159 chmod=0755)
160
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700161 if bld.env['SPHINX_BUILD']:
162 bld(features="sphinx",
163 builder="man",
164 outdir="docs/manpages",
165 config="docs/conf.py",
166 source=bld.path.ant_glob('docs/manpages/**/*.rst'),
167 install_path="${MANDIR}/")
168
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800169def doxygen(bld):
170 if not bld.env.DOXYGEN:
171 bld.fatal("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
172 bld(features="doxygen",
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700173 doxyfile='docs/doxygen.conf',
174 install_path=None)
175
176def sphinx(bld):
177 bld(features="sphinx",
178 outdir="docs",
179 source=bld.path.ant_glob('docs/**/*.rst'),
180 config="docs/conf.py",
181 install_path=None)