Commit Graph

140 Commits

Author SHA1 Message Date
Sergiu Deitsch 93511bfdc9 Fix SuiteSparse path and version reporting
If SuiteSparse is found, an unhelpful message "Found SuiteSparse: TRUE
..." is printed. Instead, report the found include directory and version
information which was previously not shown due to unset
SuiteSparse_FOUND variable.

Change-Id: Ib43fb99934f34e6007110007d2cd4a8fbd841aa2
2022-03-14 20:27:24 +01:00
Sergiu Deitsch 0133dada2d Add Github workflows
Change-Id: I74fc45784b1b1d20c22b9e983902aa69fbfa764f
2022-03-13 23:51:40 +01:00
Brent Yi d3612c12c0 Set CMP0057 policy for IN_LIST operator in FindSuiteSparse.cmake
A recent change introduced some uses of `IN_LIST` in
FindSuiteSparse.cmake, but this is only introduced in cmake 3.3 and
breaks downstream projects that set cmake_minimum_required() to anything
lower.

This commit locally sets CMP0057, which enables the `IN_LIST` operator
and fixes the build for these projects.

Primarily motivated by colmap, which sets cmake_minimum_required(3.0)
and is currently broken: https://github.com/colmap/colmap/issues/1451

Change-Id: I9580c86f56248611326a932b8650b9048fb0ff14
2022-03-09 02:35:00 -08:00
Sergiu Deitsch 4bc100c13d Do not define unusable import targets
In the case, necessary properties of import targets cannot be set (i.e.,
either because the include directory or the library was found), do not
define import target to begin with.

Change-Id: Id216cd692a8ec240a20f65b174f196ddaa306c2b
2022-03-09 09:52:44 +00:00
Sergiu Deitsch 817f5a0688 Switch to imported SuiteSparse, CXSparse, and METIS targets
These changes allow the use of a SuiteSparse CMake package from
https://github.com/sergiud/SuiteSparse that allows native compilation of
SuiteSparse using CMake on a variety of platforms Packages generated
using official SuiteSparse makefiles can still be used without
modifications. The find module remains agnostic to specific CMake
package implementation.

CMake packages have the advantage that they are self-contained and
relocatable. The latter is particularly useful in cross-compilation
scenarios.

Fixes #728

Change-Id: I089d5c6f87c05b1530a5ab9a36dff2fcbe82d13d
2022-03-03 21:26:45 +01:00
Sergiu Deitsch 99698f0535 Fix Apple Clang weak symbols warnings
Change-Id: I71eba56ca37060c83d05ff14d6f9bfaef61e9493
2022-02-15 21:00:22 +01:00
Sergiu Deitsch f90833f5fa Simplify symbol export
Currently, the logic for exporting symbols is rather complicated: when
tests are enabled internal symbols are exported in addition to the
public symbols. Such logic causes several problems. (1) Test binaries
link against a Ceres build that is different from the final release
since fewer optimizations are applied if more symbols are exported. (2)
Also, some toolchains hide symbols by default breaking the existing
logic eventually causing linker errors.

Since internal symbols are not intended to be used outside of the
project, we can compile them into object files and use exactly the same
binary code both for the final build and the tests without relying on
conditionals.

By default, all symbols are now hidden unless annotated as public.
Internal symbols are explicitly marked as not being exported in case
users chose not to hide symbols by default.

Change-Id: I589dd10be2f6f438508783cf99d141af0120057b
2022-02-14 20:19:08 +01:00
Joydeep Biswas 36d6d86908 Add support for dense CUDA solvers #1
1. Add CUDADenseCholesky64Bit, CUDADenseCholesky32Bit, & tests.
   CUDADenseCholesky32Bit uses the legacy versions of potrf/potrs
   in cuSolverDN, while CUDADenseCholesky64Bit uses the new 64-bit
   versions available since Cuda 11.1. The legacy versions are
   provided since some platforms such as the Nvidia Jetsons only
   support Cuda 10.2.
2. Expose CUDA as a new option under DenseLinearAlgebraLibraryType.
   The relevant option to string and string to option helper functions
   are modified accordingly.
3. Add cuda as a dense_linear_algebra_library option in bundle_adjuster
   to demonstrate the use of the new CUDA option.

Change-Id: I23615e1d301df5185ed646b3e33ee802508dae86
2022-02-07 19:26:29 -06:00
Alex Stewart 8d3e64dd5e Use modern-style Eigen3 CMake variables
Change-Id: I4c14aa54552b3f718dff90eb397cb030aeb6ecd4
2021-11-16 19:51:06 +00:00
Sumit Dey 7de561e8e8 Fix dependency check for building documentation
Build with documentation fails if the required 'sphinx rtd theme' is
not available. Check if dependency is installed before building with
documentation.

Add Python3 as requirement for building documentation.

Change-Id: I5edc5d7374864990e625a5efb358f5a23b3c50fe
2021-07-31 12:21:16 +02:00
Alex Stewart 941ea13475 Fix FindTBB version detection with TBB >= 2021.1.1
- Raised as issue #669

Change-Id: Ic2fcaf31aef5e303d19a9caef7d6c679325f554a
2021-03-15 14:17:59 +00:00
Alex Stewart 4e69a475cd Fix potential for mismatched release/debug TBB libraries
- Protect against the case when the user has multiple installs of TBB
  in their search paths and the first install does not contain debug
  libraries.  In this case it is possible to get mismatched versions
  of TBB inserted into TBB_LIBRARIES.
- Also suppresses warning about use of TBB_ROOT on modern versions of
  CMake due to CMP0074.

Change-Id: I2eaafdde4a028cbf6c500c63771973d85bc4723d
2020-09-03 19:55:58 +01:00
Alex Stewart 7d3ffcb423 Remove forced CONFIG from find_package(Eigen3)
- Ceres will fail to configure if Eigen3::Eigen target is not found, and
  the minimum required Eigen version specified (3.3) exports Eigen as
  a CMake package and this is reflected in the default Ubuntu 18.04
  packages.
- This permits users to specify their own Eigen3 detection should they
  choose to do so, but they must do so via an imported target.

Change-Id: I5edff117c8001770004f49012ac1ae63b66ec9c1
2020-08-04 21:16:25 +00:00
Alex Stewart a029fc0f93 Use latest FindTBB.cmake from VTK project
- Retrieved from [1], SHA: 0d9bbf9beb97f8f696c43a9edf1e52c082b3639b on
  2020-07-26
- [1]: https://gitlab.kitware.com/vtk/vtk/blob/master/CMake/FindTBB.cmake

Change-Id: I953a8c87802a974d30ccc7c80f5229683826efbd
2020-08-04 21:16:07 +00:00
Alex Stewart aa1abbc578 Replace use of GFLAGS_LIBRARIES with export gflags target
- As our minimum required version of gflags (2.2) exports itself as
  a CMake package and this is the case for the default 18.04 package
  we can use the gflags target directly.
- Replaces forced use of CONFIG in find_package(gflags) with a check
  that the gflags imported target exists to avoid ambiguity with
  libgflags if installed in a default location.  This permits users to
  override the gflags detection should they so choose, provided that
  they do so via an imported target.
- Also removes some previously removed legacy GLAGS_ vars from the
  installation docs.

Change-Id: I015f5a751e5b22f956bbf9df692e63a6825c9f0d
2020-08-04 21:15:51 +00:00
Alex Stewart 7ef83e0759 Update minimum required C++ version for Ceres to C++14
- Removes all workarounds for pre-C++14 versions
- Removes '11' qualifier from C++ threading option and associated
  defines.
- Fix missing inclusion of 'Multithreading' in reported Ceres components
  when C++ threading model is enabled.
- Update Sphinx documentation to specify C++14 as minimum requirement.

Change-Id: I706c8b367b3221e3c4d1a0aaf669a8f9c911e438
2020-05-30 19:15:03 +01:00
Alex Stewart cca93fed63 Bypass Ceres' FindGlog.cmake in CeresConfig.cmake if possible
- If the version of glog detected and used to build Ceres was built with
  CMake (i.e. Config mode) then we now use Config mode directly in
  CeresConfig.cmake and do not install Ceres' FindGlog.cmake module.
- This has the benefit of removing any hard-coded paths from
  CeresConfig.cmake provided that all dependencies were also built with
  CMake.

Change-Id: I85af8a953fd6d300e8bc0cdeb0b3636fec182f68
2020-05-25 17:20:12 +00:00
Alex Stewart b70687fcc8 Add namespace qualified Ceres::ceres CMake target
- This reflects modern CMake style, and also provides a measure of
  protection against missing find_package() imports in downstream
  clients resulting in linker errors when 'ceres' matches the compiled
  library and not the imported target.
- The original 'ceres' target remains, as a local imported interface
  target created by CeresConfig for backwards compatibility.

Change-Id: Ie9ed8de9b7059bc0cae1ae5002bb94d8fe617188
2020-05-25 17:16:27 +00:00
Alastair Harrison 27b717951b Respect FIND_QUIETLY flag in cmake config file
Ensure that Ceres does not print any log messages when somebody has
used 'find_package(Ceres QUIET)' in their CMake project.

Change-Id: Id6b68859cc8a5857f3fa78f29736cb82fd5a0943
2020-05-15 10:10:12 +01:00
Darius Rueckert e9eb76f8ef Remove AutodiffCodegen CMake integration
Change-Id: I403597540df8429378336626b8f748b7821fe6f5
2020-04-06 11:11:43 +02:00
Darius Rueckert 90799e29e1 Fix install and unnecessary string copy
- Fix the following issue when running "make install"
  https://github.com/ceres-solver/ceres-solver/issues/527

- Fix error that CeresCodeGeneration.cmake was not found
  after instalation. Issue:
  https://github.com/ceres-solver/ceres-solver/issues/561

- Removes the unnecessary string copy during code generation

Change-Id: I01963d01da6a9c4557aad6f89831647c1a149e38
2020-02-14 13:11:15 +01:00
Darius Rueckert 032d5844c2 AutoDiff Code Generation - CMake Integration
This patch integrates the code generation module into the build
system. All depenendcies are tracked through CMake targets.
Modifying the cost functor will automatically trigger code
re-generation.

All this functionality is defined in the CMake function
ceres_generate_cost_function_implementation_for_functor
in CeresCodeGeneration.cmake. A hello world usage example
is included in examples/CMakeLists.txt.

Change-Id: I23b8b6698d1ea51cf3d788a47afcf39f8c5ce327
2020-02-13 13:57:14 +01:00
NeroBurner a3696835b4 use CMake function to create CeresConfigVersion
Use the CMake provided module CMakePackageConfigHelpers and its function
write_basic_package_version_file() to write the CeresConfigVersion.cmake
file to be installed.

Use SameMajorVersion compatibility flag.

Change-Id: I353aa8ede1ffee34e58b41371958ed5dedca4104
2019-12-17 18:40:26 +00:00
Alex Stewart 4655f2549c Use find_package() instead of find_dependency() in CeresConfig.cmake
- Revert to original usage for compatibility with the stated minimum
  required CMake version: 3.5

Change-Id: Ifb15f97a1d8e9cc5742564bc22a8761840c08e06
2019-12-13 11:56:06 +00:00
NeroBurner a548766d14 Use glfags target
Update the usage of Google Flags (gflags) library the same way Glog
updated it [1]. This pushes the minimum required gflags version to
v2.2.0.

Remove the ceres specific define of CERES_GFLAGS_NAMESPACE and directly
use GFLAGS_NAMESPACE defined in gflags/gflags_declare.h [2].

In CeresConfig.cmake the hard coded paths for gflags are ommited.
Instead we rely on the gflagsConfig file to get closer to a relocatable
CeresConfig.cmake.
Furthermore use the find_dependency() [4] cmake function specifically
created for cmake-config files.

This change builds upon the explicit PUBLIC/PRIVATE link change [3].

[1] https://github.com/google/glog/pull/199
[2] https://github.com/gflags/gflags/blob/d9b184bd0026b16bb4c2fded75d56fb2cce50d66/src/gflags_declare.h.in#L43
[3] https://ceres-solver-review.googlesource.com/c/ceres-solver/+/16220
[4] https://cmake.org/cmake/help/latest/module/CMakeFindDependencyMacro.html

Change-Id: I9861a2699f2702bf1a5e99d07863a7e6639b7c39
2019-12-12 14:00:59 +00:00
NeroBurner 33dd469a53 Use Eigen3::Eigen target
Since version 3.3 Eigen provides Eigen3Config.cmake with the imported
target Eigen3::Eigen. [1]
Use this imported target as descibed in Eigen-Wiki [2]

In the CeresConfig file improve relocatability by removing absolute
paths to the compiled dependencies. Instead find the used Eigen3::Eigen.
Furthermore use the find_dependency() [4] CMake function instead of the
find_package() call in CeresConfig.

This commit relies on all targets to be explicitly linked private or
public as done in the the change [3]

[1] https://bitbucket.org/eigen/eigen/pull-requests/257/cmake-imported-target-take-2/diff
[2] https://eigen.tuxfamily.org/dox/TopicCMakeGuide.html
[3] https://ceres-solver-review.googlesource.com/c/ceres-solver/+/16220
[4] https://cmake.org/cmake/help/latest/module/CMakeFindDependencyMacro.html

Change-Id: I44f44a089083f7169bcf430b59775242e4eb72d1
2019-12-12 14:56:00 +01:00
Alex Stewart 1084c5460a Quote all configure-expanded paths
- Required when the paths may include whitespace or special characters.

Change-Id: I573b4cabf5681bcbe7a545afe4acf9e9f61433e8
2019-11-25 20:26:28 +00:00
Alex Stewart 2b494cfb36 Update Travis CI to Bionic & Xcode 11.2
- Fix Homebrew Ruby errors by forcing brew update before install.
- Remove use of custom Eigen 3.3.4 on Linux in favour of default Bionic
  3.3.4 package.
- Update Android NDK version to R20b and build for arm64-v8.
- Fix erroneous string -> STRING in iOS toolchain file.

Change-Id: I041c2a08b92b8307c12bd8967159beb6984e3c65
2019-11-14 20:39:30 +00:00
Alex Stewart a3dde68770 Require Xcode >= 11.2 on macOS 10.15 (Catalina)
- As detailed in a previous CL, Xcode 11.0-1 exhibited a -fstack-check
  bug on 10.15 Catalina that broke alignment for at least AVX
  instructions causing segfaults from within Eigen.
- As Xcode 11.2 fixes this issue, and is probably a more reliable fix
  than -fno-stack-check, we now require the user update in this case.

Change-Id: I482748fe5f40f82e7daf4da133cdfabbd95ffc89
2019-11-14 09:44:38 +00:00
Alex Stewart 52d6477a42 Detect and disable -fstack-check on macOS 10.15 with Xcode 11
- On macOS 10.15 and Xcode 11 -fstack-check is enabled by default. This
  breaks SIMD alignment (and other alignment) as detailed here:
  https://forums.developer.apple.com/thread/121887 resulting in random
  segfaults from within Eigen.
- The underlying problem also exists with earlier OS versions running
  Xcode 11 if -fstack-check is explicitly enabled.
- This CL explicitly disables -fstack-check on affected versions of
  macOS 10.15 and Xcode 11.

Change-Id: I74d964281c360710d5fb722ac59e6930b0fdcc41
2019-11-01 20:11:25 +00:00
Sergey Sharybin 54ba6c27b5 Fix missing declaration warnings in Ceres code
This commit includes the following:

- Changes to CMake to make it safer to see which compiler flags are supported,
  so this way we do not need to worry about version checks in CMake.

- Unix platforms (which includes both Linux and Apple as far as i can tell)
  will now enable -Wmissing-declarations warning for the whole Ceres.

- Changes in all sources to solve missing declaration warning. In most cases
  it was either matter of using static qualifier or moving functions to an
  anonymous namespace.

  In one case the function got removed, since it seems to be unused.

  Additionally, in slam examples there was a non-inlined function implementation
  in a header, which is a direct way to cause linking errors if other .cc file
  will include that helper header.

- All third party sources (which is currently only gmock) has this extra
  paranoid warning disabled.

This warning is important in the following cases:

- Detect helper functions which are not needed anymore.
- Avoid unnoticed pollution of namespace.
- Avoid bad level calls.
- Avoid missing updates in header files after changes in implementation file.
- Helps integrating Ceres into software where paranoid warnings are important.

Change-Id: I9b1044aced3910d8c6b2356cfe2bf57f3c8c58db
2019-04-23 12:16:28 +02:00
Alex Stewart ee7e2cb3c8 Set Homebrew paths via HINTS not CMAKE_PREFIX_PATH
- Adding the Homebrew install prefix to CMAKE_PREFIX_PATH, irrespective
  of whether it is a standard location (e.g. /usr/local) overrides any
  user-specified HINTS locations according to the search order of
  CMake's find_xxx() functions.
- Now we append the relevant include/lib directory to its respective
  HINTS directory variable (to the back to avoid overriding any user
  specified values).  This achieves the same effect, but only after
  searching any user specified values.
- Also adds Homebrew install prefix to find_package() calls for
  dependencies optionally exported with CMake after the possible user
  specified <DEPENDENCY_NAME>_DIR prefix.
- Raised as issue #431

Change-Id: I47030f0f4fd9b96665fac57279be2285d9700b9a
2019-03-07 22:12:44 +00:00
Sameer Agarwal 4f8a018531 Revert "Fix custom Eigen on macos (EIGEN_INCLUDE_DIR_HINTS)"
This reverts commit e6c5c7226d.

Reason for revert: <INSERT REASONING HERE>

Change-Id: I38b6a0ae0a7d835d05505d1baae33a52f4752a33
2019-03-07 22:11:03 +00:00
Nikolaus Demmel e6c5c7226d Fix custom Eigen on macos (EIGEN_INCLUDE_DIR_HINTS)
In ceres' CMakeLists.txt a workaround for custom homebrew locations
sets CMAKE_PREFIX_PATH to the homebrew install path. This overrides
explicit requests for custom locations for third-party dependencies,
in particular for Eigen with EIGEN_INCLUDE_DIR_HINTS.

This commit introduces a workaround to make EIGEN_INCLUDE_DIR_HINTS
work on macos by ignoring CMAKE_PREFIX_PATH in that case.

Fixes https://github.com/ceres-solver/ceres-solver/issues/431

Change-Id: I3ec0ec418d45d41b9e5ebdd6aee60552438afec3
2019-03-07 22:08:44 +00:00
Alex Stewart 9350e57a45 Enable optional use of sanitizers
- The list of sanitizers to compile with can now be specified via the
  SANITIZERS option.

Change-Id: I9af3976e09582d8b3649cb12dc3e94333944d69f
2019-03-03 18:38:26 +00:00
Kuang Fangjun 0d3a84fce5 Fix typos in doc and errors in the demo code.
Change-Id: I237402958ed8747ae438643132fcab90113ac27d
2018-09-22 12:01:20 +08:00
Alex Stewart 402a2e4b6d Import Threads::Threads CMake target in CeresConfig.cmake
- Required now that Threads is a public dependency for Ceres and so
  Threads::Threads will appear in the dependency list for the Ceres
  target and so must be defined when Ceres itself is imported.

Change-Id: Ia5f8ea16e8f24cf0158f40e1fc8d3962106459a6
2018-08-23 09:22:22 +01:00
Alex Stewart 16f9b34c3b Remove Intel TBB threading support.
- In light of the C++11 threads threading option this is no longer
  necessary for cross-platform threading support and did not offer a
  noticeable performance gain over either the C++11 threads
  implementation or OpenMP.

Change-Id: Icb588d520888c19a1775171795b55bcaffb3d256
2018-07-03 18:05:36 +00:00
Alex Stewart 2166bad133 Replace include_directories() with target_include_directories().
- Now that we require CMake >= 3.x, we can roll the definition of the
  include directories for clients linking against Ceres into the
  exported Ceres CMake target via target_include_directories().
- This removes the requirement for CERES_INCLUDE_DIRS.

Change-Id: Ibe3bbf796339871d66138fc9520053d1766f09a8
2018-07-02 12:15:13 +01:00
Alex Stewart 8f41ca6abc Add Apple's Accelerate framework as a sparse linear algebra library.
- Currently DynamicSparseNormalCholeskySolver is unsupported for
  Accelerate.

Change-Id: I03b5a86bb22fef249c4aecd48947a613e8eff7a5
2018-06-29 09:43:03 +01:00
Alex Stewart d656d34809 Refactor Ceres threading option configuration.
- Previously we had separate variables for each of the threading
  backends, each of which were made mutually exclusive via
  cmake_dependent_option().  This has unfortunate side-effects when
  trying to disable options if they are not currently enabled, in which
  case they are not defined.
- As all the threading options are mutually exclusive, this replaces
  all threading option variables with a single variable: CERES_THREADS,
  which is constrained to take the value of only the available threading
  backends.

Change-Id: I0822eefbac9a30772907b7732add365b37cc8ca0
2018-06-20 23:20:57 +00:00
Alex Stewart 799fd50192 Ensure host-built packages are not used when building for iOS.
- Add missing CMAKE_FIND_ROOT_PATH_MODE_PACKAGE = ONLY, mimicking what
  we previously set for INCLUDE/LIBRARY/PROGRAM s/t the standard
  package locations on the host system will not be searched by
  find_package() when cross-compiling for iOS.
- Remove now unnecessary forced disabling of dependency options on iOS
  as they should now never be found (unless they were explicitly built
  for iOS) irrespective of whether the option defaults to ON initially.

Change-Id: I1d2c5da4838d7becb8ebd43f90a88cfc6ded4a1f
2018-06-20 09:43:26 +01:00
Alex Stewart 7582834a7e Do not bypass default CMake compiler checks on iOS.
- This should no longer be required on newer (3.5+) CMake versions and
  breaks the detection of supplementary compiler feature information
  such as the population of CMAKE_CXX_COMPILE_FEATURES which is required
  in order to compile Ceres.

Change-Id: Ibceab545925aa1e829320efa03fb74ef149cbb8b
2018-06-17 16:13:56 +01:00
Alex Stewart af77d3e676 Fix exported gflags include path.
- In practice, this was not causing any errors, as
  GFLAGS_INCLUDE_DIR_HINTS is set from GFLAGS_INCLUDE_DIRS so the two
  would have been equivalent, but we should nonetheless be using the
  one set after the find_package() call.
- Note that this would only have been active for older gflags versions
  that were not built with CMake.

Change-Id: Ie54145f522c974b7685052aafb1d2f6055d22337
2018-04-03 18:07:43 +01:00
Keir Mierle 7c4e8a454e Replace scoped_ptr with C++11's unique_ptr
Change-Id: Ib5a504c491e3a79af52a95accf009df473470c6b
2018-04-02 14:47:47 -07:00
Sameer Agarwal fc9336e12a Deprecate mutex.h
Use C++11's std::mutex and std::lock_guard instead.

Change-Id: If8d513d5d8f2ee2a49c1ebb249ffa93e4a80086b
2018-04-02 06:03:06 -07:00
Sameer Agarwal a1458f3348 More C++11ification.
1. Replace HashMap and HashSet with std::unordered_map and
   std::unordered_set respectively.
2. Extract the pair hasher into a struct pair_hash.
3. Delete collections_port.h
4. Convert explicit iterator based loops to auto based
   loops where sensible.

Change-Id: Ib88bcd13a7463d18435639d3b771abaa52080efb
2018-03-30 12:03:28 -07:00
Sameer Agarwal ffae101c75 Removed CERES_USE_CXX11
Remove the special handling for tr1::shared_ptr.

Change-Id: Ic405dcfe881dd6560d236956f84bfb8911d0bcbb
2018-03-29 15:16:49 -07:00
Alex Stewart 282b8b5f35 Require >= C++11 & CMake >= 3.5 when building Ceres.
- Removes CXX11 option, and all associate paraphernalia.  Ceres now
  requires a compiler with full >= C++11 support.  In MSVC terms this
  means >= 2013 Release 4.
- This deprecates the use of CERES_STD_UNORDERED_MAP and CERES_USE_CXX11
  as they will now always be defined.  They will be removed from the
  source in a future CL.
- For clients with CMake >= 3.8 we propagate via the exported/installed
  Ceres target the CXX version that was specified when Ceres was built.
  For versions < 3.8 (but >= 3.5) we specify the CXX features currently
  used in the Ceres public API.

Change-Id: I535b545b10156e4426659c270a4a0649e071df0e
2018-03-29 09:32:59 +01:00
Alex Stewart a80b8cfeac Fix C++11 detection for VS2010.
- Use cmake_dependent_option() for all threading models and encode their
  respective mutual exclusivity in the dependent-option s/t the job of
  ensuring mutual exclusivity is performed by CMake.
- Use of cmake_dependent_option() has the downside that options are
  removed from the GUI if their requirements for availability are not
  met.  So if CXX11 is OFF, then neither TBB nor CXX11_THREADS will
  even appear as options (they will be undefined, assumed OFF).
- Perform checks for availability of C++11 if CXX11 is enabled prior to
  testing other options to handle dependence of TBB & CXX11_THREADS on
  CXX11 actually being present.
- Add check for availability of C++11-specific math functions used in
  jet.h before reporting C++11 as found.
- Add check for <atomic> before allowing TBB or CXX11_THREADS, as both
  options require it and it may not always be available even if the
  other required C++11 components are.

Change-Id: Ife8cd182aeb1978539ce2c9966910ae59ebd9177
2018-03-19 09:40:48 +00:00