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