Skip to content

Commit

Permalink
(#5246) boost: add boost/1.76.0 + bump b2
Browse files Browse the repository at this point in the history
* boost: bump b2 build dependency

* boost: add boost/1.76.0

* boost: add 1.76.0 to config.yml

* boost: move check to validate() + Boost.Math requires c++11

* boost: lower minimum required conan version

* boost: remove dead comment

* boost: assume apple-clang will never implement c++11
  • Loading branch information
madebr authored Apr 27, 2021
1 parent baa8811 commit a5600b9
Show file tree
Hide file tree
Showing 4 changed files with 350 additions and 16 deletions.
7 changes: 7 additions & 0 deletions recipes/boost/all/conandata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ sources:
"https://sourceforge.net/projects/boost/files/boost/1.75.0/boost_1_75_0.tar.bz2"
]
sha256: "953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb"
1.76.0:
url: [
"https://dl.bintray.com/boostorg/release/1.76.0/source/boost_1_76_0.tar.bz2",
"https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2",
"https://sourceforge.net/projects/boost/files/boost/1.76.0/boost_1_76_0.tar.bz2"
]
sha256: "f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41"
patches:
1.69.0:
- patch_file: "patches/boost_build_asmflags.patch"
Expand Down
78 changes: 62 additions & 16 deletions recipes/boost/all/conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
except ImportError:
from io import StringIO

required_conan_version = ">=1.28.0"
required_conan_version = ">=1.33.0"


# When adding (or removing) an option, also add this option to the list in
Expand Down Expand Up @@ -139,6 +139,9 @@ def export(self):
@property
def _min_compiler_version_default_cxx11(self):
# Minimum compiler version having c++ standard >= 11
if self.settings.compiler == "apple-clang":
# For now, assume apple-clang will enable c++11 in the distant future
return 99
return {
"gcc": 6,
"clang": 6,
Expand Down Expand Up @@ -180,6 +183,19 @@ def _all_dependent_modules(self, name):
break
return dependencies

def _all_super_modules(self, name):
dependencies = {name}
while True:
new_dependencies = set(dependencies)
for module in self._dependencies["dependencies"]:
if dependencies.intersection(set(self._dependencies["dependencies"][module])):
new_dependencies.add(module)
if len(new_dependencies) > len(dependencies):
dependencies = new_dependencies
else:
break
return dependencies

@property
def _source_subfolder(self):
return "source_subfolder"
Expand Down Expand Up @@ -247,6 +263,28 @@ def config_options(self):
# Shared builds of numa do not link on Visual Studio due to missing symbols
self.options.numa = False

if tools.Version(self.version) >= "1.76.0":
# Starting from 1.76.0, Boost.Math requires a c++11 capable compiler
# ==> disable it by default for older compilers or c++ standards

def disable_math():
super_modules = self._all_super_modules("math")
for smod in super_modules:
try:
setattr(self.options, "without_{}".format(smod), True)
except ConanException:
pass

if self.settings.compiler.cppstd:
if not tools.valid_min_cppstd(self, 11):
disable_math()
else:
min_compiler_version = self._min_compiler_version_default_cxx11
if min_compiler_version is None:
self.output.warn("Assuming the compiler supports c++11 by default")
elif tools.Version(self.settings.compiler.version) < min_compiler_version:
disable_math()

@property
def _configure_options(self):
return self._dependencies["configure_options"]
Expand All @@ -272,6 +310,18 @@ def configure(self):
if not self.options.i18n_backend:
raise ConanInvalidConfiguration("Boost.locale library requires a i18n_backend (either 'icu' or 'iconv')")

if not self.options.without_python:
if not self.options.python_version:
self.options.python_version = self._detect_python_version()
self.options.python_executable = self._python_executable

if self.options.layout == "b2-default":
self.options.layout = "versioned" if self.settings.os == "Windows" else "system"

if self.options.without_fiber:
del self.options.numa

def validate(self):
if not self.options.multithreading:
# * For the reason 'thread' is deactivate look at https://stackoverflow.com/a/20991533
# Look also on the comments of the answer for more details
Expand All @@ -294,11 +344,6 @@ def configure(self):
if self.options.get_safe("without_{}".format(mod_dep), False):
raise ConanInvalidConfiguration("{} requires {}: {} is disabled".format(mod_name, mod_deps, mod_dep))

if not self.options.without_python:
if not self.options.python_version:
self.options.python_version = self._detect_python_version()
self.options.python_executable = self._python_executable

if not self.options.get_safe("without_nowide", True):
# nowide require a c++11-able compiler with movable std::fstream
mincompiler_version = self._min_compiler_version_nowide
Expand All @@ -317,10 +362,6 @@ def configure(self):
self.output.warn("I don't know what the default c++ standard of this compiler is. I suppose it supports c++11 by default.\n"
"This might cause some boost libraries not being built and conan components to fail.")

# FIXME: check this + shouldn't default be on self._is_msvc?
# if self.options.layout == "b2-default":
# self.options.layout = "versioned" if self.settings.os == "Windows" else "system"

if not all((self.options.without_fiber, self.options.get_safe("without_json", True))):
# fiber/json require a c++11-able compiler.
if self.settings.compiler.cppstd:
Expand All @@ -334,15 +375,20 @@ def configure(self):
self.output.warn("I don't know what the default c++ standard of this compiler is. I suppose it supports c++11 by default.\n"
"This might cause some boost libraries not being built and conan components to fail.")

if self.options.layout == "b2-default":
self.options.layout = "versioned" if self.settings.os == "Windows" else "system"

if self.options.without_fiber:
del self.options.numa
if tools.Version(self.version) >= "1.76.0":
# Starting from 1.76.0, Boost.Math requires a c++11 capable compiler
if not self.options.without_math:
if self.settings.compiler.cppstd:
tools.check_min_cppstd(self, 11)
else:
min_compiler_version = self._min_compiler_version_default_cxx11
if min_compiler_version is not None:
if tools.Version(self.settings.compiler.version) < min_compiler_version:
raise ConanInvalidConfiguration("Boost.Math requires a C++11 capable compiler")

def build_requirements(self):
if not self.options.header_only:
self.build_requires("b2/4.2.0")
self.build_requires("b2/4.5.0")

def _with_dependency(self, dependency):
"""
Expand Down
Loading

0 comments on commit a5600b9

Please sign in to comment.