blob: 70031187604c3c615936afc42c37e60d2ee95867 [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 Afanasyev97e4cac2014-03-28 10:55:11 -070036 opt.load('boost doxygen coverage unix-socket default-compiler-flags',
37 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''')
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060042
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080043def configure(conf):
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070044 conf.load("compiler_cxx boost gnu_dirs")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080045
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070046 try: conf.load("doxygen")
47 except: pass
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080048
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070049 conf.load('default-compiler-flags')
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070050
51 conf.check_cfg(package='libndn-cpp-dev', args=['--cflags', '--libs'],
52 uselib_store='NDN_CPP', mandatory=True)
Davide Pesavento44deacc2014-02-19 10:48:07 +010053
Alexander Afanasyev82afa1a2014-03-20 16:56:56 -070054 boost_libs = 'system chrono program_options'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080055 if conf.options.with_tests:
56 conf.env['WITH_TESTS'] = 1
Junxiao Shi88884492014-02-15 15:57:43 -070057 conf.define('WITH_TESTS', 1);
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070058 boost_libs += ' unit_test_framework'
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080059
60 conf.check_boost(lib=boost_libs)
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -060061
Alexander Afanasyeve1724c42014-02-26 22:00:54 -080062 if conf.env.BOOST_VERSION_NUMBER < 104800:
Junxiao Shiea48d8b2014-03-16 13:53:47 -070063 Logs.error("Minimum required boost version is 1.48.0")
64 Logs.error("Please upgrade your distribution or install custom boost libraries" +
65 " (http://redmine.named-data.net/projects/nfd/wiki/Boost_FAQ)")
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080066 return
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080067
68 conf.load('unix-socket')
Davide Pesavento44deacc2014-02-19 10:48:07 +010069
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070070 conf.check_cxx(lib='rt', uselib_store='RT',
71 define_name='HAVE_RT', mandatory=False)
72
73 if conf.check_cxx(lib='pcap', uselib_store='PCAP',
74 define_name='HAVE_PCAP', mandatory=False):
Davide Pesavento44deacc2014-02-19 10:48:07 +010075 conf.env['HAVE_PCAP'] = True
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070076
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070077 conf.check_cxx(lib='resolv', uselib_store='RESOLV', mandatory=False)
Alexander Afanasyevefea8fe2014-03-23 00:00:35 -070078
Alexander Afanasyev689569b2014-02-16 20:20:07 -080079 conf.load('coverage')
80
Steve DiBenedettofbb40a82014-03-11 19:40:15 -060081 conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env['SYSCONFDIR'])
Steve DiBenedetto2c2b8892014-02-27 11:46:48 -070082
Junxiao Shi61c5ef32014-01-24 20:59:30 -070083 conf.write_config_header('daemon/config.hpp')
Alexander Afanasyev2aa39622014-01-22 11:51:11 -080084
Junxiao Shi09bf7c42014-01-31 11:10:25 -070085def build(bld):
Alexander Afanasyevc78b1412014-02-19 14:08:26 -080086 nfd_objects = bld(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -070087 target='nfd-objects',
88 features='cxx',
89 source=bld.path.ant_glob(['daemon/**/*.cpp'],
90 excl=['daemon/face/ethernet-*.cpp',
91 'daemon/face/unix-*.cpp',
92 'daemon/main.cpp']),
93 use='BOOST NDN_CPP RT',
94 includes='. daemon',
Junxiao Shi0fcb41e2014-01-24 10:29:43 -070095 )
96
Davide Pesavento44deacc2014-02-19 10:48:07 +010097 if bld.env['HAVE_PCAP']:
98 nfd_objects.source += bld.path.ant_glob('daemon/face/ethernet-*.cpp')
99 nfd_objects.use += ' PCAP'
100
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800101 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100102 nfd_objects.source += bld.path.ant_glob('daemon/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800103
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700104 bld(target='nfd',
105 features='cxx cxxprogram',
106 source='daemon/main.cpp',
107 use='nfd-objects',
108 includes='. daemon',
hilata198cadb2014-02-15 23:46:19 -0600109 )
Steve DiBenedetto84da5bf2014-03-11 14:51:29 -0600110
hilata198cadb2014-02-15 23:46:19 -0600111 for app in bld.path.ant_glob('tools/*.cpp'):
112 bld(features=['cxx', 'cxxprogram'],
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700113 target='bin/%s' % (str(app.change_ext(''))),
114 source=['tools/%s' % (str(app))],
115 includes='. daemon',
116 use='nfd-objects RESOLV',
hilata198cadb2014-02-15 23:46:19 -0600117 )
Davide Pesavento44deacc2014-02-19 10:48:07 +0100118
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800119 # Unit tests
120 if bld.env['WITH_TESTS']:
Junxiao Shiea48d8b2014-03-16 13:53:47 -0700121 unit_tests = bld.program(
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700122 target='unit-tests',
123 features='cxx cxxprogram',
124 source=bld.path.ant_glob(['tests/**/*.cpp'],
125 excl=['tests/face/ethernet.cpp',
126 'tests/face/unix-*.cpp']),
127 use='nfd-objects',
128 includes='. daemon',
129 install_prefix=None,
Alexander Afanasyev2aa39622014-01-22 11:51:11 -0800130 )
131
Davide Pesavento44deacc2014-02-19 10:48:07 +0100132 if bld.env['HAVE_PCAP']:
133 unit_tests.source += bld.path.ant_glob('tests/face/ethernet.cpp')
134
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800135 if bld.env['HAVE_UNIX_SOCKETS']:
Davide Pesavento44deacc2014-02-19 10:48:07 +0100136 unit_tests.source += bld.path.ant_glob('tests/face/unix-*.cpp')
Alexander Afanasyevc78b1412014-02-19 14:08:26 -0800137
Alexander Afanasyev97e4cac2014-03-28 10:55:11 -0700138 bld(features="subst",
139 source='nfd.conf.sample.in',
140 target='nfd.conf.sample',
141 install_path="${SYSCONFDIR}/ndn")
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800142
Chengyu Fanb07788a2014-03-31 12:15:36 -0600143 bld(features='subst',
144 source='tools/nfd-status-http-server.py',
145 target='nfd-status-http-server',
146 install_path="${BINDIR}",
147 chmod=0755)
148
Alexander Afanasyev35fc2b72014-02-13 16:56:21 -0800149def doxygen(bld):
150 if not bld.env.DOXYGEN:
151 bld.fatal("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
152 bld(features="doxygen",
153 doxyfile='docs/doxygen.conf')