blob: e6a986e4fe17f3014030677525ac5a6dfc3a3ee5 [file] [log] [blame]
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -07001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -07002
Davide Pesaventob545aac2017-09-22 23:54:10 -04003import os
Davide Pesavento399f4d92023-09-17 14:03:51 -04004from waflib import Utils
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -07005
Davide Pesavento1359cc32019-11-09 15:25:09 -05006VERSION = '0.1'
7APPNAME = 'ndn-repo-ng'
8
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -07009def options(opt):
Davide Pesaventof43a03e2018-02-21 22:04:21 -050010 opt.load(['compiler_cxx', 'gnu_dirs'])
Davide Pesavento333e3eb2021-10-12 19:30:51 -040011 opt.load(['default-compiler-flags',
12 'coverage', 'sanitizers', 'boost', 'sqlite3'],
Davide Pesaventob545aac2017-09-22 23:54:10 -040013 tooldir=['.waf-tools'])
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070014
Davide Pesavento1359cc32019-11-09 15:25:09 -050015 optgrp = opt.add_option_group('Repo-ng Options')
16 optgrp.add_option('--with-examples', action='store_true', default=False,
17 help='Build examples')
18 optgrp.add_option('--with-tests', action='store_true', default=False,
19 help='Build unit tests')
20 optgrp.add_option('--without-tools', action='store_false', default=True, dest='with_tools',
21 help='Do not build tools')
Wentao Shangbcbc9292014-04-28 21:17:06 -070022
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070023def configure(conf):
Davide Pesaventof43a03e2018-02-21 22:04:21 -050024 conf.load(['compiler_cxx', 'gnu_dirs',
25 'default-compiler-flags', 'boost', 'sqlite3'])
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070026
Davide Pesavento333e3eb2021-10-12 19:30:51 -040027 conf.env.WITH_EXAMPLES = conf.options.with_examples
28 conf.env.WITH_TESTS = conf.options.with_tests
29 conf.env.WITH_TOOLS = conf.options.with_tools
Wentao Shangbcbc9292014-04-28 21:17:06 -070030
Davide Pesavento1d484532022-08-19 22:08:31 -040031 # Prefer pkgconf if it's installed, because it gives more correct results
32 # on Fedora/CentOS/RHEL/etc. See https://bugzilla.redhat.com/show_bug.cgi?id=1953348
33 # Store the result in env.PKGCONFIG, which is the variable used inside check_cfg()
34 conf.find_program(['pkgconf', 'pkg-config'], var='PKGCONFIG')
35
Davide Pesavento9c0bd8d2022-03-14 16:48:12 -040036 pkg_config_path = os.environ.get('PKG_CONFIG_PATH', f'{conf.env.LIBDIR}/pkgconfig')
Davide Pesaventoe9b09b82023-01-19 13:30:07 -050037 conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.8.1', '--cflags', '--libs'],
Davide Pesavento9c0bd8d2022-03-14 16:48:12 -040038 uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
Davide Pesavento1359cc32019-11-09 15:25:09 -050039
40 conf.check_sqlite3()
41
Davide Pesavento399f4d92023-09-17 14:03:51 -040042 conf.check_boost(lib='filesystem program_options', mt=True)
Davide Pesavento1d484532022-08-19 22:08:31 -040043
Davide Pesavento399f4d92023-09-17 14:03:51 -040044 if conf.env.WITH_TESTS:
45 conf.check_boost(lib='unit_test_framework', mt=True, uselib_store='BOOST_TESTS')
46
47 if conf.env.WITH_TOOLS:
48 conf.check_boost(lib='iostreams', mt=True, uselib_store='BOOST_TOOLS')
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070049
Davide Pesaventof43a03e2018-02-21 22:04:21 -050050 conf.check_compiler_flags()
51
Davide Pesaventob545aac2017-09-22 23:54:10 -040052 # Loading "late" to prevent tests from being compiled with profiling flags
Alexander Afanasyevf34a3552017-08-13 21:17:05 -040053 conf.load('coverage')
Alexander Afanasyevf34a3552017-08-13 21:17:05 -040054 conf.load('sanitizers')
55
Davide Pesavento333e3eb2021-10-12 19:30:51 -040056 conf.define_cond('HAVE_TESTS', conf.env.WITH_TESTS)
Davide Pesaventoed2f4762019-01-25 00:40:46 -050057 conf.define_cond('DISABLE_SQLITE3_FS_LOCKING', not conf.options.with_sqlite_locking)
Davide Pesavento399f4d92023-09-17 14:03:51 -040058 conf.define('DEFAULT_CONFIG_FILE', f'{conf.env.SYSCONFDIR}/ndn/repo-ng.conf')
Alexander Afanasyev39d98072014-05-04 12:46:29 -070059 conf.write_config_header('src/config.hpp')
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070060
61def build(bld):
Davide Pesavento399f4d92023-09-17 14:03:51 -040062 bld.objects(
63 target='repo-objects',
64 source=bld.path.ant_glob('src/**/*.cpp', excl=['src/main.cpp']),
65 use='BOOST NDN_CXX SQLITE3',
66 includes='src',
67 export_includes='src')
Alexander Afanasyev3fd14f02014-03-26 14:34:39 -070068
Davide Pesavento399f4d92023-09-17 14:03:51 -040069 bld.program(
70 name='ndn-repo-ng',
71 target='bin/ndn-repo-ng',
72 source='src/main.cpp',
73 use='repo-objects')
Davide Pesaventoe4b74bd2022-03-09 18:56:37 -050074
75 if bld.env.WITH_TESTS:
76 bld.recurse('tests')
77
Davide Pesavento399f4d92023-09-17 14:03:51 -040078 if bld.env.WITH_TOOLS:
79 bld.recurse('tools')
80
Davide Pesaventoe4b74bd2022-03-09 18:56:37 -050081 if bld.env.WITH_EXAMPLES:
82 bld.recurse('examples')
Weiqi Shi68f2cf62014-08-26 12:35:45 -070083
Davide Pesavento399f4d92023-09-17 14:03:51 -040084 # Install sample config
Shuo Chen478204c2014-03-18 18:27:04 -070085 bld.install_files('${SYSCONFDIR}/ndn', 'repo-ng.conf.sample')
Davide Pesaventodf0bd342019-01-25 01:22:45 -050086
87 if Utils.unversioned_sys_platform() == 'linux':
88 bld(features='subst',
Davide Pesavento399f4d92023-09-17 14:03:51 -040089 name='systemd-units',
Davide Pesaventodf0bd342019-01-25 01:22:45 -050090 source='systemd/repo-ng.service.in',
91 target='systemd/repo-ng.service')
Davide Pesavento43fafd52023-09-19 16:28:37 -040092
93def dist(ctx):
94 ctx.algo = 'tar.xz'
95
96def distcheck(ctx):
97 ctx.algo = 'tar.xz'