From 453dd8a2945014e0704c0a97bda462583158ffca Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Fri, 5 Sep 2008 18:16:29 +0100 Subject: [PATCH] Add a summary of optional features at the end of the configuration stage. --- bindings/python/wscript | 21 ++++++++++++++++++++- src/contrib/stats/wscript | 4 ++++ src/contrib/wscript | 4 ++++ src/internet-stack/wscript | 4 ++++ wscript | 17 +++++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/bindings/python/wscript b/bindings/python/wscript index dcd38d7e5..102c966a1 100644 --- a/bindings/python/wscript +++ b/bindings/python/wscript @@ -87,11 +87,15 @@ __version__ = %r def configure(conf): conf.env['ENABLE_PYTHON_BINDINGS'] = False if Params.g_options.python_disable: + conf.report_optional_feature("python", "Python Bindings", False, + "disabled by user request") return conf.check_tool('misc') if sys.platform == 'cygwin': + conf.report_optional_feature("python", "Python Bindings", False, + "unsupported platform 'cygwin'") warning("Python is not supported in CygWin environment. Try MingW instead.") return @@ -100,7 +104,8 @@ def configure(conf): conf.check_tool('python') conf.check_python_version((2,3)) conf.check_python_headers() - except Configure.ConfigurationError: + except Configure.ConfigurationError, ex: + conf.report_optional_feature("python", "Python Bindings", False, str(ex)) return ## Check for pybindgen @@ -112,6 +117,8 @@ def configure(conf): except Configure.ConfigurationError: warning("pybindgen missing") if not fetch_pybindgen(conf): + conf.report_optional_feature("python", "Python Bindings", False, + "PyBindGen missing and could not be retrieved") return else: out = subprocess.Popen([conf.env['PYTHON'], "-c", @@ -128,15 +135,20 @@ def configure(conf): (pybindgen_version_str, '.'.join([str(x) for x in REQUIRED_PYBINDGEN_VERSION]))) if not fetch_pybindgen(conf): + conf.report_optional_feature("python", "Python Bindings", False, + "PyBindGen too old and newer version could not be retrieved") return ## If all has gone well, we finally enable the Python bindings conf.env['ENABLE_PYTHON_BINDINGS'] = True + conf.report_optional_feature("python", "Python Bindings", True, None) ## Check for pygccxml try: conf.check_python_module('pygccxml') except Configure.ConfigurationError: + conf.report_optional_feature("pygccxml", "Python API Scanning Support", False, + "Missing 'pygccxml' Python module") return out = subprocess.Popen([conf.env['PYTHON'], "-c", @@ -152,6 +164,8 @@ def configure(conf): "automatic scanning of API definitions will not be possible" % (pygccxml_version_str, '.'.join([str(x) for x in REQUIRED_PYGCCXML_VERSION]))) + conf.report_optional_feature("pygccxml", "Python API Scanning Support", False, + "pygccxml too old") return @@ -159,6 +173,8 @@ def configure(conf): gccxml = conf.find_program('gccxml', var='GCCXML') if not gccxml: warning("gccxml missing; automatic scanning of API definitions will not be possible") + conf.report_optional_feature("pygccxml", "Python API Scanning Support", False, + "gccxml missing") return gccxml_version_line = os.popen(gccxml + " --version").readline().strip() @@ -168,10 +184,13 @@ def configure(conf): conf.check_message('gccxml', 'version', True, gccxml_version) if not gccxml_version_ok: warning("gccxml too old, need version >= 0.9; automatic scanning of API definitions will not be possible") + conf.report_optional_feature("pygccxml", "Python API Scanning Support", False, + "gccxml too old") return ## If we reached conf.env['ENABLE_PYTHON_SCANNING'] = True + conf.report_optional_feature("pygccxml", "Python API Scanning Support", True, None) prio_headers = { diff --git a/src/contrib/stats/wscript b/src/contrib/stats/wscript index 286837c47..3be5543e9 100644 --- a/src/contrib/stats/wscript +++ b/src/contrib/stats/wscript @@ -7,6 +7,10 @@ def configure(conf): e.define = 'SQLITE3' e.uselib = 'SQLITE3' conf.env['SQLITE_STATS'] = e.run() + conf.report_optional_feature("SqliteDataOutput", "SQlite stats data output", + conf.env['SQLITE_STATS'], + "library 'sqlite3' not found") + def build(bld): obj = bld.create_ns3_module('stats', ['node']) diff --git a/src/contrib/wscript b/src/contrib/wscript index 1c79b5437..e49b5c064 100644 --- a/src/contrib/wscript +++ b/src/contrib/wscript @@ -6,6 +6,10 @@ def configure(conf): check.uselib = 'GTK_CONFIG_STORE' check.mandatory = False conf.env['ENABLE_GTK_CONFIG_STORE'] = check.run() + conf.report_optional_feature("GtkConfigStore", "GtkConfigStore", + conf.env['ENABLE_GTK_CONFIG_STORE'], + "library 'gtk+-2.0 >= 2.12' not found") + conf.sub_config('stats') def build(bld): diff --git a/src/internet-stack/wscript b/src/internet-stack/wscript index f932574c7..aa8a098a8 100644 --- a/src/internet-stack/wscript +++ b/src/internet-stack/wscript @@ -37,6 +37,8 @@ def configure(conf): e.run() if not Params.g_options.nsc: + conf.report_optional_feature("nsc", "Network Simulation Cradle", False, + "--nsc configure option not given") return check_nsc_buildutils() @@ -55,6 +57,8 @@ def configure(conf): e.run() ok = True conf.check_message('NSC supported architecture', arch, ok) + conf.report_optional_feature("nsc", "Network Simulation Cradle", ok, + "architecture %r not supported" % arch) nsc_fetch() diff --git a/wscript b/wscript index 4e3201db1..970d0a736 100644 --- a/wscript +++ b/wscript @@ -197,8 +197,16 @@ def check_compilation_flag(conf, flag): if not ok: # if it doesn't accept, remove it again conf.env['CXXFLAGS'] = save_CXXFLAGS +def report_optional_feature(conf, name, caption, was_enabled, reason_not_enabled): + conf.env.append_value('NS3_OPTIONAL_FEATURES', (name, caption, was_enabled, reason_not_enabled)) def configure(conf): + + # attach some extra methods + conf.check_compilation_flag = types.MethodType(check_compilation_flag, conf) + conf.report_optional_feature = types.MethodType(report_optional_feature, conf) + conf.env['NS3_OPTIONAL_FEATURES'] = [] + conf.env['NS3_BUILDDIR'] = conf.m_blddir conf.check_tool('compiler_cxx') @@ -271,6 +279,15 @@ def configure(conf): ## we cannot run regression tests without diff conf.find_program('diff', var='DIFF') + # Write a summary of optional features status + print "---- Summary of optional NS-3 features:" + for (name, caption, was_enabled, reason_not_enabled) in conf.env['NS3_OPTIONAL_FEATURES']: + if was_enabled: + status = 'enabled' + else: + status = 'not enabled (%s)' % reason_not_enabled + print "%-30s: %s" % (caption, status) + def create_ns3_program(bld, name, dependencies=('simulator',)): program = bld.create_obj('cpp', 'program')