## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-

def build(bld):
    module = bld.create_ns3_module('NDNabstraction', ['internet', 'config-store', 'tools', 'point-to-point', 'wifi', 'mobility', 'applications', 'csma'])
    module.includes = '.'
    module.source = [
        'model/ndnabstraction-header.cc',
        'model/ccn_charbuf.cc',
        'model/ccn_name_util.cc',
        'model/ccn_coding.cc',
        'model/ccn_indexbuf.cc',
        'model/ccn_random.cc',
        'model/ccn_buf_decoder.cc',
        'model/ccn_buf_encoder.cc',
        'model/ndn_face.cc',
        'model/ndn_interestpacket.cc',
        'model/ndn_contentpacket.cc',
        'model/ndn_timeoutheader.cc',
        'model/ndn_nonceheader.cc',
        'model/ndn_namebuilder.cc',
        'model/ndn_stupidinterestgenerator.cc',
        'helper/ndnabstraction-helper.cc',
        'helper/ndn_stupidinterestgenerator_helper.cc',
        ]

    module_test = bld.create_ns3_module_test_library('NDNabstraction')
    module_test.source = [
        'test/ndnabstraction-basictest.cc',
		]

    headers = bld.new_task_gen('ns3header')
    headers.module = 'NDNabstraction'
    headers.source = [
        'model/ndnabstraction-header.h',
        'model/ccn_charbuf.h',
        'model/ccn_name_util.h',
        'model/ccn_coding.h',
        'model/ccn_indexbuf.h',
        'model/ccn_random.h',
        'model/ccn_ccn.h',
        'model/ndn_face.h',
        'model/ndn_interestpacket.h',
        'model/ndn_contentpacket.h',
        'model/ndn_timeoutheader.h',
        'model/ndn_nonceheader.h',
        'model/ndn_namebuilder.h',
        'model/ndn_stupidinterestgenerator.h',
        'helper/ndnabstraction-helper.h',
        'helper/ndn_stupidinterestgenerator_helper.h',
        ]


    if bld.env['ENABLE_OPENSSL']:
        module.uselib      = 'OPENSSL'

    if bld.env['ENABLE_EXAMPLES']:
        bld.add_subdirs('examples')

    #bld.ns3_python_bindings()
