waf-1.6: Mac OSX and other fixes

This commit is contained in:
Gustavo J. A. M. Carneiro
2011-09-13 13:47:17 +01:00
parent 49c1b1e0fd
commit e8aeb9c6ce
8 changed files with 51 additions and 28 deletions

View File

@@ -14,6 +14,8 @@ import Logs
import Build
import Utils
from waflib.Errors import WafError
## https://launchpad.net/pybindgen/
REQUIRED_PYBINDGEN_VERSION = (0, 15, 0, 795)
REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
@@ -52,10 +54,6 @@ def options(opt):
help=("Don't build Python bindings."),
action="store_true", default=False,
dest='python_disable')
opt.add_option('--python-scan',
help=("Rescan Python bindings. Needs working GCCXML / pygccxml environment."),
action="store_true", default=False,
dest='python_scan')
opt.add_option('--apiscan',
help=("EXPERIMENTAL: Rescan the API for the indicated module(s), for Python bindings. "
"Needs working GCCXML / pygccxml environment. "
@@ -103,6 +101,21 @@ def configure(conf):
conf.report_optional_feature("python", "Python Bindings", False, str(ex))
return
# stupid Mac OSX Python wants to build extensions as "universal
# binaries", i386, x86_64, and ppc, but this way the type
# __uint128_t is not available. We need to disable the multiarch
# crap by removing the -arch parameters.
for flags_var in ["CFLAGS_PYEXT", "CFLAGS_PYEMBED", "CXXFLAGS_PYEMBED",
"CXXFLAGS_PYEXT", "LINKFLAGS_PYEMBED", "LINKFLAGS_PYEXT"]:
flags = conf.env[flags_var]
i = 0
while i < len(flags):
if flags[i] == '-arch':
del flags[i]
del flags[i]
continue
i += 1
conf.env[flags_var] = flags
if 0:
# alternative code to computing PYTHONDIR, that is more correct than the one in waf 1.5.16
@@ -261,7 +274,10 @@ int main ()
## Check gccxml version
gccxml = conf.find_program('gccxml', var='GCCXML')
try:
gccxml = conf.find_program('gccxml', var='GCCXML')
except WafError:
gccxml = None
if not gccxml:
Logs.warn("gccxml missing; automatic scanning of API definitions will not be possible")
conf.report_optional_feature("pygccxml", "Python API Scanning Support", False,

View File

@@ -6,7 +6,7 @@
#include <stdint.h>
#include <math.h>
#if defined(HAVE___UINT128_T)and !defined(HAVE_UINT128_T)
#if defined(HAVE___UINT128_T) && !defined(HAVE_UINT128_T)
typedef __uint128_t uint128_t;
typedef __int128_t int128_t;
#endif

View File

@@ -4,7 +4,7 @@ import os.path
def configure(conf):
if conf.env['ENABLE_THREADING']:
conf.env['ENABLE_EMU'] = conf.check(header_name='netpacket/packet.h',
conf.env['ENABLE_EMU'] = conf.check_nonfatal(header_name='netpacket/packet.h',
define_name='HAVE_PACKET_H')
conf.report_optional_feature("EmuNetDevice", "Emulated Net Device",
conf.env['ENABLE_EMU'],

View File

@@ -2,6 +2,7 @@
import os
import Options
from waflib.Errors import WafError
def options(opt):
opt.add_option('--with-openflow',
@@ -10,17 +11,20 @@ def options(opt):
opt.tool_options('boost', tooldir=["waf-tools"])
def configure(conf):
conf.check_tool('boost')
conf.env['BOOST'] = conf.check_boost(lib = 'signals filesystem',
kind = 'STATIC_BOTH',
score_version = (-1000, 1000),
tag_minscore = 1000)
if not conf.env['BOOST']:
try:
conf.check_tool('boost')
conf.env['BOOST'] = conf.check_boost(lib = 'signals filesystem',
kind = 'STATIC_BOTH',
score_version = (-1000, 1000),
tag_minscore = 1000,
libpath="/usr/lib64")
kind = 'STATIC_BOTH',
score_version = (-1000, 1000),
tag_minscore = 1000)
if not conf.env['BOOST']:
conf.env['BOOST'] = conf.check_boost(lib = 'signals filesystem',
kind = 'STATIC_BOTH',
score_version = (-1000, 1000),
tag_minscore = 1000,
libpath="/usr/lib64")
except WafError:
conf.env['BOOST'] = False
if not conf.env['BOOST']:
conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,

View File

@@ -4,7 +4,7 @@ import os.path
def configure(conf):
if conf.env['ENABLE_THREADING']:
conf.env['ENABLE_TAP'] = conf.check(header_name='linux/if_tun.h',
conf.env['ENABLE_TAP'] = conf.check_nonfatal(header_name='linux/if_tun.h',
define_name='HAVE_IF_TUN_H')
conf.report_optional_feature("TapBridge", "Tap Bridge",
conf.env['ENABLE_TAP'],

View File

@@ -36,8 +36,8 @@ def build(bld):
return
module.features.append('pyembed')
module.env.append_value('CXXFLAGS', module.env['shlib_CXXFLAGS'])
module.includes = '.'
#module.env.append_value('CXXFLAGS', module.env['shlib_CXXFLAGS'])
#module.includes = '.'
module.source.extend([
'model/pyviz.cc',

View File

@@ -308,14 +308,14 @@ def ns3_python_bindings(bld):
#mod = mod.split("--lib")[0]
pymod.env.append_value('LINKFLAGS', '-l' + mod)
pymod.env.append_value('LINKFLAGS', '-Wl,-Bdynamic,--no-whole-archive')
defines = list(pymod.env['CXXDEFINES'])
defines = list(pymod.env['DEFINES'])
defines.extend(['NS_DEPRECATED=', 'NS3_DEPRECATED_H'])
if Options.platform == 'win32':
try:
defines.remove('_DEBUG') # causes undefined symbols on win32
except ValueError:
pass
pymod.env['CXXDEFINES'] = defines
pymod.env['DEFINES'] = defines
pymod.includes = '# bindings'
pymod.install_path = '${PYTHONDIR}/ns'
return pymod

15
wscript
View File

@@ -24,6 +24,8 @@ import Build
import Configure
import Scripting
from waflib.Errors import WafError
from utils import read_config_file
# By default, all modules will be enabled, examples will be disabled,
@@ -286,8 +288,8 @@ def configure(conf):
env.append_value('LINKFLAGS', '-fprofile-arcs')
if Options.options.build_profile == 'debug':
env.append_value('CXXDEFINES', 'NS3_ASSERT_ENABLE')
env.append_value('CXXDEFINES', 'NS3_LOG_ENABLE')
env.append_value('DEFINES', 'NS3_ASSERT_ENABLE')
env.append_value('DEFINES', 'NS3_LOG_ENABLE')
env['PLATFORM'] = sys.platform
@@ -467,12 +469,10 @@ def configure(conf):
conf.env['ENABLE_GSL'],
"GSL not found")
if have_gsl:
conf.env.append_value('CXXDEFINES', "ENABLE_GSL")
conf.env.append_value('CCDEFINES', "ENABLE_GSL")
conf.env.append_value('DEFINES', "ENABLE_GSL")
# for compiling C code, copy over the CXX* flags
conf.env.append_value('CCFLAGS', conf.env['CXXFLAGS'])
conf.env.append_value('CCDEFINES', conf.env['CXXDEFINES'])
def add_gcc_flag(flag):
if env['COMPILER_CXX'] == 'g++' and 'CXXFLAGS' not in os.environ:
@@ -486,7 +486,10 @@ def configure(conf):
add_gcc_flag('-fstrict-aliasing')
add_gcc_flag('-Wstrict-aliasing')
conf.find_program('doxygen', var='DOXYGEN')
try:
conf.find_program('doxygen', var='DOXYGEN')
except WafError:
pass
# append user defined flags after all our ones
for (confvar, envvar) in [['CCFLAGS', 'CCFLAGS_EXTRA'],