comment "boost needs a toolchain w/ C++, threads, wchar"
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR

config BR2_PACKAGE_BOOST
	bool "boost"
	depends on BR2_INSTALL_LIBSTDCPP
	# Boost could theorically be built with threading=single, but
	# that unfortunately doesn't work. Until someone fixes that,
	# let's depend on threads.
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_WCHAR
	help
	  A general purpose C++ library

	  http://www.boost.org/

if BR2_PACKAGE_BOOST

choice
	prompt "Layout"
	default BR2_PACKAGE_BOOST_LAYOUT_SYSTEM
	help
	  Selects the layout of Boost binary names

config BR2_PACKAGE_BOOST_LAYOUT_SYSTEM
	bool "system"
	help
	  Boost binary names do not include the Boost version number
	  or the name and version number of the compiler.

config BR2_PACKAGE_BOOST_LAYOUT_TAGGED
	bool "tagged"
	help
	  Boost binary names include the encoded build properties such
	  as variant and threading, but do not include compiler name
	  and version, or Boost version. This option is useful if you
	  build several variants of Boost, using the same compiler.

config BR2_PACKAGE_BOOST_LAYOUT_VERSIONED
	bool "versioned"
	help
	  Boost binary names include the Boost version number, name
	  and version of the compiler and encoded build properties.

endchoice

config BR2_PACKAGE_BOOST_LAYOUT
	string
	default "system" if BR2_PACKAGE_BOOST_LAYOUT_SYSTEM
	default "tagged" if BR2_PACKAGE_BOOST_LAYOUT_TAGGED
	default "versioned" if BR2_PACKAGE_BOOST_LAYOUT_VERSIONED

config BR2_PACKAGE_BOOST_ATOMIC
	bool "boost-atomic"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	help
	  C++11-style atomic<>.

config BR2_PACKAGE_BOOST_CHRONO
	bool "boost-chrono"
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  Useful time utilities. C++11.

config BR2_PACKAGE_BOOST_CONTAINER
	bool "boost-container"
	help
	  Standard library containers and extensions.

# see
# http://www.boost.org/doc/libs/1_59_0/libs/context/doc/html/context/architectures.html
# for the list of supported architectures. Sparc pretends to be
# supported, but it doesn't build.
config BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	bool
	default y if ((BR2_arm || BR2_armeb) && BR2_ARM_CPU_HAS_ARM)
	default y if BR2_i386
	default y if BR2_mips
	default y if BR2_mipsel
	default y if BR2_powerpc
	default y if BR2_x86_64

config BR2_PACKAGE_BOOST_CONTEXT
	bool "boost-context"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \
		|| BR2_TOOLCHAIN_GCC_AT_LEAST_6 # boost-thread
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735
	select BR2_PACKAGE_BOOST_THREAD if !BR2_TOOLCHAIN_GCC_AT_LEAST_6
	help
	  C++11 context switching library.

config BR2_PACKAGE_BOOST_CONTRACT
	bool "boost-contract"
	# pthread_condattr_setclock
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  Contract programming for C++.

comment "boost-contract needs a toolchain w/ NPTL"
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL

config BR2_PACKAGE_BOOST_COROUTINE
	bool "boost-coroutine"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-context, boost-thread
	select BR2_PACKAGE_BOOST_CHRONO
	select BR2_PACKAGE_BOOST_CONTEXT
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_THREAD
	help
	  deprecated coroutine library, the non-depricated coroutine2
	  library is a header-only library and does not need to be
	  selected.

comment "boost-coroutine needs a toolchain not affected by GCC bug 64735"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_DATE_TIME
	bool "boost-date_time"
	help
	  A set of date-time libraries based on generic programming
	  concepts.

config BR2_PACKAGE_BOOST_EXCEPTION
	bool "boost-exception"
	help
	  The Boost Exception library supports transporting of arbitrary
	  data in exception objects, and transporting of exceptions
	  between threads.

config BR2_PACKAGE_BOOST_FIBER
	bool "boost-fiber"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	# mips support uses the "pause" instruction, only available
	# since mips32r2/mips64r2.
	depends on !BR2_MIPS_CPU_MIPS32 && !BR2_MIPS_CPU_MIPS64
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \
		|| BR2_TOOLCHAIN_GCC_AT_LEAST_6 # boost-context -> boost-thread
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-context
	select BR2_PACKAGE_BOOST_CONTEXT
	select BR2_PACKAGE_BOOST_FILESYSTEM
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  C++11 userland threads library.

comment "boost-fiber needs a toolchain w/ NPTL"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \
		|| BR2_TOOLCHAIN_GCC_AT_LEAST_6
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL

comment "boost-fiber needs a toolchain not affected by GCC bug 64735"
	depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \
		|| BR2_TOOLCHAIN_GCC_AT_LEAST_6
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_FILESYSTEM
	bool "boost-filesystem"
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  The Boost Filesystem Library provides portable facilities to
	  query and manipulate paths, files, and directories.

config BR2_PACKAGE_BOOST_GRAPH
	bool "boost-graph"
	select BR2_PACKAGE_BOOST_REGEX
	help
	  The BGL graph interface and graph components are generic, in
	  the same sense as the the Standard Template Library (STL).

config BR2_PACKAGE_BOOST_GRAPH_PARALLEL
	bool "boost-graph_parallel"
	help
	  The PBGL graph interface and graph components are generic, in
	  the same sense as the the Standard Template Library (STL).

config BR2_PACKAGE_BOOST_IOSTREAMS
	bool "boost-iostreams"
	select BR2_PACKAGE_BZIP2
	select BR2_PACKAGE_ZLIB
	help
	  Boost.IOStreams provides a framework for defining streams,
	  stream buffers and i/o filters.

config BR2_PACKAGE_BOOST_JSON
	bool "boost-json"
	select BR2_PACKAGE_BOOST_CONTAINER
	help
	  Boost.JSON is a portable C++ library which provides containers
	  and algorithms that implement JavaScript Object Notation, or
	  simply "JSON", a lightweight data-interchange format.

	  To use the library "header-only" this option is not needed.

config BR2_PACKAGE_BOOST_LOCALE
	bool "boost-locale"
	# When boost-locale is enabled with icu support, Boost no
	# longer supports building the libboost_* libraries as static
	# libraries, causing build failures when other boost features
	# than boost-locale are enabled. To work around this, we
	# prevent using boost-locale on static linking configurations
	# with icu enabled. See
	# https://svn.boost.org/trac/boost/ticket/9685 for more
	# details.
	depends on !(BR2_STATIC_LIBS && BR2_PACKAGE_ICU)
	depends on !(BR2_TOOLCHAIN_HAS_GCC_BUG_64735 && BR2_PACKAGE_ICU) # boost-thread
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \
		|| !BR2_PACKAGE_ICU # boost-thread
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_THREAD if BR2_PACKAGE_ICU
	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
	help
	  Provide localization and Unicode handling tools for C++.

comment "boost-locale needs a toolchain w/ dynamic library"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	depends on BR2_PACKAGE_ICU
	depends on BR2_STATIC_LIBS

comment "boost-locale needs a toolchain not affected by GCC bug 64735"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	depends on BR2_PACKAGE_ICU
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_LOG
	bool "boost-log"
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-atomic
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread
	select BR2_PACKAGE_BOOST_ATOMIC
	select BR2_PACKAGE_BOOST_DATE_TIME
	select BR2_PACKAGE_BOOST_FILESYSTEM
	select BR2_PACKAGE_BOOST_REGEX
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_THREAD
	help
	  Logging library.

comment "boost-log needs a toolchain w/ NPTL"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL

comment "boost-log needs a toolchain not affected by GCC bug 64735"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_MATH
	bool "boost-math"
	help
	  Boost.Math includes several contributions in the domain of
	  mathematics:

	  The Greatest Common Divisor and Least Common
	  Multiple library provides run-time and compile-time evaluation
	  of the greatest common divisor (GCD) or least common multiple
	  (LCM) of two integers.

	  The Special Functions library currently provides eight
	  templated special functions, in namespace boost.

	  The Complex Number Inverse Trigonometric Functions are the
	  inverses of trigonometric functions currently present in the
	  C++ standard.

	  Quaternions are a relative of complex numbers often used to
	  parameterise rotations in three dimentional space.

	  Octonions, like quaternions, are a relative of complex
	  numbers.

config BR2_PACKAGE_BOOST_MPI
	bool "boost-mpi"
	help
	  Message Passing Interface library, for use in
	  distributed-memory parallel application programming.

config BR2_PACKAGE_BOOST_NOWIDE
	bool "boost-nowide"
	help
	  Library for cross-platform, unicode aware programming.

config BR2_PACKAGE_BOOST_PROGRAM_OPTIONS
	bool "boost-program_options"
	help
	  The program_options library allows program developers to
	  obtain program options, that is (name, value) pairs from the
	  user, via conventional methods such as command line and config
	  file.

config BR2_PACKAGE_BOOST_PYTHON
	bool "boost-python"
	depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3
	help
	  The Boost Python Library is a framework for interfacing Python
	  and C++. It allows you to quickly and seamlessly expose C++
	  classes functions and objects to Python, and vice-versa,
	  using no special tools -- just your C++ compiler.

config BR2_PACKAGE_BOOST_RANDOM
	bool "boost-random"
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  A complete system for random number generation.

config BR2_PACKAGE_BOOST_REGEX
	bool "boost-regex"
	help
	  A new infrastructure for generic algorithms that builds on top
	  of the new iterator concepts.

config BR2_PACKAGE_BOOST_SERIALIZATION
	bool "boost-serialization"
	help
	  Serialization for persistence and marshalling.

config BR2_PACKAGE_BOOST_STACKTRACE
	bool "boost-stacktrace"
	depends on !BR2_STATIC_LIBS
	help
	  Gather, store, copy and print backtraces.

comment "boost-stacktrace needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_BOOST_SYSTEM
	bool "boost-system"
	help
	  Operating system support, including the diagnostics support
	  that will be part of the C++0x standard library.

config BR2_PACKAGE_BOOST_TEST
	bool "boost-test"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_TIMER
	help
	  Support for simple program testing, full unit testing, and for
	  program execution monitoring.

config BR2_PACKAGE_BOOST_THREAD
	bool "boost-thread"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::current_exception
	select BR2_PACKAGE_BOOST_CHRONO
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  Portable C++ multi-threading. C++11, C++14.

comment "boost-thread needs a toolchain not affected by GCC bug 64735"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_TIMER
	bool "boost-timer"
	select BR2_PACKAGE_BOOST_CHRONO
	select BR2_PACKAGE_BOOST_SYSTEM
	help
	  Event timer, progress timer, and progress display classes.

config BR2_PACKAGE_BOOST_TYPE_ERASURE
	bool "boost-type_erasure"
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_THREAD
	help
	  Runtime polymorphism based on concepts.

comment "boost-type_erasure needs a toolchain not affected by GCC bug 64735"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_BOOST_WAVE
	bool "boost-wave"
	# limitation of assembler for coldfire
	# error: Tried to convert PC relative branch to absolute jump
	depends on !BR2_m68k_cf
	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread
	select BR2_PACKAGE_BOOST_DATE_TIME
	select BR2_PACKAGE_BOOST_FILESYSTEM
	select BR2_PACKAGE_BOOST_SYSTEM
	select BR2_PACKAGE_BOOST_THREAD
	help
	  The Boost.Wave library is a Standards conformant, and highly
	  configurable implementation of the mandated C99/C++
	  preprocessor functionality packed behind an easy to use
	  iterator interface.

comment "boost-wave needs a toolchain not affected by GCC bug 64735"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

endif
