blob: 96810891cb7f3456b092fcfb48960959fc8acd55 [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')
Davide Pesavento1bdef282014-04-08 20:59:50 +020040 nfdopt.add_option('--with-c++11', action='store_true', default=False, dest='use_cxx11',
41 help='''Enable C++11 mode (experimental, may not work)''')
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070042 nfdopt.add_option('--with-tests', action='store_true', default=False,
43 dest='with_tests', help='''Build unit tests''')
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040044 nfdopt.add_option('--with-other-tests', action='store_true', default=False,
45 dest='with_other_tests', help='''Build other tests''')
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060046
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080047def configure(conf):
Alexander Afanasyev49272f72014-04-06 21:49:46 -070048 conf.load("compiler_cxx boost gnu_dirs sphinx_build")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080049
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070050 try: conf.load("doxygen")
51 except: pass
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080052
Alexander Afanasyev49272f72014-04-06 21:49:46 -070053 try: conf.load("sphinx_build")
54 except: pass
55
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070056 conf.load('default-compiler-flags')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070057
58 conf.check_cfg(package='libndn-cpp-dev', args=['--cflags', '--libs'],
59 uselib_store='NDN_CPP', mandatory=True)
Davide Pesavento44deacc2014-02-19 10:48:07 +010060
Alexander Afanasyev82afa1a2014-03-20 16:56:56 -070061 boost_libs = 'system chrono program_options'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080062 if conf.options.with_tests:
63 conf.env['WITH_TESTS'] = 1
Junxiao Shi88884492014-02-15 15:57:43 -070064 conf.define('WITH_TESTS', 1);
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070065 boost_libs += ' unit_test_framework'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080066
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040067 if conf.options.with_other_tests:
68 conf.env['WITH_OTHER_TESTS'] = 1
69
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080070 conf.check_boost(lib=boost_libs)
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060071
Alexander Afanasyeve1724c42014-02-26 22:00:54 -080072 if conf.env.BOOST_VERSION_NUMBER < 104800:
Junxiao Shiea48d8b2014-03-16 13:53:47 -070073 Logs.error("Minimum required boost version is 1.48.0")
74 Logs.error("Please upgrade your distribution or install custom boost libraries" +
75 " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080076 return
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080077
78 conf.load('unix-socket')
Davide Pesavento44deacc2014-02-19 10:48:07 +010079
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070080 conf.check_cxx(lib='rt', uselib_store='RT',
81 define_name='HAVE_RT', mandatory=False)
82
83 if conf.check_cxx(lib='pcap', uselib_store='PCAP',
84 define_name='HAVE_PCAP', mandatory=False):
Davide Pesavento44deacc2014-02-19 10:48:07 +010085 conf.env['HAVE_PCAP'] = True
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070086
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070087 conf.check_cxx(lib='resolv', uselib_store='RESOLV', mandatory=False)
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070088
Alexander Afanasyev689569b2014-02-16 20:20:07 -080089 conf.load('coverage')
90
Steve DiBenedettofbb40a82014-03-11 19:40:15 -060091 conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env['SYSCONFDIR'])
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070092
Junxiao Shi61c5ef32014-01-24 20:59:30 -070093 conf.write_config_header('daemon/config.hpp')
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080094
Junxiao Shi09bf7c42014-01-31 11:10:25 -070095def build(bld):
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080096 nfd_objects = bld(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070097 target='nfd-objects',
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -040098 name='nfd-objects',
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070099 features='cxx',
100 source=bld.path.ant_glob(['daemon/**/*.cpp'],
101 excl=['daemon/face/ethernet-*.cpp',
102 'daemon/face/unix-*.cpp',
103 'daemon/main.cpp']),
104 use='BOOST NDN_CPP RT',
105 includes='. daemon',
Junxiao Shi0fcb41e2014-01-24 10:29:43 -0700106 )
107
Davide Pesavento44deacc2014-02-19 10:48:07 +0100108 if bld.env['HAVE_PCAP']:
109 nfd_objects.source += bld.path.ant_glob('daemon/face/ethernet-*.cpp')
110 nfd_objects.use += ' PCAP'
111
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800112 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100113 nfd_objects.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800114
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700115 bld(target='nfd',
116 features='cxx cxxprogram',
117 source='daemon/main.cpp',
118 use='nfd-objects',
119 includes='. daemon',
hilata198cadb2014-02-15 23:46:19 -0600120 )
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -0600121
hilata198cadb2014-02-15 23:46:19 -0600122 for app in bld.path.ant_glob('tools/*.cpp'):
123 bld(features=['cxx', 'cxxprogram'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700124 target='bin/%s' % (str(app.change_ext(''))),
125 source=['tools/%s' % (str(app))],
126 includes='. daemon',
127 use='nfd-objects RESOLV',
hilata198cadb2014-02-15 23:46:19 -0600128 )
Davide Pesavento44deacc2014-02-19 10:48:07 +0100129
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800130 # Unit tests
131 if bld.env['WITH_TESTS']:
Junxiao Shiea48d8b2014-03-16 13:53:47 -0700132 unit_tests = bld.program(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700133 target='unit-tests',
134 features='cxx cxxprogram',
135 source=bld.path.ant_glob(['tests/**/*.cpp'],
136 excl=['tests/face/ethernet.cpp',
137 'tests/face/unix-*.cpp']),
138 use='nfd-objects',
139 includes='. daemon',
140 install_prefix=None,
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800141 )
142
Davide Pesavento44deacc2014-02-19 10:48:07 +0100143 if bld.env['HAVE_PCAP']:
144 unit_tests.source += bld.path.ant_glob('tests/face/ethernet.cpp')
145
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800146 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100147 unit_tests.source += bld.path.ant_glob('tests/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800148
Ilya Moiseenko96b80bb2014-04-05 20:53:27 -0400149 if bld.env['WITH_OTHER_TESTS']:
150 bld.recurse("tests-other")
151
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700152 bld(features="subst",
153 source='nfd.conf.sample.in',
154 target='nfd.conf.sample',
155 install_path="${SYSCONFDIR}/ndn")
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800156
Chengyu Fanb07788a2014-03-31 12:15:36 -0600157 bld(features='subst',
158 source='tools/nfd-status-http-server.py',
159 target='nfd-status-http-server',
160 install_path="${BINDIR}",
161 chmod=0755)
162
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700163 if bld.env['SPHINX_BUILD']:
164 bld(features="sphinx",
165 builder="man",
166 outdir="docs/manpages",
167 config="docs/conf.py",
168 source=bld.path.ant_glob('docs/manpages/**/*.rst'),
169 install_path="${MANDIR}/")
170
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800171def doxygen(bld):
172 if not bld.env.DOXYGEN:
173 bld.fatal("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
174 bld(features="doxygen",
Alexander Afanasyev49272f72014-04-06 21:49:46 -0700175 doxyfile='docs/doxygen.conf',
176 install_path=None)
177
178def sphinx(bld):
179 bld(features="sphinx",
180 outdir="docs",
181 source=bld.path.ant_glob('docs/**/*.rst'),
182 config="docs/conf.py",
183 install_path=None)