waf-tools/boost.py
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Wed, 15 May 2013 16:26:46 -0400
changeset 9785 97052ab05772
parent 9278 0a749c0f1afd
child 9920 e90d966ba939
permissions -rw-r--r--
[Coverity] Unchecked return value (CHECKED_RETURN)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     1
#!/usr/bin/env python
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     2
# encoding: utf-8
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     3
#
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     4
# partially based on boost.py written by Gernot Vormayr
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     5
# written by Ruediger Sonderfeld <ruediger@c-plusplus.de>, 2008
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     6
# modified by Bjoern Michaelsen, 2008
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     7
# modified by Luca Fossati, 2008
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     8
# rewritten for waf 1.5.1, Thomas Nagy, 2008
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     9
# rewritten for waf 1.6.2, Sylvain Rouquette, 2011
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    10
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    11
'''
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    12
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    13
This is an extra tool, not bundled with the default waf binary.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    14
To add the boost tool to the waf file:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    15
$ ./waf-light --tools=compat15,boost
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    16
	or, if you have waf >= 1.6.2
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    17
$ ./waf update --files=boost
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    18
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    19
When using this tool, the wscript will look like:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    20
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    21
	def options(opt):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    22
		opt.load('compiler_cxx boost')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    23
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    24
	def configure(conf):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    25
		conf.load('compiler_cxx boost')
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    26
		conf.check_boost(lib='system filesystem')
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    27
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    28
	def build(bld):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    29
		bld(source='main.cpp', target='app', use='BOOST')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    30
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    31
Options are generated, in order to specify the location of boost includes/libraries.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    32
The `check_boost` configuration function allows to specify the used boost libraries.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    33
It can also provide default arguments to the --boost-static and --boost-mt command-line arguments.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    34
Everything will be packaged together in a BOOST component that you can use.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    35
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    36
When using MSVC, a lot of compilation flags need to match your BOOST build configuration:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    37
 - you may have to add /EHsc to your CXXFLAGS or define boost::throw_exception if BOOST_NO_EXCEPTIONS is defined.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    38
   Errors: C4530
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    39
 - boost libraries will try to be smart and use the (pretty but often not useful) auto-linking feature of MSVC
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    40
   So before calling `conf.check_boost` you might want to disabling by adding:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    41
   	conf.env.DEFINES_BOOST += ['BOOST_ALL_NO_LIB']
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    42
   Errors: 
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    43
 - boost might also be compiled with /MT, which links the runtime statically.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    44
   If you have problems with redefined symbols, 
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    45
		self.env['DEFINES_%s' % var] += ['BOOST_ALL_NO_LIB']
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    46
		self.env['CXXFLAGS_%s' % var] += ['/MD', '/EHsc']
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    47
Passing `--boost-linkage_autodetect` might help ensuring having a correct linkage in some basic cases.
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    48
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    49
'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    50
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    51
import sys
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    52
import re
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    53
from waflib import Utils, Logs, Errors
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    54
from waflib.Configure import conf
7550
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
    55
from waflib.Errors import WafError
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    56
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    57
BOOST_LIBS = ['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/sw/lib', '/lib']
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    58
BOOST_INCLUDES = ['/usr/include', '/usr/local/include', '/opt/local/include', '/sw/include']
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    59
BOOST_VERSION_FILE = 'boost/version.hpp'
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    60
BOOST_VERSION_CODE = '''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    61
#include <iostream>
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    62
#include <boost/version.hpp>
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    63
int main() { std::cout << BOOST_LIB_VERSION << std::endl; }
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    64
'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    65
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    66
# toolsets from {boost_dir}/tools/build/v2/tools/common.jam
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    67
PLATFORM = Utils.unversioned_sys_platform()
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    68
detect_intel = lambda env: (PLATFORM == 'win32') and 'iw' or 'il'
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    69
detect_clang = lambda env: (PLATFORM == 'darwin') and 'clang-darwin' or 'clang'
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    70
detect_mingw = lambda env: (re.search('MinGW', env.CXX[0])) and 'mgw' or 'gcc'
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    71
BOOST_TOOLSETS = {
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    72
	'borland':  'bcb',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
	'clang':	detect_clang,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    74
	'como':	 'como',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    75
	'cw':	   'cw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    76
	'darwin':   'xgcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
	'edg':	  'edg',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
	'g++':	  detect_mingw,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    79
	'gcc':	  detect_mingw,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    80
	'icpc':	 detect_intel,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    81
	'intel':	detect_intel,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
	'kcc':	  'kcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    83
	'kylix':	'bck',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    84
	'mipspro':  'mp',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85
	'mingw':	'mgw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    86
	'msvc':	 'vc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    87
	'qcc':	  'qcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    88
	'sun':	  'sw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    89
	'sunc++':   'sw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    90
	'tru64cxx': 'tru',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    91
	'vacpp':	'xlc'
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    92
}
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    93
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    94
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    95
def options(opt):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    96
	opt.add_option('--boost-includes', type='string',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    97
				   default='', dest='boost_includes',
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    98
				   help='''path to the boost includes root (~boost root)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
    99
				   e.g. /path/to/boost_1_47_0''')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   100
	opt.add_option('--boost-libs', type='string',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   101
				   default='', dest='boost_libs',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   102
				   help='''path to the directory where the boost libs are
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   103
				   e.g. /path/to/boost_1_47_0/stage/lib''')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   104
	opt.add_option('--boost-static', action='store_true',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   105
				   default=False, dest='boost_static',
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   106
				   help='link with static boost libraries (.lib/.a)')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   107
	opt.add_option('--boost-mt', action='store_true',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   108
				   default=False, dest='boost_mt',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   109
				   help='select multi-threaded libraries')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   110
	opt.add_option('--boost-abi', type='string', default='', dest='boost_abi',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   111
				   help='''select libraries with tags (dgsyp, d for debug),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   112
				   see doc Boost, Getting Started, chapter 6.1''')
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   113
	opt.add_option('--boost-linkage_autodetect', action="store_true", dest='boost_linkage_autodetect',
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   114
				   help="auto-detect boost linkage options (don't get used to it / might break other stuff)")
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   115
	opt.add_option('--boost-toolset', type='string',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   116
				   default='', dest='boost_toolset',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   117
				   help='force a toolset e.g. msvc, vc90, \
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   118
						gcc, mingw, mgw45 (default: auto)')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   119
	py_version = '%d%d' % (sys.version_info[0], sys.version_info[1])
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   120
	opt.add_option('--boost-python', type='string',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   121
				   default=py_version, dest='boost_python',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   122
				   help='select the lib python with this version \
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   123
						(default: %s)' % py_version)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   124
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   125
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   126
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   127
def __boost_get_version_file(self, dir):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   128
	try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   129
		return self.root.find_dir(dir).find_node(BOOST_VERSION_FILE)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   130
	except:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   131
		return None
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   132
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   133
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   134
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   135
def boost_get_version(self, dir):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   136
	"""silently retrieve the boost version number"""
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   137
	re_but = re.compile('^#define\\s+BOOST_LIB_VERSION\\s+"(.*)"$', re.M)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   138
	try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   139
		val = re_but.search(self.__boost_get_version_file(dir).read()).group(1)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   140
	except:
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   141
		val = self.check_cxx(fragment=BOOST_VERSION_CODE, includes=[dir], execute=False, define_ret=True)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   142
	return val
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   143
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   144
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   145
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   146
def boost_get_includes(self, *k, **kw):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   147
	includes = k and k[0] or kw.get('includes', None)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   148
	if includes and self.__boost_get_version_file(includes):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   149
		return includes
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   150
	for dir in BOOST_INCLUDES:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   151
		if self.__boost_get_version_file(dir):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   152
			return dir
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   153
	if kw.get('boost_mandatory', True):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   154
		if includes:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   155
			self.fatal('headers not found in %s' % includes)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   156
		else:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   157
			self.fatal('headers not found, please provide a --boost-includes argument (see help)')
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   158
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   159
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   160
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   161
def boost_get_toolset(self, cc):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   162
	toolset = cc
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   163
	if not cc:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   164
		build_platform = Utils.unversioned_sys_platform()
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   165
		if build_platform in BOOST_TOOLSETS:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   166
			cc = build_platform
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   167
		else:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   168
			cc = self.env.CXX_NAME
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   169
	if cc in BOOST_TOOLSETS:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   170
		toolset = BOOST_TOOLSETS[cc]
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   171
	return isinstance(toolset, str) and toolset or toolset(self.env)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   172
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   173
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   174
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   175
def __boost_get_libs_path(self, *k, **kw):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   176
	''' return the lib path and all the files in it '''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   177
	if 'files' in kw:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   178
		return self.root.find_dir('.'), Utils.to_list(kw['files'])
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   179
	libs = k and k[0] or kw.get('libs', None)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   180
	if libs:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   181
		path = self.root.find_dir(libs)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   182
		files = path.ant_glob('*boost_*')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   183
	if not libs or not files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   184
		for dir in BOOST_LIBS:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   185
			try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   186
				path = self.root.find_dir(dir)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   187
				files = path.ant_glob('*boost_*')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   188
				if files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   189
					break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   190
				path = self.root.find_dir(dir + '64')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   191
				files = path.ant_glob('*boost_*')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   192
				if files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   193
					break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   194
			except:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   195
				path = None
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   196
	if not path:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   197
		if libs:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   198
			self.fatal('libs not found in %s' % libs)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   199
		else:
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   200
			self.fatal('libs not found, please provide a --boost-libs argument (see help)')
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   201
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   202
	self.to_log('Found the boost path in %r with the libraries:' % path)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   203
	for x in files:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   204
		self.to_log('    %r' % x)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   205
	return path, files
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   206
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   207
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   208
def boost_get_libs(self, *k, **kw):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   209
	'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   210
	return the lib path and the required libs
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   211
	according to the parameters
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   212
	'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   213
	path, files = self.__boost_get_libs_path(**kw)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   214
	t = []
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   215
	if kw.get('mt', False):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   216
		t.append('mt')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   217
	if kw.get('abi', None):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   218
		t.append(kw['abi'])
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   219
	tags = t and '(-%s)+' % '-'.join(t) or ''
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   220
	toolset = self.boost_get_toolset(kw.get('toolset', ''))
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   221
	toolset_pat = '(-%s[0-9]{0,3})+' % toolset
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   222
	version = '(-%s)+' % self.env.BOOST_VERSION
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   223
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   224
	def find_lib(re_lib, files):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   225
		for file in files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   226
			if re_lib.search(file.name):
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   227
				self.to_log('Found boost lib %s' % file)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   228
				return file
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   229
		return None
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   230
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   231
	def format_lib_name(name):
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   232
		if name.startswith('lib') and self.env.CC_NAME != 'msvc':
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   233
			name = name[3:]
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   234
		return name[:name.rfind('.')]
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   235
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   236
	libs = []
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   237
	for lib in Utils.to_list(k and k[0] or kw.get('lib', None)):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   238
		py = (lib == 'python') and '(-py%s)+' % kw['python'] or ''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   239
		# Trying libraries, from most strict match to least one
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   240
		for pattern in ['boost_%s%s%s%s%s' % (lib, toolset_pat, tags, py, version),
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   241
						'boost_%s%s%s%s' % (lib, tags, py, version),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   242
						'boost_%s%s%s' % (lib, tags, version),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   243
						# Give up trying to find the right version
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   244
						'boost_%s%s%s%s' % (lib, toolset_pat, tags, py),
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   245
						'boost_%s%s%s' % (lib, tags, py),
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   246
						'boost_%s%s' % (lib, tags)]:
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   247
			self.to_log('Trying pattern %s' % pattern)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   248
			file = find_lib(re.compile(pattern), files)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   249
			if file:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   250
				libs.append(format_lib_name(file.name))
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   251
				break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   252
		else:
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   253
			self.fatal('lib %s not found in %s' % (lib, path.abspath()))
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   254
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   255
	return path.abspath(), libs
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   256
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   257
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   258
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   259
def check_boost(self, *k, **kw):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   260
	"""
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   261
	Initialize boost libraries to be used.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   262
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   263
	Keywords: you can pass the same parameters as with the command line (without "--boost-").
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   264
	Note that the command line has the priority, and should preferably be used.
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   265
	"""
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   266
	if not self.env['CXX']:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   267
		self.fatal('load a c++ compiler first, conf.load("compiler_cxx")')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   268
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   269
	params = {'lib': k and k[0] or kw.get('lib', None)}
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   270
	for key, value in self.options.__dict__.items():
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   271
		if not key.startswith('boost_'):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   272
			continue
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   273
		key = key[len('boost_'):]
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   274
		params[key] = value and value or kw.get(key, '')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   275
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   276
	var = kw.get('uselib_store', 'BOOST')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   277
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   278
	self.start_msg('Checking boost includes')
7550
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   279
	try:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   280
		self.env['INCLUDES_%s' % var] = self.boost_get_includes(**params)
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   281
		self.env.BOOST_VERSION = self.boost_get_version(self.env['INCLUDES_%s' % var])
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   282
	except WafError:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   283
		self.end_msg("not found", 'YELLOW')
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   284
		raise
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   285
	#self.env['INCLUDES_%s' % var] = inc = self.boost_get_includes(**params)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   286
	#self.env.BOOST_VERSION = self.boost_get_version(inc)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   287
	self.end_msg(self.env.BOOST_VERSION)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   288
	if Logs.verbose:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   289
		Logs.pprint('CYAN', '	path : %s' % self.env['INCLUDES_%s' % var])
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   290
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   291
	if not params['lib']:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   292
		return
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   293
	self.start_msg('Checking boost libs')
7550
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   294
	try:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   295
		suffix = params.get('static', 'ST') or ''
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   296
		path, libs = self.boost_get_libs(**params)
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   297
	except WafError:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   298
		self.end_msg("not found", 'YELLOW')
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   299
		raise
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   300
	#suffix = params.get('static', None) and 'ST' or ''
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   301
	#path, libs = self.boost_get_libs(**params)
7487
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   302
	self.env['%sLIBPATH_%s' % (suffix, var)] = [path]
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   303
	self.env['%sLIB_%s' % (suffix, var)] = libs
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   304
	self.end_msg('ok')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   305
	if Logs.verbose:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   306
		Logs.pprint('CYAN', '	path : %s' % path)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   307
		Logs.pprint('CYAN', '	libs : %s' % libs)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   308
9278
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   309
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   310
	def try_link():
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   311
		if 'system' in params['lib']:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   312
			self.check_cxx(
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   313
			 fragment="\n".join([
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   314
			  '#include <boost/system/error_code.hpp>',
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   315
			  'int main() { boost::system::error_code c; }',
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   316
			 ]),
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   317
			 use=var,
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   318
			 execute=False,
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   319
			)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   320
		if 'thread' in params['lib']:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   321
			self.check_cxx(
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   322
			 fragment="\n".join([
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   323
			  '#include <boost/thread.hpp>',
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   324
			  'int main() { boost::thread t; }',
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   325
			 ]),
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   326
			 use=var,
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   327
			 execute=False,
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   328
			)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   329
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   330
	if params.get('linkage_autodetect', False):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   331
		self.start_msg("Attempting to detect boost linkage flags")
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   332
		toolset = self.boost_get_toolset(kw.get('toolset', ''))
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   333
		if toolset in ['vc']:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   334
			# disable auto-linking feature, causing error LNK1181
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   335
			# because the code wants to be linked against
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   336
			self.env['DEFINES_%s' % var] += ['BOOST_ALL_NO_LIB']
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   337
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   338
			# if no dlls are present, we guess the .lib files are not stubs
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   339
			has_dlls = False
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   340
			for x in Utils.listdir(path):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   341
				if x.endswith(self.env.cxxshlib_PATTERN % ''):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   342
					has_dlls = True
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   343
					break
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   344
			if not has_dlls:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   345
				self.env['STLIBPATH_%s' % var] = [path]
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   346
				self.env['STLIB_%s' % var] = libs
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   347
				del self.env['LIB_%s' % var]
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   348
				del self.env['LIBPATH_%s' % var]
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   349
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   350
			# we attempt to play with some known-to-work CXXFLAGS combinations
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   351
			for cxxflags in (['/MD', '/EHsc'], []):
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   352
				self.env.stash()
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   353
				self.env["CXXFLAGS_%s" % var] += cxxflags
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   354
				try:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   355
					try_link()
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   356
					self.end_msg("ok: winning cxxflags combination: %s" % (self.env["CXXFLAGS_%s" % var]))
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   357
					e = None
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   358
					break
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   359
				except Errors.ConfigurationError as exc:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   360
					self.env.revert()
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   361
					e = exc
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   362
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   363
			if e is not None:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   364
				self.fatal("Could not auto-detect boost linking flags combination, you may report it to boost.py author", ex=e)
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   365
		else:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   366
			self.fatal("Boost linkage flags auto-detection not implemented (needed ?) for this toolchain")
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   367
	else:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   368
		self.start_msg('Checking for boost linkage')
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   369
		try:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   370
			try_link()
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   371
		except Errors.ConfigurationError as e:
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   372
			self.fatal("Could not link against boost libraries using supplied options")
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   373
		self.end_msg('ok')
0a749c0f1afd Fix Python bindings and openflow for waf 1.7.10 upgrade and take care about boost requirements globally
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 7550
diff changeset
   374