bindings/python/ns3modulegen.py
author fmoatamr
Wed, 27 Jan 2010 12:06:38 +0100
changeset 5927 be3fb855c65a
parent 5922 d5527ca873af
child 6137 86045031f03a
permissions -rwxr-xr-x
Update version number to 3.7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     1
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     2
LOCAL_MODULES = [
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     3
    #'my_extra_api_definitions',
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     4
    ]
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     5
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     6
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     7
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     8
import sys
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     9
import os
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    10
5249
85cde7d987ed Python: allow multiple api definitions directories, one per data model.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4299
diff changeset
    11
sys.path.insert(0, sys.argv[2])
85cde7d987ed Python: allow multiple api definitions directories, one per data model.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4299
diff changeset
    12
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    13
from pybindgen import FileCodeSink, write_preamble
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    14
from pybindgen.module import MultiSectionFactory
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    15
import pybindgen.settings
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    16
3473
6bce86ea4778 Require new PyBindGen; make it work for Python 2.3.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3421
diff changeset
    17
from ns3modulegen_generated import module_init, register_types, register_methods, register_functions
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    18
import ns3modulegen_core_customizations
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    19
import callbacks_list
5878
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    20
import traceback
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    21
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    22
this_script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    23
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    24
class ErrorHandler(pybindgen.settings.ErrorHandler):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    25
    def handle_error(self, wrapper, exception, traceback_):
5878
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    26
        print >> sys.stderr
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    27
        print >> sys.stderr, "---- location:"
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    28
        traceback.print_stack()
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    29
        print >> sys.stderr, "---- error:"
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    30
        traceback.print_tb(traceback_)
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    31
        try:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    32
            stack = wrapper.stack_where_defined
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    33
        except AttributeError:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    34
            print >> sys.stderr, "??:??: %s / %r" % (wrapper, exception)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    35
        else:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    36
            stack = list(stack)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    37
            stack.reverse()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    38
            for (filename, line_number, function_name, text) in stack:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    39
                file_dir = os.path.dirname(os.path.abspath(filename))
5878
34459001e1ba python: fix error reporting, make it much more verbose
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5839
diff changeset
    40
                if file_dir.startswith(this_script_dir):
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    41
                    print >> sys.stderr, "%s:%i: %r" % (os.path.join("..", "bindings", "python", os.path.basename(filename)),
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    42
                                                        line_number, exception)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    43
                    break
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    44
        return True
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    45
pybindgen.settings.error_handler = ErrorHandler()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    46
3546
cecda7126440 New PyBindGen, fixes python wrapper identity issue.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3538
diff changeset
    47
pybindgen.settings.wrapper_registry = pybindgen.settings.StdMapWrapperRegistry
cecda7126440 New PyBindGen, fixes python wrapper identity issue.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3538
diff changeset
    48
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    49
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    50
class MyMultiSectionFactory(MultiSectionFactory):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    51
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    52
    def __init__(self, main_file_name, modules):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    53
        super(MyMultiSectionFactory, self).__init__()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    54
        self.main_file_name = main_file_name
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    55
        self.main_sink = FileCodeSink(open(main_file_name, "wt"))
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    56
        self.header_name = "ns3module.h"
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    57
        header_file_name = os.path.join(os.path.dirname(self.main_file_name), self.header_name)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    58
        self.header_sink = FileCodeSink(open(header_file_name, "wt"))
3538
99f49426595a Python: fix bad parameter passed into pybindgen.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3473
diff changeset
    59
        self.section_sinks = {'__main__': self.main_sink}
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    60
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    61
        for module in modules:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    62
            section_name = 'ns3_module_%s' % module.replace('-', '_')
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    63
            file_name = os.path.join(os.path.dirname(self.main_file_name), "%s.cc" % section_name)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    64
            sink = FileCodeSink(open(file_name, "wt"))
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    65
            self.section_sinks[section_name] = sink            
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    66
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    67
    def get_section_code_sink(self, section_name):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    68
        return self.section_sinks[section_name]
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    69
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    70
    def get_main_code_sink(self):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    71
        return self.main_sink
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    72
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
    def get_common_header_code_sink(self):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    74
        return self.header_sink
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    75
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    76
    def get_common_header_include(self):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
        return '"%s"' % self.header_name
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    79
    def close(self):
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    80
        self.header_sink.file.close()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    81
        self.main_sink.file.close()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
        for sink in self.section_sinks.itervalues():
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    83
            sink.file.close()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    84
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    86
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    87
def main():
5249
85cde7d987ed Python: allow multiple api definitions directories, one per data model.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4299
diff changeset
    88
    out = MyMultiSectionFactory(sys.argv[1], sys.argv[3:])
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    89
    root_module = module_init()
3409
94ac3e381075 The 'everything.h' header file is only used for Python bindings and should be generated into bindings/python/, not ns3/.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3408
diff changeset
    90
    root_module.add_include('"everything.h"')
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    91
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    92
    register_types(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    93
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    94
    ns3modulegen_core_customizations.Simulator_customizations(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    95
    ns3modulegen_core_customizations.CommandLine_customizations(root_module)
3753
a84a48233eb3 A more pythonic wrapper for ns3.TypeId.LookupByNameFailSafe
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3648
diff changeset
    96
    ns3modulegen_core_customizations.TypeId_customizations(root_module)
4196
ed59d07c5373 Python: wrap std::ostream/ofstream, for ascii tracing.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4105
diff changeset
    97
    ns3modulegen_core_customizations.add_std_ofstream(root_module)
5911
993998a62a6a Bug 786 - Make Ipv4Address hashable from Python
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5878
diff changeset
    98
    ns3modulegen_core_customizations.add_ipv4_address_tp_hash(root_module)
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    99
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   100
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   101
    for local_module in LOCAL_MODULES:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   102
        mod = __import__(local_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   103
        mod.register_types(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   104
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   105
    ns3modulegen_core_customizations.generate_callback_classes(root_module.after_forward_declarations,
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   106
                                                               callbacks_list.callback_classes)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   107
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   108
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   109
    register_methods(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   110
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   111
    for local_module in LOCAL_MODULES:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   112
        mod = __import__(local_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   113
        mod.register_methods(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   114
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   115
    ns3modulegen_core_customizations.Object_customizations(root_module)
3421
b9424c43753d Python: make helper class methods using attribute optional parameters work.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3420
diff changeset
   116
    ns3modulegen_core_customizations.Attribute_customizations(root_module)
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   117
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   118
    register_functions(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   119
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   120
    for local_module in LOCAL_MODULES:
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   121
        mod = __import__(local_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   122
        mod.register_functions(root_module)
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   123
3639
8e69ebf086f1 Use the information provided by conf.report_optional_feature() to enable/disable python bindings for optional APIs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3582
diff changeset
   124
    enabled_features = os.environ['NS3_ENABLED_FEATURES'].split(',')
3420
390db659644b If GtkConfigStore support is disabled, disable the python bindings for it, or else compilation fails.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3409
diff changeset
   125
390db659644b If GtkConfigStore support is disabled, disable the python bindings for it, or else compilation fails.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3409
diff changeset
   126
    # if GtkConfigStore support is disabled, disable the class wrapper
3639
8e69ebf086f1 Use the information provided by conf.report_optional_feature() to enable/disable python bindings for optional APIs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3582
diff changeset
   127
    if 'GtkConfigStore' not in enabled_features:
3582
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   128
        try:
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   129
            root_module.classes.remove(root_module['ns3::GtkConfigStore'])
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   130
        except KeyError:
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   131
            pass
3420
390db659644b If GtkConfigStore support is disabled, disable the python bindings for it, or else compilation fails.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3409
diff changeset
   132
3575
1f5d9b97a1a2 Fix compilation of Python bindings when libsqlite3 is not available (and so the class SqliteDataOutput is omitted).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3546
diff changeset
   133
    # if no sqlite, the class SqliteDataOutput is disabled
3639
8e69ebf086f1 Use the information provided by conf.report_optional_feature() to enable/disable python bindings for optional APIs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3582
diff changeset
   134
    if 'SqliteDataOutput' not in enabled_features:
3582
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   135
        try:
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   136
            root_module.classes.remove(root_module['ns3::SqliteDataOutput'])
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   137
        except KeyError:
96fa2a7b5f88 catch KeyError exception to avoid failing when sqlite or gtk are not installed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3575
diff changeset
   138
            pass
3575
1f5d9b97a1a2 Fix compilation of Python bindings when libsqlite3 is not available (and so the class SqliteDataOutput is omitted).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3546
diff changeset
   139
3648
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   140
    if 'Threading' not in enabled_features:
5922
d5527ca873af Fix python bindings build when threading features are disabled (e.g. mingw)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5911
diff changeset
   141
        for clsname in ['SystemThread', 'SystemMutex', 'SystemCondition', 'CriticalSection',
d5527ca873af Fix python bindings build when threading features are disabled (e.g. mingw)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5911
diff changeset
   142
                        'SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >']:
3648
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   143
            root_module.classes.remove(root_module['ns3::%s' % clsname])
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   144
3916
a1e72a0595a6 Disable EmuNetDevice Python bindings if the netdevice is not compiled in (bug #413)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3753
diff changeset
   145
    if 'EmuNetDevice' not in enabled_features:
a1e72a0595a6 Disable EmuNetDevice Python bindings if the netdevice is not compiled in (bug #413)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3753
diff changeset
   146
        for clsname in ['EmuNetDevice', 'EmuHelper']:
a1e72a0595a6 Disable EmuNetDevice Python bindings if the netdevice is not compiled in (bug #413)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3753
diff changeset
   147
            root_module.classes.remove(root_module['ns3::%s' % clsname])
5838
eb5b9d295192 Fixing building with python bindings under MacOS and MingW
fmoatamr
parents: 5249
diff changeset
   148
        root_module.enums.remove(root_module['ns3::EmuNetDevice::EncapsulationMode'])
3916
a1e72a0595a6 Disable EmuNetDevice Python bindings if the netdevice is not compiled in (bug #413)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3753
diff changeset
   149
3648
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   150
    if 'RealTime' not in enabled_features:
4090
3dda1049f0d8 RealtimeEventLock is gone
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3916
diff changeset
   151
        for clsname in ['WallClockSynchronizer', 'RealtimeSimulatorImpl']:
3648
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   152
            root_module.classes.remove(root_module['ns3::%s' % clsname])
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   153
        root_module.enums.remove(root_module['ns3::RealtimeSimulatorImpl::SynchronizationMode'])
f912b24ddf2d Detect the pthread.h header file and automatically disable components that cannot build without it.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3639
diff changeset
   154
4208
ef9ae8962bbb Fix build of Python bindings on systems with no support for TabBridge
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4196
diff changeset
   155
    if 'TapBridge' not in enabled_features:
ef9ae8962bbb Fix build of Python bindings on systems with no support for TabBridge
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4196
diff changeset
   156
        for clsname in ['TapBridge', 'TapBridgeHelper']:
ef9ae8962bbb Fix build of Python bindings on systems with no support for TabBridge
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4196
diff changeset
   157
            root_module.classes.remove(root_module['ns3::%s' % clsname])
4299
834a7ac30481 fix mac osx python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4208
diff changeset
   158
        root_module.enums.remove(root_module['ns3::TapBridge::Mode'])
4208
ef9ae8962bbb Fix build of Python bindings on systems with no support for TabBridge
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4196
diff changeset
   159
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   160
    root_module.generate(out, '_ns3')
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   161
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   162
    out.close()
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   163
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   164
if __name__ == '__main__':
4105
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   165
    if 0:
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   166
        try:
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   167
            import cProfile as profile
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   168
        except ImportError:
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   169
            main()
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   170
        else:
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   171
            print >> sys.stderr, "** running under profiler"
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   172
            profile.run('main()', 'ns3modulegen.pstat')
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   173
    else:
ce8be572c4d4 Make it easy to turn on profiling of pybindgen
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4090
diff changeset
   174
        main()
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   175