From 1bd8c0c460709f915c04a68b408558159f08ce8b Mon Sep 17 00:00:00 2001 From: Chris Green Date: Tue, 26 Mar 2019 12:50:06 -0500 Subject: boost: Fix build of versions < 1.62.0 (#10910) Improve management of the Fiber library and C++ standard support: * Remove Fiber from list of libraries to build * Improve variant management for Fiber; add variants for Context and Coroutine libraries. * Add known conflict with C++17 for boost < 1.63.0 * Remove C++ standard "default" option, which left the choice of C++ standard to the compiler used to build boost --- var/spack/repos/builtin/packages/boost/package.py | 47 +++++++++-------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/var/spack/repos/builtin/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py index 84cfe173a9..0696639d0e 100644 --- a/var/spack/repos/builtin/packages/boost/package.py +++ b/var/spack/repos/builtin/packages/boost/package.py @@ -72,7 +72,6 @@ class Boost(Package): 'chrono', 'date_time', 'exception', - 'fiber', 'filesystem', 'graph', 'iostreams', @@ -93,7 +92,8 @@ class Boost(Package): # mpi/python are not installed by default because they pull in many # dependencies and/or because there is a great deal of customization # possible (and it would be difficult to choose sensible defaults) - default_noinstall_libs = set(['mpi', 'python']) + default_noinstall_libs\ + = set(['context', 'coroutine', 'fiber', 'mpi', 'python']) all_libs = default_install_libs | default_noinstall_libs @@ -102,8 +102,8 @@ class Boost(Package): description="Compile with {0} library".format(lib)) variant('cxxstd', - default='default', - values=('default', '98', '11', '14', '17'), + default='98', + values=('98', '11', '14', '17'), multi=False, description='Use the specified C++ standard when building.') variant('debug', default=False, @@ -135,6 +135,18 @@ class Boost(Package): depends_on('zlib', when='+iostreams') depends_on('py-numpy', when='+numpy', type=('build', 'run')) + # Coroutine, Context, Fiber, etc., are not straightforward. + conflicts('+context', when='@:1.50.99') # Context since 1.51.0. + conflicts('cxxstd=98', when='+context') # Context requires >=C++11. + conflicts('+coroutine', when='@:1.52.99') # Context since 1.53.0. + conflicts('~context', when='+coroutine') # Coroutine requires Context. + conflicts('+fiber', when='@:1.61.99') # Fiber since 1.62.0. + conflicts('cxxstd=98', when='+fiber') # Fiber requires >=C++11. + conflicts('~context', when='+fiber') # Fiber requires Context. + + # C++17 is not supported by Boost<1.63.0. + conflicts('cxxstd=17', when='@:1.62.99') + conflicts('+taggedlayout', when='+versionedlayout') conflicts('+numpy', when='~python') @@ -244,26 +256,6 @@ class Boost(Package): if '+python' in spec: f.write(self.bjam_python_line(spec)) - def cxxstd_to_flag(self, std): - flag = '' - if self.spec.variants['cxxstd'].value == '98': - flag = self.compiler.cxx98_flag - elif self.spec.variants['cxxstd'].value == '11': - flag = self.compiler.cxx11_flag - elif self.spec.variants['cxxstd'].value == '14': - flag = self.compiler.cxx14_flag - elif self.spec.variants['cxxstd'].value == '17': - flag = self.compiler.cxx17_flag - elif self.spec.variants['cxxstd'].value == 'default': - # Let the compiler do what it usually does. - pass - else: - # The user has selected a (new?) legal value that we've - # forgotten to deal with here. - tty.die("INTERNAL ERROR: cannot accommodate unexpected variant ", - "cxxstd={0}".format(spec.variants['cxxstd'].value)) - return flag - def determine_b2_options(self, spec, options): if '+debug' in spec: options.append('variant=debug') @@ -318,11 +310,10 @@ class Boost(Package): # Deal with C++ standard. if spec.satisfies('@1.66:'): - if spec.variants['cxxstd'].value != 'default': - options.append('cxxstd={0}'.format( - spec.variants['cxxstd'].value)) + options.append('cxxstd={0}'.format(spec.variants['cxxstd'].value)) else: # Add to cxxflags for older Boost. - flag = self.cxxstd_to_flag(spec.variants['cxxstd'].value) + cxxstd = spec.variants['cxxstd'].value + flag = getattr(self.compiler, 'cxx{0}_flag'.format(cxxstd)) if flag: cxxflags.append(flag) -- cgit v1.2.3-60-g2f50