wscript
author Vedran Miletić <rivanvx@gmail.com>
Mon, 01 Apr 2013 22:33:46 +0200
changeset 9277 0f87d1cb030c
parent 9261 13b3ddbaac67
child 9823 a22cd11590bd
child 9872 106410ddd258
permissions -rw-r--r--
Upgrade waf to 1.7.10 and fix included wscripts This is a massive upgrade removing almost all pre-waf 1.6 script code. In addition, this does away with custom pkgconfig.py script for making .pc files and replaces it with waf's builtin mechanism. Massive thanks to Alex Afanasyev for ideas and bugfixing, to Alina Quereilhac for bugfixing and testing, and to Tom Henderson for thorough testing.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
     1
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
     2
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
     3
# python lib modules
647
04f34a8befb8 In WAF win32 builds, add -Wl,--enable-runtime-pseudo-reloc to LINKFLAGS to solve dll linking problems.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 642
diff changeset
     4
import sys
695
90a68c1c4328 WAF: add a dist_hook function to exclude the generated documentation from waf dist
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents: 694
diff changeset
     5
import shutil
1217
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
     6
import types
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
     7
import optparse
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
     8
import os.path
4450
0ca9b9b410a0 bug 567: --enable-static does not work on i686
Andrey Hippo <ahippo@yandex.ru>
parents: 4447
diff changeset
     9
import re
6670
c43b992a4f5b Bug 1032 - Unable to specify multiple Compiler/Linker flags
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6669
diff changeset
    10
import shlex
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    11
import subprocess
7088
3f0535480de9 Bug 1110 - Sort alphabetically and display Modules built in columns
Mitch Watrous <watrous@u.washington.edu>
parents: 7066
diff changeset
    12
import textwrap
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    13
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    14
from utils import read_config_file
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    15
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    16
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
    17
# WAF modules
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    18
from waflib import Utils, Scripting, Configure, Build, Options, TaskGen, Context, Task, Logs, Errors
7494
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
    19
from waflib.Errors import WafError
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
    20
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    21
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    22
# local modules
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    23
import wutils
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
    24
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
    25
7024
4392d52b3536 Make examples not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 7023
diff changeset
    26
# By default, all modules will be enabled, examples will be disabled,
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    27
# and tests will be disabled.
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    28
modules_enabled  = ['all_modules']
7024
4392d52b3536 Make examples not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 7023
diff changeset
    29
examples_enabled = False
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    30
tests_enabled    = False
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
    31
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    32
# Get the information out of the NS-3 configuration file.
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    33
config_file_exists = False
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
    34
(config_file_exists, modules_enabled, examples_enabled, tests_enabled) = read_config_file()
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
    35
5447
bfa1fc626775 Upgrade to upstream WAF 1.5.9 plus a bunch of 'waf tools' layered on top.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5201
diff changeset
    36
sys.path.insert(0, os.path.abspath('waf-tools'))
6274
3e8b3f2306c9 Upgrade to WAF 1.5.16. Fixes bug #855.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6254
diff changeset
    37
try:
3e8b3f2306c9 Upgrade to WAF 1.5.16. Fixes bug #855.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6254
diff changeset
    38
    import cflags # override the build profiles from waf
3e8b3f2306c9 Upgrade to WAF 1.5.16. Fixes bug #855.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6254
diff changeset
    39
finally:
3e8b3f2306c9 Upgrade to WAF 1.5.16. Fixes bug #855.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6254
diff changeset
    40
    sys.path.pop(0)
5447
bfa1fc626775 Upgrade to upstream WAF 1.5.9 plus a bunch of 'waf tools' layered on top.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5201
diff changeset
    41
4069
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    42
cflags.profiles = {
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    43
	# profile name: [optimization_level, warnings_level, debug_level]
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    44
	'debug':     [0, 2, 3],
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    45
	'optimized': [3, 2, 1],
5452
15524c57a627 introduce new build profile "release": -O3 -g0.
Andrey Mazo <mazo@iitp.ru>
parents: 5448
diff changeset
    46
	'release':   [3, 2, 0],
4069
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    47
	}
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    48
cflags.default_profile = 'debug'
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
    49
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
    50
Configure.autoconfig = 0
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    51
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    52
# the following two variables are used by the target "waf dist"
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
    53
VERSION = file("VERSION", "rt").read().strip()
694
bfad4514a789 WAF: correct values of VERSION and APPNAME, for waf dist
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents: 693
diff changeset
    54
APPNAME = 'ns'
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    55
3866
9e946fee902c Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3845
diff changeset
    56
wutils.VERSION = VERSION
9e946fee902c Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3845
diff changeset
    57
wutils.APPNAME = APPNAME
9e946fee902c Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3845
diff changeset
    58
7688
6f5c9b870e45 Still Bug 1327: disable VNUM in libraries, fix the .pc file deps
Vedran Miletić
parents: 7682
diff changeset
    59
# we don't use VNUM anymore (see bug #1327 for details)
7463
53b784adf3f4 Bug 1251 - OSX: test.py reports dyld: Library not loaded
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7430
diff changeset
    60
wutils.VNUM = None
7320
7334aa839e46 Bug 1175 postfix: only enable vnum if the VERSION matches x.y(.z) dotted number format
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7293
diff changeset
    61
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    62
# these variables are mandatory ('/' are converted automatically)
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
    63
top = '.'
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
    64
out = 'build'
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    65
4594
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    66
def load_env():
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    67
    bld_cls = getattr(Utils.g_module, 'build_context', Utils.Context)
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    68
    bld_ctx = bld_cls()
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    69
    bld_ctx.load_dirs(os.path.abspath(os.path.join (srcdir,'..')),
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    70
                      os.path.abspath(os.path.join (srcdir,'..', blddir)))
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    71
    bld_ctx.load_envs()
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    72
    env = bld_ctx.get_env()
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    73
    return env
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    74
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    75
def get_files(base_dir):
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    76
    retval = []
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    77
    reference=os.path.dirname(base_dir)
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    78
    for root, dirs, files in os.walk(base_dir):
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    79
        if root.find('.hg') != -1:
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    80
            continue
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    81
        for file in files:
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    82
            if file.find('.hg') != -1:
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    83
                continue
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    84
            fullname = os.path.join(root,file)
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    85
            # we can't use os.path.relpath because it's new in python 2.6
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    86
            relname = fullname.replace(reference + '/','')
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    87
            retval.append([fullname,relname])
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    88
    return retval
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
    89
2881
81d1080cd0ae Integrate regression testing into the main waf script.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2866
diff changeset
    90
1531
ebd805503b55 WAF: update to WAF trunk to get bug fixes and smaller script.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1506
diff changeset
    91
def dist_hook():
2886
8226157800a8 Create regression traces tarball automatically on waf dist.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2884
diff changeset
    92
    import tarfile
921
37b54ed96b09 WAF: ignore errors on shutil.rmtree in dist_hook, so that waf dist works even when no docs were previously generated.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 919
diff changeset
    93
    shutil.rmtree("doc/html", True)
37b54ed96b09 WAF: ignore errors on shutil.rmtree in dist_hook, so that waf dist works even when no docs were previously generated.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 919
diff changeset
    94
    shutil.rmtree("doc/latex", True)
3627
672f2a6de8b4 Exclude any possible 'nsc' folder from the dist tarball (nsc is ~= 100MB).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3625
diff changeset
    95
    shutil.rmtree("nsc", True)
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
    96
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
    97
# Print the sorted list of module names in columns.
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
    98
def print_module_names(names):
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
    99
    # Sort the list of module names.
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   100
    names.sort()
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   101
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   102
    # Print the list of module names in 3 columns.
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   103
    i = 1
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   104
    for name in names:
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   105
        print name.ljust(25),
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   106
        if i == 3:
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   107
                print
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   108
                i = 0
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   109
        i = i+1
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   110
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   111
    if i != 1:
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   112
        print
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   113
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   114
def options(opt):
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   115
    # options provided by the modules
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   116
    opt.load('compiler_c')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   117
    opt.load('compiler_cxx')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   118
    opt.load('cflags')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   119
    opt.load('gnu_dirs')
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   120
2846
7689461231ac start of regression tests
Craig Dowell <craigdo@ee.washington.edu>
parents: 2622
diff changeset
   121
    opt.add_option('--cwd',
7689461231ac start of regression tests
Craig Dowell <craigdo@ee.washington.edu>
parents: 2622
diff changeset
   122
                   help=('Set the working directory for a program.'),
7689461231ac start of regression tests
Craig Dowell <craigdo@ee.washington.edu>
parents: 2622
diff changeset
   123
                   action="store", type="string", default=None,
7689461231ac start of regression tests
Craig Dowell <craigdo@ee.washington.edu>
parents: 2622
diff changeset
   124
                   dest='cwd_launch')
7689461231ac start of regression tests
Craig Dowell <craigdo@ee.washington.edu>
parents: 2622
diff changeset
   125
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   126
    opt.add_option('--enable-gcov',
787
778784e6bd8d WAF: simplify --debug-level option to only have debug and optimized as possible values (debug becomes the former ultradebug); Add a warning to some options help text saying they only work in configure.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 786
diff changeset
   127
                   help=('Enable code coverage analysis.'
778784e6bd8d WAF: simplify --debug-level option to only have debug and optimized as possible values (debug becomes the former ultradebug); Add a warning to some options help text saying they only work in configure.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 786
diff changeset
   128
                         ' WARNING: this option only has effect '
778784e6bd8d WAF: simplify --debug-level option to only have debug and optimized as possible values (debug becomes the former ultradebug); Add a warning to some options help text saying they only work in configure.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 786
diff changeset
   129
                         'with the configure command.'),
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   130
                   action="store_true", default=False,
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   131
                   dest='enable_gcov')
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   132
2866
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   133
    opt.add_option('--no-task-lines',
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   134
                   help=("Don't print task lines, i.e. messages saying which tasks are being executed by WAF."
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   135
                         "  Coupled with a single -v will cause WAF to output only the executed commands,"
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   136
                         " just like 'make' does by default."),
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   137
                   action="store_true", default=False,
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   138
                   dest='no_task_lines')
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   139
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   140
    opt.add_option('--lcov-report',
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   141
                   help=('Generate a code coverage report '
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   142
                         '(use this option at build time, not in configure)'),
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   143
                   action="store_true", default=False,
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   144
                   dest='lcov_report')
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   145
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
   146
    opt.add_option('--run',
935
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   147
                   help=('Run a locally built program; argument can be a program name,'
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   148
                         ' or a command starting with the program name.'),
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
   149
                   type="string", default='', dest='run')
6676
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   150
    opt.add_option('--visualize',
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   151
                   help=('Modify --run arguments to enable the visualizer'),
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   152
                   action="store_true", default=False, dest='visualize')
935
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   153
    opt.add_option('--command-template',
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   154
                   help=('Template of the command used to run the program given by --run;'
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   155
                         ' It should be a shell command string containing %s inside,'
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   156
                         ' which will be replaced by the actual program.'),
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   157
                   type="string", default=None, dest='command_template')
3419
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   158
    opt.add_option('--pyrun',
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   159
                   help=('Run a python program using locally built ns3 python module;'
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   160
                         ' argument is the path to the python program, optionally followed'
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   161
                         ' by command-line options that are passed to the program.'),
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   162
                   type="string", default='', dest='pyrun')
2207
d841cca00990 Add a --valgrind WAF option (bug #124)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2178
diff changeset
   163
    opt.add_option('--valgrind',
d841cca00990 Add a --valgrind WAF option (bug #124)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2178
diff changeset
   164
                   help=('Change the default command template to run programs and unit tests with valgrind'),
d841cca00990 Add a --valgrind WAF option (bug #124)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2178
diff changeset
   165
                   action="store_true", default=False,
d841cca00990 Add a --valgrind WAF option (bug #124)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2178
diff changeset
   166
                   dest='valgrind')
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
   167
    opt.add_option('--shell',
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   168
                   help=('DEPRECATED (run ./waf shell)'),
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
   169
                   action="store_true", default=False,
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
   170
                   dest='shell')
4164
1f6ae48061a9 checkpoint tap bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4119
diff changeset
   171
    opt.add_option('--enable-sudo',
1f6ae48061a9 checkpoint tap bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4119
diff changeset
   172
                   help=('Use sudo to setup suid bits on ns3 executables.'),
1f6ae48061a9 checkpoint tap bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4119
diff changeset
   173
                   dest='enable_sudo', action='store_true',
1f6ae48061a9 checkpoint tap bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4119
diff changeset
   174
                   default=False)
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   175
    opt.add_option('--enable-tests',
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   176
                   help=('Build the ns-3 tests.'),
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   177
                   dest='enable_tests', action='store_true',
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   178
                   default=False)
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   179
    opt.add_option('--disable-tests',
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   180
                   help=('Do not build the ns-3 tests.'),
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   181
                   dest='disable_tests', action='store_true',
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   182
                   default=False)
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   183
    opt.add_option('--enable-examples',
7025
32212c736ab4 Move examples out of samples directory and remove it
Mitch Watrous <watrous@u.washington.edu>
parents: 7024
diff changeset
   184
                   help=('Build the ns-3 examples.'),
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   185
                   dest='enable_examples', action='store_true',
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   186
                   default=False)
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   187
    opt.add_option('--disable-examples',
7025
32212c736ab4 Move examples out of samples directory and remove it
Mitch Watrous <watrous@u.washington.edu>
parents: 7024
diff changeset
   188
                   help=('Do not build the ns-3 examples.'),
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   189
                   dest='disable_examples', action='store_true',
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   190
                   default=False)
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   191
    opt.add_option('--check',
5361
e8989b44bffb Doxygen and wscript messages point to test.py
Craig Dowell <craigdo@ee.washington.edu>
parents: 5252
diff changeset
   192
                   help=('DEPRECATED (run ./test.py)'),
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   193
                   default=False, dest='check', action="store_true")
4392
25d38a0c9851 bug 537: no support to build static ns-3 binaries
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4388
diff changeset
   194
    opt.add_option('--enable-static',
25d38a0c9851 bug 537: no support to build static ns-3 binaries
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4388
diff changeset
   195
                   help=('Compile NS-3 statically: works only on linux, without python'),
25d38a0c9851 bug 537: no support to build static ns-3 binaries
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4388
diff changeset
   196
                   dest='enable_static', action='store_true',
25d38a0c9851 bug 537: no support to build static ns-3 binaries
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4388
diff changeset
   197
                   default=False)
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 6099
diff changeset
   198
    opt.add_option('--enable-mpi',
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 6099
diff changeset
   199
                   help=('Compile NS-3 with MPI and distributed simulation support'),
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 6099
diff changeset
   200
                   dest='enable_mpi', action='store_true',
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 6099
diff changeset
   201
                   default=False)
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   202
    opt.add_option('--doxygen-no-build',
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   203
                   help=('Run doxygen to generate html documentation from source comments, '
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   204
                         'but do not wait for ns-3 to finish the full build.'),
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   205
                   action="store_true", default=False,
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   206
                   dest='doxygen_no_build')
2881
81d1080cd0ae Integrate regression testing into the main waf script.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2866
diff changeset
   207
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   208
    # options provided in subdirectories
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   209
    opt.recurse('src')
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   210
    opt.recurse('bindings/python')
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   211
    opt.recurse('src/internet')
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   212
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   213
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   214
def _check_compilation_flag(conf, flag, mode='cxx', linkflags=None):
3407
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   215
    """
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   216
    Checks if the C++ compiler accepts a certain compilation flag or flags
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   217
    flag: can be a string or a list of strings
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   218
    """
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   219
    l = []
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   220
    if flag:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   221
        l.append(flag)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   222
    if isinstance(linkflags, list):
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   223
        l.extend(linkflags)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   224
    else:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   225
        if linkflags:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   226
            l.append(linkflags)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   227
    if len(l) > 1:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   228
        flag_str = 'flags ' + ' '.join(l)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   229
    else:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   230
        flag_str = 'flag ' + ' '.join(l)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   231
    if flag_str > 28:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   232
        flag_str = flag_str[:28] + "..."
3407
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   233
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   234
    conf.start_msg('Checking for compilation %s support' % (flag_str,))
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   235
    env = conf.env.derive()
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   236
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   237
    if mode == 'cc':
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   238
        mode = 'c'
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   239
6099
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   240
    if mode == 'cxx':
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   241
        fname = 'test.cc'
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   242
        env.append_value('CXXFLAGS', flag)
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   243
    else:
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   244
        fname = 'test.c'
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   245
        env.append_value('CFLAGS', flag)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   246
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   247
    if linkflags is not None:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   248
        env.append_value("LINKFLAGS", linkflags)
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   249
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   250
    try:
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   251
        retval = conf.run_c_code(code='#include <stdio.h>\nint main() { return 0; }\n',
6099
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   252
                                 env=env, compile_filename=fname,
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   253
                                 features=[mode, mode+'program'], execute=False)
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   254
    except Errors.ConfigurationError:
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   255
        ok = False
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   256
    else:
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   257
        ok = (retval == 0)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   258
    conf.end_msg(ok)
4069
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
   259
    return ok
3407
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   260
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   261
    
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   262
def report_optional_feature(conf, name, caption, was_enabled, reason_not_enabled):
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   263
    conf.env.append_value('NS3_OPTIONAL_FEATURES', [(name, caption, was_enabled, reason_not_enabled)])
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   264
7712
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   265
def check_optional_feature(conf, name):
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   266
    for (name1, caption, was_enabled, reason_not_enabled) in conf.env.NS3_OPTIONAL_FEATURES:
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   267
        if name1 == name:
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   268
            return was_enabled
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   269
    raise KeyError("Feature %r not declared yet" % (name,))
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   270
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   271
# starting with waf 1.6, conf.check() becomes fatal by default if the
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   272
# test fails, this alternative method makes the test non-fatal, as it
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   273
# was in waf <= 1.5
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   274
def _check_nonfatal(conf, *args, **kwargs):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   275
    try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   276
        return conf.check(*args, **kwargs)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   277
    except conf.errors.ConfigurationError:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   278
        return None
3407
038f13c8741c Check that the compiler accepts -Wno-error=deprecated-declarations before using it
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3406
diff changeset
   279
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   280
def configure(conf):
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   281
    conf.load('relocation', tooldir=['waf-tools'])
7544
51f8237d285a Bug 1265 - Make ns-3 directory "movable"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7539
diff changeset
   282
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   283
    # attach some extra methods
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   284
    conf.check_nonfatal = types.MethodType(_check_nonfatal, conf)
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   285
    conf.check_compilation_flag = types.MethodType(_check_compilation_flag, conf)
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   286
    conf.report_optional_feature = types.MethodType(report_optional_feature, conf)
7712
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   287
    conf.check_optional_feature = types.MethodType(check_optional_feature, conf)
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   288
    conf.env['NS3_OPTIONAL_FEATURES'] = []
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   289
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   290
    conf.load('compiler_c')
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   291
    conf.load('compiler_cxx')
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   292
    conf.load('cflags', tooldir=['waf-tools'])
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   293
    conf.load('command', tooldir=['waf-tools'])
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   294
    conf.load('gnu_dirs')
7345
850237ab2111 Bug 1199 - waf install doesn't work on x86_64
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7337
diff changeset
   295
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   296
    env = conf.env
4594
14ce84fd7ae3 make dist generation work again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4550
diff changeset
   297
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   298
    if Options.options.enable_gcov:
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
   299
        env['GCOV_ENABLED'] = True
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   300
        env.append_value('CCFLAGS', '-fprofile-arcs')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   301
        env.append_value('CCFLAGS', '-ftest-coverage')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   302
        env.append_value('CXXFLAGS', '-fprofile-arcs')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   303
        env.append_value('CXXFLAGS', '-ftest-coverage')
7551
5d13d02dae0f Update lcov to version 1.9
Tom Henderson <tomh@tomh.org>
parents: 7544
diff changeset
   304
        env.append_value('LINKFLAGS', '-lgcov')
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   305
4069
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
   306
    if Options.options.build_profile == 'debug':
7494
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   307
        env.append_value('DEFINES', 'NS3_ASSERT_ENABLE')
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   308
        env.append_value('DEFINES', 'NS3_LOG_ENABLE')
1426
30b9f2b59a1c WAF: in optimized builds, replace -O2 with -O3
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1425
diff changeset
   309
4190
b6734a5d920c work around to allow FreeBSD to run tap-bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4179
diff changeset
   310
    env['PLATFORM'] = sys.platform
7681
0873edb445e8 Bug 1327 - Version installed ns-3 files
Gustavo Carneiro / Vedran Miletić
parents: 7645
diff changeset
   311
    env['BUILD_PROFILE'] = Options.options.build_profile
8894
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   312
    if Options.options.build_profile == "release":
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   313
        env['BUILD_SUFFIX'] = ''
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   314
    else:
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   315
        env['BUILD_SUFFIX'] = '-'+Options.options.build_profile
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   316
    
7682
8813ef4cec0f Bug 1339 - test.py uses the old name for the test runner
Mitch Watrous <watrous@u.washington.edu>
parents: 7681
diff changeset
   317
    env['APPNAME'] = wutils.APPNAME
8813ef4cec0f Bug 1339 - test.py uses the old name for the test runner
Mitch Watrous <watrous@u.washington.edu>
parents: 7681
diff changeset
   318
    env['VERSION'] = wutils.VERSION
4190
b6734a5d920c work around to allow FreeBSD to run tap-bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4179
diff changeset
   319
5252
481053e0cd10 Bug 681: wrong compilation options for icpc (Intel C/C++ Compiler)
Andrey Mazo <mazo@iitp.ru>
parents: 5201
diff changeset
   320
    if conf.env['CXX_NAME'] in ['gcc', 'icc']:
5463
f2f95faff5bb omit -march=native for <gcc-4.2;
Andrey Mazo <mazo@iitp.ru>
parents: 5454
diff changeset
   321
        if Options.options.build_profile == 'release': 
f2f95faff5bb omit -march=native for <gcc-4.2;
Andrey Mazo <mazo@iitp.ru>
parents: 5454
diff changeset
   322
            env.append_value('CXXFLAGS', '-fomit-frame-pointer') 
8894
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   323
        if Options.options.build_profile == 'optimized': 
5463
f2f95faff5bb omit -march=native for <gcc-4.2;
Andrey Mazo <mazo@iitp.ru>
parents: 5454
diff changeset
   324
            if conf.check_compilation_flag('-march=native'):
f2f95faff5bb omit -march=native for <gcc-4.2;
Andrey Mazo <mazo@iitp.ru>
parents: 5454
diff changeset
   325
                env.append_value('CXXFLAGS', '-march=native') 
f2f95faff5bb omit -march=native for <gcc-4.2;
Andrey Mazo <mazo@iitp.ru>
parents: 5454
diff changeset
   326
4348
0572c4011b3d Enable the link option --enable-auto-import on cygwin; closes #525.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4333
diff changeset
   327
        if sys.platform == 'win32':
4069
430a6edb0fa0 New WAF cflags tool, to add back the compilation flags (debug/optimized)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4064
diff changeset
   328
            env.append_value("LINKFLAGS", "-Wl,--enable-runtime-pseudo-reloc")
4348
0572c4011b3d Enable the link option --enable-auto-import on cygwin; closes #525.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4333
diff changeset
   329
        elif sys.platform == 'cygwin':
0572c4011b3d Enable the link option --enable-auto-import on cygwin; closes #525.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4333
diff changeset
   330
            env.append_value("LINKFLAGS", "-Wl,--enable-auto-import")
4446
56b16bcd3afc Add -Wl,--soname=libns3.so to link flags to allow dlopen hacks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4441
diff changeset
   331
9137
822abb428976 Allow using CXX='distcc g++' with ./waf configure.
Vedran Miletić <rivanvx@gmail.com>
parents: 9076
diff changeset
   332
        cxx = env['CXX']
9143
1573a6ddf0fe Fix bug introduced by changeset 9137:822abb428976 Allow using CXX='distcc g++' with ./waf configure.
Vedran Miletić <rivanvx@gmail.com>
parents: 9137
diff changeset
   333
        cxx_check_libstdcxx = cxx + ['-print-file-name=libstdc++.so']
9137
822abb428976 Allow using CXX='distcc g++' with ./waf configure.
Vedran Miletić <rivanvx@gmail.com>
parents: 9076
diff changeset
   334
        p = subprocess.Popen(cxx_check_libstdcxx, stdout=subprocess.PIPE)
4387
dff0992d7cce Make sure the 'g++ -print-file-name' code does not break if gcc doesn't know anything about the libstdc++.so file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4386
diff changeset
   335
        libstdcxx_location = os.path.dirname(p.stdout.read().strip())
4386
2e79cbd62d28 bug 553: Running code built with a special gcc
Gustavo Carneiro <gjcarneiro@gmail.com>
parents: 4369
diff changeset
   336
        p.wait()
4387
dff0992d7cce Make sure the 'g++ -print-file-name' code does not break if gcc doesn't know anything about the libstdc++.so file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4386
diff changeset
   337
        if libstdcxx_location:
dff0992d7cce Make sure the 'g++ -print-file-name' code does not break if gcc doesn't know anything about the libstdc++.so file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4386
diff changeset
   338
            conf.env.append_value('NS3_MODULE_PATH', libstdcxx_location)
647
04f34a8befb8 In WAF win32 builds, add -Wl,--enable-runtime-pseudo-reloc to LINKFLAGS to solve dll linking problems.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 642
diff changeset
   339
4447
0b42685f6b78 Don't event try to enable -Wl,--soname option if we're not on linux.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4446
diff changeset
   340
        if Options.platform in ['linux']:
0b42685f6b78 Don't event try to enable -Wl,--soname option if we're not on linux.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4446
diff changeset
   341
            if conf.check_compilation_flag('-Wl,--soname=foo'):
0b42685f6b78 Don't event try to enable -Wl,--soname option if we're not on linux.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4446
diff changeset
   342
                env['WL_SONAME_SUPPORTED'] = True
4446
56b16bcd3afc Add -Wl,--soname=libns3.so to link flags to allow dlopen hacks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4441
diff changeset
   343
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   344
    env['ENABLE_STATIC_NS3'] = False
7491
dea6f61d3247 Remove the --enable-shared-and-static option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7489
diff changeset
   345
    if Options.options.enable_static:
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   346
        if Options.platform == 'darwin':
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   347
            if conf.check_compilation_flag(flag=[], linkflags=['-Wl,-all_load']):
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   348
                conf.report_optional_feature("static", "Static build", True, '')
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   349
                env['ENABLE_STATIC_NS3'] = True
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   350
            else:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   351
                conf.report_optional_feature("static", "Static build", False,
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   352
                                             "Link flag -Wl,-all_load does not work")
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   353
        else:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   354
            if conf.check_compilation_flag(flag=[], linkflags=['-Wl,--whole-archive,-Bstatic', '-Wl,-Bdynamic,--no-whole-archive']):
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   355
                conf.report_optional_feature("static", "Static build", True, '')
7539
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   356
                env['ENABLE_STATIC_NS3'] = True
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   357
            else:
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   358
                conf.report_optional_feature("static", "Static build", False,
fd2a26e455b3 Determine whether static can be enabled based on link flags tests rather than a hardcoded whitelist of supported platforms
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7538
diff changeset
   359
                                             "Link flag -Wl,--whole-archive,-Bstatic does not work")
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   360
7636
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   361
    # Set this so that the lists won't be printed at the end of this
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   362
    # configure command.
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   363
    conf.env['PRINT_BUILT_MODULES_AT_END'] = False
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   364
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   365
    conf.env['MODULES_NOT_BUILT'] = []
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   366
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   367
    conf.recurse('bindings/python')
7712
e22640804bf7 Bug 1355 - visualizer dependencies not detected at buildtime
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7707
diff changeset
   368
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   369
    conf.recurse('src')
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   370
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   371
    # Set the list of enabled modules.
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   372
    if Options.options.enable_modules:
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   373
        # Use the modules explicitly enabled. 
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   374
        conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   375
                                           Options.options.enable_modules.split(',')]
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   376
    else:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   377
        # Use the enabled modules list from the ns3 configuration file.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   378
        if modules_enabled[0] == 'all_modules':
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   379
            # Enable all modules if requested.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   380
            conf.env['NS3_ENABLED_MODULES'] = conf.env['NS3_MODULES']
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   381
        else:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   382
            # Enable the modules from the list.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   383
            conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   384
                                               modules_enabled]
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   385
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   386
    # Add the template module to the list of enabled modules that
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   387
    # should not be built if this is a static build on Darwin.  They
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   388
    # don't work there for the template module, and this is probably
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   389
    # because the template module has no source files.
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   390
    if conf.env['ENABLE_STATIC_NS3'] and sys.platform == 'darwin':
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   391
        conf.env['MODULES_NOT_BUILT'].append('template')
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   392
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   393
    # Remove these modules from the list of enabled modules.
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   394
    for not_built in conf.env['MODULES_NOT_BUILT']:
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   395
        not_built_name = 'ns3-' + not_built
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   396
        if not_built_name in conf.env['NS3_ENABLED_MODULES']:
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   397
            conf.env['NS3_ENABLED_MODULES'].remove(not_built_name)
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   398
            if not conf.env['NS3_ENABLED_MODULES']:
7496
ce1ec79d488c waf1.6: make the all_modules in src/wscript be automatically discovered
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7495
diff changeset
   399
                raise WafError('Exiting because the ' + not_built + ' module can not be built and it was the only one enabled.')
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   400
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   401
    conf.recurse('src/mpi')
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   402
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   403
    # for suid bits
7524
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   404
    try:
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   405
        conf.find_program('sudo', var='SUDO')
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   406
    except WafError:
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   407
        pass
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   408
4171
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   409
    why_not_sudo = "because we like it"
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   410
    if Options.options.enable_sudo and conf.env['SUDO']:
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   411
        env['ENABLE_SUDO'] = True
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   412
    else:
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   413
        env['ENABLE_SUDO'] = False
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   414
        if Options.options.enable_sudo:
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   415
            why_not_sudo = "program sudo not found"
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   416
        else:
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   417
            why_not_sudo = "option --enable-sudo not selected"
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   418
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   419
    conf.report_optional_feature("ENABLE_SUDO", "Use sudo to set suid bit", env['ENABLE_SUDO'], why_not_sudo)
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   420
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   421
    # Decide if tests will be built or not.
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   422
    if Options.options.enable_tests:
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   423
        # Tests were explicitly enabled. 
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   424
        env['ENABLE_TESTS'] = True
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   425
        why_not_tests = "option --enable-tests selected"
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   426
    elif Options.options.disable_tests:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   427
        # Tests were explicitly disabled. 
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   428
        env['ENABLE_TESTS'] = False
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   429
        why_not_tests = "option --disable-tests selected"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   430
    else:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   431
        # Enable tests based on the ns3 configuration file.
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   432
        env['ENABLE_TESTS'] = tests_enabled
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   433
        if config_file_exists:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   434
            why_not_tests = "based on configuration file"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   435
        elif tests_enabled:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   436
            why_not_tests = "defaults to enabled"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   437
        else:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   438
            why_not_tests = "defaults to disabled"
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   439
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   440
    conf.report_optional_feature("ENABLE_TESTS", "Build tests", env['ENABLE_TESTS'], why_not_tests)
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   441
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   442
    # Decide if examples will be built or not.
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   443
    if Options.options.enable_examples:
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   444
        # Examples were explicitly enabled. 
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   445
        env['ENABLE_EXAMPLES'] = True
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   446
        why_not_examples = "option --enable-examples selected"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   447
    elif Options.options.disable_examples:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   448
        # Examples were explicitly disabled. 
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   449
        env['ENABLE_EXAMPLES'] = False
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   450
        why_not_examples = "option --disable-examples selected"
7023
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   451
    else:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   452
        # Enable examples based on the ns3 configuration file.
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   453
        env['ENABLE_EXAMPLES'] = examples_enabled
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   454
        if config_file_exists:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   455
            why_not_examples = "based on configuration file"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   456
        elif examples_enabled:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   457
            why_not_examples = "defaults to enabled"
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   458
        else:
af9c5ac72f2c Make examples and tests be enabled from the .ns3rc file
Mitch Watrous <watrous@u.washington.edu>
parents: 7019
diff changeset
   459
            why_not_examples = "defaults to disabled"
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   460
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   461
    env['EXAMPLE_DIRECTORIES'] = []
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   462
    for dir in os.listdir('examples'):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   463
        if dir.startswith('.') or dir == 'CVS':
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   464
            continue
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   465
        if os.path.isdir(os.path.join('examples', dir)):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   466
            env['EXAMPLE_DIRECTORIES'].append(dir)
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents: 6834
diff changeset
   467
7025
32212c736ab4 Move examples out of samples directory and remove it
Mitch Watrous <watrous@u.washington.edu>
parents: 7024
diff changeset
   468
    conf.report_optional_feature("ENABLE_EXAMPLES", "Build examples", env['ENABLE_EXAMPLES'], 
5369
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   469
                                 why_not_examples)
86beb5869f67 split examples, add examples, tweak test.py to minimize builds
Craig Dowell <craigdo@ee.washington.edu>
parents: 5368
diff changeset
   470
7524
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   471
    try:
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   472
        conf.find_program('valgrind', var='VALGRIND')
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   473
    except WafError:
b5df4870db14 Don't fail on missing sudo or valgrind
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7518
diff changeset
   474
        pass
4119
9ffcf2400aa5 Bug #323: waf --valgrind doesn't check for valgrind first
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4118
diff changeset
   475
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   476
    # These flags are used for the implicitly dependent modules.
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   477
    if env['ENABLE_STATIC_NS3']:
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   478
        if sys.platform == 'darwin':
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   479
            env.STLIB_MARKER = '-Wl,-all_load'
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   480
        else:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   481
            env.STLIB_MARKER = '-Wl,--whole-archive,-Bstatic'
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   482
            env.SHLIB_MARKER = '-Wl,-Bdynamic,--no-whole-archive'
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   483
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   484
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   485
    have_gsl = conf.check_cfg(package='gsl', args=['--cflags', '--libs'],
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   486
                              uselib_store='GSL', mandatory=False)
4773
904c1803d5dc test framework should probably work on all supported machines
Craig Dowell <craigdo@ee.washington.edu>
parents: 4770
diff changeset
   487
    conf.env['ENABLE_GSL'] = have_gsl
904c1803d5dc test framework should probably work on all supported machines
Craig Dowell <craigdo@ee.washington.edu>
parents: 4770
diff changeset
   488
    conf.report_optional_feature("GSL", "GNU Scientific Library (GSL)",
904c1803d5dc test framework should probably work on all supported machines
Craig Dowell <craigdo@ee.washington.edu>
parents: 4770
diff changeset
   489
                                 conf.env['ENABLE_GSL'],
904c1803d5dc test framework should probably work on all supported machines
Craig Dowell <craigdo@ee.washington.edu>
parents: 4770
diff changeset
   490
                                 "GSL not found")
4392
25d38a0c9851 bug 537: no support to build static ns-3 binaries
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4388
diff changeset
   491
5996
84c404ad1d26 WAF: allow NS-3 modules to compile pure C code sources mixed with the C++ ones
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5975
diff changeset
   492
    # for compiling C code, copy over the CXX* flags
84c404ad1d26 WAF: allow NS-3 modules to compile pure C code sources mixed with the C++ ones
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5975
diff changeset
   493
    conf.env.append_value('CCFLAGS', conf.env['CXXFLAGS'])
84c404ad1d26 WAF: allow NS-3 modules to compile pure C code sources mixed with the C++ ones
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5975
diff changeset
   494
6362
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   495
    def add_gcc_flag(flag):
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   496
        if env['COMPILER_CXX'] == 'g++' and 'CXXFLAGS' not in os.environ:
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   497
            if conf.check_compilation_flag(flag, mode='cxx'):
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   498
                env.append_value('CXXFLAGS', flag)
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   499
        if env['COMPILER_CC'] == 'gcc' and 'CCFLAGS' not in os.environ:
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   500
            if conf.check_compilation_flag(flag, mode='cc'):
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   501
                env.append_value('CCFLAGS', flag)
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   502
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   503
    add_gcc_flag('-Wno-error=deprecated-declarations')
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   504
    add_gcc_flag('-fstrict-aliasing')
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   505
    add_gcc_flag('-Wstrict-aliasing')
ca7a4f7e24e7 Add -fstrict-aliasing and -Wstrict-aliasing compilation flags, to catch some potential strict aliasing violations earlier
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6274
diff changeset
   506
7494
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   507
    try:
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   508
        conf.find_program('doxygen', var='DOXYGEN')
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   509
    except WafError:
d93f5e8e0a59 waf-1.6: Mac OSX and other fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7493
diff changeset
   510
        pass
6099
b37a72870f2d Test the support for the -Wno-error=deprecated-declarations option independently for the C and C++ compilers
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6001
diff changeset
   511
5454
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   512
    # append user defined flags after all our ones
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   513
    for (confvar, envvar) in [['CCFLAGS', 'CCFLAGS_EXTRA'],
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   514
                              ['CXXFLAGS', 'CXXFLAGS_EXTRA'],
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   515
                              ['LINKFLAGS', 'LINKFLAGS_EXTRA'],
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   516
                              ['LINKFLAGS', 'LDFLAGS_EXTRA']]:
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   517
        if envvar in os.environ:
6670
c43b992a4f5b Bug 1032 - Unable to specify multiple Compiler/Linker flags
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6669
diff changeset
   518
            value = shlex.split(os.environ[envvar])
c43b992a4f5b Bug 1032 - Unable to specify multiple Compiler/Linker flags
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6669
diff changeset
   519
            conf.env.append_value(confvar, value)
5454
6db6a279dfff append {CC,CXX,LINK,LD}FLAGS_EXTRA to corresponding {CC,CXX,LINK}FLAGS.
Andrey Mazo <mazo@iitp.ru>
parents: 5453
diff changeset
   520
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   521
    # Write a summary of optional features status
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   522
    print "---- Summary of optional NS-3 features:"
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   523
    for (name, caption, was_enabled, reason_not_enabled) in conf.env['NS3_OPTIONAL_FEATURES']:
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   524
        if was_enabled:
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   525
            status = 'enabled'
9168
2ff57d50b827 add colors to optional features report
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 9143
diff changeset
   526
            color = 'GREEN'
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   527
        else:
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   528
            status = 'not enabled (%s)' % reason_not_enabled
9168
2ff57d50b827 add colors to optional features report
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 9143
diff changeset
   529
            color = 'RED'
2ff57d50b827 add colors to optional features report
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 9143
diff changeset
   530
        print "%-30s: %s%s%s" % (caption, Logs.colors_lst[color], status, Logs.colors_lst['NORMAL'])
3625
30afad8324d5 Add a summary of optional features at the end of the configuration stage.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3623
diff changeset
   531
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   532
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   533
class SuidBuild_task(Task.Task):
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   534
    """task that makes a binary Suid
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   535
    """
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   536
    after = 'link'
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   537
    def __init__(self, *args, **kwargs):
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   538
        super(SuidBuild_task, self).__init__(*args, **kwargs)
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   539
        self.m_display = 'build-suid'
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   540
        try:
7692
2a3b879f4b5f Fix issue with --enable-sudo, broken by the versioning of programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7688
diff changeset
   541
            program_obj = wutils.find_program(self.generator.name, self.generator.env)
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   542
        except ValueError, ex:
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   543
            raise WafError(str(ex))
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   544
        program_node = program_obj.path.find_or_declare(program_obj.target)
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   545
        self.filename = program_node.get_bld().abspath()
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   546
4179
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   547
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   548
    def run(self):
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   549
        print >> sys.stderr, 'setting suid bit on executable ' + self.filename
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   550
        if subprocess.Popen(['sudo', 'chown', 'root', self.filename]).wait():
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   551
            return 1
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   552
        if subprocess.Popen(['sudo', 'chmod', 'u+s', self.filename]).wait():
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   553
            return 1
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   554
        return 0
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   555
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   556
    def runnable_status(self):
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   557
        "RUN_ME SKIP_ME or ASK_LATER"
7693
c452ea61d893 Fix small bug in SuidBuild_task
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7692
diff changeset
   558
        try:
c452ea61d893 Fix small bug in SuidBuild_task
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7692
diff changeset
   559
            st = os.stat(self.filename)
c452ea61d893 Fix small bug in SuidBuild_task
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7692
diff changeset
   560
        except OSError:
c452ea61d893 Fix small bug in SuidBuild_task
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7692
diff changeset
   561
            return Task.ASK_LATER
4179
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   562
        if st.st_uid == 0:
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   563
            return Task.SKIP_ME
4179
2758871405b7 tweak wifi example, fix waf problems (thanks to Gustavo)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4172
diff changeset
   564
        else:
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   565
            return Task.RUN_ME
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   566
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   567
def create_suid_program(bld, name):
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   568
    grp = bld.current_group
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   569
    bld.add_group() # this to make sure no two sudo tasks run at the same time
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   570
    program = bld(features='cxx cxxprogram')
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   571
    program.is_ns3_program = True
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   572
    program.module_deps = list()
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   573
    program.name = name
8894
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   574
    program.target = "%s%s-%s%s" % (wutils.APPNAME, wutils.VERSION, name, bld.env.BUILD_SUFFIX)
4164
1f6ae48061a9 checkpoint tap bridge
Craig Dowell <craigdo@ee.washington.edu>
parents: 4119
diff changeset
   575
4171
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   576
    if bld.env['ENABLE_SUDO']:
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   577
        program.create_task("SuidBuild")
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   578
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   579
    bld.set_group(grp)
4171
902589866374 teach enable-sudo to be a config time thing
Craig Dowell <craigdo@ee.washington.edu>
parents: 4164
diff changeset
   580
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   581
    return program
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   582
6821
203367ae7433 merge src/simulator into src/core; move src/core to new module layout
Tom Henderson <tomh@tomh.org>
parents: 6676
diff changeset
   583
def create_ns3_program(bld, name, dependencies=('core',)):
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   584
    program = bld(features='cxx cxxprogram')
7593
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   585
3001
f7aa2796627f WAF: convert code to WAF 1.4 API; the 'waf' script bundle will be updated later, for now has been disabled.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2990
diff changeset
   586
    program.is_ns3_program = True
1217
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
   587
    program.name = name
8894
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   588
    program.target = "%s%s-%s%s" % (wutils.APPNAME, wutils.VERSION, name, bld.env.BUILD_SUFFIX)
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   589
    # Each of the modules this program depends on has its own library.
1858
68e1964c19e8 WAF: add a new --enable-modules configure option, to tell WAF to build only the specified set of ns-3 modules and its dependencies; programs depending on those modules are automatically excluded from the build.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1855
diff changeset
   590
    program.ns3_module_dependencies = ['ns3-'+dep for dep in dependencies]
9261
13b3ddbaac67 bug 1602: do not include directory above in gcc include path
Tom Henderson <tomh@tomh.org>
parents: 9239
diff changeset
   591
    program.includes = "#"
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   592
    program.use = program.ns3_module_dependencies
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   593
    if program.env['ENABLE_STATIC_NS3']:
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   594
        if sys.platform == 'darwin':
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   595
            program.env.STLIB_MARKER = '-Wl,-all_load'
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   596
        else:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   597
            program.env.STLIB_MARKER = '-Wl,-Bstatic,--whole-archive'
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   598
            program.env.SHLIB_MARKER = '-Wl,-Bdynamic,--no-whole-archive'
7593
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   599
    else:
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   600
        if program.env.DEST_BINFMT == 'elf':
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   601
            # All ELF platforms are impacted but only the gcc compiler has a flag to fix it.
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   602
            if 'gcc' in (program.env.CXX_NAME, program.env.CC_NAME): 
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   603
                program.env.append_value ('SHLIB_MARKER', '-Wl,--no-as-needed')
fe607d42ec05 Correcting compilation behavior in Ubuntu 11.10. I guess, default behavior of ldd has been changed... As a result, many dynamic features of NS were not working
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7551
diff changeset
   604
1217
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
   605
    return program
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
   606
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   607
def register_ns3_script(bld, name, dependencies=('core',)):
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   608
    ns3_module_dependencies = ['ns3-'+dep for dep in dependencies]
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   609
    bld.env.append_value('NS3_SCRIPT_DEPENDENCIES', [(name, ns3_module_dependencies)])
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   610
5848
ee2c83ed68cf get rid of examples waf script
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5468
diff changeset
   611
def add_examples_programs(bld):
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   612
    env = bld.env
5848
ee2c83ed68cf get rid of examples waf script
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5468
diff changeset
   613
    if env['ENABLE_EXAMPLES']:
ee2c83ed68cf get rid of examples waf script
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5468
diff changeset
   614
        for dir in os.listdir('examples'):
6214
3f7f94c78f0a Bug 801 - ns-3.7 and SVN not coexisting nicely
Andrey Mazo <mazo@iitp.ru>
parents: 6113
diff changeset
   615
            if dir.startswith('.') or dir == 'CVS':
3f7f94c78f0a Bug 801 - ns-3.7 and SVN not coexisting nicely
Andrey Mazo <mazo@iitp.ru>
parents: 6113
diff changeset
   616
                continue
5848
ee2c83ed68cf get rid of examples waf script
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5468
diff changeset
   617
            if os.path.isdir(os.path.join('examples', dir)):
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   618
                bld.recurse(os.path.join('examples', dir))
5848
ee2c83ed68cf get rid of examples waf script
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5468
diff changeset
   619
3275
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   620
def add_scratch_programs(bld):
6962
7df7b903d035 Bug 1083 - scratch doesn't work when only some modules are enabled
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6925
diff changeset
   621
    all_modules = [mod[len("ns3-"):] for mod in bld.env['NS3_ENABLED_MODULES']]
3275
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   622
    for filename in os.listdir("scratch"):
3867
e29698e2e158 Bug 387: Build fails with junk subdirectories in "scratch" directory
Andrey Hippo <ahippo@yandex.ru>
parents: 3866
diff changeset
   623
        if filename.startswith('.') or filename == 'CVS':
e29698e2e158 Bug 387: Build fails with junk subdirectories in "scratch" directory
Andrey Hippo <ahippo@yandex.ru>
parents: 3866
diff changeset
   624
	    continue
3275
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   625
        if os.path.isdir(os.path.join("scratch", filename)):
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   626
            obj = bld.create_ns3_program(filename, all_modules)
4108
92bae583f934 waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4103
diff changeset
   627
            obj.path = obj.path.find_dir('scratch').find_dir(filename)
7706
a0892c367ea1 Bug 1354 - Building scratch subdir programs is broken
Sebastian Rohde
parents: 7705
diff changeset
   628
            obj.source = obj.path.ant_glob('*.cc')
4108
92bae583f934 waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4103
diff changeset
   629
            obj.target = filename
3927
a2a992900b0b Make sure obj.name == obj.target for 'scratch' programs; fixes issue reported in ns-3-users with ./waf --run scratch/simple not working.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3919
diff changeset
   630
            obj.name = obj.target
7681
0873edb445e8 Bug 1327 - Version installed ns-3 files
Gustavo Carneiro / Vedran Miletić
parents: 7645
diff changeset
   631
            obj.install_path = None
3275
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   632
        elif filename.endswith(".cc"):
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   633
            name = filename[:-len(".cc")]
b0d91237f2ec [Bug 221] need a scratch directory
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3189
diff changeset
   634
            obj = bld.create_ns3_program(name, all_modules)
4108
92bae583f934 waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4103
diff changeset
   635
            obj.path = obj.path.find_dir('scratch')
92bae583f934 waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4103
diff changeset
   636
            obj.source = filename
92bae583f934 waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4103
diff changeset
   637
            obj.target = name
3927
a2a992900b0b Make sure obj.name == obj.target for 'scratch' programs; fixes issue reported in ns-3-users with ./waf --run scratch/simple not working.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3919
diff changeset
   638
            obj.name = obj.target
7681
0873edb445e8 Bug 1327 - Version installed ns-3 files
Gustavo Carneiro / Vedran Miletić
parents: 7645
diff changeset
   639
            obj.install_path = None
1217
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
   640
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   641
def _get_all_task_gen(self):
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   642
    for group in self.groups:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   643
        for taskgen in group:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   644
            yield taskgen
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   645
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   646
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   647
# ok, so WAF does not provide an API to prevent an
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   648
# arbitrary taskgen from running; we have to muck around with
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   649
# WAF internal state, something that might stop working if
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   650
# WAF is upgraded...
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   651
def _exclude_taskgen(self, taskgen):
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   652
    for group in self.groups:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   653
        for tg1 in group:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   654
            if tg1 is taskgen:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   655
                group.remove(tg1)
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   656
                break
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   657
        else:
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   658
            continue
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   659
        break
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   660
7331
827246e3bc4c Bug 1174 - Ns-3 does not generate static libraries
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7326
diff changeset
   661
7821
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   662
def _find_ns3_module(self, name):
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   663
    for obj in _get_all_task_gen(self):
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   664
        # disable the modules themselves
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   665
        if hasattr(obj, "is_ns3_module") and obj.name == name:
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   666
            return obj
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   667
    raise KeyError(name)
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   668
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   669
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   670
def build(bld):
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   671
    env = bld.env
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   672
7131
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   673
    # If --enabled-modules option was given, then print a warning
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   674
    # message and exit this function.
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   675
    if Options.options.enable_modules:
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   676
        Logs.warn("No modules were built.  Use waf configure --enable-modules to enable modules.")
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   677
        return
77b75cd826d0 Make modules no longer be enabled from waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7100
diff changeset
   678
6925
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   679
    bld.env['NS3_MODULES_WITH_TEST_LIBRARIES'] = []
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   680
    bld.env['NS3_ENABLED_MODULE_TEST_LIBRARIES'] = []
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   681
    bld.env['NS3_SCRIPT_DEPENDENCIES'] = []
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   682
    bld.env['NS3_RUNNABLE_PROGRAMS'] = []
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   683
    bld.env['NS3_RUNNABLE_SCRIPTS'] = []
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   684
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   685
    wutils.bld = bld
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   686
    if Options.options.no_task_lines:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   687
        from waflib import Runner
2866
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   688
        def null_printout(s):
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   689
            pass
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   690
        Runner.printout = null_printout
1d829915f092 Add a --no-task-lines WAF option; together with -v it makes WAF just print executed commands, like 'make' does.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2846
diff changeset
   691
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   692
    Options.cwd_launch = bld.path.abspath()
1217
2f7791ae388d WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1213
diff changeset
   693
    bld.create_ns3_program = types.MethodType(create_ns3_program, bld)
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   694
    bld.register_ns3_script = types.MethodType(register_ns3_script, bld)
3826
40c5841b616d merge in tap device
Craig Dowell <craigdo@ee.washington.edu>
parents: 3703
diff changeset
   695
    bld.create_suid_program = types.MethodType(create_suid_program, bld)
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   696
    bld.__class__.all_task_gen = property(_get_all_task_gen)
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   697
    bld.exclude_taskgen = types.MethodType(_exclude_taskgen, bld)
7821
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   698
    bld.find_ns3_module = types.MethodType(_find_ns3_module, bld)
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   699
9239
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   700
    # Clean documentation build directories; other cleaning happens later
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   701
    if bld.cmd == 'clean':
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   702
        _cleandocs()
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   703
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   704
    # process subfolders from here
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   705
    bld.recurse('src')
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   706
6925
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   707
    # If modules have been enabled, then set lists of enabled modules
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   708
    # and enabled module test libraries.
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   709
    if env['NS3_ENABLED_MODULES']:
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   710
        modules = env['NS3_ENABLED_MODULES']
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   711
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   712
        # Find out about additional modules that need to be enabled
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   713
        # due to dependency constraints.
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   714
        changed = True
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   715
        while changed:
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   716
            changed = False
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   717
            for module in modules:
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   718
                module_obj = bld.get_tgen_by_name(module)
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   719
                if module_obj is None:
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   720
                    raise ValueError("module %s not found" % module)
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   721
                # Each enabled module has its own library.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   722
                for dep in module_obj.use:
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   723
                    if not dep.startswith('ns3-'):
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   724
                        continue
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   725
                    if dep not in modules:
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   726
                        modules.append(dep)
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   727
                        changed = True
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   728
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   729
        env['NS3_ENABLED_MODULES'] = modules
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   730
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   731
        # If tests are being built, then set the list of the enabled
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   732
        # module test libraries.
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   733
        if env['ENABLE_TESTS']:
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   734
            for (mod, testlib) in bld.env['NS3_MODULES_WITH_TEST_LIBRARIES']:
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   735
                if mod in bld.env['NS3_ENABLED_MODULES']:
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   736
                    bld.env.append_value('NS3_ENABLED_MODULE_TEST_LIBRARIES', testlib)
6925
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   737
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   738
    add_examples_programs(bld)
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   739
    add_scratch_programs(bld)
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   740
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   741
    if env['NS3_ENABLED_MODULES']:
43d9c7eedf7b Test implicitly dependent modules
Mitch Watrous <watrous@u.washington.edu>
parents: 6919
diff changeset
   742
        modules = env['NS3_ENABLED_MODULES']
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   743
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   744
        # Exclude the programs other misc task gens that depend on disabled modules
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   745
        for obj in list(bld.all_task_gen):
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   746
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   747
            # check for ns3moduleheader_taskgen
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   748
            if 'ns3moduleheader' in getattr(obj, "features", []):
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   749
                if ("ns3-%s" % obj.module) not in modules:
6647
bdbbfbc6bda7 When a module is disabled, remove xxx-module.h and module header files from build/variant/ns3
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6641
diff changeset
   750
                    obj.mode = 'remove' # tell it to remove headers instead of installing
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   751
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   752
            # check for programs
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   753
            if hasattr(obj, 'ns3_module_dependencies'):
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   754
                # this is an NS-3 program (bld.create_ns3_program)
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   755
                program_built = True
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   756
                for dep in obj.ns3_module_dependencies:
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   757
                    if dep not in modules: # prog. depends on a module that isn't enabled?
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   758
                        bld.exclude_taskgen(obj)
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   759
                        program_built = False
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   760
                        break
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   761
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   762
                # Add this program to the list if all of its
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   763
                # dependencies will be built.
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   764
                if program_built:
8894
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   765
                    object_name = "%s%s-%s%s" % (wutils.APPNAME, wutils.VERSION, 
90d67c5e8255 Bug 1445 - When build with "-d release", don't suffix "-release"
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 8848
diff changeset
   766
                                                  obj.name, bld.env.BUILD_SUFFIX)
9076
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   767
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   768
                    # Get the relative path to the program from the
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   769
                    # launch directory.
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   770
                    launch_dir = os.path.abspath(Context.launch_dir)
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   771
                    object_relative_path = os.path.join(
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   772
                        wutils.relpath(obj.path.get_bld().abspath(), launch_dir),
9076
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   773
                        object_name)
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   774
7c9f34fa2dd6 Bug 1463 - ./test.py --example should automatically detect the path
Mitch Watrous <watrous@u.washington.edu>
parents: 8967
diff changeset
   775
                    bld.env.append_value('NS3_RUNNABLE_PROGRAMS', object_relative_path)
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   776
6641
cfd3533cc1ef One more stop to fixing --enable-modules
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6638
diff changeset
   777
            # disable the modules themselves
6638
ec4cdb1ca3ed Revive the option --enable-modules from bit-rot; however it won't yet work in practice due to dependencies not declared and non-modular python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6637
diff changeset
   778
            if hasattr(obj, "is_ns3_module") and obj.name not in modules:
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   779
                bld.exclude_taskgen(obj) # kill the module
6641
cfd3533cc1ef One more stop to fixing --enable-modules
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6638
diff changeset
   780
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   781
            # disable the module test libraries
6998
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   782
            if hasattr(obj, "is_ns3_module_test_library"):
1c2b8cfb71d2 Make tests not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6981
diff changeset
   783
                if not env['ENABLE_TESTS'] or (obj.module_name not in modules):
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   784
                    bld.exclude_taskgen(obj) # kill the module test library
6913
54679ab32585 Create separate module and test-module libraries
Mitch Watrous <watrous@u.washington.edu>
parents: 6886
diff changeset
   785
6641
cfd3533cc1ef One more stop to fixing --enable-modules
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6638
diff changeset
   786
            # disable the ns3header_taskgen
7488
72d0c878f3c7 More waf 1.6.7 build fixes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   787
            if 'ns3header' in getattr(obj, "features", []):
6641
cfd3533cc1ef One more stop to fixing --enable-modules
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6638
diff changeset
   788
                if ("ns3-%s" % obj.module) not in modules:
6647
bdbbfbc6bda7 When a module is disabled, remove xxx-module.h and module header files from build/variant/ns3
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6641
diff changeset
   789
                    obj.mode = 'remove' # tell it to remove headers instead of installing 
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   790
7707
42c37d556d61 Bug 1331 - waf generates and installs pkgconfig .pc files even for disabled modules and tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7706
diff changeset
   791
            # disable pcfile taskgens for disabled modules
42c37d556d61 Bug 1331 - waf generates and installs pkgconfig .pc files even for disabled modules and tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7706
diff changeset
   792
            if 'ns3pcfile' in getattr(obj, "features", []):
7821
270a2b7f82ad Bug 1406 - waf exits with maximum recursion depth exceeded while calling a Python object if wscript has wrong filename
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7712
diff changeset
   793
                if obj.module not in bld.env.NS3_ENABLED_MODULES:
7707
42c37d556d61 Bug 1331 - waf generates and installs pkgconfig .pc files even for disabled modules and tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7706
diff changeset
   794
                    bld.exclude_taskgen(obj)
42c37d556d61 Bug 1331 - waf generates and installs pkgconfig .pc files even for disabled modules and tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7706
diff changeset
   795
42c37d556d61 Bug 1331 - waf generates and installs pkgconfig .pc files even for disabled modules and tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7706
diff changeset
   796
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   797
    if env['NS3_ENABLED_MODULES']:
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3331
diff changeset
   798
        env['NS3_ENABLED_MODULES'] = list(modules)
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   799
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   800
    # Determine which scripts will be runnable.
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   801
    for (script, dependencies) in bld.env['NS3_SCRIPT_DEPENDENCIES']:
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   802
        script_runnable = True
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   803
        for dep in dependencies:
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   804
            if dep not in modules:
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   805
                script_runnable = False
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   806
                break
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   807
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   808
        # Add this script to the list if all of its dependencies will
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   809
        # be built.
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   810
        if script_runnable:
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   811
            bld.env.append_value('NS3_RUNNABLE_SCRIPTS', script)
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   812
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   813
    bld.recurse('bindings/python')
1880
0148d5911946 New waf snapshot; move the ns3 library back to the top build dir (the 'lib' was only a workaround for a waf problem); allow --enable-modules on a per build run basis.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1858
diff changeset
   814
7337
ac13a12e9dd4 Bug 1206 - Test libraries are built but test suites are not being run in test.py
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7331
diff changeset
   815
    # Process this subfolder here after the lists of enabled modules
ac13a12e9dd4 Bug 1206 - Test libraries are built but test suites are not being run in test.py
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7331
diff changeset
   816
    # and module test libraries have been set.
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   817
    bld.recurse('utils')
7337
ac13a12e9dd4 Bug 1206 - Test libraries are built but test suites are not being run in test.py
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7331
diff changeset
   818
7636
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   819
    # Set this so that the lists will be printed at the end of this
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   820
    # build command.
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   821
    bld.env['PRINT_BUILT_MODULES_AT_END'] = True
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   822
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   823
    if Options.options.run:
3919
fd796ed5b166 Post-fix the last patch, to make sure invalid program names passed into --run trigger an informative error message as before.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3918
diff changeset
   824
        # Check that the requested program name is valid
4119
9ffcf2400aa5 Bug #323: waf --valgrind doesn't check for valgrind first
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4118
diff changeset
   825
        program_name, dummy_program_argv = wutils.get_run_program(Options.options.run, wutils.get_command_template(env))
3933
3c149230e98a Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3927
diff changeset
   826
3919
fd796ed5b166 Post-fix the last patch, to make sure invalid program names passed into --run trigger an informative error message as before.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3918
diff changeset
   827
        # When --run'ing a program, tell WAF to only build that program,
fd796ed5b166 Post-fix the last patch, to make sure invalid program names passed into --run trigger an informative error message as before.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3918
diff changeset
   828
        # nothing more; this greatly speeds up compilation when all you
fd796ed5b166 Post-fix the last patch, to make sure invalid program names passed into --run trigger an informative error message as before.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3918
diff changeset
   829
        # want to do is run a test program.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
   830
        Options.options.targets += ',' + os.path.basename(program_name)
8848
9a34e12fab31 Automatically add the visualizer module to programs running with waf --run --vis
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7863
diff changeset
   831
        if getattr(Options.options, "visualize", False):
9a34e12fab31 Automatically add the visualizer module to programs running with waf --run --vis
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7863
diff changeset
   832
            program_obj = wutils.find_program(program_name, bld.env)
9a34e12fab31 Automatically add the visualizer module to programs running with waf --run --vis
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7863
diff changeset
   833
            program_obj.use.append('ns3-visualizer')
4760
f774ff724ee4 Bug #609: --check and --regression should build only the required binaries
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4751
diff changeset
   834
        for gen in bld.all_task_gen:
f774ff724ee4 Bug #609: --check and --regression should build only the required binaries
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4751
diff changeset
   835
            if type(gen).__name__ in ['ns3header_taskgen', 'ns3moduleheader_taskgen']:
f774ff724ee4 Bug #609: --check and --regression should build only the required binaries
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4751
diff changeset
   836
                gen.post()
7645
0baf0aea844a suppress list of modules built when running program from waf
Tom Henderson <tomh@tomh.org>
parents: 7636
diff changeset
   837
        bld.env['PRINT_BUILT_MODULES_AT_END'] = False 
3919
fd796ed5b166 Post-fix the last patch, to make sure invalid program names passed into --run trigger an informative error message as before.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3918
diff changeset
   838
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   839
    if Options.options.doxygen_no_build:
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   840
        _doxygen(bld)
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   841
        raise SystemExit(0)
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
   842
9239
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   843
def _cleandir(name):
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   844
    try:
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   845
        shutil.rmtree(name)
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   846
    except:
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   847
        pass
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   848
9239
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   849
def _cleandocs():
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   850
    _cleandir('doc/html')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   851
    _cleandir('doc/manual/build')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   852
    _cleandir('doc/tutorial/build')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   853
    _cleandir('doc/tutorial-pt/build')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   854
    _cleandir('doc/models/build')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   855
    _cleandir('doc/models/source-temp')
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   856
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   857
# 'distclean' typically only cleans out build/ directory
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   858
# Here we clean out any build or documentation artifacts not in build/
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   859
def distclean(ctx):
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   860
    _cleandocs()
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   861
    # Now call waf's normal distclean
02de8e19ce08 bug 1517: waf clean/distclean doesn't remove the doc/html directory
Tom Henderson <tomh@tomh.org>
parents: 9169
diff changeset
   862
    Scripting.distclean(ctx)
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   863
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   864
def shutdown(ctx):
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   865
    bld = wutils.bld
4328
20a0a6244177 waf fix
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4326
diff changeset
   866
    if wutils.bld is None:
20a0a6244177 waf fix
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4326
diff changeset
   867
        return
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   868
    env = bld.env
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   869
7636
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   870
    # Only print the lists if a build was done.
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   871
    if (env['PRINT_BUILT_MODULES_AT_END']):
7100
c3796788794a Make built modules list not be printed for clean and distclean
Mitch Watrous <watrous@u.washington.edu>
parents: 7097
diff changeset
   872
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   873
        # Print the list of built modules.
7100
c3796788794a Make built modules list not be printed for clean and distclean
Mitch Watrous <watrous@u.washington.edu>
parents: 7097
diff changeset
   874
        print
c3796788794a Make built modules list not be printed for clean and distclean
Mitch Watrous <watrous@u.washington.edu>
parents: 7097
diff changeset
   875
        print 'Modules built:'
7863
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   876
        names_without_prefix = []
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   877
        for name in env['NS3_ENABLED_MODULES']:
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   878
            name1 = name[len('ns3-'):]
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   879
            if name not in env.MODULAR_BINDINGS_MODULES:
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   880
                name1 += " (no Python)"
5a610391f3f1 Bug 1392 - Modules built report does not clarify C++ or Python
Mitch Watrous <watrous@u.washington.edu>
parents: 7821
diff changeset
   881
            names_without_prefix.append(name1)
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   882
        print_module_names(names_without_prefix)
7100
c3796788794a Make built modules list not be printed for clean and distclean
Mitch Watrous <watrous@u.washington.edu>
parents: 7097
diff changeset
   883
        print
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   884
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   885
        # Print the list of enabled modules that were not built.
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   886
        if env['MODULES_NOT_BUILT']:
9169
f8bff624db3c clarify 'Modules not built' waf report
Tom Henderson <tomh@tomh.org>
parents: 9168
diff changeset
   887
            print 'Modules not built (see ns-3 tutorial for explanation):'
7293
0f574c532cee Make test module not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7291
diff changeset
   888
            print_module_names(env['MODULES_NOT_BUILT'])
7291
d39c09dbc3d9 Make emu and template modules not be built if not appropriate
Mitch Watrous <watrous@u.washington.edu>
parents: 7131
diff changeset
   889
            print
7066
948694386867 Print modules built list at end of waf build
Mitch Watrous <watrous@u.washington.edu>
parents: 7062
diff changeset
   890
7636
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   891
        # Set this so that the lists won't be printed until the next
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   892
        # build is done.
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   893
        bld.env['PRINT_BUILT_MODULES_AT_END'] = False
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
   894
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   895
    # Write the build status file.
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   896
    build_status_file = os.path.join(bld.out_dir, 'build-status.py')
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   897
    out = open(build_status_file, 'w')
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   898
    out.write('#! /usr/bin/env python\n')
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   899
    out.write('\n')
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   900
    out.write('# Programs that are runnable.\n')
7096
7357a40d2dde Make test.py not run examples that are not runnable
Mitch Watrous <watrous@u.washington.edu>
parents: 7094
diff changeset
   901
    out.write('ns3_runnable_programs = ' + str(env['NS3_RUNNABLE_PROGRAMS']) + '\n')
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   902
    out.write('\n')
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   903
    out.write('# Scripts that are runnable.\n')
7096
7357a40d2dde Make test.py not run examples that are not runnable
Mitch Watrous <watrous@u.washington.edu>
parents: 7094
diff changeset
   904
    out.write('ns3_runnable_scripts = ' + str(env['NS3_RUNNABLE_SCRIPTS']) + '\n')
7094
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   905
    out.write('\n')
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   906
    out.close()
f0748224dd68 Write a status file during waf build step
Mitch Watrous <watrous@u.washington.edu>
parents: 7088
diff changeset
   907
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   908
    if Options.options.lcov_report:
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
   909
        lcov_report(bld)
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
   910
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   911
    if Options.options.run:
6676
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   912
        wutils.run_program(Options.options.run, env, wutils.get_command_template(env),
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   913
                           visualize=Options.options.visualize)
935
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   914
        raise SystemExit(0)
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
   915
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4029
diff changeset
   916
    if Options.options.pyrun:
6676
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   917
        wutils.run_python_program(Options.options.pyrun, env,
8a57344a8d09 Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6670
diff changeset
   918
                                  visualize=Options.options.visualize)
3419
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   919
        raise SystemExit(0)
8d3f5c0f55fa Add WAF option --pyrun, to make it easier to run Python programs.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3418
diff changeset
   920
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   921
    if Options.options.shell:
7496
ce1ec79d488c waf1.6: make the all_modules in src/wscript be automatically discovered
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7495
diff changeset
   922
        raise WafError("Please run `./waf shell' now, instead of `./waf --shell'")
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   923
5361
e8989b44bffb Doxygen and wscript messages point to test.py
Craig Dowell <craigdo@ee.washington.edu>
parents: 5252
diff changeset
   924
    if Options.options.check:
7496
ce1ec79d488c waf1.6: make the all_modules in src/wscript be automatically discovered
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7495
diff changeset
   925
        raise WafError("Please run `./test.py' now, instead of `./waf --check'")
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   926
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   927
    check_shell(bld)
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
   928
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   929
7510
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   930
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   931
class CheckContext(Context.Context):
5372
716ca842b52c convince waf to run test.py on check command
Craig Dowell <craigdo@ee.washington.edu>
parents: 5369
diff changeset
   932
    """run the equivalent of the old ns-3 unit tests using test.py"""
7510
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   933
    cmd = 'check'
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   934
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   935
    def execute(self):
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   936
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   937
        # first we execute the build
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   938
	bld = Context.create_context("build")
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   939
	bld.options = Options.options # provided for convenience
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   940
	bld.cmd = "build"
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   941
	bld.execute()
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   942
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   943
        wutils.bld = bld
aabd5141cd16 Fix waf check
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7496
diff changeset
   944
        wutils.run_python_program("test.py -n -c core", bld.env)
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   945
7495
d87f20fd2421 waf1.6: remove code not needed, fix static build, cleanup
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7494
diff changeset
   946
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   947
class print_introspected_doxygen_task(Task.TaskBase):
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   948
    after = 'cxx link'
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   949
    color = 'BLUE'
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   950
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   951
    def __init__(self, bld):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   952
        self.bld = bld
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   953
        super(print_introspected_doxygen_task, self).__init__(generator=self)
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   954
        
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   955
    def __str__(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   956
        return 'print-introspected-doxygen\n'
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   957
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   958
    def runnable_status(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   959
        return Task.RUN_ME
1540
fd4e69513199 Now run doxygen again before the build, but the doc/trace-source-list.h is generated during waf check; make doxygen less verbose, and give a warning when doc/trace-source-list.h is missing.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1536
diff changeset
   960
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   961
    def run(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   962
        ## generate the trace sources list docs
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   963
        env = wutils.bld.env
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   964
        proc_env = wutils.get_proc_env()
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   965
        try:
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   966
            program_obj = wutils.find_program('print-introspected-doxygen', env)
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   967
        except ValueError: # could happen if print-introspected-doxygen is
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   968
                           # not built because of waf configure
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   969
                           # --enable-modules=xxx
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   970
            pass
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   971
        else:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   972
            prog = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj)).get_bld().abspath(env)
7527
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
   973
7528
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   974
            # Create a header file with the introspected information.
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   975
            doxygen_out = open(os.path.join('doc', 'introspected-doxygen.h'), 'w')
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   976
            if subprocess.Popen([prog], stdout=doxygen_out, env=proc_env).wait():
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   977
                raise SystemExit(1)
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   978
            doxygen_out.close()
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   979
        
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   980
            # Create a text file with the introspected information.
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   981
            text_out = open(os.path.join('doc', 'ns3-object.txt'), 'w')
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   982
            if subprocess.Popen([prog, '--output-text'], stdout=text_out, env=proc_env).wait():
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   983
                raise SystemExit(1)
95f7f32d51d0 Fix tabbing for code that creates introspected text files
Mitch Watrous <watrous@u.washington.edu>
parents: 7527
diff changeset
   984
            text_out.close()
1536
23593050aa96 Run the program print-trace-sources to generate doc/trace-source-list.h when generating docs. As a side effect, --doxygen is now has to be processed at the end of the build.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1532
diff changeset
   985
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   986
class run_python_unit_tests_task(Task.TaskBase):
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
   987
    after = 'cxx link'
4531
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   988
    color = 'BLUE'
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   989
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   990
    def __init__(self, bld):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   991
        self.bld = bld
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   992
        super(run_python_unit_tests_task, self).__init__(generator=self)
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   993
        
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   994
    def __str__(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   995
        return 'run-python-unit-tests\n'
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   996
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   997
    def runnable_status(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   998
        return Task.RUN_ME
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
   999
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
  1000
    def run(self):
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
  1001
        proc_env = wutils.get_proc_env()
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
  1002
        wutils.run_argv([self.bld.env['PYTHON'], os.path.join("..", "utils", "python-unit-tests.py")],
14a102415139 Run unit tests as indenpendent WAF tasks
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4450
diff changeset
  1003
                        self.bld.env, proc_env, force_no_valgrind=True)
3408
2cc40b3e4fa5 python bindings
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3331
diff changeset
  1004
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1005
def check_shell(bld):
5975
c85cb9b073a0 comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents: 5848
diff changeset
  1006
    if ('NS3_MODULE_PATH' not in os.environ) or ('NS3_EXECUTABLE_PATH' not in os.environ):
1016
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1007
        return
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1008
    env = bld.env
1016
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1009
    correct_modpath = os.pathsep.join(env['NS3_MODULE_PATH'])
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1010
    found_modpath = os.environ['NS3_MODULE_PATH']
5975
c85cb9b073a0 comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents: 5848
diff changeset
  1011
    correct_execpath = os.pathsep.join(env['NS3_EXECUTABLE_PATH'])
c85cb9b073a0 comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents: 5848
diff changeset
  1012
    found_execpath = os.environ['NS3_EXECUTABLE_PATH']
c85cb9b073a0 comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents: 5848
diff changeset
  1013
    if (found_modpath != correct_modpath) or (correct_execpath != found_execpath):
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1014
        msg = ("Detected shell (./waf shell) with incorrect configuration\n"
1016
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1015
               "=========================================================\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1016
               "Possible reasons for this problem:\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1017
               "  1. You switched to another ns-3 tree from inside this shell\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1018
               "  2. You switched ns-3 debug level (waf configure --debug)\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1019
               "  3. You modified the list of built ns-3 modules\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1020
               "You should correct this situation before running any program.  Possible solutions:\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1021
               "  1. Exit this shell, and start a new one\n"
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1022
               "  2. Run a new nested shell")
7496
ce1ec79d488c waf1.6: make the all_modules in src/wscript be automatically discovered
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7495
diff changeset
  1023
        raise WafError(msg)
1016
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1024
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
  1025
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1026
class Ns3ShellContext(Context.Context):
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1027
    """run a shell with an environment suitably modified to run locally built programs"""
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1028
    cmd = 'shell'
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1029
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1030
    def execute(self):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1031
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1032
        # first we execute the build
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1033
	bld = Context.create_context("build")
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1034
	bld.options = Options.options # provided for convenience
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1035
	bld.cmd = "build"
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1036
	bld.execute()
4326
179f86838e62 Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4202
diff changeset
  1037
7636
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
  1038
        # Set this so that the lists won't be printed when the user
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
  1039
        # exits the shell.
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
  1040
        bld.env['PRINT_BUILT_MODULES_AT_END'] = False
58181e75d0f0 bug 1305 - do not list modules when exiting waf shell
Mitch Watrous <watrous@u.washington.edu>
parents: 7593
diff changeset
  1041
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1042
        if sys.platform == 'win32':
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1043
            shell = os.environ.get("COMSPEC", "cmd.exe")
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1044
        else:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1045
            shell = os.environ.get("SHELL", "/bin/sh")
1016
58a56b52a08b Detect when running waf --shell with stale environment variables and give an error when it happens.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1015
diff changeset
  1046
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1047
        env = bld.env
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1048
        os_env = {
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1049
            'NS3_MODULE_PATH': os.pathsep.join(env['NS3_MODULE_PATH']),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1050
            'NS3_EXECUTABLE_PATH': os.pathsep.join(env['NS3_EXECUTABLE_PATH']),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1051
            }
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1052
        wutils.run_argv([shell], env, os_env)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7463
diff changeset
  1053
672
184d5a505279 WAF: remove the rpath options, and add --run and --shell as replacements; additionally, the new options "should" work on Mac OS X, as well as linux2 and win32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 671
diff changeset
  1054
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
  1055
def _doxygen(bld):
5392
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1056
    env = wutils.bld.env
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1057
    proc_env = wutils.get_proc_env()
1536
23593050aa96 Run the program print-trace-sources to generate doc/trace-source-list.h when generating docs. As a side effect, --doxygen is now has to be processed at the end of the build.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1532
diff changeset
  1058
6669
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1059
    if not env['DOXYGEN']:
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1060
        Logs.error("waf configure did not detect doxygen in the system -> cannot build api docs.")
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1061
        raise SystemExit(1)
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1062
        return
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1063
5392
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1064
    try:
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1065
        program_obj = wutils.find_program('print-introspected-doxygen', env)
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1066
    except ValueError: 
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1067
        Logs.warn("print-introspected-doxygen does not exist")
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1068
        raise SystemExit(1)
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1069
        return
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1070
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Miletić <rivanvx@gmail.com>
parents: 9261
diff changeset
  1071
    prog = program_obj.path.find_or_declare(program_obj.target).get_bld().abspath()
6254
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1072
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1073
    if not os.path.exists(prog):
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1074
        Logs.error("print-introspected-doxygen has not been built yet."
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1075
                   " You need to build ns-3 at least once before "
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1076
                   "generating doxygen docs...")
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1077
        raise SystemExit(1)
e794047931fb Make --doxygen-no-build check if print-introspected-doxygen has been built, error out if not. Fixes #884
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6214
diff changeset
  1078
7527
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1079
    # Create a header file with the introspected information.
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1080
    doxygen_out = open(os.path.join('doc', 'introspected-doxygen.h'), 'w')
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1081
    if subprocess.Popen([prog], stdout=doxygen_out, env=proc_env).wait():
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1082
        raise SystemExit(1)
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1083
    doxygen_out.close()
5392
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1084
7527
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1085
    # Create a text file with the introspected information.
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1086
    text_out = open(os.path.join('doc', 'ns3-object.txt'), 'w')
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1087
    if subprocess.Popen([prog, '--output-text'], stdout=text_out, env=proc_env).wait():
5392
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1088
        raise SystemExit(1)
7527
6e8c5ebcc1ae Make waf create text file with introspected information
Mitch Watrous <watrous@u.washington.edu>
parents: 7524
diff changeset
  1089
    text_out.close()
5392
80b9ae7b5e26 remind waf how to generate introspected doxygen
Craig Dowell <craigdo@ee.washington.edu>
parents: 5372
diff changeset
  1090
8963
97f93bf462bd Call get_version.sh early, add option, env for public urls.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8951
diff changeset
  1091
    _getVersion()
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1092
    doxygen_config = os.path.join('doc', 'doxygen.conf')
6669
dbf2efe4b762 Give a more user-friendly error message when doxygen is not found
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6647
diff changeset
  1093
    if subprocess.Popen([env['DOXYGEN'], doxygen_config]).wait():
8967
3594c3c9f942 Log script errors, fix bogus copy
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8963
diff changeset
  1094
        Logs.error("Doxygen build returned an error.")
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1095
        raise SystemExit(1)
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1096
7518
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1097
8944
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1098
def _getVersion():
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1099
    """update the ns3_version.js file, when building documentation"""
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1100
8963
97f93bf462bd Call get_version.sh early, add option, env for public urls.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8951
diff changeset
  1101
    prog = "doc/ns3_html_theme/get_version.sh"
97f93bf462bd Call get_version.sh early, add option, env for public urls.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8951
diff changeset
  1102
    if subprocess.Popen([prog]).wait() :
8967
3594c3c9f942 Log script errors, fix bogus copy
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8963
diff changeset
  1103
        Logs.error(prog + " returned an error")
8944
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1104
        raise SystemExit(1)
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1105
7532
0b875c99c8b4 Fix copy-paste typo
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7528
diff changeset
  1106
class Ns3DoxygenContext(Context.Context):
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
  1107
    """do a full build, generate the introspected doxygen and then the doxygen"""
7518
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1108
    cmd = 'doxygen'
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1109
    def execute(self):
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1110
        # first we execute the build
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1111
	bld = Context.create_context("build")
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1112
	bld.options = Options.options # provided for convenience
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1113
	bld.cmd = "build"
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1114
	bld.execute()
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1115
        _doxygen(bld)
5468
6eebad1fb54d Bring back the --doxygen-no-build option from the dead.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 5463
diff changeset
  1116
8903
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1117
class Ns3SphinxContext(Context.Context):
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1118
    """build the Sphinx documentation: manual, tutorial, models"""
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1119
    
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1120
    cmd = 'sphinx'
7518
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1121
8903
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1122
    def sphinx_build(self, path):
8935
2ce1f6bd9f8e Menu bar
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8916
diff changeset
  1123
        print
2ce1f6bd9f8e Menu bar
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8916
diff changeset
  1124
        print "[waf] Building sphinx docs for " + path
8944
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1125
        if subprocess.Popen(["make", "SPHINXOPTS=-N", "-k",
623ce21e27c2 Menu bar in doc web pages; build html, singlehtml, pdf; automatic version string in docs; fix singlehtml title.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8939
diff changeset
  1126
                             "html", "singlehtml", "latexpdf" ],
8939
c1beb94d42af Build singlehtml, rewrite html header links with version-dependent paths
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8935
diff changeset
  1127
                            cwd=path).wait() :
8967
3594c3c9f942 Log script errors, fix bogus copy
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8963
diff changeset
  1128
            Logs.error("Sphinx build of " + path + " returned an error.")
8903
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1129
            raise SystemExit(1)
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1130
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1131
    def execute(self):
8963
97f93bf462bd Call get_version.sh early, add option, env for public urls.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8951
diff changeset
  1132
        _getVersion()
8903
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1133
        for sphinxdir in ["manual", "models", "tutorial", "tutorial-pt-br"] :
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1134
            self.sphinx_build(os.path.join("doc", sphinxdir))
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1135
     
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1136
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1137
class Ns3DocContext(Context.Context):
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1138
    """build all the documentation: doxygen, manual, tutorial, models"""
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1139
    
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1140
    cmd = 'docs'
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1141
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1142
    def execute(self):
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1143
        steps = ['doxygen', 'sphinx']
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1144
        Options.commands = steps + Options.commands
204fed372b38 Add waf options to build the Sphinx docs, all docs
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 8894
diff changeset
  1145
        
7518
91f889c8fc43 Possibly fix the waf doxygen command
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7510
diff changeset
  1146
    
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1147
def lcov_report(bld):
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1148
    env = bld.env
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1149
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1150
    if not env['GCOV_ENABLED']:
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1151
        raise WafError("project not configured for code coverage;"
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1152
                       " reconfigure with --enable-gcov")
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1153
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1154
    os.chdir(out)
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1155
    try:
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1156
        lcov_report_dir = 'lcov-report'
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1157
        create_dir_command = "rm -rf " + lcov_report_dir
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1158
        create_dir_command += " && mkdir " + lcov_report_dir + ";"
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1159
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1160
        if subprocess.Popen(create_dir_command, shell=True).wait():
537
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
  1161
            raise SystemExit(1)
e8a4183dfe00 Add support for building with WAF
Gustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
parents:
diff changeset
  1162
7493
3bbefa91e694 Fix the --lcov-report option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7492
diff changeset
  1163
        info_file = os.path.join(lcov_report_dir, 'report.info')
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1164
        lcov_command = "../utils/lcov/lcov -c -d . -o " + info_file
7551
5d13d02dae0f Update lcov to version 1.9
Tom Henderson <tomh@tomh.org>
parents: 7544
diff changeset
  1165
        lcov_command += " -b " + os.getcwd()
671
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1166
        if subprocess.Popen(lcov_command, shell=True).wait():
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1167
            raise SystemExit(1)
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1168
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1169
        genhtml_command = "../utils/lcov/genhtml -o " + lcov_report_dir
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1170
        genhtml_command += " " + info_file
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1171
        if subprocess.Popen(genhtml_command, shell=True).wait():
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1172
            raise SystemExit(1)
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1173
    finally:
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1174
        os.chdir("..")
4bec4600950c WAF: cleanup code by putting lcov and doxygen handling into their own separate functions
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 649
diff changeset
  1175