208 lines
4.3 KiB
Python
Executable File
208 lines
4.3 KiB
Python
Executable File
#! /usr/bin/env python
|
|
import sys
|
|
from optparse import OptionParser
|
|
import os
|
|
|
|
|
|
WSCRIPT_TEMPLATE = '''# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
|
|
|
# def options(opt):
|
|
# pass
|
|
|
|
# def configure(conf):
|
|
# conf.check_nonfatal(header_name='stdint.h', define_name='HAVE_STDINT_H')
|
|
|
|
def build(bld):
|
|
module = bld.create_ns3_module(%(MODULE)r, ['core'])
|
|
module.source = [
|
|
'model/%(MODULE)s.cc',
|
|
'helper/%(MODULE)s-helper.cc',
|
|
]
|
|
|
|
headers = bld.new_task_gen(features=['ns3header'])
|
|
headers.module = %(MODULE)r
|
|
headers.source = [
|
|
'model/%(MODULE)s.h',
|
|
'helper/%(MODULE)s-helper.h',
|
|
]
|
|
|
|
if bld.env.ENABLE_EXAMPLES:
|
|
bld.add_subdirs('examples')
|
|
|
|
# bld.ns3_python_bindings()
|
|
|
|
'''
|
|
|
|
|
|
|
|
MODEL_CC_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
|
|
|
#include "%(MODULE)s.h"
|
|
|
|
namespace ns3 {
|
|
|
|
/* ... */
|
|
|
|
|
|
}
|
|
|
|
'''
|
|
|
|
|
|
|
|
MODEL_H_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
|
#ifndef %(INCLUDE_GUARD)s
|
|
#define %(INCLUDE_GUARD)s
|
|
|
|
namespace ns3 {
|
|
|
|
/* ... */
|
|
|
|
}
|
|
|
|
#endif /* %(INCLUDE_GUARD)s */
|
|
|
|
'''
|
|
|
|
|
|
|
|
HELPER_CC_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
|
|
|
#include "%(MODULE)s-helper.h"
|
|
|
|
namespace ns3 {
|
|
|
|
/* ... */
|
|
|
|
|
|
}
|
|
|
|
'''
|
|
|
|
|
|
|
|
HELPER_H_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
|
#ifndef %(INCLUDE_GUARD)s
|
|
#define %(INCLUDE_GUARD)s
|
|
|
|
#include "ns3/%(MODULE)s.h"
|
|
|
|
namespace ns3 {
|
|
|
|
/* ... */
|
|
|
|
}
|
|
|
|
#endif /* %(INCLUDE_GUARD)s */
|
|
|
|
'''
|
|
|
|
|
|
EXAMPLES_WSCRIPT_TEMPLATE = '''# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
|
|
|
def build(bld):
|
|
obj = bld.create_ns3_program('%(MODULE)s-example', [%(MODULE)r])
|
|
obj.source = '%(MODULE)s-example.cc'
|
|
|
|
'''
|
|
|
|
EXAMPLE_CC_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
|
|
|
#include "ns3/core-module.h"
|
|
#include "ns3/%(MODULE)s-helper.h"
|
|
|
|
using namespace ns3;
|
|
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
bool verbose = true;
|
|
|
|
CommandLine cmd;
|
|
cmd.AddValue ("verbose", "Tell application to log if true", verbose);
|
|
|
|
cmd.Parse (argc,argv);
|
|
|
|
/* ... */
|
|
|
|
Simulator::Run ();
|
|
Simulator::Destroy ();
|
|
return 0;
|
|
}
|
|
|
|
|
|
'''
|
|
|
|
|
|
def main(argv):
|
|
parser = OptionParser(usage=("Usage: %prog [options] modulename\n"
|
|
"Utility script to create a basic template for a new ns-3 module"))
|
|
(options, args) = parser.parse_args()
|
|
if len(args) != 1:
|
|
parser.print_help()
|
|
return 1
|
|
|
|
modname = args[0]
|
|
assert os.path.sep not in modname
|
|
|
|
moduledir = os.path.join(os.path.dirname(__file__), modname)
|
|
|
|
if os.path.exists(moduledir):
|
|
print >> sys.stderr, "Module %r already exists" % (modname,)
|
|
return 2
|
|
|
|
os.mkdir(moduledir)
|
|
wscript = file(os.path.join(moduledir, "wscript"), "wt")
|
|
wscript.write(WSCRIPT_TEMPLATE % dict(MODULE=modname))
|
|
wscript.close()
|
|
|
|
|
|
#
|
|
# model
|
|
#
|
|
modeldir = os.path.join(moduledir, "model")
|
|
os.mkdir(modeldir)
|
|
|
|
model_cc = file(os.path.join(moduledir, "model", "%s.cc" % modname), "wt")
|
|
model_cc.write(MODEL_CC_TEMPLATE % dict(MODULE=modname))
|
|
model_cc.close()
|
|
|
|
model_h = file(os.path.join(moduledir, "model", "%s.h" % modname), "wt")
|
|
model_h.write(MODEL_H_TEMPLATE % dict(MODULE=modname, INCLUDE_GUARD="__%s_H__" % (modname.upper()),))
|
|
model_h.close()
|
|
|
|
|
|
|
|
#
|
|
# helper
|
|
#
|
|
helperdir = os.path.join(moduledir, "helper")
|
|
os.mkdir(helperdir)
|
|
|
|
helper_cc = file(os.path.join(moduledir, "helper", "%s-helper.cc" % modname), "wt")
|
|
helper_cc.write(HELPER_CC_TEMPLATE % dict(MODULE=modname))
|
|
helper_cc.close()
|
|
|
|
helper_h = file(os.path.join(moduledir, "helper", "%s-helper.h" % modname), "wt")
|
|
helper_h.write(HELPER_H_TEMPLATE % dict(MODULE=modname, INCLUDE_GUARD="__%s_HELPER_H__" % (modname.upper()),))
|
|
helper_h.close()
|
|
|
|
|
|
examplesdir = os.path.join(moduledir, "examples")
|
|
os.mkdir(examplesdir)
|
|
|
|
examples_wscript = file(os.path.join(examplesdir, "wscript"), "wt")
|
|
examples_wscript.write(EXAMPLES_WSCRIPT_TEMPLATE % dict(MODULE=modname))
|
|
examples_wscript.close()
|
|
|
|
example_cc = file(os.path.join(moduledir, "examples", "%s-example.cc" % modname), "wt")
|
|
example_cc.write(EXAMPLE_CC_TEMPLATE % dict(MODULE=modname))
|
|
example_cc.close()
|
|
|
|
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv))
|