build.py
author Tom Henderson <tomh@tomh.org>
Sun, 17 Jun 2007 16:04:12 -0700
changeset 777 38099dd26e94
parent 654 77ced4ddc0f7
permissions -rw-r--r--
bump VERSION number
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
124
c0d0f7bebb73 add magic emacs incantation for python
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 117
diff changeset
     1
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
83
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     2
# Copyright (c) 2006 INRIA
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     3
# All rights reserved.
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     4
#
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     5
# This program is free software; you can redistribute it and/or modify
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     6
# it under the terms of the GNU General Public License version 2 as
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     7
# published by the Free Software Foundation;
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     8
#
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
     9
# This program is distributed in the hope that it will be useful,
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    12
# GNU General Public License for more details.
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    13
#
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    14
# You should have received a copy of the GNU General Public License
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    15
# along with this program; if not, write to the Free Software
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    17
#
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    18
# Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    19
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    20
430203344318 add inria copyright and gpl statement on build.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 62
diff changeset
    21
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
import os
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
import os.path
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
import shutil
62
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    25
from SCons.Environment import Environment
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    26
from SCons.Builder import Builder
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    27
from SCons.Action import Action
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    28
import SCons
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    29
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    30
# hack stolen from wengo
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    31
# to get an ARGUMENTS defined correctly
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    32
try:
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    33
    ARGUMENTS = SCons.Script.ARGUMENTS
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    34
    COMMAND_LINE_TARGETS = SCons.Script.COMMAND_LINE_TARGETS
62
0ec2ff3a483f split SConstruct to make it more readable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 61
diff changeset
    35
except AttributeError:
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    36
    from SCons.Script.SConscript import Arguments
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    37
    from SCons.Script.SConscript import CommandLineTargets
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    38
    ARGUMENTS = Arguments
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    39
    COMMAND_LINE_TARGETS = CommandLineTargets
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
class Ns3Module:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    42
    def __init__(self, name, dir):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    43
        self.sources = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    44
        self.inst_headers = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    45
        self.headers = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    46
        self.extra_dist = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    47
        self.deps = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    48
        self.external_deps = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    49
        self.config = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    50
        self.name = name
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    51
        self.dir = dir
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    52
        self.executable = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    53
        self.library = True
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    54
        self.ldflags = []
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    55
        self.header_inst_dir = ''
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    56
    def set_library(self):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    57
        self.library = True
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    58
        self.executable = False
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    59
    def set_executable(self):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    60
        self.library = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    61
        self.executable = True
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    62
    def add_config(self, config_fn):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    63
        self.config.append(config_fn)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    64
    def add_extra_dist(self, dist):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    65
        self.extra_dist.append(dist)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    66
    def add_external_dep(self, dep):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    67
        self.external_deps.append(dep)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    68
    def add_dep(self, dep):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    69
        self.deps.append(dep)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    70
    def add_deps(self, deps):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    71
        self.deps.extend(deps)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    72
    def add_source(self, source):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    73
        self.sources.append(source)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    74
    def add_sources(self, sources):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    75
        self.sources.extend(sources)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    76
    def add_header(self, header):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    77
        self.headers.append(header)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    78
    def add_headers(self, headers):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    79
        self.headers.extend(headers)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    80
    def add_inst_header(self, header):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    81
        self.inst_headers.append(header)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    82
    def add_inst_headers(self, headers):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    83
        self.inst_headers.extend(headers)
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    84
    def add_ldflags (self, ldflags):
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    85
        self.ldflags.extend (ldflags)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    86
    def add_ldflag (self, ldflag):
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    87
        self.add_ldflags ([ldflag])
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    88
    def set_header_inst_dir (self, inst_dir):
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    89
        self.header_inst_dir = inst_dir
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
    90
        
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    92
def MyCopyAction(target, source, env):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    93
    try:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    94
        if len(target) == len(source):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    95
            for i in range(len(target)):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
    96
                shutil.copy(source[i].path, target[i].path)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    97
            return 0
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    98
        else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
    99
            return 'invalid target/source match'
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   100
    except:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   101
        print
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   102
        return 'exception'
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   103
def MyCopyActionPrint(target, source, env):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   104
    if len(target) == len(source):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   105
        output = ''
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   106
        for i in range(len(target)):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   107
            output = output + 'copy \'' + source[i].path + '\' to \'' + target[i].path + '\''
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   108
            if i < len(target) - 1:
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   109
                output = output + '\n'
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   110
        return output
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   111
    else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   112
        return 'error in copy'
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   113
def GcxxEmitter(target, source, env):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   114
    if os.path.exists(source[0].path):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   115
        return [target, source]
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   116
    else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   117
        return [[], []]
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   118
def MyRmTree(target, source, env):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   119
    shutil.rmtree(env['RM_DIR'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   120
    return 0
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   121
def MyRmTreePrint(target, source, env):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   122
    return ''
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
def print_cmd_line(s, target, src, env):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   124
    print 'Building ' + (' and '.join([str(x) for x in target])) + '...'
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
class Ns3BuildVariant:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   127
    def __init__(self):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   128
        self.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   129
        self.gcxx_deps = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   130
        self.gcxx_root = ''
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   131
        self.build_root = ''
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   132
        self.env = None
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
class Ns3:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   135
    def __init__(self):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   136
        self.__modules = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   137
        self.extra_dist = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   138
        self.build_dir = 'build'
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   139
        self.version = '0.0.1'
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   140
        self.name = 'noname'
637
6285ef4d0fec improve dist support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 634
diff changeset
   141
        self.distname = 'noname'
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   142
        self.doxygen_config = ''
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   143
    def add(self, module):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   144
        self.__modules.append(module)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   145
    def add_extra_dist(self, dist):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   146
        self.extra_dist.append(dist)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   147
    def __get_module(self, name):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   148
        for module in self.__modules:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   149
            if module.name == name:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   150
                return module
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   151
        return None
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   152
    def get_mod_output(self, module, variant):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   153
        if module.executable:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   154
            suffix = variant.env.subst(variant.env['PROGSUFFIX'])
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   155
            filename = os.path.join(variant.build_root, 'bin', 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   156
                                    module.name + suffix)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   157
        else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   158
            if variant.static:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   159
                prefix = variant.env['LIBPREFIX']
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   160
                suffix = variant.env['LIBSUFFIX']
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   161
            else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   162
                prefix = variant.env['SHLIBPREFIX']
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   163
                suffix = variant.env['SHLIBSUFFIX']
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   164
            prefix = variant.env.subst(prefix)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   165
            suffix = variant.env.subst(suffix)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   166
            filename = os.path.join(variant.build_root, 'lib', 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   167
                                     prefix + module.name + suffix)
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   168
        return filename
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   169
    def get_obj_builders(self, variant, module):
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   170
        env = variant.env.Copy ()
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   171
        objects = []
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   172
        hash = {}
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   173
        self.get_internal_deps (module, hash)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   174
        for dep in hash.values ():
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   175
            if dep.header_inst_dir != '':
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   176
                inc_dir = os.path.join(variant.build_root, 'include', 
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   177
                                       self.name, dep.header_inst_dir)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   178
                env.Append (CPPPATH = [inc_dir])
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   179
                
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   180
        if len(module.config) > 0:
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   181
            src_config_file = os.path.join(self.build_dir, 'config', module.name + '-config.h')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   182
            tgt_config_file = os.path.join(variant.build_root, 'include', 
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   183
                                           self.name, module.name + '-config.h')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   184
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   185
        for source in module.sources:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   186
            obj_file = os.path.splitext(source)[0] + '.o'
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   187
            tgt = os.path.join(variant.build_root, module.dir, obj_file)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   188
            src = os.path.join(module.dir, source)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   189
            if variant.static:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   190
                obj_builder = env.StaticObject(target = tgt, source = src)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   191
            else:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   192
                obj_builder = env.SharedObject(target = tgt, source = src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   193
            if len(module.config) > 0:
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   194
                config_file = env.MyCopyBuilder(target = [tgt_config_file], 
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   195
                                                    source = [src_config_file])
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   196
                env.Depends(obj_builder, config_file)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   197
            if variant.gcxx_deps:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   198
                gcno_tgt = os.path.join(variant.build_root, module.dir, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   199
                                        os.path.splitext(source)[0] + '.gcno')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   200
                gcda_tgt = os.path.join(variant.build_root, module.dir, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   201
                                        os.path.splitext(source)[0] + '.gcda')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   202
                gcda_src = os.path.join(variant.gcxx_root, module.dir, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   203
                                        os.path.splitext(source)[0] + '.gcda')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   204
                gcno_src = os.path.join(variant.gcxx_root, module.dir, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   205
                                        os.path.splitext(source)[0] + '.gcno')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   206
                gcno_builder = env.CopyGcxxBuilder(target = gcno_tgt, source = gcno_src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   207
                gcda_builder = env.CopyGcxxBuilder(target = gcda_tgt, source = gcda_src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   208
                env.Depends(obj_builder, gcda_builder)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   209
                env.Depends(obj_builder, gcno_builder)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   210
            objects.append(obj_builder)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   211
        return objects
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   212
    def get_internal_deps(self, module, hash):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   213
        for dep_name in module.deps:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   214
            dep = self.__get_module(dep_name)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   215
            hash[dep_name] = dep
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   216
            self.get_internal_deps(dep, hash)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   217
    def get_external_deps(self, module):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   218
        hash = {}
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   219
        self.get_internal_deps(module, hash)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   220
        ext_hash = {}
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   221
        for mod in hash.values():
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   222
            for ext_dep in mod.external_deps:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   223
                ext_hash[ext_dep] = 1
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   224
        return ext_hash.keys()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   225
    def get_sorted_deps(self, module):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   226
        h = {}
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   227
        self.get_internal_deps(module, h)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   228
        modules = []
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   229
        for dep in h.keys():
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   230
            deps_copy = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   231
            mod = h[dep]
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   232
            deps_copy.extend(mod.deps)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   233
            modules.append([mod, deps_copy])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   234
        sorted = []
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   235
        while len(modules) > 0:
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   236
            to_remove = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   237
            for item in modules:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   238
                if len(item[1]) == 0:
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   239
                    to_remove.append(item[0].name)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   240
            for item in to_remove:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   241
                for i in modules:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   242
                    if item in i[1]:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   243
                        i[1].remove(item)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   244
            new_modules = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   245
            for mod in modules:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   246
                found = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   247
                for i in to_remove:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   248
                    if i == mod[0].name:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   249
                        found = True
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   250
                        break
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   251
                if not found:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   252
                    new_modules.append(mod)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   253
            modules = new_modules
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   254
            sorted.extend(to_remove)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   255
        sorted.reverse()
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   256
        # append external deps
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   257
        ext_deps = self.get_external_deps(module)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   258
        for dep in ext_deps:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   259
            sorted.append(dep)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   260
        return sorted
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   262
    def gen_mod_dep(self, variant):
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   263
        build_root = variant.build_root
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   264
        cpp_path = os.path.join(variant.build_root, 'include')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   265
        env = variant.env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   266
        env.Append(CPPPATH = [cpp_path])
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   267
        header_dir = os.path.join(build_root, 'include', self.name)
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   268
        lib_path = os.path.join(build_root, 'lib')
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   269
        env.Append (LIBPATH = [lib_path])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   270
        module_builders = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   271
        for module in self.__modules:
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   272
            my_env = env.Copy ();
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   273
            objects = self.get_obj_builders(variant, module)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   274
            libs = self.get_sorted_deps(module)
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   275
            my_env.Append (LIBS = libs)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   276
            my_env.Append (LINKFLAGS = module.ldflags)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   277
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   278
            filename = self.get_mod_output(module, variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   279
            if module.executable:
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   280
                module_builder = my_env.Program(target=filename, source=objects)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   281
            else:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   282
                if variant.static:
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   283
                    module_builder = my_env.StaticLibrary(target=filename, source=objects)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   284
                else:
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   285
                    module_builder = my_env.SharedLibrary(target=filename, source=objects)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   286
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   287
            for dep_name in module.deps:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   288
                dep = self.__get_module(dep_name)
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   289
                my_env.Depends(module_builder, self.get_mod_output(dep, variant))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   290
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   291
            for header in module.inst_headers:
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   292
                if module.header_inst_dir != '':
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   293
                    tgt = os.path.join(header_dir, module.header_inst_dir, header)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   294
                else:
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   295
                    tgt = os.path.join(header_dir, header)
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   296
                src = os.path.join(module.dir, header)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   297
                #builder = env.Install(target = tgt, source = src)
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   298
                header_builder = my_env.MyCopyBuilder(target=tgt, source=src)
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   299
                my_env.Depends(module_builder, header_builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   301
            module_builders.append(module_builder)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   302
        return module_builders
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   303
    def gen_mod_config(self, env):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   304
        config_dir = os.path.join(self.build_dir, 'config')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   305
        for module in self.__modules:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   306
            if len(module.config) > 0:
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   307
                config_file = os.path.join(config_dir, module.name + '-config.h')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   308
                config_file_guard = module.name + '_CONFIG_H'
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   309
                config_file_guard.upper()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   310
                if not os.path.isfile(config_file):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   311
                    if not os.path.isdir(config_dir):
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   312
                        os.makedirs(config_dir)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   313
                    outfile = open(config_file, 'w')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   314
                    outfile.write('#ifndef ' + config_file_guard + '\n')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   315
                    outfile.write('#define ' + config_file_guard + '\n')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   316
                    config = env.Configure()
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   317
                    for fn in module.config:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   318
                        output = fn(env, config)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   319
                        for o in output:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   320
                            outfile.write(o)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   321
                            outfile.write('\n')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   322
                    outfile.write('#endif /*' + config_file_guard + '*/\n')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   323
                    config.Finish()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   324
    def generate_dependencies(self):
139
84ce50ae8fd1 obey inheritenv variable on scons command-line (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 137
diff changeset
   325
        inheritenv = (ARGUMENTS.get('inheritenv', 'n') in 'yY1')
84ce50ae8fd1 obey inheritenv variable on scons command-line (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 137
diff changeset
   326
        if inheritenv:
84ce50ae8fd1 obey inheritenv variable on scons command-line (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 137
diff changeset
   327
            env = Environment(ENV=os.environ)
84ce50ae8fd1 obey inheritenv variable on scons command-line (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 137
diff changeset
   328
        else:
84ce50ae8fd1 obey inheritenv variable on scons command-line (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 137
diff changeset
   329
            env = Environment()
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   330
        self.gen_mod_config(env)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   331
        cc = env['CC']
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   332
        cxx = env.subst(env['CXX'])
340
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   333
        if cc == '':
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   334
            print "Missing C compiler."
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   335
            env.Exit (1);
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   336
        if cxx == '':
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   337
            print "Missing C++ compiler."
d548aca8c5af make sure that there is a C and C++ compiler. Otherwise, we generate large amounts of spurious unrelated errors.
mathieu@mathieu.inria.fr
parents: 277
diff changeset
   338
            env.Exit (1);
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   339
        common_flags = ARGUMENTS.get('cflags', '').split(' ')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   340
        cxxflags = ARGUMENTS.get('cxxflags', '').split(' ')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   341
        ldflags = ARGUMENTS.get('ldflags', '').split(' ')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   342
        if cc == 'cl' and cxx == 'cl':
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   343
            env = Environment(tools=['mingw'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   344
            cc = env['CC']
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   345
            cxx = env.subst(env['CXX'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   346
        if cc == 'gcc' and cxx == 'g++':
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   347
            common_flags.extend(['-g3', '-Wall', '-Werror'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   348
            debug_flags = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   349
            opti_flags = ['-O3']
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   350
        elif cc == 'cl' and cxx == 'cl':
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   351
            env = Environment(ENV=os.environ)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   352
            debug_flags = ['-W1', '-GX', '-EHsc', '-D_DEBUG', '/MDd']
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   353
            opti_flags = ['-O2', '-EHsc', '-DNDEBUG', '/MD']
634
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   354
        cc = ARGUMENTS.get ('cc', '')
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   355
        cxx = ARGUMENTS.get ('cxx', '')
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   356
        if cc != '':
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   357
            env.Replace (CC = cc)
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   358
        if cxx != '':
7dbf8f0dc819 fix scons dist and scons all for gcc 4.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 340
diff changeset
   359
            env.Replace (CXX = cxx)
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   360
        env.Append(CCFLAGS = common_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   361
                    CPPDEFINES = ['RUN_SELF_TESTS'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   362
                    TARFLAGS = '-c -z', 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   363
                    CPPFLAGS = cxxflags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   364
                    LINKFLAGS = ldflags)
137
9ce51e526b80 import RPATH handling on posix systems. Based on patch by Nicola Baldo <baldo@dei.unipd.it>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 136
diff changeset
   365
        if env['PLATFORM'] == 'posix':
9ce51e526b80 import RPATH handling on posix systems. Based on patch by Nicola Baldo <baldo@dei.unipd.it>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 136
diff changeset
   366
            env.Append(LINKFLAGS = ' -z origin')
9ce51e526b80 import RPATH handling on posix systems. Based on patch by Nicola Baldo <baldo@dei.unipd.it>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 136
diff changeset
   367
            env.Append(RPATH=env.Literal(os.path.join('\\$$ORIGIN', os.pardir, 'lib')))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   368
        verbose = ARGUMENTS.get('verbose', 'n')
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   369
        if verbose == 'n':
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   370
            env['PRINT_CMD_LINE_FUNC'] = print_cmd_line
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   371
        header_builder = Builder(action = Action(MyCopyAction, strfunction=MyCopyActionPrint))
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   372
        env.Append(BUILDERS = {'MyCopyBuilder':header_builder})
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   373
        gcxx_builder = Builder(action = Action(MyCopyAction, strfunction=MyCopyActionPrint), 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   374
                                emitter = GcxxEmitter)
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   375
        env.Append(BUILDERS = {'CopyGcxxBuilder':gcxx_builder})
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   376
        variant = Ns3BuildVariant()
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   377
        builders = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   378
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   379
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   380
        gcov_env = env.Copy()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   381
        gcov_env.Append(CFLAGS = ['-fprofile-arcs', '-ftest-coverage'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   382
                         CXXFLAGS = ['-fprofile-arcs', '-ftest-coverage'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   383
                         LINKFLAGS = ['-fprofile-arcs'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   384
        # code coverage analysis
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   385
        variant.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   386
        variant.env = gcov_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   387
        variant.build_root = os.path.join(self.build_dir, 'gcov')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   388
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   389
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   390
            gcov_env.Alias('gcov', builder)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   391
        gcov_env.Alias('lcov-report')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   392
        if 'lcov-report' in COMMAND_LINE_TARGETS:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   393
            lcov_report_dir = os.path.join(self.build_dir, 'lcov-report')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   394
            create_dir_command = "rm -rf " + lcov_report_dir
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   395
            create_dir_command += " && mkdir " + lcov_report_dir + ";"
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   396
            gcov_env.Execute(create_dir_command)
207
3732a5c036b3 allow you to specify extra link flags for each module
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 139
diff changeset
   397
            info_file = os.path.join(lcov_report_dir, self.name + '.info')
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   398
            lcov_command = "utils/lcov/lcov -c -d . -o " + info_file
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   399
            lcov_command += " --source-dirs=" + os.getcwd()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   400
            lcov_command += ":" + os.path.join(os.getcwd(), 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   401
                                                variant.build_root, 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   402
                                                'include')
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   403
            gcov_env.Execute(lcov_command)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   404
            genhtml_command = "utils/lcov/genhtml -o " + lcov_report_dir
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   405
            genhtml_command += " " + info_file
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   406
            gcov_env.Execute(genhtml_command)
116
d4ee28e845f3 add lcov support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 115
diff changeset
   407
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   410
        opt_env = env.Copy()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   411
        opt_env.Append(CFLAGS=opti_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   412
                        CXXFLAGS=opti_flags, 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   413
                        CPPDEFINES=['NDEBUG'])
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   414
        # optimized static support
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   415
        variant.static = True
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   416
        variant.env = opt_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   417
        variant.build_root = os.path.join(self.build_dir, 'opt-static')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   418
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   419
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   420
            opt_env.Alias('opt-static', builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   422
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   423
        opt_env = env.Copy()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   424
        opt_env.Append(CFLAGS = opti_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   425
                        CXXFLAGS = opti_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   426
                        CPPDEFINES = ['NDEBUG'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   427
        # optimized shared support
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   428
        variant.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   429
        variant.env = opt_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   430
        variant.build_root = os.path.join(self.build_dir, 'opt-shared')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   431
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   432
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   433
            opt_env.Alias('opt-shared', builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   436
        arc_env = env.Copy()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   437
        arc_env.Append(CFLAGS=opti_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   438
                        CXXFLAGS=opti_flags, 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   439
                        CPPDEFINES=['NDEBUG'])
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   440
        arc_env.Append(CFLAGS=['-frandom-seed=0', '-fprofile-generate'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   441
                        CXXFLAGS=['-frandom-seed=0', '-fprofile-generate'], 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   442
                        LINKFLAGS=['-frandom-seed=0', '-fprofile-generate'])
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   443
        # arc profiling
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   444
        variant.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   445
        variant.env = arc_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   446
        variant.build_root = os.path.join(self.build_dir, 'opt-arc')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   447
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   448
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   449
            arc_env.Alias('opt-arc', builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   451
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   452
        arcrebuild_env = env.Copy()
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   453
        arcrebuild_env.Append(CFLAGS=opti_flags, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   454
                               CXXFLAGS=opti_flags, 
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   455
                               CPPDEFINES=['NDEBUG'])
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   456
        arcrebuild_env.Append(CFLAGS=['-frandom-seed=0', '-fprofile-use'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   457
                               CXXFLAGS=['-frandom-seed=0', '-fprofile-use'], 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   458
                               LINKFLAGS=['-frandom-seed=0', '-fprofile-use'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   459
        # arc rebuild
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   460
        variant.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   461
        variant.env = arcrebuild_env
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   462
        variant.gcxx_deps = True
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   463
        variant.gcxx_root = os.path.join(self.build_dir, 'opt-arc')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   464
        variant.build_root = os.path.join(self.build_dir, 'opt-arc-rebuild')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   465
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   466
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   467
            arcrebuild_env.Alias('opt-arc-rebuild', builder)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   468
        variant.gcxx_deps = False
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   469
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   470
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   471
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   472
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   473
        dbg_env = env.Copy()
267
79efb83972b4 define NS3_DEBBUG_ENABLE when needed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 207
diff changeset
   474
        dbg_env.Append(CFLAGS = debug_flags, 
79efb83972b4 define NS3_DEBBUG_ENABLE when needed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 207
diff changeset
   475
                       CXXFLAGS = debug_flags,
277
9382ea16c568 make sure that NS3_ASSER_ENABLE is defined in debug builds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 267
diff changeset
   476
                       CPPDEFINES = ['NS3_DEBUG_ENABLE',
9382ea16c568 make sure that NS3_ASSER_ENABLE is defined in debug builds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 267
diff changeset
   477
                                     'NS3_ASSERT_ENABLE'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   478
        # debug static support
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   479
        variant.static = True
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   480
        variant.env = dbg_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   481
        variant.build_root = os.path.join(self.build_dir, 'dbg-static')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   482
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   483
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   484
            dbg_env.Alias('dbg-static', builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   486
        dbg_env = env.Copy()
267
79efb83972b4 define NS3_DEBBUG_ENABLE when needed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 207
diff changeset
   487
        dbg_env.Append(CFLAGS=debug_flags, 
79efb83972b4 define NS3_DEBBUG_ENABLE when needed
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 207
diff changeset
   488
                       CXXFLAGS=debug_flags,
277
9382ea16c568 make sure that NS3_ASSER_ENABLE is defined in debug builds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 267
diff changeset
   489
                       CPPDEFINES = ['NS3_DEBUG_ENABLE',
9382ea16c568 make sure that NS3_ASSER_ENABLE is defined in debug builds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 267
diff changeset
   490
                                     'NS3_ASSERT_ENABLE'])
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   491
        # debug shared support
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   492
        variant.static = False
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   493
        variant.env = dbg_env
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   494
        variant.build_root = os.path.join(self.build_dir, 'dbg-shared')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   495
        builders = self.gen_mod_dep(variant)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   496
        for builder in builders:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   497
            dbg_env.Alias('dbg-shared', builder)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   499
        env.Alias('dbg', 'dbg-shared')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   500
        env.Alias('opt', 'opt-shared')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   501
        env.Default('dbg')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   502
        env.Alias('all', ['dbg-shared', 'dbg-static', 'opt-shared', 'opt-static'])
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   503
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   504
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   505
        # dist support
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   506
        dist_env = env.Copy()
654
77ced4ddc0f7 Make scons dist work on osx
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 637
diff changeset
   507
        if dist_env['PLATFORM'] == 'posix' or dist_env['PLATFORM'] == 'darwin':
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   508
            dist_list = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   509
            for module in self.__modules:
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   510
                for f in module.sources:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   511
                    dist_list.append(os.path.join(module.dir, f))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   512
                for f in module.headers:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   513
                    dist_list.append(os.path.join(module.dir, f))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   514
                for f in module.inst_headers:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   515
                    dist_list.append(os.path.join(module.dir, f))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   516
                for f in module.extra_dist:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   517
                    dist_list.append(os.path.join(module.dir, f))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   518
            for f in self.extra_dist:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   519
                dist_list.append(f)
637
6285ef4d0fec improve dist support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 634
diff changeset
   520
            dist_list.append (self.doxygen_config)
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   521
            dist_list.append('SConstruct')
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   522
            dist_list.append('build.py')
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   524
            targets = []
637
6285ef4d0fec improve dist support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 634
diff changeset
   525
            basename = self.distname + '-' + self.version
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   526
            for src in dist_list:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   527
                tgt = os.path.join(basename, src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   528
                targets.append(dist_env.MyCopyBuilder(target=tgt, source=src))
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   529
            tar = basename + '.tar.gz'
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   530
            zip = basename + '.zip'
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   531
            tmp_tar = os.path.join(self.build_dir, tar)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   532
            tmp_zip = os.path.join(self.build_dir, zip)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   533
            dist_tgt = [tar, zip]
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   534
            dist_src = [tmp_tar, tmp_zip]
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   535
            dist_env.Tar(tmp_tar, targets)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   536
            dist_env.Zip(tmp_zip, targets)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   537
            dist_builder = dist_env.MyCopyBuilder(target=dist_tgt, source=dist_src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   538
            dist_env.Alias('dist', dist_builder)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   539
            dist_env.Append(RM_DIR=basename)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   540
            dist_env.AddPostAction(dist_builder, dist_env.Action(MyRmTree, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   541
                                                                 strfunction=MyRmTreePrint))
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   542
            dist_builder = dist_env.MyCopyBuilder(target=dist_tgt, source=dist_src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   543
            dist_env.Alias('fastdist', dist_tgt)
8
cb4ae01ba180 add scons build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   544
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   545
            # distcheck
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   546
            distcheck_list = []
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   547
            for src in dist_list:
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   548
                tgt = os.path.join(self.build_dir, basename, src)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   549
                distcheck_list.append(tgt)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   550
            untar = env.Command(distcheck_list, tar, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   551
                                ['cd ' + self.build_dir + ' && tar -zxf ../' + tar])
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   552
            scons_dir = os.path.join(self.build_dir, basename)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   553
            distcheck_builder = env.Command('x', distcheck_list, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   554
                                            ['cd ' + scons_dir + ' && scons'])
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   555
            env.AlwaysBuild(distcheck_builder)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   556
            env.Alias('distcheck', distcheck_builder)
128
b48c310f4e24 fix python tab indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 124
diff changeset
   557
        if self.doxygen_config != '':
136
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   558
            doxy = env.Command('doc/html/*', self.doxygen_config, 
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   559
                               ['doxygen ' + self.doxygen_config])
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   560
            env.AlwaysBuild(doxy)
4faf1726e8ff make python code more Pep8 conformant (patch from Gustavo Carneiro)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 128
diff changeset
   561
            env.Alias('doc', doxy)