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

def build(bld):
    # This may be necessary for visualizer to work
    all_modules = [mod[len("ns3-"):] for mod in bld.env['NS3_ENABLED_MODULES']]

    obj = bld.create_ns3_program('ndn-simple', all_modules)
    obj.source = 'ndn-simple.cc'

    obj = bld.create_ns3_program('ndn-csma', all_modules)
    obj.source = 'ndn-csma.cc'

    obj = bld.create_ns3_program('ndn-grid', all_modules)
    obj.source = 'ndn-grid.cc'

    obj = bld.create_ns3_program('ndn-zipf-mandelbrot', all_modules)
    obj.source = 'ndn-zipf-mandelbrot.cc'


    obj = bld.create_ns3_program('ndn-simple-with-content-freshness', all_modules)
    obj.source = ['ndn-simple-with-content-freshness.cc',
                  'custom-apps/dumb-requester.cc']

    obj = bld.create_ns3_program('ndn-simple-with-custom-app', all_modules)
    obj.source = ['ndn-simple-with-custom-app.cc',
                  'custom-apps/custom-app.cc',
                  'custom-apps/hijacker.cc']

    if 'topology' in bld.env['NDN_plugins']:
        obj = bld.create_ns3_program('ndn-grid-topo-plugin', all_modules)
        obj.source = 'ndn-grid-topo-plugin.cc'

        obj = bld.create_ns3_program('ndn-grid-topo-plugin-loss', all_modules)
        obj.source = 'ndn-grid-topo-plugin-loss.cc'

        obj = bld.create_ns3_program('ndn-grid-topo-plugin-red-queues', all_modules)
        obj.source = 'ndn-grid-topo-plugin-red-queues.cc'

        obj = bld.create_ns3_program('ndn-congestion-topo-plugin', all_modules)
        obj.source = 'ndn-congestion-topo-plugin.cc'

        obj = bld.create_ns3_program('ndn-congestion-alt-topo-plugin', all_modules)
        obj.source = [
            'custom-strategies/custom-strategy.cc',
            'ndn-congestion-alt-topo-plugin.cc'
            ]

        obj = bld.create_ns3_program('ndn-tree-tracers', all_modules)
        obj.source = 'ndn-tree-tracers.cc'

        obj = bld.create_ns3_program('ndn-tree-cs-tracers', all_modules)
        obj.source = 'ndn-tree-cs-tracers.cc'

        obj = bld.create_ns3_program('ndn-tree-app-delay-tracer', all_modules)
        obj.source = 'ndn-tree-app-delay-tracer.cc'

        obj = bld.create_ns3_program('ndn-tree-with-l2tracer', all_modules)
        obj.source = 'ndn-tree-with-l2tracer.cc'

        obj = bld.create_ns3_program('ndn-triangle-calculate-routes', all_modules)
        obj.source = 'ndn-triangle-calculate-routes.cc'

    obj = bld.create_ns3_program('ndn-simple-pit-policies', all_modules)
    obj.source = 'ndn-simple-pit-policies.cc'

    obj = bld.create_ns3_program('ndn-simple-with-different-sizes-content-store', all_modules)
    obj.source = 'ndn-simple-with-different-sizes-content-store.cc'

    obj = bld.create_ns3_program('ndn-simple-with-cs-lfu', all_modules)
    obj.source = 'ndn-simple-with-cs-lfu.cc'

    obj = bld.create_ns3_program('ndn-simple-with-pcap', all_modules)
    obj.source = 'ndn-simple-with-pcap.cc'

    obj = bld.create_ns3_program('ndn-simple-with-pit-operation-stats', all_modules)
    obj.source = 'ndn-simple-with-pit-operation-stats.cc'

    obj = bld.create_ns3_program('ndn-simple-with-pit-count-stats', all_modules)
    obj.source = 'ndn-simple-with-pit-count-stats.cc'
