waf-tools/boost.py
author Tom Henderson <tomh@tomh.org>
Mon, 15 Sep 2014 20:51:08 -0700
changeset 10956 fa4be182ef17
parent 10779 f6a0e074b6fc
child 11275 00495fc6dd11
permissions -rw-r--r--
rescan remaining bindings
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
10779
f6a0e074b6fc bug 1857: detect location of installed boost libraries
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 9920
diff changeset
    57
BOOST_LIBS = ['/usr/lib/x86_64-linux-gnu', '/usr/lib/i386-linux-gnu',
f6a0e074b6fc bug 1857: detect location of installed boost libraries
Alexander Afanasyev <alexander.afanasyev@ucla.edu>
parents: 9920
diff changeset
    58
              '/usr/lib', '/usr/local/lib', '/opt/local/lib', '/sw/lib', '/lib']
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
    59
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
    60
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
    61
BOOST_VERSION_CODE = '''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    62
#include <iostream>
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    63
#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
    64
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
    65
'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    66
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    67
# 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
    68
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
    69
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
    70
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
    71
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
    72
BOOST_TOOLSETS = {
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
	'borland':  'bcb',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    74
	'clang':	detect_clang,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    75
	'como':	 'como',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    76
	'cw':	   'cw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
	'darwin':   'xgcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
	'edg':	  'edg',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    79
	'g++':	  detect_mingw,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    80
	'gcc':	  detect_mingw,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    81
	'icpc':	 detect_intel,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
	'intel':	detect_intel,
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    83
	'kcc':	  'kcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    84
	'kylix':	'bck',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85
	'mipspro':  'mp',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    86
	'mingw':	'mgw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    87
	'msvc':	 'vc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    88
	'qcc':	  'qcc',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    89
	'sun':	  'sw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    90
	'sunc++':   'sw',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    91
	'tru64cxx': 'tru',
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    92
	'vacpp':	'xlc'
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
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    96
def options(opt):
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    97
	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
    98
				   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
    99
				   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
   100
				   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
   101
	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
   102
				   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
   103
				   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
   104
				   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
   105
	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
   106
				   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
   107
				   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
   108
	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
   109
				   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
   110
				   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
   111
	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
   112
				   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
   113
				   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
   114
	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
   115
				   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
   116
	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
   117
				   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
   118
				   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
   119
						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
   120
	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
   121
	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
   122
				   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
   123
				   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
   124
						(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
   125
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   126
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   127
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   128
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
   129
	try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   130
		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
   131
	except:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   132
		return None
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
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   135
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   136
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
   137
	"""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
   138
	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
   139
	try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   140
		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
   141
	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
   142
		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
   143
	return val
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
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   146
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   147
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
   148
	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
   149
	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
   150
		return includes
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   151
	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
   152
		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
   153
			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
   154
	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
   155
		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
   156
			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
   157
		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
   158
			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
   159
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   160
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   161
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   162
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
   163
	toolset = cc
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   164
	if not cc:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   165
		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
   166
		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
   167
			cc = build_platform
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   168
		else:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   169
			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
   170
	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
   171
		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
   172
	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
   173
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   174
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   175
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   176
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
   177
	''' 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
   178
	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
   179
		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
   180
	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
   181
	if libs:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   182
		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
   183
		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
   184
	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
   185
		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
   186
			try:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   187
				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
   188
				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
   189
				if files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   190
					break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   191
				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
   192
				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
   193
				if files:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   194
					break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   195
			except:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   196
				path = None
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   197
	if not path:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   198
		if libs:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   199
			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
   200
		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
   201
			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
   202
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
	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
   204
	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
   205
		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
   206
	return path, files
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   207
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   208
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   209
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
   210
	'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   211
	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
   212
	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
   213
	'''
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   214
	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
   215
	t = []
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   216
	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
   217
		t.append('mt')
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   218
	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
   219
		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
   220
	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
   221
	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
   222
	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
   223
	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
   224
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   225
	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
   226
		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
   227
			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
   228
				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
   229
				return file
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   230
		return None
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   231
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   232
	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
   233
		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
   234
			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
   235
		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
   236
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   237
	libs = []
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   238
	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
   239
		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
   240
		# 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
   241
		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
   242
						'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
   243
						'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
   244
						# 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
   245
						'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
   246
						'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
   247
						'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
   248
			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
   249
			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
   250
			if file:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   251
				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
   252
				break
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   253
		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
   254
			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
   255
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   256
	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
   257
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   258
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   259
@conf
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   260
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
   261
	"""
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
   262
	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
   263
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
   264
	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
   265
	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
   266
	"""
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   267
	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
   268
		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
   269
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   270
	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
   271
	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
   272
		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
   273
			continue
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   274
		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
   275
		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
   276
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   277
	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
   278
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   279
	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
   280
	try:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   281
		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
   282
		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
   283
	except WafError:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   284
		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
   285
		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
   286
	#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
   287
	#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
   288
	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
   289
	if Logs.verbose:
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   290
		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
   291
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   292
	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
   293
		return
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   294
	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
   295
	try:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   296
		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
   297
		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
   298
	except WafError:
2fa7219968b3 Bug 1270 - "Checking boost includes" weirdness
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7487
diff changeset
   299
		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
   300
		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
   301
	#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
   302
	#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
   303
	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
   304
	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
   305
	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
   306
	if Logs.verbose:
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', '	path : %s' % path)
82cd20da9650 Upgrade to waf-1.6.7, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   308
		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
   309
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
   310
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
	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
   312
		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
   313
			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
   314
			 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
   315
			  '#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
   316
			  '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
   317
			 ]),
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
			 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
   319
			 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
   320
			)
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
		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
   322
			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
   323
			 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
   324
			  '#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
   325
			  '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
   326
			 ]),
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
			 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
   328
			 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
   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
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
	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
   332
		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
   333
		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
   334
		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
   335
			# 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
   336
			# 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
   337
			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
   338
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
			# 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
   340
			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
   341
			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
   342
				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
   343
					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
   344
					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
   345
			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
   346
				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
   347
				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
   348
				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
   349
				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
   350
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
			# 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
   352
			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
   353
				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
   354
				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
   355
				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
   356
					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
   357
					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
   358
					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
   359
					break
9920
e90d966ba939 Bug 1682 - ./waf crashes on FC10
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9278
diff changeset
   360
				except Errors.ConfigurationError, exc:
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
   361
					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
   362
					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
   363
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
			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
   365
				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
   366
		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
   367
			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
   368
	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
   369
		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
   370
		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
   371
			try_link()
9920
e90d966ba939 Bug 1682 - ./waf crashes on FC10
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 9278
diff changeset
   372
		except Errors.ConfigurationError, e:
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
   373
			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
   374
		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
   375