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.