From b37ca7868a2b4a1739da5be6a1ef656d0b81fe85 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Fri, 20 Jul 2007 09:10:49 +0200 Subject: [PATCH] remove scons scripts --- SConstruct | 485 --------------------------------------------- build.py | 561 ----------------------------------------------------- 2 files changed, 1046 deletions(-) delete mode 100644 SConstruct delete mode 100644 build.py diff --git a/SConstruct b/SConstruct deleted file mode 100644 index d23612623..000000000 --- a/SConstruct +++ /dev/null @@ -1,485 +0,0 @@ -## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- -import os.path -import build - -version_file = open ('VERSION', 'r') -version = version_file.readline () -version_file.close () -version = version.strip () - -ns3 = build.Ns3() -ns3.build_dir = 'build-dir' -ns3.version = version -ns3.name = 'ns3' -ns3.distname = 'ns' -ns3.doxygen_config = os.path.join('doc', 'doxygen.conf') -ns3.add_extra_dist(os.path.join('doc', 'main.txt')) -ns3.add_extra_dist ('doc/architecture.pdf') -ns3.add_extra_dist ('doc/contributing.txt') -ns3.add_extra_dist ('doc/build.txt') -ns3.add_extra_dist ('doc/codingstd.txt') -ns3.add_extra_dist ('doc/mercurial.txt') -ns3.add_extra_dist ('README') -ns3.add_extra_dist ('RELEASE_NOTES') -ns3.add_extra_dist ('AUTHORS') -ns3.add_extra_dist ('VERSION') - -ns3.add_extra_dist('ns3/_placeholder_') -for wscript in [ - "src/core/wscript", - "src/node/wscript", - "src/devices/p2p/wscript", - "src/common/wscript", - "src/applications/wscript", - "src/simulator/wscript", - "src/internet-node/wscript", - "src/wscript", - "utils/wscript", - "samples/wscript", - "examples/wscript", - "wscript", - ]: - ns3.add_extra_dist(wscript) -ns3.add_extra_dist('waf.bat') - - - -# -# The Core module -# -core = build.Ns3Module('core', 'src/core') -ns3.add(core) -core.add_sources([ - 'callback-test.cc', - 'debug.cc', - 'assert.cc', - 'ptr.cc', - 'object.cc', - 'test.cc', - 'random-variable.cc', - 'rng-stream.cc', - 'uid-manager.cc', - 'default-value.cc', - 'command-line.cc', - 'type-name.cc', - 'component-manager.cc', - ]) -env = Environment() -if env['PLATFORM'] == 'posix' or env['PLATFORM'] == 'darwin' or env['PLATFORM'] == 'cygwin': - core.add_external_dep('pthread') - core.add_sources([ - 'unix-system-wall-clock-ms.cc', - ]) -elif env['PLATFORM'] == 'win32': - core.add_sources([ - 'win32-system-wall-clock-ms.cc', - ]) -core.add_headers ([ - 'uid-manager.h', - 'singleton.h', -]) -core.add_inst_headers([ - 'system-wall-clock-ms.h', - 'empty.h', - 'callback.h', - 'ptr.h', - 'object.h', - 'debug.h', - 'assert.h', - 'fatal-error.h', - 'test.h', - 'random-variable.h', - 'rng-stream.h', - 'default-value.h', - 'command-line.h', - 'type-name.h', - 'type-traits.h', - 'component-manager.h', - ]) - -def config_core (env, config): - retval = [] - # XXX This check is primitive but it should be - # good enough for now. - if config.CheckCHeader ('stdlib.h') == 1: - retval.append ('#define HAVE_STDLIB_H 1') - retval.append ('#define HAVE_GETENV 1') - else: - retval.append ('#undef HAVE_STDLIB_H') - retval.append ('#undef HAVE_GETENV') - return retval -core.add_config (config_core) - -# -# The Simu module -# -simu = build.Ns3Module('simulator', 'src/simulator') -ns3.add(simu) -simu.add_dep('core') -simu.add_external_dep('m') -simu.add_sources([ - 'high-precision.cc', - 'time.cc', - 'event-id.cc', - 'scheduler.cc', - 'scheduler-factory.cc', - 'scheduler-list.cc', - 'scheduler-heap.cc', - 'scheduler-map.cc', - 'event-impl.cc', - 'simulator.cc', - ]) -simu.add_headers([ - 'scheduler-heap.h', - 'scheduler-map.h', - 'scheduler-list.h' - ]) -simu.add_inst_headers([ - 'high-precision.h', - 'nstime.h', - 'event-id.h', - 'event-impl.h', - 'simulator.h', - 'scheduler.h', - 'scheduler-factory.h', - 'simulation-singleton.h', - ]) -high_precision_as_double = ARGUMENTS.get('high-precision-as-double', 'n') -if high_precision_as_double == 'y': - simu.add_inst_header ('high-precision-double.h') - simu.add_source ('high-precision-double.cc') -else: - simu.add_inst_headers ([ - 'high-precision-128.h', - 'cairo-wideint-private.h' - ]) - simu.add_sources ([ - 'high-precision-128.cc', - 'cairo-wideint.c', - ]) - -def config_simulator (env, config): - retval = [] - high_precision_as_double = ARGUMENTS.get('high-precision-as-double', 'n') - if high_precision_as_double == 'y': - retval.append ('#define USE_HIGH_PRECISION_DOUBLE 1') - else: - retval.append ('#undef USE_HIGH_PRECISION_DOUBLE') - if config.CheckCHeader ('stdint.h') == 1: - retval.append ('#define HAVE_STDINT_H 1') - elif config.CheckCHeader ('inttypes.h') == 1: - retval.append ('#define HAVE_INTTYPES_H 1') - elif config.CheckCHeader ('sys/inttypes.h') == 1: - retval.append ('#define HAVE_SYS_INT_TYPES_H 1') - return retval -simu.add_config (config_simulator) - - -# -# The Common module -# -common = build.Ns3Module('common', 'src/common') -common.add_deps(['core', 'simulator']) -ns3.add(common) -common.add_sources([ - 'buffer.cc', - 'chunk.cc', - 'header.cc', - 'trailer.cc', - 'packet-printer.cc', - 'packet-metadata.cc', - 'packet.cc', - 'tags.cc', - 'pcap-writer.cc', - 'variable-tracer-test.cc', - 'trace-context.cc', - 'trace-resolver.cc', - 'callback-trace-source.cc', - 'empty-trace-resolver.cc', - 'composite-trace-resolver.cc', - 'trace-root.cc', - 'data-rate.cc', - ]) -common.add_headers ([ - ]) -common.add_inst_headers([ - 'buffer.h', - 'chunk.h', - 'header.h', - 'trailer.h', - 'tags.h', - 'packet.h', - 'packet-printer.h', - 'packet-metadata.h', - 'uv-trace-source.h', - 'sv-trace-source.h', - 'fv-trace-source.h', - 'pcap-writer.h', - 'callback-trace-source.h', - 'trace-context.h', - 'trace-resolver.h', - 'empty-trace-resolver.h', - 'composite-trace-resolver.h', - 'array-trace-resolver.h', - 'trace-root.h', - 'terminal-trace-resolver.h', - 'data-rate.h', - ]) - -node = build.Ns3Module ('node', 'src/node') -ns3.add (node) -node.add_deps (['core', 'common', 'simulator']) -node.add_sources ([ - 'node.cc', - 'ipv4-address.cc', - 'net-device.cc', - 'mac-address.cc', - 'llc-snap-header.cc', - 'ipv4-route.cc', - 'queue.cc', - 'drop-tail-queue.cc', - 'channel.cc', - 'node-list.cc', - 'socket.cc', - 'socket-factory.cc', - 'udp.cc', - 'ipv4.cc', - 'application.cc', - ]) -node.add_inst_headers ([ - 'node.h', - 'ipv4-address.h', - 'net-device.h', - 'mac-address.h', - 'ipv4-route.h', - 'queue.h', - 'drop-tail-queue.h', - 'llc-snap-header.h', - 'channel.h', - 'node-list.h', - 'socket.h', - 'socket-factory.h', - 'udp.h', - 'ipv4.h', - 'application.h', - ]) - -applications = build.Ns3Module ('applications', 'src/applications') -ns3.add (applications) -applications.add_deps (['node']) -applications.add_sources ([ - 'onoff-application.cc', -]) -applications.add_inst_headers ([ - 'onoff-application.h', -]) - -inode = build.Ns3Module ('internet-node', 'src/internet-node') -ns3.add (inode) -inode.add_deps (['node']) -inode.add_sources ([ - 'internet-node.cc', - 'l3-demux.cc', - 'l3-protocol.cc', - 'ipv4-l4-demux.cc', - 'ipv4-l4-protocol.cc', - 'ipv4-header.cc', - 'udp-header.cc', - 'ipv4-checksum.cc', - 'ipv4-interface.cc', - 'ipv4-l3-protocol.cc', - 'ipv4-end-point.cc', - 'udp-l4-protocol.cc', - 'arp-header.cc', - 'arp-cache.cc', - 'arp-ipv4-interface.cc', - 'arp-l3-protocol.cc', - 'ipv4-loopback-interface.cc', - 'header-utils.cc', - 'udp-socket.cc', - 'ipv4-end-point-demux.cc', - 'arp-private.cc', - 'ipv4-impl.cc', - 'ipv4-private.cc', - 'ascii-trace.cc', - 'pcap-trace.cc', - 'udp-impl.cc', -]) -inode.add_headers ([ - 'ipv4-checksum.h', - 'arp-header.h', - 'arp-cache.h', - 'arp-l3-protocol.h', - 'ipv4-loopback-interface.h', - 'l3-demux.h', - 'header-utils.h', - 'arp-ipv4-interface.h', - 'udp-socket.h', - 'udp-l4-protocol.h', - 'arp-private.h', - 'ipv4-impl.h', - 'ipv4-private.h', - 'ipv4-l3-protocol.h', - 'l3-protocol.h', - 'ipv4-l4-protocol.h', - 'ipv4-l4-demux.h', - 'ipv4-end-point-demux.h', - 'ipv4-end-point.h', - 'ipv4-header.h', - 'udp-header.h', - 'ipv4-interface.h', - 'sgi-hashmap.h', - 'udp-impl.h', -]) -inode.add_inst_headers ([ - 'internet-node.h', - 'ascii-trace.h', - 'pcap-trace.h', - 'ipv4-header.h', - 'udp-header.h', -]) - - - -p2p = build.Ns3Module ('p2p', 'src/devices/p2p') -ns3.add (p2p) -p2p.add_deps (['node']) -p2p.add_sources ([ - 'p2p-net-device.cc', - 'p2p-channel.cc', - 'p2p-topology.cc', - ]) -p2p.add_inst_headers ([ - 'p2p-net-device.h', - 'p2p-channel.h', - 'p2p-topology.h', - ]) - - -# utils -run_tests = build.Ns3Module('run-tests', 'utils') -ns3.add(run_tests) -run_tests.set_executable() -run_tests.add_deps(['core', 'simulator', 'common']) -run_tests.add_source('run-tests.cc') - -bench_object = build.Ns3Module('bench-object', 'utils') -ns3.add(bench_object) -bench_object.set_executable() -bench_object.add_deps(['core']) -bench_object.add_source('bench-object.cc') - -bench_packets = build.Ns3Module('bench-packets', 'utils') -ns3.add(bench_packets) -bench_packets.set_executable() -bench_packets.add_deps (['core', 'common']) -bench_packets.add_source('bench-packets.cc') - -bench_simu = build.Ns3Module('bench-simulator', 'utils') -ns3.add(bench_simu) -bench_simu.set_executable() -bench_simu.add_dep('simulator') -bench_simu.add_source('bench-simulator.cc') - -replay_simu = build.Ns3Module('replay-simulation', 'utils') -ns3.add(replay_simu) -replay_simu.set_executable() -replay_simu.add_dep('simulator') -replay_simu.add_source('replay-simulation.cc') - - -# samples -sample_debug = build.Ns3Module('sample-debug', 'samples') -sample_debug.set_executable() -ns3.add(sample_debug) -sample_debug.add_dep('core') -sample_debug.add_source('main-debug.cc') -sample_debug.add_source('main-debug-other.cc') - -sample_packet_printer = build.Ns3Module('sample-packet-printer', 'samples') -sample_packet_printer.set_executable() -ns3.add(sample_packet_printer) -sample_packet_printer.add_deps (['common', 'internet-node']) -sample_packet_printer.add_source('main-packet-printer.cc') - - -sample_callback = build.Ns3Module('sample-callback', 'samples') -sample_callback.set_executable() -ns3.add(sample_callback) -sample_callback.add_dep('core') -sample_callback.add_source('main-callback.cc') - -sample_ptr = build.Ns3Module('sample-ptr', 'samples') -sample_ptr.set_executable() -ns3.add(sample_ptr) -sample_ptr.add_dep('core') -sample_ptr.add_source('main-ptr.cc') - -sample_trace = build.Ns3Module('sample-trace', 'samples') -#ns3.add(sample_trace) -sample_trace.add_dep('common') -sample_trace.set_executable() -sample_trace.add_source('main-trace.cc') - -sample_query_interface = build.Ns3Module('sample-query-interface', 'samples') -ns3.add(sample_query_interface) -sample_query_interface.add_dep('common') -sample_query_interface.set_executable() -sample_query_interface.add_source('main-query-interface.cc') - -sample_simu = build.Ns3Module('sample-simulator', 'samples') -ns3.add(sample_simu) -sample_simu.set_executable() -sample_simu.add_dep('simulator') -sample_simu.add_source('main-simulator.cc') - -sample_packet = build.Ns3Module('sample-packet', 'samples') -ns3.add(sample_packet) -sample_packet.set_executable() -sample_packet.add_dep('common') -sample_packet.add_source('main-packet.cc') - -sample_test = build.Ns3Module('sample-test', 'samples') -sample_test.set_executable() -ns3.add(sample_test) -sample_test.add_dep('core') -sample_test.add_source('main-test.cc') - -sample_simple = build.Ns3Module('sample-simple', 'samples') -sample_simple.set_executable() -ns3.add(sample_simple) -sample_simple.add_deps(['core', 'simulator', 'node', 'internet-node']) -sample_simple.add_source('main-simple.cc') - -sample_sp2p = build.Ns3Module('sample-simple-p2p', 'samples') -sample_sp2p.set_executable() -#n3.add(sample_sp2p) -sample_sp2p.add_deps(['core', 'simulator', 'node', 'internet-node', 'p2p']) -sample_sp2p.add_source('main-simple-p2p.cc') - -sample_default_value = build.Ns3Module('sample-default-value', 'samples') -sample_default_value.set_executable() -ns3.add(sample_default_value) -sample_default_value.add_deps(['core', 'simulator', 'node', 'p2p']) -sample_default_value.add_source('main-default-value.cc') - -sample_object = build.Ns3Module('sample-object', 'samples') -sample_object.set_executable() -ns3.add(sample_object) -sample_object.add_deps(['core']) -sample_object.add_source('main-object.cc') - -sample_component_manager = build.Ns3Module('sample-component-manager', 'samples') -sample_component_manager.set_executable() -ns3.add(sample_component_manager) -sample_component_manager.add_deps(['core']) -sample_component_manager.add_source('main-component-manager.cc') - -# examples -example_simple_p2p = build.Ns3Module('simple-p2p', 'examples') -example_simple_p2p.set_executable() -ns3.add(example_simple_p2p) -example_simple_p2p.add_deps(['core', 'simulator', 'node', 'p2p', 'internet-node', 'applications']) -example_simple_p2p.add_source('simple-p2p.cc') - -ns3.generate_dependencies() diff --git a/build.py b/build.py deleted file mode 100644 index c486ab171..000000000 --- a/build.py +++ /dev/null @@ -1,561 +0,0 @@ -## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- -# Copyright (c) 2006 INRIA -# All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation; -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# Author: Mathieu Lacage - - - -import os -import os.path -import shutil -from SCons.Environment import Environment -from SCons.Builder import Builder -from SCons.Action import Action -import SCons - -# hack stolen from wengo -# to get an ARGUMENTS defined correctly -try: - ARGUMENTS = SCons.Script.ARGUMENTS - COMMAND_LINE_TARGETS = SCons.Script.COMMAND_LINE_TARGETS -except AttributeError: - from SCons.Script.SConscript import Arguments - from SCons.Script.SConscript import CommandLineTargets - ARGUMENTS = Arguments - COMMAND_LINE_TARGETS = CommandLineTargets - -class Ns3Module: - def __init__(self, name, dir): - self.sources = [] - self.inst_headers = [] - self.headers = [] - self.extra_dist = [] - self.deps = [] - self.external_deps = [] - self.config = [] - self.name = name - self.dir = dir - self.executable = False - self.library = True - self.ldflags = [] - self.header_inst_dir = '' - def set_library(self): - self.library = True - self.executable = False - def set_executable(self): - self.library = False - self.executable = True - def add_config(self, config_fn): - self.config.append(config_fn) - def add_extra_dist(self, dist): - self.extra_dist.append(dist) - def add_external_dep(self, dep): - self.external_deps.append(dep) - def add_dep(self, dep): - self.deps.append(dep) - def add_deps(self, deps): - self.deps.extend(deps) - def add_source(self, source): - self.sources.append(source) - def add_sources(self, sources): - self.sources.extend(sources) - def add_header(self, header): - self.headers.append(header) - def add_headers(self, headers): - self.headers.extend(headers) - def add_inst_header(self, header): - self.inst_headers.append(header) - def add_inst_headers(self, headers): - self.inst_headers.extend(headers) - def add_ldflags (self, ldflags): - self.ldflags.extend (ldflags) - def add_ldflag (self, ldflag): - self.add_ldflags ([ldflag]) - def set_header_inst_dir (self, inst_dir): - self.header_inst_dir = inst_dir - - -def MyCopyAction(target, source, env): - try: - if len(target) == len(source): - for i in range(len(target)): - shutil.copy(source[i].path, target[i].path) - return 0 - else: - return 'invalid target/source match' - except: - print - return 'exception' -def MyCopyActionPrint(target, source, env): - if len(target) == len(source): - output = '' - for i in range(len(target)): - output = output + 'copy \'' + source[i].path + '\' to \'' + target[i].path + '\'' - if i < len(target) - 1: - output = output + '\n' - return output - else: - return 'error in copy' -def GcxxEmitter(target, source, env): - if os.path.exists(source[0].path): - return [target, source] - else: - return [[], []] -def MyRmTree(target, source, env): - shutil.rmtree(env['RM_DIR']) - return 0 -def MyRmTreePrint(target, source, env): - return '' -def print_cmd_line(s, target, src, env): - print 'Building ' + (' and '.join([str(x) for x in target])) + '...' - -class Ns3BuildVariant: - def __init__(self): - self.static = False - self.gcxx_deps = False - self.gcxx_root = '' - self.build_root = '' - self.env = None - -class Ns3: - def __init__(self): - self.__modules = [] - self.extra_dist = [] - self.build_dir = 'build' - self.version = '0.0.1' - self.name = 'noname' - self.distname = 'noname' - self.doxygen_config = '' - def add(self, module): - self.__modules.append(module) - def add_extra_dist(self, dist): - self.extra_dist.append(dist) - def __get_module(self, name): - for module in self.__modules: - if module.name == name: - return module - return None - def get_mod_output(self, module, variant): - if module.executable: - suffix = variant.env.subst(variant.env['PROGSUFFIX']) - filename = os.path.join(variant.build_root, 'bin', - module.name + suffix) - else: - if variant.static: - prefix = variant.env['LIBPREFIX'] - suffix = variant.env['LIBSUFFIX'] - else: - prefix = variant.env['SHLIBPREFIX'] - suffix = variant.env['SHLIBSUFFIX'] - prefix = variant.env.subst(prefix) - suffix = variant.env.subst(suffix) - filename = os.path.join(variant.build_root, 'lib', - prefix + module.name + suffix) - return filename - def get_obj_builders(self, variant, module): - env = variant.env.Copy () - objects = [] - hash = {} - self.get_internal_deps (module, hash) - for dep in hash.values (): - if dep.header_inst_dir != '': - inc_dir = os.path.join(variant.build_root, 'include', - self.name, dep.header_inst_dir) - env.Append (CPPPATH = [inc_dir]) - - if len(module.config) > 0: - src_config_file = os.path.join(self.build_dir, 'config', module.name + '-config.h') - tgt_config_file = os.path.join(variant.build_root, 'include', - self.name, module.name + '-config.h') - - for source in module.sources: - obj_file = os.path.splitext(source)[0] + '.o' - tgt = os.path.join(variant.build_root, module.dir, obj_file) - src = os.path.join(module.dir, source) - if variant.static: - obj_builder = env.StaticObject(target = tgt, source = src) - else: - obj_builder = env.SharedObject(target = tgt, source = src) - if len(module.config) > 0: - config_file = env.MyCopyBuilder(target = [tgt_config_file], - source = [src_config_file]) - env.Depends(obj_builder, config_file) - if variant.gcxx_deps: - gcno_tgt = os.path.join(variant.build_root, module.dir, - os.path.splitext(source)[0] + '.gcno') - gcda_tgt = os.path.join(variant.build_root, module.dir, - os.path.splitext(source)[0] + '.gcda') - gcda_src = os.path.join(variant.gcxx_root, module.dir, - os.path.splitext(source)[0] + '.gcda') - gcno_src = os.path.join(variant.gcxx_root, module.dir, - os.path.splitext(source)[0] + '.gcno') - gcno_builder = env.CopyGcxxBuilder(target = gcno_tgt, source = gcno_src) - gcda_builder = env.CopyGcxxBuilder(target = gcda_tgt, source = gcda_src) - env.Depends(obj_builder, gcda_builder) - env.Depends(obj_builder, gcno_builder) - objects.append(obj_builder) - return objects - def get_internal_deps(self, module, hash): - for dep_name in module.deps: - dep = self.__get_module(dep_name) - hash[dep_name] = dep - self.get_internal_deps(dep, hash) - def get_external_deps(self, module): - hash = {} - self.get_internal_deps(module, hash) - ext_hash = {} - for mod in hash.values(): - for ext_dep in mod.external_deps: - ext_hash[ext_dep] = 1 - return ext_hash.keys() - def get_sorted_deps(self, module): - h = {} - self.get_internal_deps(module, h) - modules = [] - for dep in h.keys(): - deps_copy = [] - mod = h[dep] - deps_copy.extend(mod.deps) - modules.append([mod, deps_copy]) - sorted = [] - while len(modules) > 0: - to_remove = [] - for item in modules: - if len(item[1]) == 0: - to_remove.append(item[0].name) - for item in to_remove: - for i in modules: - if item in i[1]: - i[1].remove(item) - new_modules = [] - for mod in modules: - found = False - for i in to_remove: - if i == mod[0].name: - found = True - break - if not found: - new_modules.append(mod) - modules = new_modules - sorted.extend(to_remove) - sorted.reverse() - # append external deps - ext_deps = self.get_external_deps(module) - for dep in ext_deps: - sorted.append(dep) - return sorted - - def gen_mod_dep(self, variant): - build_root = variant.build_root - cpp_path = os.path.join(variant.build_root, 'include') - env = variant.env - env.Append(CPPPATH = [cpp_path]) - header_dir = os.path.join(build_root, 'include', self.name) - lib_path = os.path.join(build_root, 'lib') - env.Append (LIBPATH = [lib_path]) - module_builders = [] - for module in self.__modules: - my_env = env.Copy (); - objects = self.get_obj_builders(variant, module) - libs = self.get_sorted_deps(module) - my_env.Append (LIBS = libs) - my_env.Append (LINKFLAGS = module.ldflags) - - filename = self.get_mod_output(module, variant) - if module.executable: - module_builder = my_env.Program(target=filename, source=objects) - else: - if variant.static: - module_builder = my_env.StaticLibrary(target=filename, source=objects) - else: - module_builder = my_env.SharedLibrary(target=filename, source=objects) - - for dep_name in module.deps: - dep = self.__get_module(dep_name) - my_env.Depends(module_builder, self.get_mod_output(dep, variant)) - - for header in module.inst_headers: - if module.header_inst_dir != '': - tgt = os.path.join(header_dir, module.header_inst_dir, header) - else: - tgt = os.path.join(header_dir, header) - src = os.path.join(module.dir, header) - #builder = env.Install(target = tgt, source = src) - header_builder = my_env.MyCopyBuilder(target=tgt, source=src) - my_env.Depends(module_builder, header_builder) - - module_builders.append(module_builder) - return module_builders - def gen_mod_config(self, env): - config_dir = os.path.join(self.build_dir, 'config') - for module in self.__modules: - if len(module.config) > 0: - config_file = os.path.join(config_dir, module.name + '-config.h') - config_file_guard = module.name + '_CONFIG_H' - config_file_guard.upper() - if not os.path.isfile(config_file): - if not os.path.isdir(config_dir): - os.makedirs(config_dir) - outfile = open(config_file, 'w') - outfile.write('#ifndef ' + config_file_guard + '\n') - outfile.write('#define ' + config_file_guard + '\n') - config = env.Configure() - for fn in module.config: - output = fn(env, config) - for o in output: - outfile.write(o) - outfile.write('\n') - outfile.write('#endif /*' + config_file_guard + '*/\n') - config.Finish() - def generate_dependencies(self): - inheritenv = (ARGUMENTS.get('inheritenv', 'n') in 'yY1') - if inheritenv: - env = Environment(ENV=os.environ) - else: - env = Environment() - self.gen_mod_config(env) - cc = env['CC'] - cxx = env.subst(env['CXX']) - if cc == '': - print "Missing C compiler." - env.Exit (1); - if cxx == '': - print "Missing C++ compiler." - env.Exit (1); - common_flags = ARGUMENTS.get('cflags', '').split(' ') - cxxflags = ARGUMENTS.get('cxxflags', '').split(' ') - ldflags = ARGUMENTS.get('ldflags', '').split(' ') - if cc == 'cl' and cxx == 'cl': - env = Environment(tools=['mingw']) - cc = env['CC'] - cxx = env.subst(env['CXX']) - if cc == 'gcc' and cxx == 'g++': - common_flags.extend(['-g3', '-Wall', '-Werror']) - debug_flags = [] - opti_flags = ['-O3'] - elif cc == 'cl' and cxx == 'cl': - env = Environment(ENV=os.environ) - debug_flags = ['-W1', '-GX', '-EHsc', '-D_DEBUG', '/MDd'] - opti_flags = ['-O2', '-EHsc', '-DNDEBUG', '/MD'] - cc = ARGUMENTS.get ('cc', '') - cxx = ARGUMENTS.get ('cxx', '') - if cc != '': - env.Replace (CC = cc) - if cxx != '': - env.Replace (CXX = cxx) - env.Append(CCFLAGS = common_flags, - CPPDEFINES = ['RUN_SELF_TESTS'], - TARFLAGS = '-c -z', - CPPFLAGS = cxxflags, - LINKFLAGS = ldflags) - if env['PLATFORM'] == 'posix': - env.Append(LINKFLAGS = ' -z origin') - env.Append(RPATH=env.Literal(os.path.join('\\$$ORIGIN', os.pardir, 'lib'))) - verbose = ARGUMENTS.get('verbose', 'n') - if verbose == 'n': - env['PRINT_CMD_LINE_FUNC'] = print_cmd_line - header_builder = Builder(action = Action(MyCopyAction, strfunction=MyCopyActionPrint)) - env.Append(BUILDERS = {'MyCopyBuilder':header_builder}) - gcxx_builder = Builder(action = Action(MyCopyAction, strfunction=MyCopyActionPrint), - emitter = GcxxEmitter) - env.Append(BUILDERS = {'CopyGcxxBuilder':gcxx_builder}) - variant = Ns3BuildVariant() - builders = [] - - - gcov_env = env.Copy() - gcov_env.Append(CFLAGS = ['-fprofile-arcs', '-ftest-coverage'], - CXXFLAGS = ['-fprofile-arcs', '-ftest-coverage'], - LINKFLAGS = ['-fprofile-arcs']) - # code coverage analysis - variant.static = False - variant.env = gcov_env - variant.build_root = os.path.join(self.build_dir, 'gcov') - builders = self.gen_mod_dep(variant) - for builder in builders: - gcov_env.Alias('gcov', builder) - gcov_env.Alias('lcov-report') - if 'lcov-report' in COMMAND_LINE_TARGETS: - lcov_report_dir = os.path.join(self.build_dir, 'lcov-report') - create_dir_command = "rm -rf " + lcov_report_dir - create_dir_command += " && mkdir " + lcov_report_dir + ";" - gcov_env.Execute(create_dir_command) - info_file = os.path.join(lcov_report_dir, self.name + '.info') - lcov_command = "utils/lcov/lcov -c -d . -o " + info_file - lcov_command += " --source-dirs=" + os.getcwd() - lcov_command += ":" + os.path.join(os.getcwd(), - variant.build_root, - 'include') - gcov_env.Execute(lcov_command) - genhtml_command = "utils/lcov/genhtml -o " + lcov_report_dir - genhtml_command += " " + info_file - gcov_env.Execute(genhtml_command) - - - - opt_env = env.Copy() - opt_env.Append(CFLAGS=opti_flags, - CXXFLAGS=opti_flags, - CPPDEFINES=['NDEBUG']) - # optimized static support - variant.static = True - variant.env = opt_env - variant.build_root = os.path.join(self.build_dir, 'opt-static') - builders = self.gen_mod_dep(variant) - for builder in builders: - opt_env.Alias('opt-static', builder) - - - opt_env = env.Copy() - opt_env.Append(CFLAGS = opti_flags, - CXXFLAGS = opti_flags, - CPPDEFINES = ['NDEBUG']) - # optimized shared support - variant.static = False - variant.env = opt_env - variant.build_root = os.path.join(self.build_dir, 'opt-shared') - builders = self.gen_mod_dep(variant) - for builder in builders: - opt_env.Alias('opt-shared', builder) - - - arc_env = env.Copy() - arc_env.Append(CFLAGS=opti_flags, - CXXFLAGS=opti_flags, - CPPDEFINES=['NDEBUG']) - arc_env.Append(CFLAGS=['-frandom-seed=0', '-fprofile-generate'], - CXXFLAGS=['-frandom-seed=0', '-fprofile-generate'], - LINKFLAGS=['-frandom-seed=0', '-fprofile-generate']) - # arc profiling - variant.static = False - variant.env = arc_env - variant.build_root = os.path.join(self.build_dir, 'opt-arc') - builders = self.gen_mod_dep(variant) - for builder in builders: - arc_env.Alias('opt-arc', builder) - - - arcrebuild_env = env.Copy() - arcrebuild_env.Append(CFLAGS=opti_flags, - CXXFLAGS=opti_flags, - CPPDEFINES=['NDEBUG']) - arcrebuild_env.Append(CFLAGS=['-frandom-seed=0', '-fprofile-use'], - CXXFLAGS=['-frandom-seed=0', '-fprofile-use'], - LINKFLAGS=['-frandom-seed=0', '-fprofile-use']) - # arc rebuild - variant.static = False - variant.env = arcrebuild_env - variant.gcxx_deps = True - variant.gcxx_root = os.path.join(self.build_dir, 'opt-arc') - variant.build_root = os.path.join(self.build_dir, 'opt-arc-rebuild') - builders = self.gen_mod_dep(variant) - for builder in builders: - arcrebuild_env.Alias('opt-arc-rebuild', builder) - variant.gcxx_deps = False - - - - - dbg_env = env.Copy() - dbg_env.Append(CFLAGS = debug_flags, - CXXFLAGS = debug_flags, - CPPDEFINES = ['NS3_DEBUG_ENABLE', - 'NS3_ASSERT_ENABLE']) - # debug static support - variant.static = True - variant.env = dbg_env - variant.build_root = os.path.join(self.build_dir, 'dbg-static') - builders = self.gen_mod_dep(variant) - for builder in builders: - dbg_env.Alias('dbg-static', builder) - - dbg_env = env.Copy() - dbg_env.Append(CFLAGS=debug_flags, - CXXFLAGS=debug_flags, - CPPDEFINES = ['NS3_DEBUG_ENABLE', - 'NS3_ASSERT_ENABLE']) - # debug shared support - variant.static = False - variant.env = dbg_env - variant.build_root = os.path.join(self.build_dir, 'dbg-shared') - builders = self.gen_mod_dep(variant) - for builder in builders: - dbg_env.Alias('dbg-shared', builder) - - env.Alias('dbg', 'dbg-shared') - env.Alias('opt', 'opt-shared') - env.Default('dbg') - env.Alias('all', ['dbg-shared', 'dbg-static', 'opt-shared', 'opt-static']) - - - # dist support - dist_env = env.Copy() - if dist_env['PLATFORM'] == 'posix' or dist_env['PLATFORM'] == 'darwin': - dist_list = [] - for module in self.__modules: - for f in module.sources: - dist_list.append(os.path.join(module.dir, f)) - for f in module.headers: - dist_list.append(os.path.join(module.dir, f)) - for f in module.inst_headers: - dist_list.append(os.path.join(module.dir, f)) - for f in module.extra_dist: - dist_list.append(os.path.join(module.dir, f)) - for f in self.extra_dist: - dist_list.append(f) - dist_list.append (self.doxygen_config) - dist_list.append('SConstruct') - dist_list.append('build.py') - - targets = [] - basename = self.distname + '-' + self.version - for src in dist_list: - tgt = os.path.join(basename, src) - targets.append(dist_env.MyCopyBuilder(target=tgt, source=src)) - tar = basename + '.tar.gz' - zip = basename + '.zip' - tmp_tar = os.path.join(self.build_dir, tar) - tmp_zip = os.path.join(self.build_dir, zip) - dist_tgt = [tar, zip] - dist_src = [tmp_tar, tmp_zip] - dist_env.Tar(tmp_tar, targets) - dist_env.Zip(tmp_zip, targets) - dist_builder = dist_env.MyCopyBuilder(target=dist_tgt, source=dist_src) - dist_env.Alias('dist', dist_builder) - dist_env.Append(RM_DIR=basename) - dist_env.AddPostAction(dist_builder, dist_env.Action(MyRmTree, - strfunction=MyRmTreePrint)) - dist_builder = dist_env.MyCopyBuilder(target=dist_tgt, source=dist_src) - dist_env.Alias('fastdist', dist_tgt) - - # distcheck - distcheck_list = [] - for src in dist_list: - tgt = os.path.join(self.build_dir, basename, src) - distcheck_list.append(tgt) - untar = env.Command(distcheck_list, tar, - ['cd ' + self.build_dir + ' && tar -zxf ../' + tar]) - scons_dir = os.path.join(self.build_dir, basename) - distcheck_builder = env.Command('x', distcheck_list, - ['cd ' + scons_dir + ' && scons']) - env.AlwaysBuild(distcheck_builder) - env.Alias('distcheck', distcheck_builder) - if self.doxygen_config != '': - doxy = env.Command('doc/html/*', self.doxygen_config, - ['doxygen ' + self.doxygen_config]) - env.AlwaysBuild(doxy) - env.Alias('doc', doxy)