Move discussion of dependency licensing to Sphinx docs. - Also enable EIGENSPARSE option by default as LGPL licensing implications are less severe that SuiteSparse’s GPL implications which is enabled by default. Change-Id: Ic7e4fef5cef614d5ce719eeefcc35bf4b63b8dac
diff --git a/CMakeLists.txt b/CMakeLists.txt index b289008..fa070ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -107,14 +107,8 @@ # Multithreading using TBB option(TBB "Enable threaded solving in Ceres with TBB (requires TBB and C++11)" OFF) # Enable the use of Eigen as a sparse linear algebra library for -# solving the nonlinear least squares problems. Enabling this -# option will result in an LGPL licensed version of Ceres Solver -# as the Simplicial Cholesky factorization in Eigen is licensed under the LGPL. -# This does not affect the covariance estimation algorithm, as it -# depends on the sparse QR factorization algorithm, which is licensed -# under the MPL. -OPTION(EIGENSPARSE - "Enable Eigen as a sparse linear algebra library, WARNING: results in an LGPL licensed Ceres." OFF) +# solving the nonlinear least squares problems. +option(EIGENSPARSE "Enable Eigen as a sparse linear algebra library." ON) if (NOT MSVC) # Ceres does not use C++11 internally, however it does use shared_ptr # (required) and unordered_map (if available), both of which were present in @@ -213,35 +207,23 @@ "that Eigen/SparseCore be available, detected version of Eigen is: " "${EIGEN_VERSION}") endif (EIGEN_VERSION VERSION_LESS 3.1.0) - message("-- Found Eigen version ${EIGEN_VERSION}: ${EIGEN_INCLUDE_DIRS}") - # Ensure that only MPL2 licensed code is part of the default build. - message("") - message(" ===============================================================") if (EIGENSPARSE) + message("-- Enabling use of Eigen as a sparse linear algebra library.") list(APPEND CERES_COMPILE_OPTIONS CERES_USE_EIGEN_SPARSE) - message(" Enabling the use of Eigen as a sparse linear algebra library ") - message(" for solving the nonlinear least squares problems. Enabling ") - message(" this option results in an LGPL licensed version of ") - message(" Ceres Solver as the Simplicial Cholesky factorization in Eigen") - message(" is licensed under the LGPL. ") - if (EIGEN_VERSION VERSION_LESS 3.2.2) message(" WARNING:") message("") - message(" Your version of Eigen is older than version 3.2.2.") - message(" The performance of SPARSE_NORMAL_CHOLESKY and SPARSE_SCHUR") - message(" linear solvers will suffer. ") + message(" Your version of Eigen (${EIGEN_VERSION}) is older than ") + message(" version 3.2.2. The performance of SPARSE_NORMAL_CHOLESKY ") + message(" and SPARSE_SCHUR linear solvers will suffer.") endif (EIGEN_VERSION VERSION_LESS 3.2.2) - else (EIGENSPARSE) - message(" Disabling the use of Eigen as a sparse linear algebra library.") + message("-- Disabling use of Eigen as a sparse linear algebra library.") message(" This does not affect the covariance estimation algorithm ") message(" which can still use the EIGEN_SPARSE_QR algorithm.") add_definitions(-DEIGEN_MPL2_ONLY) endif (EIGENSPARSE) - message(" ===============================================================") - message("") endif (EIGEN_FOUND) if (LAPACK)
diff --git a/docs/source/installation.rst b/docs/source/installation.rst index bd3c821..c95049e 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst
@@ -566,6 +566,8 @@ ``CMake`` GUI. If they are not present in the *Standard View*, toggle to the *Advanced View* with ``<t>``. +.. _options-controlling-ceres-configuration: + Options controlling Ceres configuration --------------------------------------- @@ -582,20 +584,32 @@ ``SuiteSparse`` if it and all of its dependencies are present. Turn this ``OFF`` to build Ceres without ``SuiteSparse``. + .. NOTE:: + + SuiteSparse is licensed under a mixture of GPL/LGPL/Commercial + terms. Ceres requires some components that are only licensed under + GPL/Commercial terms. + #. ``CXSPARSE [Default: ON]``: By default, Ceres will link to ``CXSparse`` if all its dependencies are present. Turn this ``OFF`` to build Ceres without ``CXSparse``. + .. NOTE:: + + CXSparse is licensed under the LGPL. + #. ``EIGENSPARSE [Default: OFF]``: By default, Ceres will not use - Eigen's sparse Cholesky factorization. The is because this part of - the code is licensed under the ``LGPL`` and since ``Eigen`` is a - header only library, including this code will result in an ``LGPL`` - licensed version of Ceres. + Eigen's sparse Cholesky factorization. .. NOTE:: For good performance, use Eigen version 3.2.2 or later. + .. NOTE:: + + Unlike the rest of Eigen (>= 3.1.1 MPL2, < 3.1.1 LGPL), Eigen's sparse + Cholesky factorization is (still) licensed under the LGPL. + #. ``GFLAGS [Default: ON]``: Turn this ``OFF`` to build Ceres without ``gflags``. This will also prevent some of the example code from building. @@ -618,6 +632,12 @@ #. ``TBB [Default: OFF]``: An alternative to ``OpenMP`` threading library that requires C++11. This option is mutually exclusive to ``OpenMP``. + .. NOTE:: + + Up to and including version 4.4, TBB was licensed under + GPL/Commercial terms. From 2017.x versions onwards, TBB is licensed under + the Apache 2.0 license (and commerical terms). + #. ``CXX11 [Default: OFF]`` *Non-MSVC compilers only*. Although Ceres does not currently require C++11, it does use
diff --git a/docs/source/license.rst b/docs/source/license.rst index 2abbcec..a3c55c9 100644 --- a/docs/source/license.rst +++ b/docs/source/license.rst
@@ -2,6 +2,14 @@ License ======= +.. NOTE:: + + This page refers only to the license for Ceres itself, independent of its + optional dependencies which are separately licensed and which can affect + the resulting license of Ceres if built with them enabled. See + :ref:`options-controlling-ceres-configuration` for an overview of these + implications. + Ceres Solver is licensed under the New BSD license, whose terms are as follows. Copyright 2016 Google Inc. All rights reserved.