Licensing: SPDX identifiers, REUSE.toml, and checkformat:reuse CI job

libeigen/eigen!2509

Closes #2868

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e2ccad7..27385a1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,6 +6,7 @@
 # This Source Code Form is subject to the terms of the Mozilla
 # Public License v. 2.0. If a copy of the MPL was not distributed
 # with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+# SPDX-License-Identifier: MPL-2.0
 
 default:
   interruptible: true
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b38be67..cefcaab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 cmake_minimum_required(VERSION 3.17)
 
 #==============================================================================
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index 0ea24b8..c2ef438 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -4,6 +4,8 @@
 ## # The following are required to uses Dart and the Cdash dashboard
 ##   enable_testing()
 ##   include(CTest)
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 set(CTEST_PROJECT_NAME "Eigen")
 set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
 
diff --git a/Eigen/AccelerateSupport b/Eigen/AccelerateSupport
index 533be68..155c24a 100644
--- a/Eigen/AccelerateSupport
+++ b/Eigen/AccelerateSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ACCELERATESUPPORT_MODULE_H
 #define EIGEN_ACCELERATESUPPORT_MODULE_H
diff --git a/Eigen/Cholesky b/Eigen/Cholesky
index e75357a..e6d116e 100644
--- a/Eigen/Cholesky
+++ b/Eigen/Cholesky
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CHOLESKY_MODULE_H
 #define EIGEN_CHOLESKY_MODULE_H
diff --git a/Eigen/CholmodSupport b/Eigen/CholmodSupport
index 3172513..02f1314 100644
--- a/Eigen/CholmodSupport
+++ b/Eigen/CholmodSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
 #define EIGEN_CHOLMODSUPPORT_MODULE_H
diff --git a/Eigen/Core b/Eigen/Core
index 37b62bf..52a158a 100644
--- a/Eigen/Core
+++ b/Eigen/Core
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_MODULE_H
 #define EIGEN_CORE_MODULE_H
diff --git a/Eigen/Dense b/Eigen/Dense
index c90db76..02131c9 100644
--- a/Eigen/Dense
+++ b/Eigen/Dense
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DENSE_MODULE_H
 #define EIGEN_DENSE_MODULE_H
diff --git a/Eigen/Eigen b/Eigen/Eigen
index bb8f02f..06e0495 100644
--- a/Eigen/Eigen
+++ b/Eigen/Eigen
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EIGEN_MODULE_H
 #define EIGEN_EIGEN_MODULE_H
diff --git a/Eigen/Eigenvalues b/Eigen/Eigenvalues
index f68eb85..334bf74 100644
--- a/Eigen/Eigenvalues
+++ b/Eigen/Eigenvalues
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EIGENVALUES_MODULE_H
 #define EIGEN_EIGENVALUES_MODULE_H
diff --git a/Eigen/Geometry b/Eigen/Geometry
index e27ddea..322261d 100644
--- a/Eigen/Geometry
+++ b/Eigen/Geometry
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GEOMETRY_MODULE_H
 #define EIGEN_GEOMETRY_MODULE_H
diff --git a/Eigen/Householder b/Eigen/Householder
index 719edaf..a1c8a42 100644
--- a/Eigen/Householder
+++ b/Eigen/Householder
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HOUSEHOLDER_MODULE_H
 #define EIGEN_HOUSEHOLDER_MODULE_H
diff --git a/Eigen/IterativeLinearSolvers b/Eigen/IterativeLinearSolvers
index fe5159e..ff5a6fc 100644
--- a/Eigen/IterativeLinearSolvers
+++ b/Eigen/IterativeLinearSolvers
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
 #define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
diff --git a/Eigen/Jacobi b/Eigen/Jacobi
index 31eb36a..b03ba45 100644
--- a/Eigen/Jacobi
+++ b/Eigen/Jacobi
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_JACOBI_MODULE_H
 #define EIGEN_JACOBI_MODULE_H
diff --git a/Eigen/KLUSupport b/Eigen/KLUSupport
index 6a5c597..d48fe23 100644
--- a/Eigen/KLUSupport
+++ b/Eigen/KLUSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_KLUSUPPORT_MODULE_H
 #define EIGEN_KLUSUPPORT_MODULE_H
diff --git a/Eigen/LU b/Eigen/LU
index ea54e35..e51768d 100644
--- a/Eigen/LU
+++ b/Eigen/LU
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LU_MODULE_H
 #define EIGEN_LU_MODULE_H
diff --git a/Eigen/MetisSupport b/Eigen/MetisSupport
index 3636d3a..ec682fa 100644
--- a/Eigen/MetisSupport
+++ b/Eigen/MetisSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_METISSUPPORT_MODULE_H
 #define EIGEN_METISSUPPORT_MODULE_H
diff --git a/Eigen/OrderingMethods b/Eigen/OrderingMethods
index 0167419..2c3074a 100644
--- a/Eigen/OrderingMethods
+++ b/Eigen/OrderingMethods
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ORDERINGMETHODS_MODULE_H
 #define EIGEN_ORDERINGMETHODS_MODULE_H
diff --git a/Eigen/PaStiXSupport b/Eigen/PaStiXSupport
index 5944231..0f3aa66 100644
--- a/Eigen/PaStiXSupport
+++ b/Eigen/PaStiXSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PASTIXSUPPORT_MODULE_H
 #define EIGEN_PASTIXSUPPORT_MODULE_H
diff --git a/Eigen/PardisoSupport b/Eigen/PardisoSupport
index 4aef5fb..9b49dd5 100644
--- a/Eigen/PardisoSupport
+++ b/Eigen/PardisoSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARDISOSUPPORT_MODULE_H
 #define EIGEN_PARDISOSUPPORT_MODULE_H
diff --git a/Eigen/QR b/Eigen/QR
index b29abce..18af350 100644
--- a/Eigen/QR
+++ b/Eigen/QR
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_QR_MODULE_H
 #define EIGEN_QR_MODULE_H
diff --git a/Eigen/QtAlignedMalloc b/Eigen/QtAlignedMalloc
index 6e15b26..cb34bfa 100644
--- a/Eigen/QtAlignedMalloc
+++ b/Eigen/QtAlignedMalloc
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_QTMALLOC_MODULE_H
 #define EIGEN_QTMALLOC_MODULE_H
diff --git a/Eigen/SPQRSupport b/Eigen/SPQRSupport
index bfc2e7b..1c06333 100644
--- a/Eigen/SPQRSupport
+++ b/Eigen/SPQRSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPQRSUPPORT_MODULE_H
 #define EIGEN_SPQRSUPPORT_MODULE_H
diff --git a/Eigen/SVD b/Eigen/SVD
index ef5e36e..1417979 100644
--- a/Eigen/SVD
+++ b/Eigen/SVD
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SVD_MODULE_H
 #define EIGEN_SVD_MODULE_H
diff --git a/Eigen/Sparse b/Eigen/Sparse
index 4d0ee8b..741fb41 100644
--- a/Eigen/Sparse
+++ b/Eigen/Sparse
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_MODULE_H
 #define EIGEN_SPARSE_MODULE_H
diff --git a/Eigen/SparseCholesky b/Eigen/SparseCholesky
index 6abdcd6..0e158d8 100644
--- a/Eigen/SparseCholesky
+++ b/Eigen/SparseCholesky
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSECHOLESKY_MODULE_H
 #define EIGEN_SPARSECHOLESKY_MODULE_H
diff --git a/Eigen/SparseCore b/Eigen/SparseCore
index 5d941e6..05dd65e 100644
--- a/Eigen/SparseCore
+++ b/Eigen/SparseCore
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSECORE_MODULE_H
 #define EIGEN_SPARSECORE_MODULE_H
diff --git a/Eigen/SparseLU b/Eigen/SparseLU
index 6faf130..05fb83f 100644
--- a/Eigen/SparseLU
+++ b/Eigen/SparseLU
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSELU_MODULE_H
 #define EIGEN_SPARSELU_MODULE_H
diff --git a/Eigen/SparseQR b/Eigen/SparseQR
index 1ad5192..d752cff 100644
--- a/Eigen/SparseQR
+++ b/Eigen/SparseQR
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEQR_MODULE_H
 #define EIGEN_SPARSEQR_MODULE_H
diff --git a/Eigen/StdDeque b/Eigen/StdDeque
index 01e1d76..3281d87 100644
--- a/Eigen/StdDeque
+++ b/Eigen/StdDeque
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDDEQUE_MODULE_H
 #define EIGEN_STDDEQUE_MODULE_H
diff --git a/Eigen/StdList b/Eigen/StdList
index 1453c9f..7094efa 100644
--- a/Eigen/StdList
+++ b/Eigen/StdList
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDLIST_MODULE_H
 #define EIGEN_STDLIST_MODULE_H
diff --git a/Eigen/StdVector b/Eigen/StdVector
index 711a654..425d295 100644
--- a/Eigen/StdVector
+++ b/Eigen/StdVector
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDVECTOR_MODULE_H
 #define EIGEN_STDVECTOR_MODULE_H
diff --git a/Eigen/SuperLUSupport b/Eigen/SuperLUSupport
index 27e14d2..a6fad83 100644
--- a/Eigen/SuperLUSupport
+++ b/Eigen/SuperLUSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
 #define EIGEN_SUPERLUSUPPORT_MODULE_H
diff --git a/Eigen/ThreadPool b/Eigen/ThreadPool
index ac08bef..0ef64f7 100644
--- a/Eigen/ThreadPool
+++ b/Eigen/ThreadPool
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_THREADPOOL_MODULE_H
 #define EIGEN_THREADPOOL_MODULE_H
diff --git a/Eigen/UmfPackSupport b/Eigen/UmfPackSupport
index 28e386f..b6ccba5 100644
--- a/Eigen/UmfPackSupport
+++ b/Eigen/UmfPackSupport
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_UMFPACKSUPPORT_MODULE_H
 #define EIGEN_UMFPACKSUPPORT_MODULE_H
diff --git a/Eigen/Version b/Eigen/Version
index c108363..c9a5eba 100644
--- a/Eigen/Version
+++ b/Eigen/Version
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_VERSION_H
 #define EIGEN_VERSION_H
diff --git a/Eigen/src/AccelerateSupport/AccelerateSupport.h b/Eigen/src/AccelerateSupport/AccelerateSupport.h
index c944aea..4a6748f 100644
--- a/Eigen/src/AccelerateSupport/AccelerateSupport.h
+++ b/Eigen/src/AccelerateSupport/AccelerateSupport.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_ACCELERATESUPPORT_H
 #define EIGEN_ACCELERATESUPPORT_H
 
diff --git a/Eigen/src/AccelerateSupport/InternalHeaderCheck.h b/Eigen/src/AccelerateSupport/InternalHeaderCheck.h
index 69bcff5..d441dbb 100644
--- a/Eigen/src/AccelerateSupport/InternalHeaderCheck.h
+++ b/Eigen/src/AccelerateSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_ACCELERATESUPPORT_MODULE_H
 #error "Please include Eigen/AccelerateSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Cholesky/InternalHeaderCheck.h b/Eigen/src/Cholesky/InternalHeaderCheck.h
index 5de2b21..fcd579c 100644
--- a/Eigen/src/Cholesky/InternalHeaderCheck.h
+++ b/Eigen/src/Cholesky/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CHOLESKY_MODULE_H
 #error "Please include Eigen/Cholesky instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Cholesky/LDLT.h b/Eigen/src/Cholesky/LDLT.h
index 63aa5bd..84b46f3 100644
--- a/Eigen/src/Cholesky/LDLT.h
+++ b/Eigen/src/Cholesky/LDLT.h
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LDLT_H
 #define EIGEN_LDLT_H
diff --git a/Eigen/src/Cholesky/LLT.h b/Eigen/src/Cholesky/LLT.h
index 9bffeae..f0cc373 100644
--- a/Eigen/src/Cholesky/LLT.h
+++ b/Eigen/src/Cholesky/LLT.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LLT_H
 #define EIGEN_LLT_H
diff --git a/Eigen/src/Cholesky/LLT_LAPACKE.h b/Eigen/src/Cholesky/LLT_LAPACKE.h
index cb55b15..6ac5a01 100644
--- a/Eigen/src/Cholesky/LLT_LAPACKE.h
+++ b/Eigen/src/Cholesky/LLT_LAPACKE.h
@@ -29,6 +29,7 @@
  *     LLt decomposition based on LAPACKE_?potrf function.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_LLT_LAPACKE_H
 #define EIGEN_LLT_LAPACKE_H
diff --git a/Eigen/src/CholmodSupport/CholmodSupport.h b/Eigen/src/CholmodSupport/CholmodSupport.h
index dc3d6a3..047156f 100644
--- a/Eigen/src/CholmodSupport/CholmodSupport.h
+++ b/Eigen/src/CholmodSupport/CholmodSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CHOLMODSUPPORT_H
 #define EIGEN_CHOLMODSUPPORT_H
diff --git a/Eigen/src/CholmodSupport/InternalHeaderCheck.h b/Eigen/src/CholmodSupport/InternalHeaderCheck.h
index 0fb3abc..8578448 100644
--- a/Eigen/src/CholmodSupport/InternalHeaderCheck.h
+++ b/Eigen/src/CholmodSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
 #error "Please include Eigen/CholmodSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h
index 65e7961..bfb0b49 100644
--- a/Eigen/src/Core/ArithmeticSequence.h
+++ b/Eigen/src/Core/ArithmeticSequence.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARITHMETIC_SEQUENCE_H
 #define EIGEN_ARITHMETIC_SEQUENCE_H
diff --git a/Eigen/src/Core/Array.h b/Eigen/src/Core/Array.h
index 28ff760..f624144 100644
--- a/Eigen/src/Core/Array.h
+++ b/Eigen/src/Core/Array.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARRAY_H
 #define EIGEN_ARRAY_H
diff --git a/Eigen/src/Core/ArrayBase.h b/Eigen/src/Core/ArrayBase.h
index dacc239..56c870d 100644
--- a/Eigen/src/Core/ArrayBase.h
+++ b/Eigen/src/Core/ArrayBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARRAYBASE_H
 #define EIGEN_ARRAYBASE_H
diff --git a/Eigen/src/Core/ArrayWrapper.h b/Eigen/src/Core/ArrayWrapper.h
index fb05ab5..1d364f0 100644
--- a/Eigen/src/Core/ArrayWrapper.h
+++ b/Eigen/src/Core/ArrayWrapper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARRAYWRAPPER_H
 #define EIGEN_ARRAYWRAPPER_H
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h
index 3d30d86..84774c6 100644
--- a/Eigen/src/Core/Assign.h
+++ b/Eigen/src/Core/Assign.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ASSIGN_H
 #define EIGEN_ASSIGN_H
diff --git a/Eigen/src/Core/AssignEvaluator.h b/Eigen/src/Core/AssignEvaluator.h
index 3c30d22..0bc5fca 100644
--- a/Eigen/src/Core/AssignEvaluator.h
+++ b/Eigen/src/Core/AssignEvaluator.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ASSIGN_EVALUATOR_H
 #define EIGEN_ASSIGN_EVALUATOR_H
diff --git a/Eigen/src/Core/Assign_AOCL.h b/Eigen/src/Core/Assign_AOCL.h
index 4f43b37..a6aa149 100644
--- a/Eigen/src/Core/Assign_AOCL.h
+++ b/Eigen/src/Core/Assign_AOCL.h
@@ -110,6 +110,7 @@
  * Email: shbhaska@amd.com
  * Organization: Advanced Micro Devices, Inc.
  */
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ASSIGN_AOCL_H
 #define EIGEN_ASSIGN_AOCL_H
diff --git a/Eigen/src/Core/Assign_MKL.h b/Eigen/src/Core/Assign_MKL.h
index 7636445..1cb817f 100644
--- a/Eigen/src/Core/Assign_MKL.h
+++ b/Eigen/src/Core/Assign_MKL.h
@@ -30,6 +30,7 @@
  *   MKL VML support for coefficient-wise unary Eigen expressions like a=b.sin()
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_ASSIGN_VML_H
 #define EIGEN_ASSIGN_VML_H
diff --git a/Eigen/src/Core/BandMatrix.h b/Eigen/src/Core/BandMatrix.h
index 57b0322..84cd189 100644
--- a/Eigen/src/Core/BandMatrix.h
+++ b/Eigen/src/Core/BandMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BANDMATRIX_H
 #define EIGEN_BANDMATRIX_H
diff --git a/Eigen/src/Core/Block.h b/Eigen/src/Core/Block.h
index 7dcf909..d848ce4 100644
--- a/Eigen/src/Core/Block.h
+++ b/Eigen/src/Core/Block.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BLOCK_H
 #define EIGEN_BLOCK_H
diff --git a/Eigen/src/Core/CommaInitializer.h b/Eigen/src/Core/CommaInitializer.h
index 4541f47..db5c39a 100644
--- a/Eigen/src/Core/CommaInitializer.h
+++ b/Eigen/src/Core/CommaInitializer.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMMAINITIALIZER_H
 #define EIGEN_COMMAINITIALIZER_H
diff --git a/Eigen/src/Core/ConcatOp.h b/Eigen/src/Core/ConcatOp.h
index c01f984..eadbc05 100644
--- a/Eigen/src/Core/ConcatOp.h
+++ b/Eigen/src/Core/ConcatOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONCAT_OP_H
 #define EIGEN_CONCAT_OP_H
diff --git a/Eigen/src/Core/ConditionEstimator.h b/Eigen/src/Core/ConditionEstimator.h
index df27be3..3fdd7c8 100644
--- a/Eigen/src/Core/ConditionEstimator.h
+++ b/Eigen/src/Core/ConditionEstimator.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONDITIONESTIMATOR_H
 #define EIGEN_CONDITIONESTIMATOR_H
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h
index ef1642c..791398d 100644
--- a/Eigen/src/Core/CoreEvaluators.h
+++ b/Eigen/src/Core/CoreEvaluators.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COREEVALUATORS_H
 #define EIGEN_COREEVALUATORS_H
diff --git a/Eigen/src/Core/CoreIterators.h b/Eigen/src/Core/CoreIterators.h
index 3143726..2805897 100644
--- a/Eigen/src/Core/CoreIterators.h
+++ b/Eigen/src/Core/CoreIterators.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COREITERATORS_H
 #define EIGEN_COREITERATORS_H
diff --git a/Eigen/src/Core/CwiseBinaryOp.h b/Eigen/src/Core/CwiseBinaryOp.h
index 27fd434..3be8c54 100644
--- a/Eigen/src/Core/CwiseBinaryOp.h
+++ b/Eigen/src/Core/CwiseBinaryOp.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CWISE_BINARY_OP_H
 #define EIGEN_CWISE_BINARY_OP_H
diff --git a/Eigen/src/Core/CwiseNullaryOp.h b/Eigen/src/Core/CwiseNullaryOp.h
index bf6b6f3..70a9cb5 100644
--- a/Eigen/src/Core/CwiseNullaryOp.h
+++ b/Eigen/src/Core/CwiseNullaryOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CWISE_NULLARY_OP_H
 #define EIGEN_CWISE_NULLARY_OP_H
diff --git a/Eigen/src/Core/CwiseTernaryOp.h b/Eigen/src/Core/CwiseTernaryOp.h
index 8737791..ea137ae 100644
--- a/Eigen/src/Core/CwiseTernaryOp.h
+++ b/Eigen/src/Core/CwiseTernaryOp.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CWISE_TERNARY_OP_H
 #define EIGEN_CWISE_TERNARY_OP_H
diff --git a/Eigen/src/Core/CwiseUnaryOp.h b/Eigen/src/Core/CwiseUnaryOp.h
index fabf4fc..c9ee921 100644
--- a/Eigen/src/Core/CwiseUnaryOp.h
+++ b/Eigen/src/Core/CwiseUnaryOp.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CWISE_UNARY_OP_H
 #define EIGEN_CWISE_UNARY_OP_H
diff --git a/Eigen/src/Core/CwiseUnaryView.h b/Eigen/src/Core/CwiseUnaryView.h
index 384c8b1..a16da5c 100644
--- a/Eigen/src/Core/CwiseUnaryView.h
+++ b/Eigen/src/Core/CwiseUnaryView.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CWISE_UNARY_VIEW_H
 #define EIGEN_CWISE_UNARY_VIEW_H
diff --git a/Eigen/src/Core/DenseBase.h b/Eigen/src/Core/DenseBase.h
index a24fc47..e9317e4 100644
--- a/Eigen/src/Core/DenseBase.h
+++ b/Eigen/src/Core/DenseBase.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DENSEBASE_H
 #define EIGEN_DENSEBASE_H
diff --git a/Eigen/src/Core/DenseCoeffsBase.h b/Eigen/src/Core/DenseCoeffsBase.h
index c528416..be420c3 100644
--- a/Eigen/src/Core/DenseCoeffsBase.h
+++ b/Eigen/src/Core/DenseCoeffsBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DENSECOEFFSBASE_H
 #define EIGEN_DENSECOEFFSBASE_H
diff --git a/Eigen/src/Core/DenseStorage.h b/Eigen/src/Core/DenseStorage.h
index 8f2d1b1..81a1a3d 100644
--- a/Eigen/src/Core/DenseStorage.h
+++ b/Eigen/src/Core/DenseStorage.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIXSTORAGE_H
 #define EIGEN_MATRIXSTORAGE_H
diff --git a/Eigen/src/Core/DeviceWrapper.h b/Eigen/src/Core/DeviceWrapper.h
index 1a326ae..f9ca976 100644
--- a/Eigen/src/Core/DeviceWrapper.h
+++ b/Eigen/src/Core/DeviceWrapper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DEVICEWRAPPER_H
 #define EIGEN_DEVICEWRAPPER_H
diff --git a/Eigen/src/Core/Diagonal.h b/Eigen/src/Core/Diagonal.h
index 61a4784..6eafeb7 100644
--- a/Eigen/src/Core/Diagonal.h
+++ b/Eigen/src/Core/Diagonal.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DIAGONAL_H
 #define EIGEN_DIAGONAL_H
diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h
index dda6c8c..7b0d7d0 100644
--- a/Eigen/src/Core/DiagonalMatrix.h
+++ b/Eigen/src/Core/DiagonalMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DIAGONALMATRIX_H
 #define EIGEN_DIAGONALMATRIX_H
diff --git a/Eigen/src/Core/DiagonalProduct.h b/Eigen/src/Core/DiagonalProduct.h
index bd0feea..292820c 100644
--- a/Eigen/src/Core/DiagonalProduct.h
+++ b/Eigen/src/Core/DiagonalProduct.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DIAGONALPRODUCT_H
 #define EIGEN_DIAGONALPRODUCT_H
diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h
index d0a30dd..052d687 100644
--- a/Eigen/src/Core/Dot.h
+++ b/Eigen/src/Core/Dot.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DOT_H
 #define EIGEN_DOT_H
diff --git a/Eigen/src/Core/EigenBase.h b/Eigen/src/Core/EigenBase.h
index dfe4a64..039d02d 100644
--- a/Eigen/src/Core/EigenBase.h
+++ b/Eigen/src/Core/EigenBase.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EIGENBASE_H
 #define EIGEN_EIGENBASE_H
diff --git a/Eigen/src/Core/Fill.h b/Eigen/src/Core/Fill.h
index ccbeb50..331dc89 100644
--- a/Eigen/src/Core/Fill.h
+++ b/Eigen/src/Core/Fill.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FILL_H
 #define EIGEN_FILL_H
diff --git a/Eigen/src/Core/FindCoeff.h b/Eigen/src/Core/FindCoeff.h
index b2645d8..2deb958 100644
--- a/Eigen/src/Core/FindCoeff.h
+++ b/Eigen/src/Core/FindCoeff.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FIND_COEFF_H
 #define EIGEN_FIND_COEFF_H
diff --git a/Eigen/src/Core/ForceAlignedAccess.h b/Eigen/src/Core/ForceAlignedAccess.h
index 4f69c20..567e227 100644
--- a/Eigen/src/Core/ForceAlignedAccess.h
+++ b/Eigen/src/Core/ForceAlignedAccess.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FORCEALIGNEDACCESS_H
 #define EIGEN_FORCEALIGNEDACCESS_H
diff --git a/Eigen/src/Core/Fuzzy.h b/Eigen/src/Core/Fuzzy.h
index eaa553c..a802b9c 100644
--- a/Eigen/src/Core/Fuzzy.h
+++ b/Eigen/src/Core/Fuzzy.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FUZZY_H
 #define EIGEN_FUZZY_H
diff --git a/Eigen/src/Core/GeneralProduct.h b/Eigen/src/Core/GeneralProduct.h
index 707611a..6e16a6c 100644
--- a/Eigen/src/Core/GeneralProduct.h
+++ b/Eigen/src/Core/GeneralProduct.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_PRODUCT_H
 #define EIGEN_GENERAL_PRODUCT_H
diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h
index 4ef92db..3d1d6f3 100644
--- a/Eigen/src/Core/GenericPacketMath.h
+++ b/Eigen/src/Core/GenericPacketMath.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERIC_PACKET_MATH_H
 #define EIGEN_GENERIC_PACKET_MATH_H
diff --git a/Eigen/src/Core/GlobalFunctions.h b/Eigen/src/Core/GlobalFunctions.h
index c32aac9..4a9879f 100644
--- a/Eigen/src/Core/GlobalFunctions.h
+++ b/Eigen/src/Core/GlobalFunctions.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GLOBAL_FUNCTIONS_H
 #define EIGEN_GLOBAL_FUNCTIONS_H
diff --git a/Eigen/src/Core/IO.h b/Eigen/src/Core/IO.h
index e2362fc..fd69956 100644
--- a/Eigen/src/Core/IO.h
+++ b/Eigen/src/Core/IO.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_IO_H
 #define EIGEN_IO_H
diff --git a/Eigen/src/Core/IndexedView.h b/Eigen/src/Core/IndexedView.h
index 150565a..8f243d2 100644
--- a/Eigen/src/Core/IndexedView.h
+++ b/Eigen/src/Core/IndexedView.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INDEXED_VIEW_H
 #define EIGEN_INDEXED_VIEW_H
diff --git a/Eigen/src/Core/InnerProduct.h b/Eigen/src/Core/InnerProduct.h
index 9c57e7a..3059e37 100644
--- a/Eigen/src/Core/InnerProduct.h
+++ b/Eigen/src/Core/InnerProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INNER_PRODUCT_EVAL_H
 #define EIGEN_INNER_PRODUCT_EVAL_H
diff --git a/Eigen/src/Core/InternalHeaderCheck.h b/Eigen/src/Core/InternalHeaderCheck.h
index 1cea572..875d2ec 100644
--- a/Eigen/src/Core/InternalHeaderCheck.h
+++ b/Eigen/src/Core/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CORE_MODULE_H
 #error "Please include Eigen/Core instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Core/Inverse.h b/Eigen/src/Core/Inverse.h
index 855e3b3..0e62974 100644
--- a/Eigen/src/Core/Inverse.h
+++ b/Eigen/src/Core/Inverse.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INVERSE_H
 #define EIGEN_INVERSE_H
diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h
index 33b62c2..7f36dcb 100644
--- a/Eigen/src/Core/Map.h
+++ b/Eigen/src/Core/Map.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MAP_H
 #define EIGEN_MAP_H
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index 3e11725..a9cb690 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MAPBASE_H
 #define EIGEN_MAPBASE_H
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h
index 83e2214..31f3622 100644
--- a/Eigen/src/Core/MathFunctions.h
+++ b/Eigen/src/Core/MathFunctions.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATHFUNCTIONS_H
 #define EIGEN_MATHFUNCTIONS_H
diff --git a/Eigen/src/Core/MathFunctionsImpl.h b/Eigen/src/Core/MathFunctionsImpl.h
index 2433187..6074fa4 100644
--- a/Eigen/src/Core/MathFunctionsImpl.h
+++ b/Eigen/src/Core/MathFunctionsImpl.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATHFUNCTIONSIMPL_H
 #define EIGEN_MATHFUNCTIONSIMPL_H
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index 314c01d..28b8b7f 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_H
 #define EIGEN_MATRIX_H
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index ff1a2c2..fcee487 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIXBASE_H
 #define EIGEN_MATRIXBASE_H
diff --git a/Eigen/src/Core/NestByValue.h b/Eigen/src/Core/NestByValue.h
index f18559b..930a4a5 100644
--- a/Eigen/src/Core/NestByValue.h
+++ b/Eigen/src/Core/NestByValue.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NESTBYVALUE_H
 #define EIGEN_NESTBYVALUE_H
diff --git a/Eigen/src/Core/NoAlias.h b/Eigen/src/Core/NoAlias.h
index 6a88201..78d1a94 100644
--- a/Eigen/src/Core/NoAlias.h
+++ b/Eigen/src/Core/NoAlias.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NOALIAS_H
 #define EIGEN_NOALIAS_H
diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h
index 2bb1eed..d55da72 100644
--- a/Eigen/src/Core/NumTraits.h
+++ b/Eigen/src/Core/NumTraits.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NUMTRAITS_H
 #define EIGEN_NUMTRAITS_H
diff --git a/Eigen/src/Core/PartialReduxEvaluator.h b/Eigen/src/Core/PartialReduxEvaluator.h
index 18aeca3..8b97c1f 100644
--- a/Eigen/src/Core/PartialReduxEvaluator.h
+++ b/Eigen/src/Core/PartialReduxEvaluator.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARTIALREDUX_H
 #define EIGEN_PARTIALREDUX_H
diff --git a/Eigen/src/Core/PermutationMatrix.h b/Eigen/src/Core/PermutationMatrix.h
index 7713354..131fa10 100644
--- a/Eigen/src/Core/PermutationMatrix.h
+++ b/Eigen/src/Core/PermutationMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PERMUTATIONMATRIX_H
 #define EIGEN_PERMUTATIONMATRIX_H
diff --git a/Eigen/src/Core/PlainObjectBase.h b/Eigen/src/Core/PlainObjectBase.h
index 2f4c357..0600021 100644
--- a/Eigen/src/Core/PlainObjectBase.h
+++ b/Eigen/src/Core/PlainObjectBase.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DENSESTORAGEBASE_H
 #define EIGEN_DENSESTORAGEBASE_H
diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h
index bc8b9da..be7bb49 100644
--- a/Eigen/src/Core/Product.h
+++ b/Eigen/src/Core/Product.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PRODUCT_H
 #define EIGEN_PRODUCT_H
diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h
index 2363c1f..962b524 100644
--- a/Eigen/src/Core/ProductEvaluators.h
+++ b/Eigen/src/Core/ProductEvaluators.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PRODUCTEVALUATORS_H
 #define EIGEN_PRODUCTEVALUATORS_H
diff --git a/Eigen/src/Core/Random.h b/Eigen/src/Core/Random.h
index 91543eb..179be0b 100644
--- a/Eigen/src/Core/Random.h
+++ b/Eigen/src/Core/Random.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANDOM_H
 #define EIGEN_RANDOM_H
diff --git a/Eigen/src/Core/RandomImpl.h b/Eigen/src/Core/RandomImpl.h
index 4a622fc..4e86e2d 100644
--- a/Eigen/src/Core/RandomImpl.h
+++ b/Eigen/src/Core/RandomImpl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANDOM_IMPL_H
 #define EIGEN_RANDOM_IMPL_H
diff --git a/Eigen/src/Core/RealView.h b/Eigen/src/Core/RealView.h
index 59cd6d5..9ffc958 100644
--- a/Eigen/src/Core/RealView.h
+++ b/Eigen/src/Core/RealView.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REALVIEW_H
 #define EIGEN_REALVIEW_H
diff --git a/Eigen/src/Core/Redux.h b/Eigen/src/Core/Redux.h
index 18ba103..f487dde 100644
--- a/Eigen/src/Core/Redux.h
+++ b/Eigen/src/Core/Redux.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REDUX_H
 #define EIGEN_REDUX_H
diff --git a/Eigen/src/Core/Ref.h b/Eigen/src/Core/Ref.h
index 4493441..d173a53 100644
--- a/Eigen/src/Core/Ref.h
+++ b/Eigen/src/Core/Ref.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REF_H
 #define EIGEN_REF_H
diff --git a/Eigen/src/Core/Replicate.h b/Eigen/src/Core/Replicate.h
index 9bdc725..4d0586b 100644
--- a/Eigen/src/Core/Replicate.h
+++ b/Eigen/src/Core/Replicate.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REPLICATE_H
 #define EIGEN_REPLICATE_H
diff --git a/Eigen/src/Core/Reshaped.h b/Eigen/src/Core/Reshaped.h
index c3b4d56..04f78da 100644
--- a/Eigen/src/Core/Reshaped.h
+++ b/Eigen/src/Core/Reshaped.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RESHAPED_H
 #define EIGEN_RESHAPED_H
diff --git a/Eigen/src/Core/ReturnByValue.h b/Eigen/src/Core/ReturnByValue.h
index 410b77d..074018c 100644
--- a/Eigen/src/Core/ReturnByValue.h
+++ b/Eigen/src/Core/ReturnByValue.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RETURNBYVALUE_H
 #define EIGEN_RETURNBYVALUE_H
diff --git a/Eigen/src/Core/Reverse.h b/Eigen/src/Core/Reverse.h
index a4af8d1..aea0666 100644
--- a/Eigen/src/Core/Reverse.h
+++ b/Eigen/src/Core/Reverse.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REVERSE_H
 #define EIGEN_REVERSE_H
diff --git a/Eigen/src/Core/Select.h b/Eigen/src/Core/Select.h
index 6ad290f..0b9c6b2 100644
--- a/Eigen/src/Core/Select.h
+++ b/Eigen/src/Core/Select.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELECT_H
 #define EIGEN_SELECT_H
diff --git a/Eigen/src/Core/SelfAdjointView.h b/Eigen/src/Core/SelfAdjointView.h
index 2546d4a..3fc75a8 100644
--- a/Eigen/src/Core/SelfAdjointView.h
+++ b/Eigen/src/Core/SelfAdjointView.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINTMATRIX_H
 #define EIGEN_SELFADJOINTMATRIX_H
diff --git a/Eigen/src/Core/SelfCwiseBinaryOp.h b/Eigen/src/Core/SelfCwiseBinaryOp.h
index a887ad2..5fc7727 100644
--- a/Eigen/src/Core/SelfCwiseBinaryOp.h
+++ b/Eigen/src/Core/SelfCwiseBinaryOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFCWISEBINARYOP_H
 #define EIGEN_SELFCWISEBINARYOP_H
diff --git a/Eigen/src/Core/SkewSymmetricMatrix3.h b/Eigen/src/Core/SkewSymmetricMatrix3.h
index 72b65e1..0c8e7ec 100644
--- a/Eigen/src/Core/SkewSymmetricMatrix3.h
+++ b/Eigen/src/Core/SkewSymmetricMatrix3.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SKEWSYMMETRICMATRIX3_H
 #define EIGEN_SKEWSYMMETRICMATRIX3_H
diff --git a/Eigen/src/Core/Solve.h b/Eigen/src/Core/Solve.h
index 030b934..b70b651 100644
--- a/Eigen/src/Core/Solve.h
+++ b/Eigen/src/Core/Solve.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SOLVE_H
 #define EIGEN_SOLVE_H
diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h
index 684f7a5..3db0229 100644
--- a/Eigen/src/Core/SolveTriangular.h
+++ b/Eigen/src/Core/SolveTriangular.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SOLVETRIANGULAR_H
 #define EIGEN_SOLVETRIANGULAR_H
diff --git a/Eigen/src/Core/SolverBase.h b/Eigen/src/Core/SolverBase.h
index af91bb8..5f5dc6e 100644
--- a/Eigen/src/Core/SolverBase.h
+++ b/Eigen/src/Core/SolverBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SOLVERBASE_H
 #define EIGEN_SOLVERBASE_H
diff --git a/Eigen/src/Core/StableNorm.h b/Eigen/src/Core/StableNorm.h
index 11abb77..7ba9fae 100644
--- a/Eigen/src/Core/StableNorm.h
+++ b/Eigen/src/Core/StableNorm.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STABLENORM_H
 #define EIGEN_STABLENORM_H
diff --git a/Eigen/src/Core/StlIterators.h b/Eigen/src/Core/StlIterators.h
index afa2ecb..a23e9e5 100644
--- a/Eigen/src/Core/StlIterators.h
+++ b/Eigen/src/Core/StlIterators.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STLITERATORS_H
 #define EIGEN_STLITERATORS_H
diff --git a/Eigen/src/Core/Stride.h b/Eigen/src/Core/Stride.h
index 3d71b6d..28b15c8 100644
--- a/Eigen/src/Core/Stride.h
+++ b/Eigen/src/Core/Stride.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STRIDE_H
 #define EIGEN_STRIDE_H
diff --git a/Eigen/src/Core/StructuredBindings.h b/Eigen/src/Core/StructuredBindings.h
index 073f10e..5e6bbb9 100644
--- a/Eigen/src/Core/StructuredBindings.h
+++ b/Eigen/src/Core/StructuredBindings.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STRUCTURED_BINDINGS_H
 #define EIGEN_STRUCTURED_BINDINGS_H
diff --git a/Eigen/src/Core/Swap.h b/Eigen/src/Core/Swap.h
index 91d06ad..e4a9631 100644
--- a/Eigen/src/Core/Swap.h
+++ b/Eigen/src/Core/Swap.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SWAP_H
 #define EIGEN_SWAP_H
diff --git a/Eigen/src/Core/Transpose.h b/Eigen/src/Core/Transpose.h
index 2077c92..06cd046 100644
--- a/Eigen/src/Core/Transpose.h
+++ b/Eigen/src/Core/Transpose.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRANSPOSE_H
 #define EIGEN_TRANSPOSE_H
diff --git a/Eigen/src/Core/Transpositions.h b/Eigen/src/Core/Transpositions.h
index f6dd258..c49d3cd 100644
--- a/Eigen/src/Core/Transpositions.h
+++ b/Eigen/src/Core/Transpositions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRANSPOSITIONS_H
 #define EIGEN_TRANSPOSITIONS_H
diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h
index 9995bcd..f4048b8 100644
--- a/Eigen/src/Core/TriangularMatrix.h
+++ b/Eigen/src/Core/TriangularMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIANGULARMATRIX_H
 #define EIGEN_TRIANGULARMATRIX_H
diff --git a/Eigen/src/Core/VectorBlock.h b/Eigen/src/Core/VectorBlock.h
index 1277e26..890230d 100644
--- a/Eigen/src/Core/VectorBlock.h
+++ b/Eigen/src/Core/VectorBlock.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_VECTORBLOCK_H
 #define EIGEN_VECTORBLOCK_H
diff --git a/Eigen/src/Core/VectorwiseOp.h b/Eigen/src/Core/VectorwiseOp.h
index df3e2d1..896c7cb 100644
--- a/Eigen/src/Core/VectorwiseOp.h
+++ b/Eigen/src/Core/VectorwiseOp.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARTIAL_REDUX_H
 #define EIGEN_PARTIAL_REDUX_H
diff --git a/Eigen/src/Core/Visitor.h b/Eigen/src/Core/Visitor.h
index e2bbf96..fe64f30 100644
--- a/Eigen/src/Core/Visitor.h
+++ b/Eigen/src/Core/Visitor.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_VISITOR_H
 #define EIGEN_VISITOR_H
diff --git a/Eigen/src/Core/arch/AVX/Complex.h b/Eigen/src/Core/arch/AVX/Complex.h
index 28d7cd6..4fca1f5 100644
--- a/Eigen/src/Core/arch/AVX/Complex.h
+++ b/Eigen/src/Core/arch/AVX/Complex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_AVX_H
 #define EIGEN_COMPLEX_AVX_H
diff --git a/Eigen/src/Core/arch/AVX/MathFunctions.h b/Eigen/src/Core/arch/AVX/MathFunctions.h
index 357f314..0871626 100644
--- a/Eigen/src/Core/arch/AVX/MathFunctions.h
+++ b/Eigen/src/Core/arch/AVX/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_AVX_H
 #define EIGEN_MATH_FUNCTIONS_AVX_H
diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h
index bd35d7d..7ab3f2d 100644
--- a/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_AVX_H
 #define EIGEN_PACKET_MATH_AVX_H
diff --git a/Eigen/src/Core/arch/AVX/Reductions.h b/Eigen/src/Core/arch/AVX/Reductions.h
index 237617c..f1fa8e1 100644
--- a/Eigen/src/Core/arch/AVX/Reductions.h
+++ b/Eigen/src/Core/arch/AVX/Reductions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REDUCTIONS_AVX_H
 #define EIGEN_REDUCTIONS_AVX_H
diff --git a/Eigen/src/Core/arch/AVX/TypeCasting.h b/Eigen/src/Core/arch/AVX/TypeCasting.h
index 9feb38f..f93b484 100644
--- a/Eigen/src/Core/arch/AVX/TypeCasting.h
+++ b/Eigen/src/Core/arch/AVX/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_AVX_H
 #define EIGEN_TYPE_CASTING_AVX_H
diff --git a/Eigen/src/Core/arch/AVX512/Complex.h b/Eigen/src/Core/arch/AVX512/Complex.h
index b8483a8..998ab5a 100644
--- a/Eigen/src/Core/arch/AVX512/Complex.h
+++ b/Eigen/src/Core/arch/AVX512/Complex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_AVX512_H
 #define EIGEN_COMPLEX_AVX512_H
diff --git a/Eigen/src/Core/arch/AVX512/GemmKernel.h b/Eigen/src/Core/arch/AVX512/GemmKernel.h
index 50e26ec..5450ecc 100644
--- a/Eigen/src/Core/arch/AVX512/GemmKernel.h
+++ b/Eigen/src/Core/arch/AVX512/GemmKernel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_ARCH_AVX512_GEMM_KERNEL_H
 #define EIGEN_CORE_ARCH_AVX512_GEMM_KERNEL_H
diff --git a/Eigen/src/Core/arch/AVX512/MathFunctions.h b/Eigen/src/Core/arch/AVX512/MathFunctions.h
index 2499019..a2b38c6 100644
--- a/Eigen/src/Core/arch/AVX512/MathFunctions.h
+++ b/Eigen/src/Core/arch/AVX512/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef THIRD_PARTY_EIGEN3_EIGEN_SRC_CORE_ARCH_AVX512_MATHFUNCTIONS_H_
 #define THIRD_PARTY_EIGEN3_EIGEN_SRC_CORE_ARCH_AVX512_MATHFUNCTIONS_H_
diff --git a/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h b/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h
index 240ade4..48115c5 100644
--- a/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h
+++ b/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_FP16_AVX512_H
 #define EIGEN_MATH_FUNCTIONS_FP16_AVX512_H
diff --git a/Eigen/src/Core/arch/AVX512/PacketMath.h b/Eigen/src/Core/arch/AVX512/PacketMath.h
index 7e99798..a4efba8 100644
--- a/Eigen/src/Core/arch/AVX512/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX512/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_AVX512_H
 #define EIGEN_PACKET_MATH_AVX512_H
diff --git a/Eigen/src/Core/arch/AVX512/PacketMathFP16.h b/Eigen/src/Core/arch/AVX512/PacketMathFP16.h
index 551a94a..ac87973 100644
--- a/Eigen/src/Core/arch/AVX512/PacketMathFP16.h
+++ b/Eigen/src/Core/arch/AVX512/PacketMathFP16.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla

 // Public License v. 2.0. If a copy of the MPL was not distributed

 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

+// SPDX-License-Identifier: MPL-2.0

 

 #ifndef EIGEN_PACKET_MATH_FP16_AVX512_H

 #define EIGEN_PACKET_MATH_FP16_AVX512_H

diff --git a/Eigen/src/Core/arch/AVX512/Reductions.h b/Eigen/src/Core/arch/AVX512/Reductions.h
index f59b78e..ca28ae4 100644
--- a/Eigen/src/Core/arch/AVX512/Reductions.h
+++ b/Eigen/src/Core/arch/AVX512/Reductions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REDUCTIONS_AVX512_H
 #define EIGEN_REDUCTIONS_AVX512_H
diff --git a/Eigen/src/Core/arch/AVX512/TrsmKernel.h b/Eigen/src/Core/arch/AVX512/TrsmKernel.h
index fffedb6..d4c41f3 100644
--- a/Eigen/src/Core/arch/AVX512/TrsmKernel.h
+++ b/Eigen/src/Core/arch/AVX512/TrsmKernel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_ARCH_AVX512_TRSM_KERNEL_H
 #define EIGEN_CORE_ARCH_AVX512_TRSM_KERNEL_H
diff --git a/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc b/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc
index 3ca8b2d..4538ce9 100644
--- a/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc
+++ b/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_ARCH_AVX512_TRSM_UNROLLS_H
 #define EIGEN_CORE_ARCH_AVX512_TRSM_UNROLLS_H
diff --git a/Eigen/src/Core/arch/AVX512/TypeCasting.h b/Eigen/src/Core/arch/AVX512/TypeCasting.h
index 6c42909..eaad29d 100644
--- a/Eigen/src/Core/arch/AVX512/TypeCasting.h
+++ b/Eigen/src/Core/arch/AVX512/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_AVX512_H
 #define EIGEN_TYPE_CASTING_AVX512_H
diff --git a/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h b/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h
index f06f13d..09affca 100644
--- a/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h
+++ b/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_FP16_AVX512_H
 #define EIGEN_TYPE_CASTING_FP16_AVX512_H
diff --git a/Eigen/src/Core/arch/AltiVec/Complex.h b/Eigen/src/Core/arch/AltiVec/Complex.h
index 12d73ed..e7252f8 100644
--- a/Eigen/src/Core/arch/AltiVec/Complex.h
+++ b/Eigen/src/Core/arch/AltiVec/Complex.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX32_ALTIVEC_H
 #define EIGEN_COMPLEX32_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/MathFunctions.h b/Eigen/src/Core/arch/AltiVec/MathFunctions.h
index c95ee38..b7cf140 100644
--- a/Eigen/src/Core/arch/AltiVec/MathFunctions.h
+++ b/Eigen/src/Core/arch/AltiVec/MathFunctions.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H
 #define EIGEN_MATH_FUNCTIONS_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
index 4725526..42e9fb1 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_PRODUCT_ALTIVEC_H
 #define EIGEN_MATRIX_PRODUCT_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h b/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
index e78ca5a..bf1270f 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
@@ -1,4 +1,6 @@
 // #define EIGEN_POWER_USE_PREFETCH  // Use prefetching in gemm routines
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #ifdef EIGEN_POWER_USE_PREFETCH
 #define EIGEN_POWER_PREFETCH(p) prefetch(p)
 #else
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h b/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
index 4815974..03b1fed 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_PRODUCT_MMA_ALTIVEC_H
 #define EIGEN_MATRIX_PRODUCT_MMA_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h b/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h
index 6ecec0e..d06565c 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_MATRIX_PRODUCT_MMA_BFLOAT16_ALTIVEC_H
 #define EIGEN_MATRIX_PRODUCT_MMA_BFLOAT16_ALTIVEC_H
 
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc b/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc
index 567468d..fbf7eab 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc
+++ b/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_VECTOR_PRODUCT_ALTIVEC_H
 #define EIGEN_MATRIX_VECTOR_PRODUCT_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h
index 8d5a351..f522124 100644
--- a/Eigen/src/Core/arch/AltiVec/PacketMath.h
+++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_ALTIVEC_H
 #define EIGEN_PACKET_MATH_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/AltiVec/TypeCasting.h b/Eigen/src/Core/arch/AltiVec/TypeCasting.h
index 7be6642..44edbf9 100644
--- a/Eigen/src/Core/arch/AltiVec/TypeCasting.h
+++ b/Eigen/src/Core/arch/AltiVec/TypeCasting.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_ALTIVEC_H
 #define EIGEN_TYPE_CASTING_ALTIVEC_H
diff --git a/Eigen/src/Core/arch/Default/BFloat16.h b/Eigen/src/Core/arch/Default/BFloat16.h
index 313c506..66f719a 100644
--- a/Eigen/src/Core/arch/Default/BFloat16.h
+++ b/Eigen/src/Core/arch/Default/BFloat16.h
@@ -12,6 +12,7 @@
 See the License for the specific language governing permissions and
 limitations under the License.
 ==============================================================================*/
+// SPDX-License-Identifier: Apache-2.0
 
 #ifndef EIGEN_BFLOAT16_H
 #define EIGEN_BFLOAT16_H
diff --git a/Eigen/src/Core/arch/Default/ConjHelper.h b/Eigen/src/Core/arch/Default/ConjHelper.h
index 137e7fb..295698f 100644
--- a/Eigen/src/Core/arch/Default/ConjHelper.h
+++ b/Eigen/src/Core/arch/Default/ConjHelper.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathComplex.h b/Eigen/src/Core/arch/Default/GenericPacketMathComplex.h
index aac97df..d4017f0 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathComplex.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathComplex.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_COMPLEX_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_COMPLEX_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathDoubleWord.h b/Eigen/src/Core/arch/Default/GenericPacketMathDoubleWord.h
index 5cb677f..c6d0d13 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathDoubleWord.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathDoubleWord.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_DOUBLE_WORD_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_DOUBLE_WORD_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFrexpLdexp.h b/Eigen/src/Core/arch/Default/GenericPacketMathFrexpLdexp.h
index 978818e..a1607f3 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFrexpLdexp.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFrexpLdexp.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_FREXP_LDEXP_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_FREXP_LDEXP_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
index 8e54d4c..22363fd 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* The exp and log functions of this file initially come from
  * Julien Pommier's sse math library: http://gruntthepeon.free.fr/ssemath/
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
index 4534c9d..0277fef 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathPolynomials.h b/Eigen/src/Core/arch/Default/GenericPacketMathPolynomials.h
index a8ec6ae..1518748 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathPolynomials.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathPolynomials.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_POLYNOMIALS_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_POLYNOMIALS_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathPow.h b/Eigen/src/Core/arch/Default/GenericPacketMathPow.h
index 4ab75b9..cc2e479 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathPow.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathPow.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_POW_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_POW_H
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathTrig.h b/Eigen/src/Core/arch/Default/GenericPacketMathTrig.h
index 3350de2..2a1664b 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathTrig.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathTrig.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_TRIG_H
 #define EIGEN_ARCH_GENERIC_PACKET_MATH_TRIG_H
diff --git a/Eigen/src/Core/arch/Default/Half.h b/Eigen/src/Core/arch/Default/Half.h
index d1acabe..99e2f2f 100644
--- a/Eigen/src/Core/arch/Default/Half.h
+++ b/Eigen/src/Core/arch/Default/Half.h
@@ -23,6 +23,7 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// SPDX-License-Identifier: MPL-2.0
 
 // Standard 16-bit float type, mostly useful for GPUs. Defines a new
 // type Eigen::half (inheriting either from CUDA's or HIP's __half struct) with
diff --git a/Eigen/src/Core/arch/Default/Settings.h b/Eigen/src/Core/arch/Default/Settings.h
index 7e3a970..61af103 100644
--- a/Eigen/src/Core/arch/Default/Settings.h
+++ b/Eigen/src/Core/arch/Default/Settings.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* All the parameters defined in this file can be specialized in the
  * architecture specific files, and/or by the user.
diff --git a/Eigen/src/Core/arch/GPU/Complex.h b/Eigen/src/Core/arch/GPU/Complex.h
index be4c218..583ba6e 100644
--- a/Eigen/src/Core/arch/GPU/Complex.h
+++ b/Eigen/src/Core/arch/GPU/Complex.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_GPU_H
 #define EIGEN_COMPLEX_GPU_H
diff --git a/Eigen/src/Core/arch/GPU/MathFunctions.h b/Eigen/src/Core/arch/GPU/MathFunctions.h
index 81bc8bb..76f5a1d 100644
--- a/Eigen/src/Core/arch/GPU/MathFunctions.h
+++ b/Eigen/src/Core/arch/GPU/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_GPU_H
 #define EIGEN_MATH_FUNCTIONS_GPU_H
diff --git a/Eigen/src/Core/arch/GPU/PacketMath.h b/Eigen/src/Core/arch/GPU/PacketMath.h
index 9649843..4a4703a 100644
--- a/Eigen/src/Core/arch/GPU/PacketMath.h
+++ b/Eigen/src/Core/arch/GPU/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_GPU_H
 #define EIGEN_PACKET_MATH_GPU_H
diff --git a/Eigen/src/Core/arch/GPU/Tuple.h b/Eigen/src/Core/arch/GPU/Tuple.h
index e9b608c..4bbb8de 100644
--- a/Eigen/src/Core/arch/GPU/Tuple.h
+++ b/Eigen/src/Core/arch/GPU/Tuple.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TUPLE_GPU
 #define EIGEN_TUPLE_GPU
diff --git a/Eigen/src/Core/arch/GPU/TypeCasting.h b/Eigen/src/Core/arch/GPU/TypeCasting.h
index 27cbbbe..3595b4a 100644
--- a/Eigen/src/Core/arch/GPU/TypeCasting.h
+++ b/Eigen/src/Core/arch/GPU/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_GPU_H
 #define EIGEN_TYPE_CASTING_GPU_H
diff --git a/Eigen/src/Core/arch/HIP/hcc/math_constants.h b/Eigen/src/Core/arch/HIP/hcc/math_constants.h
index 99dd3ae..34dad53 100644
--- a/Eigen/src/Core/arch/HIP/hcc/math_constants.h
+++ b/Eigen/src/Core/arch/HIP/hcc/math_constants.h
@@ -2,6 +2,8 @@
  * math_constants.h -
  *  HIP equivalent of the CUDA header of the same name
  */
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef __MATH_CONSTANTS_H__
 #define __MATH_CONSTANTS_H__
diff --git a/Eigen/src/Core/arch/HVX/PacketMath.h b/Eigen/src/Core/arch/HVX/PacketMath.h
index 1249426..aaaee84 100644
--- a/Eigen/src/Core/arch/HVX/PacketMath.h
+++ b/Eigen/src/Core/arch/HVX/PacketMath.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HVX_PACKET_MATH_H
 #define EIGEN_HVX_PACKET_MATH_H
diff --git a/Eigen/src/Core/arch/LSX/Complex.h b/Eigen/src/Core/arch/LSX/Complex.h
index 522d3d0..2ae53f5 100644
--- a/Eigen/src/Core/arch/LSX/Complex.h
+++ b/Eigen/src/Core/arch/LSX/Complex.h
@@ -7,6 +7,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_LSX_H
 #define EIGEN_COMPLEX_LSX_H
diff --git a/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h b/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h
index 4b07062..f8322c6 100644
--- a/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "../../InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/Eigen/src/Core/arch/LSX/MathFunctions.h b/Eigen/src/Core/arch/LSX/MathFunctions.h
index cead463..972d416 100644
--- a/Eigen/src/Core/arch/LSX/MathFunctions.h
+++ b/Eigen/src/Core/arch/LSX/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_LSX_H
 #define EIGEN_MATH_FUNCTIONS_LSX_H
diff --git a/Eigen/src/Core/arch/LSX/PacketMath.h b/Eigen/src/Core/arch/LSX/PacketMath.h
index 366399f..c4d3610 100644
--- a/Eigen/src/Core/arch/LSX/PacketMath.h
+++ b/Eigen/src/Core/arch/LSX/PacketMath.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_LSX_H
 #define EIGEN_PACKET_MATH_LSX_H
diff --git a/Eigen/src/Core/arch/LSX/TypeCasting.h b/Eigen/src/Core/arch/LSX/TypeCasting.h
index 0b2906b..d255528 100644
--- a/Eigen/src/Core/arch/LSX/TypeCasting.h
+++ b/Eigen/src/Core/arch/LSX/TypeCasting.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_LSX_H
 #define EIGEN_TYPE_CASTING_LSX_H
diff --git a/Eigen/src/Core/arch/MSA/Complex.h b/Eigen/src/Core/arch/MSA/Complex.h
index a0771a1..f3406c5 100644
--- a/Eigen/src/Core/arch/MSA/Complex.h
+++ b/Eigen/src/Core/arch/MSA/Complex.h
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_MSA_H
 #define EIGEN_COMPLEX_MSA_H
diff --git a/Eigen/src/Core/arch/MSA/MathFunctions.h b/Eigen/src/Core/arch/MSA/MathFunctions.h
index f68d254..947453f 100644
--- a/Eigen/src/Core/arch/MSA/MathFunctions.h
+++ b/Eigen/src/Core/arch/MSA/MathFunctions.h
@@ -13,6 +13,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* The sin, cos, exp, and log functions of this file come from
  * Julien Pommier's sse math library: http://gruntthepeon.free.fr/ssemath/
diff --git a/Eigen/src/Core/arch/MSA/PacketMath.h b/Eigen/src/Core/arch/MSA/PacketMath.h
index 40e4ccd..6ae97ad 100644
--- a/Eigen/src/Core/arch/MSA/PacketMath.h
+++ b/Eigen/src/Core/arch/MSA/PacketMath.h
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_MSA_H
 #define EIGEN_PACKET_MATH_MSA_H
diff --git a/Eigen/src/Core/arch/NEON/Complex.h b/Eigen/src/Core/arch/NEON/Complex.h
index 48ac0cf..1445c62 100644
--- a/Eigen/src/Core/arch/NEON/Complex.h
+++ b/Eigen/src/Core/arch/NEON/Complex.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_NEON_H
 #define EIGEN_COMPLEX_NEON_H
diff --git a/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h b/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
index 4ecf7d1..973b2e7 100644
--- a/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "../../InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/Eigen/src/Core/arch/NEON/MathFunctions.h b/Eigen/src/Core/arch/NEON/MathFunctions.h
index 5c48db8..ed42182 100644
--- a/Eigen/src/Core/arch/NEON/MathFunctions.h
+++ b/Eigen/src/Core/arch/NEON/MathFunctions.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_NEON_H
 #define EIGEN_MATH_FUNCTIONS_NEON_H
diff --git a/Eigen/src/Core/arch/NEON/PacketMath.h b/Eigen/src/Core/arch/NEON/PacketMath.h
index fb222b8..79f44d5 100644
--- a/Eigen/src/Core/arch/NEON/PacketMath.h
+++ b/Eigen/src/Core/arch/NEON/PacketMath.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_NEON_H
 #define EIGEN_PACKET_MATH_NEON_H
diff --git a/Eigen/src/Core/arch/NEON/TypeCasting.h b/Eigen/src/Core/arch/NEON/TypeCasting.h
index 748d701..0c9ad48 100644
--- a/Eigen/src/Core/arch/NEON/TypeCasting.h
+++ b/Eigen/src/Core/arch/NEON/TypeCasting.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_NEON_H
 #define EIGEN_TYPE_CASTING_NEON_H
diff --git a/Eigen/src/Core/arch/NEON/UnaryFunctors.h b/Eigen/src/Core/arch/NEON/UnaryFunctors.h
index 8be5bb0..158bc12 100644
--- a/Eigen/src/Core/arch/NEON/UnaryFunctors.h
+++ b/Eigen/src/Core/arch/NEON/UnaryFunctors.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NEON_UNARY_FUNCTORS_H
 #define EIGEN_NEON_UNARY_FUNCTORS_H
diff --git a/Eigen/src/Core/arch/RVV10/GeneralBlockPanelKernel.h b/Eigen/src/Core/arch/RVV10/GeneralBlockPanelKernel.h
index 026e1db..030e922 100644
--- a/Eigen/src/Core/arch/RVV10/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/arch/RVV10/GeneralBlockPanelKernel.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RVV10_GENERAL_BLOCK_KERNEL_H
 #define EIGEN_RVV10_GENERAL_BLOCK_KERNEL_H
diff --git a/Eigen/src/Core/arch/RVV10/MathFunctions.h b/Eigen/src/Core/arch/RVV10/MathFunctions.h
index 10a70c4..be522bb 100644
--- a/Eigen/src/Core/arch/RVV10/MathFunctions.h
+++ b/Eigen/src/Core/arch/RVV10/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_RVV10_H
 #define EIGEN_MATH_FUNCTIONS_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/PacketMath.h b/Eigen/src/Core/arch/RVV10/PacketMath.h
index 679d5c1..3d42fa6 100644
--- a/Eigen/src/Core/arch/RVV10/PacketMath.h
+++ b/Eigen/src/Core/arch/RVV10/PacketMath.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_RVV10_H
 #define EIGEN_PACKET_MATH_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/PacketMath2.h b/Eigen/src/Core/arch/RVV10/PacketMath2.h
index ccf496b..f7e0912 100644
--- a/Eigen/src/Core/arch/RVV10/PacketMath2.h
+++ b/Eigen/src/Core/arch/RVV10/PacketMath2.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET2_MATH_RVV10_H
 #define EIGEN_PACKET2_MATH_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/PacketMath4.h b/Eigen/src/Core/arch/RVV10/PacketMath4.h
index 249dadf..2e7888d 100644
--- a/Eigen/src/Core/arch/RVV10/PacketMath4.h
+++ b/Eigen/src/Core/arch/RVV10/PacketMath4.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET4_MATH_RVV10_H
 #define EIGEN_PACKET4_MATH_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/PacketMathBF16.h b/Eigen/src/Core/arch/RVV10/PacketMathBF16.h
index 8e15b21..e75baf2 100644
--- a/Eigen/src/Core/arch/RVV10/PacketMathBF16.h
+++ b/Eigen/src/Core/arch/RVV10/PacketMathBF16.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_BF16_RVV10_H
 #define EIGEN_PACKET_MATH_BF16_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/PacketMathFP16.h b/Eigen/src/Core/arch/RVV10/PacketMathFP16.h
index b1113c9..c7a7796 100644
--- a/Eigen/src/Core/arch/RVV10/PacketMathFP16.h
+++ b/Eigen/src/Core/arch/RVV10/PacketMathFP16.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_FP16_RVV10_H
 #define EIGEN_PACKET_MATH_FP16_RVV10_H
diff --git a/Eigen/src/Core/arch/RVV10/TypeCasting.h b/Eigen/src/Core/arch/RVV10/TypeCasting.h
index ec8509b..5c9491e 100644
--- a/Eigen/src/Core/arch/RVV10/TypeCasting.h
+++ b/Eigen/src/Core/arch/RVV10/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_RVV10_H
 #define EIGEN_TYPE_CASTING_RVV10_H
diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h
index 8615895..aea8f28 100644
--- a/Eigen/src/Core/arch/SSE/Complex.h
+++ b/Eigen/src/Core/arch/SSE/Complex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_SSE_H
 #define EIGEN_COMPLEX_SSE_H
diff --git a/Eigen/src/Core/arch/SSE/MathFunctions.h b/Eigen/src/Core/arch/SSE/MathFunctions.h
index 30c1f07..c730f5b 100644
--- a/Eigen/src/Core/arch/SSE/MathFunctions.h
+++ b/Eigen/src/Core/arch/SSE/MathFunctions.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* The sin and cos and functions of this file come from
  * Julien Pommier's sse math library: http://gruntthepeon.free.fr/ssemath/
diff --git a/Eigen/src/Core/arch/SSE/PacketMath.h b/Eigen/src/Core/arch/SSE/PacketMath.h
index 695a173..93e105d 100644
--- a/Eigen/src/Core/arch/SSE/PacketMath.h
+++ b/Eigen/src/Core/arch/SSE/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_SSE_H
 #define EIGEN_PACKET_MATH_SSE_H
diff --git a/Eigen/src/Core/arch/SSE/Reductions.h b/Eigen/src/Core/arch/SSE/Reductions.h
index f38df4e..9158ac9 100644
--- a/Eigen/src/Core/arch/SSE/Reductions.h
+++ b/Eigen/src/Core/arch/SSE/Reductions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REDUCTIONS_SSE_H
 #define EIGEN_REDUCTIONS_SSE_H
diff --git a/Eigen/src/Core/arch/SSE/TypeCasting.h b/Eigen/src/Core/arch/SSE/TypeCasting.h
index 8eebc02..24a6d9d 100644
--- a/Eigen/src/Core/arch/SSE/TypeCasting.h
+++ b/Eigen/src/Core/arch/SSE/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_SSE_H
 #define EIGEN_TYPE_CASTING_SSE_H
diff --git a/Eigen/src/Core/arch/SVE/MathFunctions.h b/Eigen/src/Core/arch/SVE/MathFunctions.h
index a547d39..1d127a3 100644
--- a/Eigen/src/Core/arch/SVE/MathFunctions.h
+++ b/Eigen/src/Core/arch/SVE/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_SVE_H
 #define EIGEN_MATH_FUNCTIONS_SVE_H
diff --git a/Eigen/src/Core/arch/SVE/PacketMath.h b/Eigen/src/Core/arch/SVE/PacketMath.h
index 611ba79..144dd5d 100644
--- a/Eigen/src/Core/arch/SVE/PacketMath.h
+++ b/Eigen/src/Core/arch/SVE/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_SVE_H
 #define EIGEN_PACKET_MATH_SVE_H
diff --git a/Eigen/src/Core/arch/SVE/TypeCasting.h b/Eigen/src/Core/arch/SVE/TypeCasting.h
index c7027b3..ec266e7 100644
--- a/Eigen/src/Core/arch/SVE/TypeCasting.h
+++ b/Eigen/src/Core/arch/SVE/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_SVE_H
 #define EIGEN_TYPE_CASTING_SVE_H
diff --git a/Eigen/src/Core/arch/SYCL/InteropHeaders.h b/Eigen/src/Core/arch/SYCL/InteropHeaders.h
index 0bdf825..15eaa0c 100644
--- a/Eigen/src/Core/arch/SYCL/InteropHeaders.h
+++ b/Eigen/src/Core/arch/SYCL/InteropHeaders.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * InteropHeaders.h
diff --git a/Eigen/src/Core/arch/SYCL/MathFunctions.h b/Eigen/src/Core/arch/SYCL/MathFunctions.h
index 90d6066..239aee9 100644
--- a/Eigen/src/Core/arch/SYCL/MathFunctions.h
+++ b/Eigen/src/Core/arch/SYCL/MathFunctions.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * MathFunctions.h
diff --git a/Eigen/src/Core/arch/SYCL/PacketMath.h b/Eigen/src/Core/arch/SYCL/PacketMath.h
index e5dad3c..ba730de 100644
--- a/Eigen/src/Core/arch/SYCL/PacketMath.h
+++ b/Eigen/src/Core/arch/SYCL/PacketMath.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * PacketMath.h
diff --git a/Eigen/src/Core/arch/SYCL/TypeCasting.h b/Eigen/src/Core/arch/SYCL/TypeCasting.h
index 6e3fa4f..2c8fd51 100644
--- a/Eigen/src/Core/arch/SYCL/TypeCasting.h
+++ b/Eigen/src/Core/arch/SYCL/TypeCasting.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * TypeCasting.h
diff --git a/Eigen/src/Core/arch/ZVector/Complex.h b/Eigen/src/Core/arch/ZVector/Complex.h
index 048b598..d61d062 100644
--- a/Eigen/src/Core/arch/ZVector/Complex.h
+++ b/Eigen/src/Core/arch/ZVector/Complex.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX32_ZVECTOR_H
 #define EIGEN_COMPLEX32_ZVECTOR_H
diff --git a/Eigen/src/Core/arch/ZVector/MathFunctions.h b/Eigen/src/Core/arch/ZVector/MathFunctions.h
index 348d643..64cd35f 100644
--- a/Eigen/src/Core/arch/ZVector/MathFunctions.h
+++ b/Eigen/src/Core/arch/ZVector/MathFunctions.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* The sin, cos, exp, and log functions of this file come from
  * Julien Pommier's sse math library: http://gruntthepeon.free.fr/ssemath/
diff --git a/Eigen/src/Core/arch/ZVector/PacketMath.h b/Eigen/src/Core/arch/ZVector/PacketMath.h
index e166609..97eeb01 100644
--- a/Eigen/src/Core/arch/ZVector/PacketMath.h
+++ b/Eigen/src/Core/arch/ZVector/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_ZVECTOR_H
 #define EIGEN_PACKET_MATH_ZVECTOR_H
diff --git a/Eigen/src/Core/arch/clang/Complex.h b/Eigen/src/Core/arch/clang/Complex.h
index cfcc229..1dd4575 100644
--- a/Eigen/src/Core/arch/clang/Complex.h
+++ b/Eigen/src/Core/arch/clang/Complex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_CLANG_H
 #define EIGEN_COMPLEX_CLANG_H
diff --git a/Eigen/src/Core/arch/clang/MathFunctions.h b/Eigen/src/Core/arch/clang/MathFunctions.h
index c2afeda..22dc04f 100644
--- a/Eigen/src/Core/arch/clang/MathFunctions.h
+++ b/Eigen/src/Core/arch/clang/MathFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATH_FUNCTIONS_CLANG_H
 #define EIGEN_MATH_FUNCTIONS_CLANG_H
diff --git a/Eigen/src/Core/arch/clang/PacketMath.h b/Eigen/src/Core/arch/clang/PacketMath.h
index 491c0e2..07779c0 100644
--- a/Eigen/src/Core/arch/clang/PacketMath.h
+++ b/Eigen/src/Core/arch/clang/PacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKET_MATH_CLANG_H
 #define EIGEN_PACKET_MATH_CLANG_H
diff --git a/Eigen/src/Core/arch/clang/Reductions.h b/Eigen/src/Core/arch/clang/Reductions.h
index 37fc161..c2e07f5 100644
--- a/Eigen/src/Core/arch/clang/Reductions.h
+++ b/Eigen/src/Core/arch/clang/Reductions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REDUCTIONS_CLANG_H
 #define EIGEN_REDUCTIONS_CLANG_H
diff --git a/Eigen/src/Core/arch/clang/TypeCasting.h b/Eigen/src/Core/arch/clang/TypeCasting.h
index 75281b2..09f799a 100644
--- a/Eigen/src/Core/arch/clang/TypeCasting.h
+++ b/Eigen/src/Core/arch/clang/TypeCasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TYPE_CASTING_CLANG_H
 #define EIGEN_TYPE_CASTING_CLANG_H
diff --git a/Eigen/src/Core/functors/AssignmentFunctors.h b/Eigen/src/Core/functors/AssignmentFunctors.h
index 8f7ad13..d811b27 100644
--- a/Eigen/src/Core/functors/AssignmentFunctors.h
+++ b/Eigen/src/Core/functors/AssignmentFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ASSIGNMENT_FUNCTORS_H
 #define EIGEN_ASSIGNMENT_FUNCTORS_H
diff --git a/Eigen/src/Core/functors/BinaryFunctors.h b/Eigen/src/Core/functors/BinaryFunctors.h
index 96db151..7d66073 100644
--- a/Eigen/src/Core/functors/BinaryFunctors.h
+++ b/Eigen/src/Core/functors/BinaryFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BINARY_FUNCTORS_H
 #define EIGEN_BINARY_FUNCTORS_H
diff --git a/Eigen/src/Core/functors/NullaryFunctors.h b/Eigen/src/Core/functors/NullaryFunctors.h
index d8fc78a..8f76d5b 100644
--- a/Eigen/src/Core/functors/NullaryFunctors.h
+++ b/Eigen/src/Core/functors/NullaryFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NULLARY_FUNCTORS_H
 #define EIGEN_NULLARY_FUNCTORS_H
diff --git a/Eigen/src/Core/functors/StlFunctors.h b/Eigen/src/Core/functors/StlFunctors.h
index 0599ce3..2976b41 100644
--- a/Eigen/src/Core/functors/StlFunctors.h
+++ b/Eigen/src/Core/functors/StlFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STL_FUNCTORS_H
 #define EIGEN_STL_FUNCTORS_H
diff --git a/Eigen/src/Core/functors/TernaryFunctors.h b/Eigen/src/Core/functors/TernaryFunctors.h
index 9a4ea48..598549e 100644
--- a/Eigen/src/Core/functors/TernaryFunctors.h
+++ b/Eigen/src/Core/functors/TernaryFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TERNARY_FUNCTORS_H
 #define EIGEN_TERNARY_FUNCTORS_H
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h
index b92607d..a137be9 100644
--- a/Eigen/src/Core/functors/UnaryFunctors.h
+++ b/Eigen/src/Core/functors/UnaryFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_UNARY_FUNCTORS_H
 #define EIGEN_UNARY_FUNCTORS_H
diff --git a/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
index 8ed3d92..011e9ad 100644
--- a/Eigen/src/Core/products/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_BLOCK_PANEL_H
 #define EIGEN_GENERAL_BLOCK_PANEL_H
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrix.h b/Eigen/src/Core/products/GeneralMatrixMatrix.h
index 915f130..73adb25 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrix.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_MATRIX_MATRIX_H
 #define EIGEN_GENERAL_MATRIX_MATRIX_H
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
index 5a8599a..f814811 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_H
 #define EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_H
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
index e14aa61..a97cfc5 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
@@ -29,6 +29,7 @@
  *   Level 3 BLAS SYRK/HERK implementation.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_BLAS_H
 #define EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_BLAS_H
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h b/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
index 11c29b6..1a5a394 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
@@ -29,6 +29,7 @@
  *   General matrix-matrix product functionality based on ?GEMM.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_GENERAL_MATRIX_MATRIX_BLAS_H
 #define EIGEN_GENERAL_MATRIX_MATRIX_BLAS_H
diff --git a/Eigen/src/Core/products/GeneralMatrixVector.h b/Eigen/src/Core/products/GeneralMatrixVector.h
index 0fc9a74..3877e32 100644
--- a/Eigen/src/Core/products/GeneralMatrixVector.h
+++ b/Eigen/src/Core/products/GeneralMatrixVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_MATRIX_VECTOR_H
 #define EIGEN_GENERAL_MATRIX_VECTOR_H
diff --git a/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h b/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
index 18adfd1..e2274b2 100644
--- a/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
@@ -29,6 +29,7 @@
  *   General matrix-vector product functionality based on ?GEMV.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_GENERAL_MATRIX_VECTOR_BLAS_H
 #define EIGEN_GENERAL_MATRIX_VECTOR_BLAS_H
diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h
index 96cc237..c99dc44 100644
--- a/Eigen/src/Core/products/Parallelizer.h
+++ b/Eigen/src/Core/products/Parallelizer.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARALLELIZER_H
 #define EIGEN_PARALLELIZER_H
diff --git a/Eigen/src/Core/products/SelfadjointMatrixMatrix.h b/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
index fd66b60..8f157de 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_H
 #define EIGEN_SELFADJOINT_MATRIX_MATRIX_H
diff --git a/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h b/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
index 684a90f..2489fcf 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
@@ -29,6 +29,7 @@
  *   Self adjoint matrix * matrix product functionality based on ?SYMM/?HEMM.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H
 #define EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H
diff --git a/Eigen/src/Core/products/SelfadjointMatrixVector.h b/Eigen/src/Core/products/SelfadjointMatrixVector.h
index f87509b..3b6c8c6 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixVector.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_H
 #define EIGEN_SELFADJOINT_MATRIX_VECTOR_H
diff --git a/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h b/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
index 413d949..9873b25 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
@@ -29,6 +29,7 @@
  *   Selfadjoint matrix-vector product functionality based on ?SYMV/HEMV.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H
 #define EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H
diff --git a/Eigen/src/Core/products/SelfadjointProduct.h b/Eigen/src/Core/products/SelfadjointProduct.h
index 0e0f349..fb2e987 100644
--- a/Eigen/src/Core/products/SelfadjointProduct.h
+++ b/Eigen/src/Core/products/SelfadjointProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINT_PRODUCT_H
 #define EIGEN_SELFADJOINT_PRODUCT_H
diff --git a/Eigen/src/Core/products/SelfadjointRank2Update.h b/Eigen/src/Core/products/SelfadjointRank2Update.h
index 165875f..823db85 100644
--- a/Eigen/src/Core/products/SelfadjointRank2Update.h
+++ b/Eigen/src/Core/products/SelfadjointRank2Update.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINTRANK2UPTADE_H
 #define EIGEN_SELFADJOINTRANK2UPTADE_H
diff --git a/Eigen/src/Core/products/TriangularMatrixMatrix.h b/Eigen/src/Core/products/TriangularMatrixMatrix.h
index e4e446e..84e09cf 100644
--- a/Eigen/src/Core/products/TriangularMatrixMatrix.h
+++ b/Eigen/src/Core/products/TriangularMatrixMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIANGULAR_MATRIX_MATRIX_H
 #define EIGEN_TRIANGULAR_MATRIX_MATRIX_H
diff --git a/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h b/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
index 043011e..17eeff1 100644
--- a/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
@@ -29,6 +29,7 @@
  *   Triangular matrix * matrix product functionality based on ?TRMM.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_TRIANGULAR_MATRIX_MATRIX_BLAS_H
 #define EIGEN_TRIANGULAR_MATRIX_MATRIX_BLAS_H
diff --git a/Eigen/src/Core/products/TriangularMatrixVector.h b/Eigen/src/Core/products/TriangularMatrixVector.h
index 41395f9..14dacaf 100644
--- a/Eigen/src/Core/products/TriangularMatrixVector.h
+++ b/Eigen/src/Core/products/TriangularMatrixVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIANGULARMATRIXVECTOR_H
 #define EIGEN_TRIANGULARMATRIXVECTOR_H
diff --git a/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h b/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
index 19ed813..6675036 100644
--- a/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
@@ -29,6 +29,7 @@
  *   Triangular matrix-vector product functionality based on ?TRMV.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_TRIANGULAR_MATRIX_VECTOR_BLAS_H
 #define EIGEN_TRIANGULAR_MATRIX_VECTOR_BLAS_H
diff --git a/Eigen/src/Core/products/TriangularSolverMatrix.h b/Eigen/src/Core/products/TriangularSolverMatrix.h
index bee971d..eab16e8 100644
--- a/Eigen/src/Core/products/TriangularSolverMatrix.h
+++ b/Eigen/src/Core/products/TriangularSolverMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIANGULAR_SOLVER_MATRIX_H
 #define EIGEN_TRIANGULAR_SOLVER_MATRIX_H
diff --git a/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h b/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
index 20c8f20..1b657c6 100644
--- a/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
+++ b/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
@@ -29,6 +29,7 @@
  *   Triangular matrix * matrix product functionality based on ?TRMM.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_TRIANGULAR_SOLVER_MATRIX_BLAS_H
 #define EIGEN_TRIANGULAR_SOLVER_MATRIX_BLAS_H
diff --git a/Eigen/src/Core/products/TriangularSolverVector.h b/Eigen/src/Core/products/TriangularSolverVector.h
index ff7c43f..cfcbd08 100644
--- a/Eigen/src/Core/products/TriangularSolverVector.h
+++ b/Eigen/src/Core/products/TriangularSolverVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIANGULAR_SOLVER_VECTOR_H
 #define EIGEN_TRIANGULAR_SOLVER_VECTOR_H
diff --git a/Eigen/src/Core/util/AOCL_Support.h b/Eigen/src/Core/util/AOCL_Support.h
index c628268..e65ec6b 100644
--- a/Eigen/src/Core/util/AOCL_Support.h
+++ b/Eigen/src/Core/util/AOCL_Support.h
@@ -72,6 +72,7 @@
  * Email: shbhaska@amd.com
  * Organization: Advanced Micro Devices, Inc.
  */
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AOCL_SUPPORT_H
 #define EIGEN_AOCL_SUPPORT_H
diff --git a/Eigen/src/Core/util/Assert.h b/Eigen/src/Core/util/Assert.h
index 09a411a..07c4f43 100644
--- a/Eigen/src/Core/util/Assert.h
+++ b/Eigen/src/Core/util/Assert.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_UTIL_ASSERT_H
 #define EIGEN_CORE_UTIL_ASSERT_H
diff --git a/Eigen/src/Core/util/BlasUtil.h b/Eigen/src/Core/util/BlasUtil.h
index 2e1ca91..6918081 100644
--- a/Eigen/src/Core/util/BlasUtil.h
+++ b/Eigen/src/Core/util/BlasUtil.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BLASUTIL_H
 #define EIGEN_BLASUTIL_H
diff --git a/Eigen/src/Core/util/ConfigureVectorization.h b/Eigen/src/Core/util/ConfigureVectorization.h
index 4f31ae5..7ea2b3c 100644
--- a/Eigen/src/Core/util/ConfigureVectorization.h
+++ b/Eigen/src/Core/util/ConfigureVectorization.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONFIGURE_VECTORIZATION_H
 #define EIGEN_CONFIGURE_VECTORIZATION_H
diff --git a/Eigen/src/Core/util/Constants.h b/Eigen/src/Core/util/Constants.h
index 3a8c40f..7908bf3 100644
--- a/Eigen/src/Core/util/Constants.h
+++ b/Eigen/src/Core/util/Constants.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONSTANTS_H
 #define EIGEN_CONSTANTS_H
diff --git a/Eigen/src/Core/util/DisableStupidWarnings.h b/Eigen/src/Core/util/DisableStupidWarnings.h
index b2bc18a..3135129 100644
--- a/Eigen/src/Core/util/DisableStupidWarnings.h
+++ b/Eigen/src/Core/util/DisableStupidWarnings.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_WARNINGS_DISABLED
 #define EIGEN_WARNINGS_DISABLED
 
diff --git a/Eigen/src/Core/util/EmulateArray.h b/Eigen/src/Core/util/EmulateArray.h
index dd9de18..c0a8bd2 100644
--- a/Eigen/src/Core/util/EmulateArray.h
+++ b/Eigen/src/Core/util/EmulateArray.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EMULATE_ARRAY_H
 #define EIGEN_EMULATE_ARRAY_H
diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h
index 7059139..a9ebd07 100644
--- a/Eigen/src/Core/util/ForwardDeclarations.h
+++ b/Eigen/src/Core/util/ForwardDeclarations.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FORWARDDECLARATIONS_H
 #define EIGEN_FORWARDDECLARATIONS_H
diff --git a/Eigen/src/Core/util/GpuHipCudaDefines.inc b/Eigen/src/Core/util/GpuHipCudaDefines.inc
index f3d4023..b132143 100644
--- a/Eigen/src/Core/util/GpuHipCudaDefines.inc
+++ b/Eigen/src/Core/util/GpuHipCudaDefines.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_USE_GPU) && !defined(EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H)
 #define EIGEN_CXX11_TENSOR_GPU_HIP_CUDA_DEFINES_H
diff --git a/Eigen/src/Core/util/GpuHipCudaUndefines.inc b/Eigen/src/Core/util/GpuHipCudaUndefines.inc
index 342a323..76d4dcb 100644
--- a/Eigen/src/Core/util/GpuHipCudaUndefines.inc
+++ b/Eigen/src/Core/util/GpuHipCudaUndefines.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H)
 
diff --git a/Eigen/src/Core/util/IndexedViewHelper.h b/Eigen/src/Core/util/IndexedViewHelper.h
index 1c9e35d..1cc4aca 100644
--- a/Eigen/src/Core/util/IndexedViewHelper.h
+++ b/Eigen/src/Core/util/IndexedViewHelper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INDEXED_VIEW_HELPER_H
 #define EIGEN_INDEXED_VIEW_HELPER_H
diff --git a/Eigen/src/Core/util/IntegralConstant.h b/Eigen/src/Core/util/IntegralConstant.h
index a298f81..a7c3766 100644
--- a/Eigen/src/Core/util/IntegralConstant.h
+++ b/Eigen/src/Core/util/IntegralConstant.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INTEGRAL_CONSTANT_H
 #define EIGEN_INTEGRAL_CONSTANT_H
diff --git a/Eigen/src/Core/util/MKL_support.h b/Eigen/src/Core/util/MKL_support.h
index 3e44a26..afd4b1c 100644
--- a/Eigen/src/Core/util/MKL_support.h
+++ b/Eigen/src/Core/util/MKL_support.h
@@ -29,6 +29,7 @@
  *   Include file with common MKL declarations
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_MKL_SUPPORT_H
 #define EIGEN_MKL_SUPPORT_H
diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h
index c08489a..f9776a5 100644
--- a/Eigen/src/Core/util/Macros.h
+++ b/Eigen/src/Core/util/Macros.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MACROS_H
 #define EIGEN_MACROS_H
diff --git a/Eigen/src/Core/util/MaxSizeVector.h b/Eigen/src/Core/util/MaxSizeVector.h
index 3f13b2d..b474196 100644
--- a/Eigen/src/Core/util/MaxSizeVector.h
+++ b/Eigen/src/Core/util/MaxSizeVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FIXEDSIZEVECTOR_H
 #define EIGEN_FIXEDSIZEVECTOR_H
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h
index c52137d..cb7f1e3 100644
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************************
 *** Platform checks for aligned malloc functions                           ***
diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h
index d78df80..75be1b6 100644
--- a/Eigen/src/Core/util/Meta.h
+++ b/Eigen/src/Core/util/Meta.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_META_H
 #define EIGEN_META_H
diff --git a/Eigen/src/Core/util/MoreMeta.h b/Eigen/src/Core/util/MoreMeta.h
index 4f83167..f9f71ff 100644
--- a/Eigen/src/Core/util/MoreMeta.h
+++ b/Eigen/src/Core/util/MoreMeta.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MOREMETA_H
 #define EIGEN_MOREMETA_H
diff --git a/Eigen/src/Core/util/ReenableStupidWarnings.h b/Eigen/src/Core/util/ReenableStupidWarnings.h
index 0af5a43..81e30f2 100644
--- a/Eigen/src/Core/util/ReenableStupidWarnings.h
+++ b/Eigen/src/Core/util/ReenableStupidWarnings.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifdef EIGEN_WARNINGS_DISABLED_2
 // "DisableStupidWarnings.h" was included twice recursively: Do not re-enable warnings yet!
 #undef EIGEN_WARNINGS_DISABLED_2
diff --git a/Eigen/src/Core/util/ReshapedHelper.h b/Eigen/src/Core/util/ReshapedHelper.h
index 1747950..5046f7b 100644
--- a/Eigen/src/Core/util/ReshapedHelper.h
+++ b/Eigen/src/Core/util/ReshapedHelper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RESHAPED_HELPER_H
 #define EIGEN_RESHAPED_HELPER_H
diff --git a/Eigen/src/Core/util/Serializer.h b/Eigen/src/Core/util/Serializer.h
index 6de7fe2..558e166 100644
--- a/Eigen/src/Core/util/Serializer.h
+++ b/Eigen/src/Core/util/Serializer.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SERIALIZER_H
 #define EIGEN_SERIALIZER_H
diff --git a/Eigen/src/Core/util/StaticAssert.h b/Eigen/src/Core/util/StaticAssert.h
index f062354..eeec6c3 100644
--- a/Eigen/src/Core/util/StaticAssert.h
+++ b/Eigen/src/Core/util/StaticAssert.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STATIC_ASSERT_H
 #define EIGEN_STATIC_ASSERT_H
diff --git a/Eigen/src/Core/util/SymbolicIndex.h b/Eigen/src/Core/util/SymbolicIndex.h
index a90e2bb..3c1d9ba 100644
--- a/Eigen/src/Core/util/SymbolicIndex.h
+++ b/Eigen/src/Core/util/SymbolicIndex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SYMBOLIC_INDEX_H
 #define EIGEN_SYMBOLIC_INDEX_H
diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h
index 9ae6d69..4ae9daf 100644
--- a/Eigen/src/Core/util/XprHelper.h
+++ b/Eigen/src/Core/util/XprHelper.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_XPRHELPER_H
 #define EIGEN_XPRHELPER_H
diff --git a/Eigen/src/Eigenvalues/ComplexEigenSolver.h b/Eigen/src/Eigenvalues/ComplexEigenSolver.h
index c848955..7ee1984 100644
--- a/Eigen/src/Eigenvalues/ComplexEigenSolver.h
+++ b/Eigen/src/Eigenvalues/ComplexEigenSolver.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_EIGEN_SOLVER_H
 #define EIGEN_COMPLEX_EIGEN_SOLVER_H
diff --git a/Eigen/src/Eigenvalues/ComplexQZ.h b/Eigen/src/Eigenvalues/ComplexQZ.h
index 1d5f8d0..500f2cc 100644
--- a/Eigen/src/Eigenvalues/ComplexQZ.h
+++ b/Eigen/src/Eigenvalues/ComplexQZ.h
@@ -10,6 +10,7 @@
 // https://mozilla.org/MPL/2.0/.
 //
 // Derived from: Eigen/src/Eigenvalues/RealQZ.h
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_QZ_H_
 #define EIGEN_COMPLEX_QZ_H_
diff --git a/Eigen/src/Eigenvalues/ComplexSchur.h b/Eigen/src/Eigenvalues/ComplexSchur.h
index 86d6349..d722e73 100644
--- a/Eigen/src/Eigenvalues/ComplexSchur.h
+++ b/Eigen/src/Eigenvalues/ComplexSchur.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLEX_SCHUR_H
 #define EIGEN_COMPLEX_SCHUR_H
diff --git a/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h b/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
index 5f66fd9..3277463 100644
--- a/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
@@ -29,6 +29,7 @@
  *    Complex Schur needed to complex unsymmetrical eigenvalues/eigenvectors.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_COMPLEX_SCHUR_LAPACKE_H
 #define EIGEN_COMPLEX_SCHUR_LAPACKE_H
diff --git a/Eigen/src/Eigenvalues/EigenSolver.h b/Eigen/src/Eigenvalues/EigenSolver.h
index f439912..66fa02d 100644
--- a/Eigen/src/Eigenvalues/EigenSolver.h
+++ b/Eigen/src/Eigenvalues/EigenSolver.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EIGENSOLVER_H
 #define EIGEN_EIGENSOLVER_H
diff --git a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
index c0a61dc..4dcee43 100644
--- a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
+++ b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERALIZEDEIGENSOLVER_H
 #define EIGEN_GENERALIZEDEIGENSOLVER_H
diff --git a/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
index adff3a3..4206bee 100644
--- a/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
+++ b/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERALIZEDSELFADJOINTEIGENSOLVER_H
 #define EIGEN_GENERALIZEDSELFADJOINTEIGENSOLVER_H
diff --git a/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/Eigen/src/Eigenvalues/HessenbergDecomposition.h
index 42fe3fd..bd95814 100644
--- a/Eigen/src/Eigenvalues/HessenbergDecomposition.h
+++ b/Eigen/src/Eigenvalues/HessenbergDecomposition.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HESSENBERGDECOMPOSITION_H
 #define EIGEN_HESSENBERGDECOMPOSITION_H
diff --git a/Eigen/src/Eigenvalues/InternalHeaderCheck.h b/Eigen/src/Eigenvalues/InternalHeaderCheck.h
index 374cbd4..6ca5ce8 100644
--- a/Eigen/src/Eigenvalues/InternalHeaderCheck.h
+++ b/Eigen/src/Eigenvalues/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_EIGENVALUES_MODULE_H
 #error "Please include Eigen/Eigenvalues instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h b/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
index 38f46f8..3b95a04 100644
--- a/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
+++ b/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIXBASEEIGENVALUES_H
 #define EIGEN_MATRIXBASEEIGENVALUES_H
diff --git a/Eigen/src/Eigenvalues/RealQZ.h b/Eigen/src/Eigenvalues/RealQZ.h
index b091d90..ebb5767 100644
--- a/Eigen/src/Eigenvalues/RealQZ.h
+++ b/Eigen/src/Eigenvalues/RealQZ.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REAL_QZ_H
 #define EIGEN_REAL_QZ_H
diff --git a/Eigen/src/Eigenvalues/RealSchur.h b/Eigen/src/Eigenvalues/RealSchur.h
index b9dbc6a..11a4dd8 100644
--- a/Eigen/src/Eigenvalues/RealSchur.h
+++ b/Eigen/src/Eigenvalues/RealSchur.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_REAL_SCHUR_H
 #define EIGEN_REAL_SCHUR_H
diff --git a/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h b/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
index 05a516d..6306513 100644
--- a/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
@@ -29,6 +29,7 @@
  *    Real Schur needed to real unsymmetrical eigenvalues/eigenvectors.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_REAL_SCHUR_LAPACKE_H
 #define EIGEN_REAL_SCHUR_LAPACKE_H
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
index c89c2d1..836747c 100644
--- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
+++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINTEIGENSOLVER_H
 #define EIGEN_SELFADJOINTEIGENSOLVER_H
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
index fabc30d..d0ae7ff 100644
--- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
@@ -29,6 +29,7 @@
  *    Self-adjoint eigenvalues/eigenvectors.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_SAEIGENSOLVER_LAPACKE_H
 #define EIGEN_SAEIGENSOLVER_LAPACKE_H
diff --git a/Eigen/src/Eigenvalues/Tridiagonalization.h b/Eigen/src/Eigenvalues/Tridiagonalization.h
index 1dbe009..4ddbea0 100644
--- a/Eigen/src/Eigenvalues/Tridiagonalization.h
+++ b/Eigen/src/Eigenvalues/Tridiagonalization.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRIDIAGONALIZATION_H
 #define EIGEN_TRIDIAGONALIZATION_H
diff --git a/Eigen/src/Geometry/AlignedBox.h b/Eigen/src/Geometry/AlignedBox.h
index e97a8f2..fdc1cfb 100644
--- a/Eigen/src/Geometry/AlignedBox.h
+++ b/Eigen/src/Geometry/AlignedBox.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Function void Eigen::AlignedBox::transform(const Transform& transform)
 // is provided under the following license agreement:
diff --git a/Eigen/src/Geometry/AngleAxis.h b/Eigen/src/Geometry/AngleAxis.h
index 02f3fb2..273e163 100644
--- a/Eigen/src/Geometry/AngleAxis.h
+++ b/Eigen/src/Geometry/AngleAxis.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ANGLEAXIS_H
 #define EIGEN_ANGLEAXIS_H
diff --git a/Eigen/src/Geometry/EulerAngles.h b/Eigen/src/Geometry/EulerAngles.h
index 8e50528..7d56df9 100644
--- a/Eigen/src/Geometry/EulerAngles.h
+++ b/Eigen/src/Geometry/EulerAngles.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EULERANGLES_H
 #define EIGEN_EULERANGLES_H
diff --git a/Eigen/src/Geometry/Homogeneous.h b/Eigen/src/Geometry/Homogeneous.h
index 22361e9..556037f 100644
--- a/Eigen/src/Geometry/Homogeneous.h
+++ b/Eigen/src/Geometry/Homogeneous.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HOMOGENEOUS_H
 #define EIGEN_HOMOGENEOUS_H
diff --git a/Eigen/src/Geometry/Hyperplane.h b/Eigen/src/Geometry/Hyperplane.h
index 1bdb811..274821a 100644
--- a/Eigen/src/Geometry/Hyperplane.h
+++ b/Eigen/src/Geometry/Hyperplane.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HYPERPLANE_H
 #define EIGEN_HYPERPLANE_H
diff --git a/Eigen/src/Geometry/InternalHeaderCheck.h b/Eigen/src/Geometry/InternalHeaderCheck.h
index a1159a3..a2072d4 100644
--- a/Eigen/src/Geometry/InternalHeaderCheck.h
+++ b/Eigen/src/Geometry/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_GEOMETRY_MODULE_H
 #error "Please include Eigen/Geometry instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Geometry/OrthoMethods.h b/Eigen/src/Geometry/OrthoMethods.h
index 758c82e..d018be9 100644
--- a/Eigen/src/Geometry/OrthoMethods.h
+++ b/Eigen/src/Geometry/OrthoMethods.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ORTHOMETHODS_H
 #define EIGEN_ORTHOMETHODS_H
diff --git a/Eigen/src/Geometry/ParametrizedLine.h b/Eigen/src/Geometry/ParametrizedLine.h
index 5bbd874..6e3df6b 100644
--- a/Eigen/src/Geometry/ParametrizedLine.h
+++ b/Eigen/src/Geometry/ParametrizedLine.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARAMETRIZEDLINE_H
 #define EIGEN_PARAMETRIZEDLINE_H
diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h
index b409833..a967410 100644
--- a/Eigen/src/Geometry/Quaternion.h
+++ b/Eigen/src/Geometry/Quaternion.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_QUATERNION_H
 #define EIGEN_QUATERNION_H
diff --git a/Eigen/src/Geometry/Rotation2D.h b/Eigen/src/Geometry/Rotation2D.h
index 515bd27..30f385f 100644
--- a/Eigen/src/Geometry/Rotation2D.h
+++ b/Eigen/src/Geometry/Rotation2D.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ROTATION2D_H
 #define EIGEN_ROTATION2D_H
diff --git a/Eigen/src/Geometry/RotationBase.h b/Eigen/src/Geometry/RotationBase.h
index 3a3a3e3..af90322 100644
--- a/Eigen/src/Geometry/RotationBase.h
+++ b/Eigen/src/Geometry/RotationBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ROTATIONBASE_H
 #define EIGEN_ROTATIONBASE_H
diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h
index 5bb7c45..6b0aab8 100644
--- a/Eigen/src/Geometry/Scaling.h
+++ b/Eigen/src/Geometry/Scaling.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SCALING_H
 #define EIGEN_SCALING_H
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h
index 987cc63..e4740d5 100644
--- a/Eigen/src/Geometry/Transform.h
+++ b/Eigen/src/Geometry/Transform.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRANSFORM_H
 #define EIGEN_TRANSFORM_H
diff --git a/Eigen/src/Geometry/Translation.h b/Eigen/src/Geometry/Translation.h
index d942ac8..3d2c91e 100644
--- a/Eigen/src/Geometry/Translation.h
+++ b/Eigen/src/Geometry/Translation.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRANSLATION_H
 #define EIGEN_TRANSLATION_H
diff --git a/Eigen/src/Geometry/Umeyama.h b/Eigen/src/Geometry/Umeyama.h
index 246986e..e679088 100644
--- a/Eigen/src/Geometry/Umeyama.h
+++ b/Eigen/src/Geometry/Umeyama.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_UMEYAMA_H
 #define EIGEN_UMEYAMA_H
diff --git a/Eigen/src/Geometry/arch/Geometry_SIMD.h b/Eigen/src/Geometry/arch/Geometry_SIMD.h
index 5601a47..25a2bde 100644
--- a/Eigen/src/Geometry/arch/Geometry_SIMD.h
+++ b/Eigen/src/Geometry/arch/Geometry_SIMD.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GEOMETRY_SIMD_H
 #define EIGEN_GEOMETRY_SIMD_H
diff --git a/Eigen/src/Householder/BlockHouseholder.h b/Eigen/src/Householder/BlockHouseholder.h
index faa5594..3ecf574 100644
--- a/Eigen/src/Householder/BlockHouseholder.h
+++ b/Eigen/src/Householder/BlockHouseholder.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BLOCK_HOUSEHOLDER_H
 #define EIGEN_BLOCK_HOUSEHOLDER_H
diff --git a/Eigen/src/Householder/Householder.h b/Eigen/src/Householder/Householder.h
index f77e54f..97a07af 100644
--- a/Eigen/src/Householder/Householder.h
+++ b/Eigen/src/Householder/Householder.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HOUSEHOLDER_H
 #define EIGEN_HOUSEHOLDER_H
diff --git a/Eigen/src/Householder/HouseholderSequence.h b/Eigen/src/Householder/HouseholderSequence.h
index d7eb477..1f87d0b 100644
--- a/Eigen/src/Householder/HouseholderSequence.h
+++ b/Eigen/src/Householder/HouseholderSequence.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_HOUSEHOLDER_SEQUENCE_H
 #define EIGEN_HOUSEHOLDER_SEQUENCE_H
diff --git a/Eigen/src/Householder/InternalHeaderCheck.h b/Eigen/src/Householder/InternalHeaderCheck.h
index 70de89b..88b8f28 100644
--- a/Eigen/src/Householder/InternalHeaderCheck.h
+++ b/Eigen/src/Householder/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_HOUSEHOLDER_MODULE_H
 #error "Please include Eigen/Householder instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
index d4a187e..3634b56 100644
--- a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
+++ b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BASIC_PRECONDITIONERS_H
 #define EIGEN_BASIC_PRECONDITIONERS_H
diff --git a/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h b/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
index fff86bc..24ad85b 100644
--- a/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
+++ b/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BICGSTAB_H
 #define EIGEN_BICGSTAB_H
diff --git a/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h b/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
index 9130a3c..6f441ca 100644
--- a/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
+++ b/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONJUGATE_GRADIENT_H
 #define EIGEN_CONJUGATE_GRADIENT_H
diff --git a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
index a426381..d637b43 100644
--- a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
+++ b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INCOMPLETE_CHOlESKY_H
 #define EIGEN_INCOMPLETE_CHOlESKY_H
diff --git a/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h b/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
index 5fbb5f2..d7b9a5d 100644
--- a/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
+++ b/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INCOMPLETE_LUT_H
 #define EIGEN_INCOMPLETE_LUT_H
diff --git a/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h b/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h
index b657e84..7b879d3 100644
--- a/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h
+++ b/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
 #error "Please include Eigen/IterativeLinearSolvers instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
index 5caa396..45d01ad 100644
--- a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
+++ b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ITERATIVE_SOLVER_BASE_H
 #define EIGEN_ITERATIVE_SOLVER_BASE_H
diff --git a/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h b/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
index b5fa4aa..ba15400 100644
--- a/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
+++ b/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LEAST_SQUARE_CONJUGATE_GRADIENT_H
 #define EIGEN_LEAST_SQUARE_CONJUGATE_GRADIENT_H
diff --git a/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h b/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
index 271679f..c524471 100644
--- a/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
+++ b/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SOLVEWITHGUESS_H
 #define EIGEN_SOLVEWITHGUESS_H
diff --git a/Eigen/src/Jacobi/InternalHeaderCheck.h b/Eigen/src/Jacobi/InternalHeaderCheck.h
index b17b1f2..c5c4636 100644
--- a/Eigen/src/Jacobi/InternalHeaderCheck.h
+++ b/Eigen/src/Jacobi/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_JACOBI_MODULE_H
 #error "Please include Eigen/Jacobi instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/Jacobi/Jacobi.h b/Eigen/src/Jacobi/Jacobi.h
index f24a851..a473412 100644
--- a/Eigen/src/Jacobi/Jacobi.h
+++ b/Eigen/src/Jacobi/Jacobi.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_JACOBI_H
 #define EIGEN_JACOBI_H
diff --git a/Eigen/src/KLUSupport/InternalHeaderCheck.h b/Eigen/src/KLUSupport/InternalHeaderCheck.h
index eb1d671..5c6a260 100644
--- a/Eigen/src/KLUSupport/InternalHeaderCheck.h
+++ b/Eigen/src/KLUSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_KLUSUPPORT_MODULE_H
 #error "Please include Eigen/KLUSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/KLUSupport/KLUSupport.h b/Eigen/src/KLUSupport/KLUSupport.h
index f07ad8d..e2ee336 100644
--- a/Eigen/src/KLUSupport/KLUSupport.h
+++ b/Eigen/src/KLUSupport/KLUSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_KLUSUPPORT_H
 #define EIGEN_KLUSUPPORT_H
diff --git a/Eigen/src/LU/Determinant.h b/Eigen/src/LU/Determinant.h
index 0427c01..9ee56c6 100644
--- a/Eigen/src/LU/Determinant.h
+++ b/Eigen/src/LU/Determinant.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DETERMINANT_H
 #define EIGEN_DETERMINANT_H
diff --git a/Eigen/src/LU/FullPivLU.h b/Eigen/src/LU/FullPivLU.h
index 098b16f..2f862da 100644
--- a/Eigen/src/LU/FullPivLU.h
+++ b/Eigen/src/LU/FullPivLU.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LU_H
 #define EIGEN_LU_H
diff --git a/Eigen/src/LU/InternalHeaderCheck.h b/Eigen/src/LU/InternalHeaderCheck.h
index f346b17..fb4d80c 100644
--- a/Eigen/src/LU/InternalHeaderCheck.h
+++ b/Eigen/src/LU/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_LU_MODULE_H
 #error "Please include Eigen/LU instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/LU/InverseImpl.h b/Eigen/src/LU/InverseImpl.h
index 58ac305..0edb1ac 100644
--- a/Eigen/src/LU/InverseImpl.h
+++ b/Eigen/src/LU/InverseImpl.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INVERSE_IMPL_H
 #define EIGEN_INVERSE_IMPL_H
diff --git a/Eigen/src/LU/PartialPivLU.h b/Eigen/src/LU/PartialPivLU.h
index 5a22051..517cbb8 100644
--- a/Eigen/src/LU/PartialPivLU.h
+++ b/Eigen/src/LU/PartialPivLU.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARTIALLU_H
 #define EIGEN_PARTIALLU_H
diff --git a/Eigen/src/LU/PartialPivLU_LAPACKE.h b/Eigen/src/LU/PartialPivLU_LAPACKE.h
index 086c3c3..dc5fbf4 100644
--- a/Eigen/src/LU/PartialPivLU_LAPACKE.h
+++ b/Eigen/src/LU/PartialPivLU_LAPACKE.h
@@ -29,6 +29,7 @@
  *     LU decomposition with partial pivoting based on LAPACKE_?getrf function.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_PARTIALLU_LAPACK_H
 #define EIGEN_PARTIALLU_LAPACK_H
diff --git a/Eigen/src/LU/arch/InverseSize4.h b/Eigen/src/LU/arch/InverseSize4.h
index 29c9b03..94c8042 100644
--- a/Eigen/src/LU/arch/InverseSize4.h
+++ b/Eigen/src/LU/arch/InverseSize4.h
@@ -32,6 +32,7 @@
 // See LEGAL.TXT for all the legal information.
 //
 // TODO: Unify implementations of different data types (i.e. float and double).
+// SPDX-License-Identifier: MPL-2.0
 #ifndef EIGEN_INVERSE_SIZE_4_H
 #define EIGEN_INVERSE_SIZE_4_H
 
diff --git a/Eigen/src/MetisSupport/InternalHeaderCheck.h b/Eigen/src/MetisSupport/InternalHeaderCheck.h
index 9d34825..0d5e620 100644
--- a/Eigen/src/MetisSupport/InternalHeaderCheck.h
+++ b/Eigen/src/MetisSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_METISSUPPORT_MODULE_H
 #error "Please include Eigen/MetisSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/MetisSupport/MetisSupport.h b/Eigen/src/MetisSupport/MetisSupport.h
index 961c840..f2364b8 100644
--- a/Eigen/src/MetisSupport/MetisSupport.h
+++ b/Eigen/src/MetisSupport/MetisSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #ifndef METIS_SUPPORT_H
 #define METIS_SUPPORT_H
 
diff --git a/Eigen/src/OrderingMethods/Amd.h b/Eigen/src/OrderingMethods/Amd.h
index 0b0bf02..4e7d695 100644
--- a/Eigen/src/OrderingMethods/Amd.h
+++ b/Eigen/src/OrderingMethods/Amd.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 NOTE: this routine has been adapted from the CSparse library:
diff --git a/Eigen/src/OrderingMethods/Eigen_Colamd.h b/Eigen/src/OrderingMethods/Eigen_Colamd.h
index 02be282..df52623 100644
--- a/Eigen/src/OrderingMethods/Eigen_Colamd.h
+++ b/Eigen/src/OrderingMethods/Eigen_Colamd.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is modified from the colamd/symamd library. The copyright is below
 
diff --git a/Eigen/src/OrderingMethods/InternalHeaderCheck.h b/Eigen/src/OrderingMethods/InternalHeaderCheck.h
index 713c447..b2357da 100644
--- a/Eigen/src/OrderingMethods/InternalHeaderCheck.h
+++ b/Eigen/src/OrderingMethods/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_ORDERINGMETHODS_MODULE_H
 #error "Please include Eigen/OrderingMethods instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/OrderingMethods/Ordering.h b/Eigen/src/OrderingMethods/Ordering.h
index 7ed4ec7..c56f862 100644
--- a/Eigen/src/OrderingMethods/Ordering.h
+++ b/Eigen/src/OrderingMethods/Ordering.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/Eigen/src/PaStiXSupport/InternalHeaderCheck.h b/Eigen/src/PaStiXSupport/InternalHeaderCheck.h
index f588e50..5365e09 100644
--- a/Eigen/src/PaStiXSupport/InternalHeaderCheck.h
+++ b/Eigen/src/PaStiXSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_PASTIXSUPPORT_MODULE_H
 #error "Please include Eigen/PaStiXSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/PaStiXSupport/PaStiXSupport.h b/Eigen/src/PaStiXSupport/PaStiXSupport.h
index fb75133..be4ec84 100644
--- a/Eigen/src/PaStiXSupport/PaStiXSupport.h
+++ b/Eigen/src/PaStiXSupport/PaStiXSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PASTIXSUPPORT_H
 #define EIGEN_PASTIXSUPPORT_H
diff --git a/Eigen/src/PardisoSupport/InternalHeaderCheck.h b/Eigen/src/PardisoSupport/InternalHeaderCheck.h
index 8ef33f0..bd5c3bd 100644
--- a/Eigen/src/PardisoSupport/InternalHeaderCheck.h
+++ b/Eigen/src/PardisoSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_PARDISOSUPPORT_MODULE_H
 #error "Please include Eigen/PardisoSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/PardisoSupport/PardisoSupport.h b/Eigen/src/PardisoSupport/PardisoSupport.h
index 90df3cd..9b2b6f5 100644
--- a/Eigen/src/PardisoSupport/PardisoSupport.h
+++ b/Eigen/src/PardisoSupport/PardisoSupport.h
@@ -28,6 +28,7 @@
  *   Content : Eigen bindings to Intel(R) MKL PARDISO
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_PARDISOSUPPORT_H
 #define EIGEN_PARDISOSUPPORT_H
diff --git a/Eigen/src/QR/ColPivHouseholderQR.h b/Eigen/src/QR/ColPivHouseholderQR.h
index 7386564..1d33eaa 100644
--- a/Eigen/src/QR/ColPivHouseholderQR.h
+++ b/Eigen/src/QR/ColPivHouseholderQR.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
 #define EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
diff --git a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
index 881bc3c..e629a43 100644
--- a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
+++ b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
@@ -30,6 +30,7 @@
  *    LAPACKE_?geqp3 function.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_LAPACKE_H
 #define EIGEN_COLPIVOTINGHOUSEHOLDERQR_LAPACKE_H
diff --git a/Eigen/src/QR/CompleteOrthogonalDecomposition.h b/Eigen/src/QR/CompleteOrthogonalDecomposition.h
index 3a5be59..f951d6a 100644
--- a/Eigen/src/QR/CompleteOrthogonalDecomposition.h
+++ b/Eigen/src/QR/CompleteOrthogonalDecomposition.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
 #define EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
diff --git a/Eigen/src/QR/FullPivHouseholderQR.h b/Eigen/src/QR/FullPivHouseholderQR.h
index 547bad0..ff8d236 100644
--- a/Eigen/src/QR/FullPivHouseholderQR.h
+++ b/Eigen/src/QR/FullPivHouseholderQR.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
 #define EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
diff --git a/Eigen/src/QR/HouseholderQR.h b/Eigen/src/QR/HouseholderQR.h
index c65c288..66feb4d 100644
--- a/Eigen/src/QR/HouseholderQR.h
+++ b/Eigen/src/QR/HouseholderQR.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_QR_H
 #define EIGEN_QR_H
diff --git a/Eigen/src/QR/HouseholderQR_LAPACKE.h b/Eigen/src/QR/HouseholderQR_LAPACKE.h
index 3b62175..0500bec 100644
--- a/Eigen/src/QR/HouseholderQR_LAPACKE.h
+++ b/Eigen/src/QR/HouseholderQR_LAPACKE.h
@@ -30,6 +30,7 @@
  *    LAPACKE_?geqrf function.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_QR_LAPACKE_H
 #define EIGEN_QR_LAPACKE_H
diff --git a/Eigen/src/QR/InternalHeaderCheck.h b/Eigen/src/QR/InternalHeaderCheck.h
index bf8df01..572b7c4 100644
--- a/Eigen/src/QR/InternalHeaderCheck.h
+++ b/Eigen/src/QR/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_QR_MODULE_H
 #error "Please include Eigen/QR instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SPQRSupport/InternalHeaderCheck.h b/Eigen/src/SPQRSupport/InternalHeaderCheck.h
index 8d94ba4..c24d790 100644
--- a/Eigen/src/SPQRSupport/InternalHeaderCheck.h
+++ b/Eigen/src/SPQRSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPQRSUPPORT_MODULE_H
 #error "Please include Eigen/SPQRSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h b/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
index 99598f5..389b145 100644
--- a/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
+++ b/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SUITESPARSEQRSUPPORT_H
 #define EIGEN_SUITESPARSEQRSUPPORT_H
diff --git a/Eigen/src/SVD/BDCSVD.h b/Eigen/src/SVD/BDCSVD.h
index 2a8499a..e9e675c 100644
--- a/Eigen/src/SVD/BDCSVD.h
+++ b/Eigen/src/SVD/BDCSVD.h
@@ -16,6 +16,7 @@
 // Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BDCSVD_H
 #define EIGEN_BDCSVD_H
diff --git a/Eigen/src/SVD/BDCSVDImpl.h b/Eigen/src/SVD/BDCSVDImpl.h
index 19444e1..333b7d2 100644
--- a/Eigen/src/SVD/BDCSVDImpl.h
+++ b/Eigen/src/SVD/BDCSVDImpl.h
@@ -16,6 +16,7 @@
 // Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BDCSVD_IMPL_H
 #define EIGEN_BDCSVD_IMPL_H
diff --git a/Eigen/src/SVD/BDCSVD_LAPACKE.h b/Eigen/src/SVD/BDCSVD_LAPACKE.h
index 5d2b8c7..bcd6bac 100644
--- a/Eigen/src/SVD/BDCSVD_LAPACKE.h
+++ b/Eigen/src/SVD/BDCSVD_LAPACKE.h
@@ -6,6 +6,7 @@
 //
 // This file is based on the JacobiSVD_LAPACKE.h originally from Intel -
 // see license notice below:
+// SPDX-License-Identifier: BSD-3-Clause
 /*
  Redistribution and use in source and binary forms, with or without modification,
  are permitted provided that the following conditions are met:
diff --git a/Eigen/src/SVD/InternalHeaderCheck.h b/Eigen/src/SVD/InternalHeaderCheck.h
index fa67b96..b0d0069 100644
--- a/Eigen/src/SVD/InternalHeaderCheck.h
+++ b/Eigen/src/SVD/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SVD_MODULE_H
 #error "Please include Eigen/SVD instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SVD/JacobiSVD.h b/Eigen/src/SVD/JacobiSVD.h
index fd0275c..92cf4d7 100644
--- a/Eigen/src/SVD/JacobiSVD.h
+++ b/Eigen/src/SVD/JacobiSVD.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_JACOBISVD_H
 #define EIGEN_JACOBISVD_H
diff --git a/Eigen/src/SVD/JacobiSVD_LAPACKE.h b/Eigen/src/SVD/JacobiSVD_LAPACKE.h
index db26366..d51f04a 100644
--- a/Eigen/src/SVD/JacobiSVD_LAPACKE.h
+++ b/Eigen/src/SVD/JacobiSVD_LAPACKE.h
@@ -29,6 +29,7 @@
  *    Singular Value Decomposition - SVD.
  ********************************************************************************
 */
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef EIGEN_JACOBISVD_LAPACKE_H
 #define EIGEN_JACOBISVD_LAPACKE_H
diff --git a/Eigen/src/SVD/SVDBase.h b/Eigen/src/SVD/SVDBase.h
index c34bf0d..6958293 100644
--- a/Eigen/src/SVD/SVDBase.h
+++ b/Eigen/src/SVD/SVDBase.h
@@ -12,6 +12,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SVDBASE_H
 #define EIGEN_SVDBASE_H
diff --git a/Eigen/src/SVD/UpperBidiagonalization.h b/Eigen/src/SVD/UpperBidiagonalization.h
index 12ecc05..64f4ed1 100644
--- a/Eigen/src/SVD/UpperBidiagonalization.h
+++ b/Eigen/src/SVD/UpperBidiagonalization.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BIDIAGONALIZATION_H
 #define EIGEN_BIDIAGONALIZATION_H
diff --git a/Eigen/src/SparseCholesky/InternalHeaderCheck.h b/Eigen/src/SparseCholesky/InternalHeaderCheck.h
index f8d8762..39ecbde 100644
--- a/Eigen/src/SparseCholesky/InternalHeaderCheck.h
+++ b/Eigen/src/SparseCholesky/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPARSECHOLESKY_MODULE_H
 #error "Please include Eigen/SparseCholesky instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SparseCholesky/SimplicialCholesky.h b/Eigen/src/SparseCholesky/SimplicialCholesky.h
index e91c3be..0f201b0 100644
--- a/Eigen/src/SparseCholesky/SimplicialCholesky.h
+++ b/Eigen/src/SparseCholesky/SimplicialCholesky.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SIMPLICIAL_CHOLESKY_H
 #define EIGEN_SIMPLICIAL_CHOLESKY_H
diff --git a/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h b/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
index cd61f65..ee355ee 100644
--- a/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
+++ b/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 NOTE: these functions have been adapted from the LDL library:
diff --git a/Eigen/src/SparseCore/AmbiVector.h b/Eigen/src/SparseCore/AmbiVector.h
index 99c896a..1c2ce14 100644
--- a/Eigen/src/SparseCore/AmbiVector.h
+++ b/Eigen/src/SparseCore/AmbiVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AMBIVECTOR_H
 #define EIGEN_AMBIVECTOR_H
diff --git a/Eigen/src/SparseCore/CompressedStorage.h b/Eigen/src/SparseCore/CompressedStorage.h
index 30bd8ad..b7663b1 100644
--- a/Eigen/src/SparseCore/CompressedStorage.h
+++ b/Eigen/src/SparseCore/CompressedStorage.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPRESSED_STORAGE_H
 #define EIGEN_COMPRESSED_STORAGE_H
diff --git a/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h b/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
index 1753c4a..aac4118 100644
--- a/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
+++ b/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
 #define EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
diff --git a/Eigen/src/SparseCore/InternalHeaderCheck.h b/Eigen/src/SparseCore/InternalHeaderCheck.h
index 9de5936..3287287 100644
--- a/Eigen/src/SparseCore/InternalHeaderCheck.h
+++ b/Eigen/src/SparseCore/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPARSECORE_MODULE_H
 #error "Please include Eigen/SparseCore instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SparseCore/SparseAssign.h b/Eigen/src/SparseCore/SparseAssign.h
index b794263..2852ebb 100644
--- a/Eigen/src/SparseCore/SparseAssign.h
+++ b/Eigen/src/SparseCore/SparseAssign.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEASSIGN_H
 #define EIGEN_SPARSEASSIGN_H
diff --git a/Eigen/src/SparseCore/SparseBlock.h b/Eigen/src/SparseCore/SparseBlock.h
index 707bf7c..f17632e 100644
--- a/Eigen/src/SparseCore/SparseBlock.h
+++ b/Eigen/src/SparseCore/SparseBlock.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_BLOCK_H
 #define EIGEN_SPARSE_BLOCK_H
diff --git a/Eigen/src/SparseCore/SparseColEtree.h b/Eigen/src/SparseCore/SparseColEtree.h
index 76575c9..011b3f0 100644
--- a/Eigen/src/SparseCore/SparseColEtree.h
+++ b/Eigen/src/SparseCore/SparseColEtree.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseCore/SparseCompressedBase.h b/Eigen/src/SparseCore/SparseCompressedBase.h
index 37a2306..9f22437 100644
--- a/Eigen/src/SparseCore/SparseCompressedBase.h
+++ b/Eigen/src/SparseCore/SparseCompressedBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_COMPRESSED_BASE_H
 #define EIGEN_SPARSE_COMPRESSED_BASE_H
diff --git a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
index b931941..1505c26 100644
--- a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
+++ b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_CWISE_BINARY_OP_H
 #define EIGEN_SPARSE_CWISE_BINARY_OP_H
diff --git a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
index 9fc1e66..984c7a5 100644
--- a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
+++ b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_CWISE_UNARY_OP_H
 #define EIGEN_SPARSE_CWISE_UNARY_OP_H
diff --git a/Eigen/src/SparseCore/SparseDenseProduct.h b/Eigen/src/SparseCore/SparseDenseProduct.h
index 5c9d7ae..b02d4f7 100644
--- a/Eigen/src/SparseCore/SparseDenseProduct.h
+++ b/Eigen/src/SparseCore/SparseDenseProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEDENSEPRODUCT_H
 #define EIGEN_SPARSEDENSEPRODUCT_H
diff --git a/Eigen/src/SparseCore/SparseDiagonalProduct.h b/Eigen/src/SparseCore/SparseDiagonalProduct.h
index ae6f054..0eec027 100644
--- a/Eigen/src/SparseCore/SparseDiagonalProduct.h
+++ b/Eigen/src/SparseCore/SparseDiagonalProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_DIAGONAL_PRODUCT_H
 #define EIGEN_SPARSE_DIAGONAL_PRODUCT_H
diff --git a/Eigen/src/SparseCore/SparseDot.h b/Eigen/src/SparseCore/SparseDot.h
index 485605f..d3c9c80 100644
--- a/Eigen/src/SparseCore/SparseDot.h
+++ b/Eigen/src/SparseCore/SparseDot.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_DOT_H
 #define EIGEN_SPARSE_DOT_H
diff --git a/Eigen/src/SparseCore/SparseFuzzy.h b/Eigen/src/SparseCore/SparseFuzzy.h
index 2285845..5701778 100644
--- a/Eigen/src/SparseCore/SparseFuzzy.h
+++ b/Eigen/src/SparseCore/SparseFuzzy.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_FUZZY_H
 #define EIGEN_SPARSE_FUZZY_H
diff --git a/Eigen/src/SparseCore/SparseMap.h b/Eigen/src/SparseCore/SparseMap.h
index 79b464c..ab23cd5 100644
--- a/Eigen/src/SparseCore/SparseMap.h
+++ b/Eigen/src/SparseCore/SparseMap.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_MAP_H
 #define EIGEN_SPARSE_MAP_H
diff --git a/Eigen/src/SparseCore/SparseMatrix.h b/Eigen/src/SparseCore/SparseMatrix.h
index f04e989..4634639 100644
--- a/Eigen/src/SparseCore/SparseMatrix.h
+++ b/Eigen/src/SparseCore/SparseMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEMATRIX_H
 #define EIGEN_SPARSEMATRIX_H
diff --git a/Eigen/src/SparseCore/SparseMatrixBase.h b/Eigen/src/SparseCore/SparseMatrixBase.h
index 514107e..3aa6fec 100644
--- a/Eigen/src/SparseCore/SparseMatrixBase.h
+++ b/Eigen/src/SparseCore/SparseMatrixBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEMATRIXBASE_H
 #define EIGEN_SPARSEMATRIXBASE_H
diff --git a/Eigen/src/SparseCore/SparsePermutation.h b/Eigen/src/SparseCore/SparsePermutation.h
index 3fb3705..d5ec2f7 100644
--- a/Eigen/src/SparseCore/SparsePermutation.h
+++ b/Eigen/src/SparseCore/SparsePermutation.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_PERMUTATION_H
 #define EIGEN_SPARSE_PERMUTATION_H
diff --git a/Eigen/src/SparseCore/SparseProduct.h b/Eigen/src/SparseCore/SparseProduct.h
index 249dabc..5c5a3fc 100644
--- a/Eigen/src/SparseCore/SparseProduct.h
+++ b/Eigen/src/SparseCore/SparseProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEPRODUCT_H
 #define EIGEN_SPARSEPRODUCT_H
diff --git a/Eigen/src/SparseCore/SparseRedux.h b/Eigen/src/SparseCore/SparseRedux.h
index 732e4f7..c9fcaeb 100644
--- a/Eigen/src/SparseCore/SparseRedux.h
+++ b/Eigen/src/SparseCore/SparseRedux.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEREDUX_H
 #define EIGEN_SPARSEREDUX_H
diff --git a/Eigen/src/SparseCore/SparseRef.h b/Eigen/src/SparseCore/SparseRef.h
index 29cdda1..ef773a5 100644
--- a/Eigen/src/SparseCore/SparseRef.h
+++ b/Eigen/src/SparseCore/SparseRef.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_REF_H
 #define EIGEN_SPARSE_REF_H
diff --git a/Eigen/src/SparseCore/SparseSelfAdjointView.h b/Eigen/src/SparseCore/SparseSelfAdjointView.h
index 55326e9..d62cdd4 100644
--- a/Eigen/src/SparseCore/SparseSelfAdjointView.h
+++ b/Eigen/src/SparseCore/SparseSelfAdjointView.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_SELFADJOINTVIEW_H
 #define EIGEN_SPARSE_SELFADJOINTVIEW_H
diff --git a/Eigen/src/SparseCore/SparseSolverBase.h b/Eigen/src/SparseCore/SparseSolverBase.h
index a1ed4ba..01ab67d 100644
--- a/Eigen/src/SparseCore/SparseSolverBase.h
+++ b/Eigen/src/SparseCore/SparseSolverBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSESOLVERBASE_H
 #define EIGEN_SPARSESOLVERBASE_H
diff --git a/Eigen/src/SparseCore/SparseSparseProductWithPruning.h b/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
index 41e5261..13bb5d9 100644
--- a/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
+++ b/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
 #define EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
diff --git a/Eigen/src/SparseCore/SparseTranspose.h b/Eigen/src/SparseCore/SparseTranspose.h
index 158f778..78cf9ca 100644
--- a/Eigen/src/SparseCore/SparseTranspose.h
+++ b/Eigen/src/SparseCore/SparseTranspose.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSETRANSPOSE_H
 #define EIGEN_SPARSETRANSPOSE_H
diff --git a/Eigen/src/SparseCore/SparseTriangularView.h b/Eigen/src/SparseCore/SparseTriangularView.h
index c98ef0f..eb897f6 100644
--- a/Eigen/src/SparseCore/SparseTriangularView.h
+++ b/Eigen/src/SparseCore/SparseTriangularView.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_TRIANGULARVIEW_H
 #define EIGEN_SPARSE_TRIANGULARVIEW_H
diff --git a/Eigen/src/SparseCore/SparseUtil.h b/Eigen/src/SparseCore/SparseUtil.h
index 8eedd54..c532a68 100644
--- a/Eigen/src/SparseCore/SparseUtil.h
+++ b/Eigen/src/SparseCore/SparseUtil.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEUTIL_H
 #define EIGEN_SPARSEUTIL_H
diff --git a/Eigen/src/SparseCore/SparseVector.h b/Eigen/src/SparseCore/SparseVector.h
index a1b89af..7dc94d3 100644
--- a/Eigen/src/SparseCore/SparseVector.h
+++ b/Eigen/src/SparseCore/SparseVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEVECTOR_H
 #define EIGEN_SPARSEVECTOR_H
diff --git a/Eigen/src/SparseCore/SparseView.h b/Eigen/src/SparseCore/SparseView.h
index d566898..46d4068 100644
--- a/Eigen/src/SparseCore/SparseView.h
+++ b/Eigen/src/SparseCore/SparseView.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEVIEW_H
 #define EIGEN_SPARSEVIEW_H
diff --git a/Eigen/src/SparseCore/SparsityPatternRef.h b/Eigen/src/SparseCore/SparsityPatternRef.h
index 110f557..4976828 100644
--- a/Eigen/src/SparseCore/SparsityPatternRef.h
+++ b/Eigen/src/SparseCore/SparsityPatternRef.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSITY_PATTERN_REF_H
 #define EIGEN_SPARSITY_PATTERN_REF_H
diff --git a/Eigen/src/SparseCore/TriangularSolver.h b/Eigen/src/SparseCore/TriangularSolver.h
index f43f0c8..b68d997 100644
--- a/Eigen/src/SparseCore/TriangularSolver.h
+++ b/Eigen/src/SparseCore/TriangularSolver.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSETRIANGULARSOLVER_H
 #define EIGEN_SPARSETRIANGULARSOLVER_H
diff --git a/Eigen/src/SparseLU/InternalHeaderCheck.h b/Eigen/src/SparseLU/InternalHeaderCheck.h
index 78ebfcc..e8334bb 100644
--- a/Eigen/src/SparseLU/InternalHeaderCheck.h
+++ b/Eigen/src/SparseLU/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPARSELU_MODULE_H
 #error "Please include Eigen/SparseLU instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SparseLU/SparseLU.h b/Eigen/src/SparseLU/SparseLU.h
index c9fcaa0..2c7063b 100644
--- a/Eigen/src/SparseLU/SparseLU.h
+++ b/Eigen/src/SparseLU/SparseLU.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_LU_H
 #define EIGEN_SPARSE_LU_H
diff --git a/Eigen/src/SparseLU/SparseLUImpl.h b/Eigen/src/SparseLU/SparseLUImpl.h
index 96b9c65..11817c1 100644
--- a/Eigen/src/SparseLU/SparseLUImpl.h
+++ b/Eigen/src/SparseLU/SparseLUImpl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #ifndef SPARSELU_IMPL_H
 #define SPARSELU_IMPL_H
 
diff --git a/Eigen/src/SparseLU/SparseLU_Memory.h b/Eigen/src/SparseLU/SparseLU_Memory.h
index 7acfa5c..ed83e09 100644
--- a/Eigen/src/SparseLU/SparseLU_Memory.h
+++ b/Eigen/src/SparseLU/SparseLU_Memory.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_Structs.h b/Eigen/src/SparseLU/SparseLU_Structs.h
index 85ba884..6a1cdf0 100644
--- a/Eigen/src/SparseLU/SparseLU_Structs.h
+++ b/Eigen/src/SparseLU/SparseLU_Structs.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
  * NOTE: This file comes from a partly modified version of files slu_[s,d,c,z]defs.h
diff --git a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
index 98b7348..6513c8a 100644
--- a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
+++ b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
 #define EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
diff --git a/Eigen/src/SparseLU/SparseLU_Utils.h b/Eigen/src/SparseLU/SparseLU_Utils.h
index ef087cd..d4585a3 100644
--- a/Eigen/src/SparseLU/SparseLU_Utils.h
+++ b/Eigen/src/SparseLU/SparseLU_Utils.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSELU_UTILS_H
 #define EIGEN_SPARSELU_UTILS_H
diff --git a/Eigen/src/SparseLU/SparseLU_column_bmod.h b/Eigen/src/SparseLU/SparseLU_column_bmod.h
index 014ffc2..0ecf65d 100644
--- a/Eigen/src/SparseLU/SparseLU_column_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_column_bmod.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_column_dfs.h b/Eigen/src/SparseLU/SparseLU_column_dfs.h
index 71a9ff4..7f43f7e 100644
--- a/Eigen/src/SparseLU/SparseLU_column_dfs.h
+++ b/Eigen/src/SparseLU/SparseLU_column_dfs.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
index 12e7650..e2fc0e6 100644
--- a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
+++ b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 /*
 
  * NOTE: This file is the modified version of [s,d,c,z]copy_to_ucol.c file in SuperLU
diff --git a/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h b/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
index 86080e4..0c9dde4 100644
--- a/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
+++ b/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* This file is a modified version of heap_relax_snode.c file in SuperLU
  * -- SuperLU routine (version 3.0) --
diff --git a/Eigen/src/SparseLU/SparseLU_kernel_bmod.h b/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
index 54bda0c..c1a2d75 100644
--- a/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef SPARSELU_KERNEL_BMOD_H
 #define SPARSELU_KERNEL_BMOD_H
diff --git a/Eigen/src/SparseLU/SparseLU_panel_bmod.h b/Eigen/src/SparseLU/SparseLU_panel_bmod.h
index 397ad8c..c8db83f 100644
--- a/Eigen/src/SparseLU/SparseLU_panel_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_panel_bmod.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_panel_dfs.h b/Eigen/src/SparseLU/SparseLU_panel_dfs.h
index 4412396..8342103 100644
--- a/Eigen/src/SparseLU/SparseLU_panel_dfs.h
+++ b/Eigen/src/SparseLU/SparseLU_panel_dfs.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_pivotL.h b/Eigen/src/SparseLU/SparseLU_pivotL.h
index 10a090b..e27dae1 100644
--- a/Eigen/src/SparseLU/SparseLU_pivotL.h
+++ b/Eigen/src/SparseLU/SparseLU_pivotL.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_pruneL.h b/Eigen/src/SparseLU/SparseLU_pruneL.h
index 620f285..58d7108 100644
--- a/Eigen/src/SparseLU/SparseLU_pruneL.h
+++ b/Eigen/src/SparseLU/SparseLU_pruneL.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/Eigen/src/SparseLU/SparseLU_relax_snode.h b/Eigen/src/SparseLU/SparseLU_relax_snode.h
index df3869e..69dd53a 100644
--- a/Eigen/src/SparseLU/SparseLU_relax_snode.h
+++ b/Eigen/src/SparseLU/SparseLU_relax_snode.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /* This file is a modified version of heap_relax_snode.c file in SuperLU
  * -- SuperLU routine (version 3.0) --
diff --git a/Eigen/src/SparseQR/InternalHeaderCheck.h b/Eigen/src/SparseQR/InternalHeaderCheck.h
index 0564e93..38a3f61 100644
--- a/Eigen/src/SparseQR/InternalHeaderCheck.h
+++ b/Eigen/src/SparseQR/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPARSEQR_MODULE_H
 #error "Please include Eigen/SparseQR instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SparseQR/SparseQR.h b/Eigen/src/SparseQR/SparseQR.h
index a866595..027cfd7 100644
--- a/Eigen/src/SparseQR/SparseQR.h
+++ b/Eigen/src/SparseQR/SparseQR.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_QR_H
 #define EIGEN_SPARSE_QR_H
diff --git a/Eigen/src/StlSupport/StdDeque.h b/Eigen/src/StlSupport/StdDeque.h
index 692281b..df2b5cd 100644
--- a/Eigen/src/StlSupport/StdDeque.h
+++ b/Eigen/src/StlSupport/StdDeque.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDDEQUE_H
 #define EIGEN_STDDEQUE_H
diff --git a/Eigen/src/StlSupport/StdList.h b/Eigen/src/StlSupport/StdList.h
index 26395df..46f3bb1 100644
--- a/Eigen/src/StlSupport/StdList.h
+++ b/Eigen/src/StlSupport/StdList.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDLIST_H
 #define EIGEN_STDLIST_H
diff --git a/Eigen/src/StlSupport/StdVector.h b/Eigen/src/StlSupport/StdVector.h
index dd538e9..1b8b44f 100644
--- a/Eigen/src/StlSupport/StdVector.h
+++ b/Eigen/src/StlSupport/StdVector.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STDVECTOR_H
 #define EIGEN_STDVECTOR_H
diff --git a/Eigen/src/StlSupport/details.h b/Eigen/src/StlSupport/details.h
index 9bc9d21..9e47fb6 100644
--- a/Eigen/src/StlSupport/details.h
+++ b/Eigen/src/StlSupport/details.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STL_DETAILS_H
 #define EIGEN_STL_DETAILS_H
diff --git a/Eigen/src/SuperLUSupport/InternalHeaderCheck.h b/Eigen/src/SuperLUSupport/InternalHeaderCheck.h
index 94a62b5..36af590 100644
--- a/Eigen/src/SuperLUSupport/InternalHeaderCheck.h
+++ b/Eigen/src/SuperLUSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
 #error "Please include Eigen/SuperLUSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/SuperLUSupport/SuperLUSupport.h b/Eigen/src/SuperLUSupport/SuperLUSupport.h
index bed414b..5f5343f 100644
--- a/Eigen/src/SuperLUSupport/SuperLUSupport.h
+++ b/Eigen/src/SuperLUSupport/SuperLUSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SUPERLUSUPPORT_H
 #define EIGEN_SUPERLUSUPPORT_H
diff --git a/Eigen/src/ThreadPool/Barrier.h b/Eigen/src/ThreadPool/Barrier.h
index be530d0..2098239 100644
--- a/Eigen/src/ThreadPool/Barrier.h
+++ b/Eigen/src/ThreadPool/Barrier.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Barrier is an object that allows one or more threads to wait until
 // Notify has been called a specified number of times.
diff --git a/Eigen/src/ThreadPool/CoreThreadPoolDevice.h b/Eigen/src/ThreadPool/CoreThreadPoolDevice.h
index c603a38..dd9dbb8 100644
--- a/Eigen/src/ThreadPool/CoreThreadPoolDevice.h
+++ b/Eigen/src/ThreadPool/CoreThreadPoolDevice.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CORE_THREAD_POOL_DEVICE_H
 #define EIGEN_CORE_THREAD_POOL_DEVICE_H
diff --git a/Eigen/src/ThreadPool/EventCount.h b/Eigen/src/ThreadPool/EventCount.h
index 6eda6f4..8c82843 100644
--- a/Eigen/src/ThreadPool/EventCount.h
+++ b/Eigen/src/ThreadPool/EventCount.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_EVENTCOUNT_H
 #define EIGEN_CXX11_THREADPOOL_EVENTCOUNT_H
diff --git a/Eigen/src/ThreadPool/ForkJoin.h b/Eigen/src/ThreadPool/ForkJoin.h
index 588636a..e7f233b 100644
--- a/Eigen/src/ThreadPool/ForkJoin.h
+++ b/Eigen/src/ThreadPool/ForkJoin.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_THREADPOOL_FORKJOIN_H
 #define EIGEN_THREADPOOL_FORKJOIN_H
diff --git a/Eigen/src/ThreadPool/InternalHeaderCheck.h b/Eigen/src/ThreadPool/InternalHeaderCheck.h
index 4384cc6..a3f9a32 100644
--- a/Eigen/src/ThreadPool/InternalHeaderCheck.h
+++ b/Eigen/src/ThreadPool/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_THREADPOOL_MODULE_H
 #error "Please include Eigen/ThreadPool instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/ThreadPool/NonBlockingThreadPool.h b/Eigen/src/ThreadPool/NonBlockingThreadPool.h
index a9f0beb..e28b631 100644
--- a/Eigen/src/ThreadPool/NonBlockingThreadPool.h
+++ b/Eigen/src/ThreadPool/NonBlockingThreadPool.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_NONBLOCKING_THREAD_POOL_H
 #define EIGEN_CXX11_THREADPOOL_NONBLOCKING_THREAD_POOL_H
diff --git a/Eigen/src/ThreadPool/RunQueue.h b/Eigen/src/ThreadPool/RunQueue.h
index e419ae7..6ca3c6a 100644
--- a/Eigen/src/ThreadPool/RunQueue.h
+++ b/Eigen/src/ThreadPool/RunQueue.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_RUNQUEUE_H
 #define EIGEN_CXX11_THREADPOOL_RUNQUEUE_H
diff --git a/Eigen/src/ThreadPool/ThreadCancel.h b/Eigen/src/ThreadPool/ThreadCancel.h
index 6f4dc67..321ed9e 100644
--- a/Eigen/src/ThreadPool/ThreadCancel.h
+++ b/Eigen/src/ThreadPool/ThreadCancel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_THREAD_CANCEL_H
 #define EIGEN_CXX11_THREADPOOL_THREAD_CANCEL_H
diff --git a/Eigen/src/ThreadPool/ThreadEnvironment.h b/Eigen/src/ThreadPool/ThreadEnvironment.h
index b4dd05c..db527cd 100644
--- a/Eigen/src/ThreadPool/ThreadEnvironment.h
+++ b/Eigen/src/ThreadPool/ThreadEnvironment.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H
 #define EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H
diff --git a/Eigen/src/ThreadPool/ThreadLocal.h b/Eigen/src/ThreadPool/ThreadLocal.h
index 7e55b08..7c2ccd3 100644
--- a/Eigen/src/ThreadPool/ThreadLocal.h
+++ b/Eigen/src/ThreadPool/ThreadLocal.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_THREAD_LOCAL_H
 #define EIGEN_CXX11_THREADPOOL_THREAD_LOCAL_H
diff --git a/Eigen/src/ThreadPool/ThreadPoolInterface.h b/Eigen/src/ThreadPool/ThreadPoolInterface.h
index d07c03e..4cf6fac 100644
--- a/Eigen/src/ThreadPool/ThreadPoolInterface.h
+++ b/Eigen/src/ThreadPool/ThreadPoolInterface.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
 #define EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
diff --git a/Eigen/src/ThreadPool/ThreadYield.h b/Eigen/src/ThreadPool/ThreadYield.h
index f556ff6..e0502a0 100644
--- a/Eigen/src/ThreadPool/ThreadYield.h
+++ b/Eigen/src/ThreadPool/ThreadYield.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_THREADPOOL_THREAD_YIELD_H
 #define EIGEN_CXX11_THREADPOOL_THREAD_YIELD_H
diff --git a/Eigen/src/UmfPackSupport/InternalHeaderCheck.h b/Eigen/src/UmfPackSupport/InternalHeaderCheck.h
index 64112f1..86674ca 100644
--- a/Eigen/src/UmfPackSupport/InternalHeaderCheck.h
+++ b/Eigen/src/UmfPackSupport/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_UMFPACKSUPPORT_MODULE_H
 #error "Please include Eigen/UmfPackSupport instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/UmfPackSupport/UmfPackSupport.h b/Eigen/src/UmfPackSupport/UmfPackSupport.h
index 51e4db1..e6546eb 100644
--- a/Eigen/src/UmfPackSupport/UmfPackSupport.h
+++ b/Eigen/src/UmfPackSupport/UmfPackSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_UMFPACKSUPPORT_H
 #define EIGEN_UMFPACKSUPPORT_H
diff --git a/Eigen/src/misc/Image.h b/Eigen/src/misc/Image.h
index 38d516e..955c53c 100644
--- a/Eigen/src/misc/Image.h
+++ b/Eigen/src/misc/Image.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MISC_IMAGE_H
 #define EIGEN_MISC_IMAGE_H
diff --git a/Eigen/src/misc/InternalHeaderCheck.h b/Eigen/src/misc/InternalHeaderCheck.h
index 1cea572..875d2ec 100644
--- a/Eigen/src/misc/InternalHeaderCheck.h
+++ b/Eigen/src/misc/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CORE_MODULE_H
 #error "Please include Eigen/Core instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/misc/Kernel.h b/Eigen/src/misc/Kernel.h
index 3ed458b..0105c80 100644
--- a/Eigen/src/misc/Kernel.h
+++ b/Eigen/src/misc/Kernel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MISC_KERNEL_H
 #define EIGEN_MISC_KERNEL_H
diff --git a/Eigen/src/misc/RankRevealingBase.h b/Eigen/src/misc/RankRevealingBase.h
index 1729c91..78d0be3 100644
--- a/Eigen/src/misc/RankRevealingBase.h
+++ b/Eigen/src/misc/RankRevealingBase.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANK_REVEALING_BASE_H
 #define EIGEN_RANK_REVEALING_BASE_H
diff --git a/Eigen/src/misc/blas.h b/Eigen/src/misc/blas.h
index f12bc7c..043a62a 100644
--- a/Eigen/src/misc/blas.h
+++ b/Eigen/src/misc/blas.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_MISC_BLAS_H
 #define EIGEN_MISC_BLAS_H
 
diff --git a/Eigen/src/misc/lapacke.h b/Eigen/src/misc/lapacke.h
index 8f2810d..ec17d9e 100644
--- a/Eigen/src/misc/lapacke.h
+++ b/Eigen/src/misc/lapacke.h
@@ -31,6 +31,7 @@
 * Generated November, 2011
 * Modified: stripped to the subset of declarations actually used by Eigen.
 *****************************************************************************/
+// SPDX-License-Identifier: BSD-3-Clause
 
 #ifndef _MKL_LAPACKE_H_
 
diff --git a/Eigen/src/misc/lapacke_helpers.h b/Eigen/src/misc/lapacke_helpers.h
index ff98639..dc75839 100644
--- a/Eigen/src/misc/lapacke_helpers.h
+++ b/Eigen/src/misc/lapacke_helpers.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LAPACKE_HELPERS_H
 #define EIGEN_LAPACKE_HELPERS_H
diff --git a/Eigen/src/misc/lapacke_mangling.h b/Eigen/src/misc/lapacke_mangling.h
index d852de7..c91f118 100644
--- a/Eigen/src/misc/lapacke_mangling.h
+++ b/Eigen/src/misc/lapacke_mangling.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef LAPACK_HEADER_INCLUDED
 #define LAPACK_HEADER_INCLUDED
 
diff --git a/Eigen/src/plugins/ArrayCwiseBinaryOps.inc b/Eigen/src/plugins/ArrayCwiseBinaryOps.inc
index ae240f1..0127c0d 100644
--- a/Eigen/src/plugins/ArrayCwiseBinaryOps.inc
+++ b/Eigen/src/plugins/ArrayCwiseBinaryOps.inc
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /** \returns an expression of the coefficient wise product of \c *this and \a other
  *
diff --git a/Eigen/src/plugins/ArrayCwiseUnaryOps.inc b/Eigen/src/plugins/ArrayCwiseUnaryOps.inc
index 4bc999e..520dd2f 100644
--- a/Eigen/src/plugins/ArrayCwiseUnaryOps.inc
+++ b/Eigen/src/plugins/ArrayCwiseUnaryOps.inc
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 typedef CwiseUnaryOp<internal::scalar_abs_op<Scalar>, const Derived> AbsReturnType;
 typedef CwiseUnaryOp<internal::scalar_arg_op<Scalar>, const Derived> ArgReturnType;
 typedef CwiseUnaryOp<internal::scalar_carg_op<Scalar>, const Derived> CArgReturnType;
diff --git a/Eigen/src/plugins/BlockMethods.inc b/Eigen/src/plugins/BlockMethods.inc
index 2d85955..d0f250e 100644
--- a/Eigen/src/plugins/BlockMethods.inc
+++ b/Eigen/src/plugins/BlockMethods.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PARSED_BY_DOXYGEN
 
diff --git a/Eigen/src/plugins/CommonCwiseBinaryOps.inc b/Eigen/src/plugins/CommonCwiseBinaryOps.inc
index d5127e3..75d9a99 100644
--- a/Eigen/src/plugins/CommonCwiseBinaryOps.inc
+++ b/Eigen/src/plugins/CommonCwiseBinaryOps.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is a base class plugin containing common coefficient wise functions.
 
diff --git a/Eigen/src/plugins/CommonCwiseUnaryOps.inc b/Eigen/src/plugins/CommonCwiseUnaryOps.inc
index bf8a940..1e3bfcd 100644
--- a/Eigen/src/plugins/CommonCwiseUnaryOps.inc
+++ b/Eigen/src/plugins/CommonCwiseUnaryOps.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is a base class plugin containing common coefficient wise functions.
 
diff --git a/Eigen/src/plugins/IndexedViewMethods.inc b/Eigen/src/plugins/IndexedViewMethods.inc
index a51e349..5919122 100644
--- a/Eigen/src/plugins/IndexedViewMethods.inc
+++ b/Eigen/src/plugins/IndexedViewMethods.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if !defined(EIGEN_PARSED_BY_DOXYGEN)
 
diff --git a/Eigen/src/plugins/InternalHeaderCheck.inc b/Eigen/src/plugins/InternalHeaderCheck.inc
index ac6821d..8378b2c 100644
--- a/Eigen/src/plugins/InternalHeaderCheck.inc
+++ b/Eigen/src/plugins/InternalHeaderCheck.inc
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CORE_MODULE_H
 #error "Please include Eigen/plugins instead of including headers inside the src directory directly."
 #endif
diff --git a/Eigen/src/plugins/MatrixCwiseBinaryOps.inc b/Eigen/src/plugins/MatrixCwiseBinaryOps.inc
index 8e0da06..0efed2d 100644
--- a/Eigen/src/plugins/MatrixCwiseBinaryOps.inc
+++ b/Eigen/src/plugins/MatrixCwiseBinaryOps.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is a base class plugin containing matrix specifics coefficient wise functions.
 
diff --git a/Eigen/src/plugins/MatrixCwiseUnaryOps.inc b/Eigen/src/plugins/MatrixCwiseUnaryOps.inc
index a57548c..2328388 100644
--- a/Eigen/src/plugins/MatrixCwiseUnaryOps.inc
+++ b/Eigen/src/plugins/MatrixCwiseUnaryOps.inc
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is included into the body of the base classes supporting matrix specific coefficient-wise functions.
 // This include MatrixBase and SparseMatrixBase.
diff --git a/Eigen/src/plugins/ReshapedMethods.inc b/Eigen/src/plugins/ReshapedMethods.inc
index 1e3a196..ee86b2a 100644
--- a/Eigen/src/plugins/ReshapedMethods.inc
+++ b/Eigen/src/plugins/ReshapedMethods.inc
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifdef EIGEN_PARSED_BY_DOXYGEN
 
diff --git a/LICENSES/Apache-2.0.txt b/LICENSES/Apache-2.0.txt
new file mode 100644
index 0000000..61e948d
--- /dev/null
+++ b/LICENSES/Apache-2.0.txt
@@ -0,0 +1,203 @@
+/*
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
\ No newline at end of file
diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt
new file mode 100644
index 0000000..8964ddf
--- /dev/null
+++ b/LICENSES/BSD-3-Clause.txt
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2011, Intel Corporation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
diff --git a/LICENSES/LicenseRef-MINPACK.txt b/LICENSES/LicenseRef-MINPACK.txt
new file mode 100644
index 0000000..132cc3f
--- /dev/null
+++ b/LICENSES/LicenseRef-MINPACK.txt
@@ -0,0 +1,51 @@
+Minpack Copyright Notice (1999) University of Chicago.  All rights reserved
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above
+copyright notice, this list of conditions and the following
+disclaimer.
+
+2. Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials
+provided with the distribution.
+
+3. The end-user documentation included with the
+redistribution, if any, must include the following
+acknowledgment:
+
+   "This product includes software developed by the
+   University of Chicago, as Operator of Argonne National
+   Laboratory.
+
+Alternately, this acknowledgment may appear in the software
+itself, if and wherever such third-party acknowledgments
+normally appear.
+
+4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
+WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
+UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
+OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
+OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
+USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
+THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
+DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
+BE CORRECTED.
+
+5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
+HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
+INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
+ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
+PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
+SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
+(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
+EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
+POSSIBILITY OF SUCH LOSS OR DAMAGES.
diff --git a/LICENSES/MPL-2.0.txt b/LICENSES/MPL-2.0.txt
new file mode 100644
index 0000000..d0a1fa1
--- /dev/null
+++ b/LICENSES/MPL-2.0.txt
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/REUSE.toml b/REUSE.toml
new file mode 100644
index 0000000..4afac17
--- /dev/null
+++ b/REUSE.toml
@@ -0,0 +1,153 @@
+version = 1
+
+# REUSE 3.3 bulk-mapping for files that do not carry per-file SPDX headers.
+#
+# Source files (*.h / *.cpp / *.cc / *.cu / *.c / *.inc / *.f / *.cmake /
+# CMakeLists.txt / *.gitlab-ci.yml / scripts / etc.) carry inline
+# `SPDX-License-Identifier: <id>` lines. This file covers the remainder:
+# documentation, templates, READMEs, binary assets, top-level dotfiles, and
+# trivial test stubs, where adding a comment would be ugly, impossible
+# (binary files), or would leak into generated output (.in templates).
+
+[[annotations]]
+path = [
+    "CHANGELOG.md",
+    "INSTALL",
+    "README.md",
+    "signature_of_eigen3_matrix_library",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+[[annotations]]
+path = [
+    ".clang-format",
+    ".clang-tidy",
+    ".coderabbit.yaml",
+    ".git-blame-ignore-revs",
+    ".gitattributes",
+    ".gitignore",
+    ".gitlab/**",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Doxygen-source documentation: kept clean of SPDX headers because they
+# would render in the generated HTML.
+[[annotations]]
+path = [
+    "**.dox",
+    "doc/eigendoxy.css",
+    "doc/eigendoxy_tabs.css",
+    "doc/examples/.krazy",
+    "doc/examples/make_circulant.cpp.preamble",
+    "doc/examples/make_circulant.cpp.traits",
+    "doc/examples/make_circulant.cpp.entry",
+    "doc/examples/make_circulant.cpp.evaluator",
+    "doc/examples/make_circulant.cpp.expression",
+    "doc/examples/make_circulant.cpp.main",
+    "doc/AsciiQuickReference.txt",
+    "doc/snippets/.krazy",
+    "ci/CTest2JUnit.xsl",
+    "ci/scripts/benchmark_targets.txt",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Top-level licensing information files that point at LICENSES/ entries; these
+# are referenced by COPYING.README. They are not source.
+[[annotations]]
+path = "cmake/MORSE-Copyright.txt"
+SPDX-FileCopyrightText = [
+    "2009-2014 The University of Tennessee and The University of Tennessee Research Foundation",
+    "2012-2017 Inria",
+    "2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux",
+]
+SPDX-License-Identifier = "BSD-3-Clause"
+
+[[annotations]]
+path = "unsupported/Eigen/src/LevenbergMarquardt/CopyrightMINPACK.txt"
+SPDX-FileCopyrightText = [
+    "Jorge More - Argonne National Laboratory",
+    "Burt Garbow - Argonne National Laboratory",
+    "Ken Hillstrom - Argonne National Laboratory",
+]
+SPDX-License-Identifier = "LicenseRef-MINPACK"
+
+# Generated/templated files: SPDX in *.in would leak into outputs.
+[[annotations]]
+path = [
+    "**.in",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Other module/folder READMEs that don't carry per-file headers.
+[[annotations]]
+path = [
+    "**/README",
+    "**/README.md",
+    "**/README.txt",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# BLAS/LAPACK shim ABI-export definition files (mechanical lists of symbols).
+[[annotations]]
+path = [
+    "blas/eigen_blas.def",
+    "lapack/eigen_lapack.def",
+    "lapack/eigen_lapack_cpp.def",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# MSVC debug visualizer (XML, no comment-friendly header location).
+[[annotations]]
+path = "debug/msvc/eigen.natvis"
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Eigen logo / mascot — created for the project.
+[[annotations]]
+path = "doc/Eigen_Silly_Professor_64x64.png"
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Doxygen-shipped navigation icons (functional UI assets, redistributed
+# unmodified with the documentation). Declared MPL-2.0 to match the rest of
+# the doc tree; if a reviewer prefers stricter attribution to upstream
+# Doxygen (Dimitri van Heesch, GPL-2.0-or-later) we can split them out and
+# add LICENSES/GPL-2.0-or-later.txt.
+[[annotations]]
+path = [
+    "doc/ftv2node.png",
+    "doc/ftv2pnode.png",
+]
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# failtest/ contains minimal compile-failure stubs (a few `#include`s plus a
+# trivial main); no novel IP, but they are MPL-2.0 by virtue of being part of
+# the Eigen test suite.
+[[annotations]]
+path = "failtest/*.cpp"
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
+
+# Reference BLAS test data files (netlib reference distribution: Univ. of
+# Tennessee / Berkeley / Colorado Denver — modified BSD-3-Clause).
+[[annotations]]
+path = "blas/testing/*.dat"
+SPDX-FileCopyrightText = [
+    "1992-2013 The University of Tennessee and The University of Tennessee Research Foundation",
+    "2000-2013 The University of California Berkeley",
+    "2006-2013 The University of Colorado Denver",
+]
+SPDX-License-Identifier = "BSD-3-Clause"
+
+# MSVC autoexp data — mechanical pretty-print description, MPL-2.0.
+[[annotations]]
+path = "debug/msvc/eigen_autoexp_part.dat"
+SPDX-FileCopyrightText = "The Eigen Authors"
+SPDX-License-Identifier = "MPL-2.0"
diff --git a/benchmarks/BLAS/CMakeLists.txt b/benchmarks/BLAS/CMakeLists.txt
index 7288e83..38231ea 100644
--- a/benchmarks/BLAS/CMakeLists.txt
+++ b/benchmarks/BLAS/CMakeLists.txt
@@ -1,6 +1,8 @@
 # Benchmarks for Eigen's built-in BLAS implementation.
 # Compiles the Eigen BLAS sources directly into the benchmark executable
 # so there is no external BLAS dependency.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set(EIGEN_BLAS_SRCS
   ${EIGEN_SOURCE_DIR}/blas/single.cpp
diff --git a/benchmarks/BLAS/bench_blas.cpp b/benchmarks/BLAS/bench_blas.cpp
index ac53957..1481878 100644
--- a/benchmarks/BLAS/bench_blas.cpp
+++ b/benchmarks/BLAS/bench_blas.cpp
@@ -6,6 +6,8 @@
 // Covers Level 1, 2, and 3 routines — with emphasis on the routines that
 // were recently rewritten from f2c to C++: rotm, rotmg, spmv, sbmv, hbmv,
 // hpmv, tbmv, lsame, and complex dot products.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 
diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt
index 3163f51..53c48dd 100644
--- a/benchmarks/CMakeLists.txt
+++ b/benchmarks/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 cmake_minimum_required(VERSION 3.10)
 project(EigenBenchmarks CXX)
 
diff --git a/benchmarks/Cholesky/CMakeLists.txt b/benchmarks/Cholesky/CMakeLists.txt
index 1565448..38762c2 100644
--- a/benchmarks/Cholesky/CMakeLists.txt
+++ b/benchmarks/Cholesky/CMakeLists.txt
@@ -1,2 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_cholesky bench_cholesky.cpp)
 eigen_add_benchmark(bench_cholesky_double bench_cholesky.cpp DEFINITIONS SCALAR=double)
diff --git a/benchmarks/Cholesky/bench_cholesky.cpp b/benchmarks/Cholesky/bench_cholesky.cpp
index 5990e82..f0ec400 100644
--- a/benchmarks/Cholesky/bench_cholesky.cpp
+++ b/benchmarks/Cholesky/bench_cholesky.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Cholesky>
diff --git a/benchmarks/Core/CMakeLists.txt b/benchmarks/Core/CMakeLists.txt
index 30f21d1..0bdcbc6 100644
--- a/benchmarks/Core/CMakeLists.txt
+++ b/benchmarks/Core/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_gemm bench_gemm.cpp)
 eigen_add_benchmark(bench_gemm_double bench_gemm.cpp DEFINITIONS SCALAR=double)
 eigen_add_benchmark(bench_gemv bench_gemv.cpp)
diff --git a/benchmarks/Core/bench_block_ops.cpp b/benchmarks/Core/bench_block_ops.cpp
index 1eb71dd..1e3e137 100644
--- a/benchmarks/Core/bench_block_ops.cpp
+++ b/benchmarks/Core/bench_block_ops.cpp
@@ -2,6 +2,8 @@
 //
 // Tests sub-matrix views: block(), topRows(), leftCols(), middleCols().
 // Measures expression template overhead for read and write patterns.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_broadcasting.cpp b/benchmarks/Core/bench_broadcasting.cpp
index 7830579..71af7e7 100644
--- a/benchmarks/Core/bench_broadcasting.cpp
+++ b/benchmarks/Core/bench_broadcasting.cpp
@@ -2,6 +2,8 @@
 //
 // Tests vectorwise reductions (sum, mean, norm, minCoeff, maxCoeff) and
 // broadcasting arithmetic (rowwise += vec, colwise -= vec, rowwise *= vec).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_construction.cpp b/benchmarks/Core/bench_construction.cpp
index 294ac19..0de1542 100644
--- a/benchmarks/Core/bench_construction.cpp
+++ b/benchmarks/Core/bench_construction.cpp
@@ -2,6 +2,8 @@
 //
 // Tests setZero, setRandom, setIdentity, LinSpaced, Zero(), Constant()
 // for both dynamic and small fixed-size matrices.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_cwise_math.cpp b/benchmarks/Core/bench_cwise_math.cpp
index 3ecb77b..991e047 100644
--- a/benchmarks/Core/bench_cwise_math.cpp
+++ b/benchmarks/Core/bench_cwise_math.cpp
@@ -2,6 +2,8 @@
 //
 // Each function is benchmarked on ArrayXf/ArrayXd with inputs chosen to
 // stay in the valid domain and avoid NaN/Inf.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_diagonal.cpp b/benchmarks/Core/bench_diagonal.cpp
index 9e1674a..9d41781 100644
--- a/benchmarks/Core/bench_diagonal.cpp
+++ b/benchmarks/Core/bench_diagonal.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for diagonal operations.
 //
 // Tests diagonal extraction, diagonal-matrix product, and matrix-diagonal product.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_dot.cpp b/benchmarks/Core/bench_dot.cpp
index 73defda..74ec80b 100644
--- a/benchmarks/Core/bench_dot.cpp
+++ b/benchmarks/Core/bench_dot.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for dot product (BLAS-1 critical path).
 //
 // Flop count: 2n for real, 8n for complex.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_fixed_size.cpp b/benchmarks/Core/bench_fixed_size.cpp
index f7b674d..4e1a456 100644
--- a/benchmarks/Core/bench_fixed_size.cpp
+++ b/benchmarks/Core/bench_fixed_size.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for fixed-size matrix operations (2x2, 3x3, 4x4).
 // Critical for PCL, ROS, Sophus, Drake which use small matrices extensively.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_gemm.cpp b/benchmarks/Core/bench_gemm.cpp
index 6b460a2..60fd7f4 100644
--- a/benchmarks/Core/bench_gemm.cpp
+++ b/benchmarks/Core/bench_gemm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 
diff --git a/benchmarks/Core/bench_gemv.cpp b/benchmarks/Core/bench_gemv.cpp
index 0e4d33e..671e0ab 100644
--- a/benchmarks/Core/bench_gemv.cpp
+++ b/benchmarks/Core/bench_gemv.cpp
@@ -18,6 +18,8 @@
 //   GemvTrans  y += A^T * x         -> RowMajor kernel, no conjugation
 //   GemvConj   y += conj(A) * x     -> ColMajor kernel, ConjugateLhs=true
 //   GemvAdj    y += A^H * x         -> RowMajor kernel, ConjugateLhs=true
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_map.cpp b/benchmarks/Core/bench_map.cpp
index 56e3d4d..32983a4 100644
--- a/benchmarks/Core/bench_map.cpp
+++ b/benchmarks/Core/bench_map.cpp
@@ -2,6 +2,8 @@
 //
 // Compares contiguous Map vs strided Map vs owned matrix for basic
 // operations (GEMV and vector sum).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_move_semantics.cpp b/benchmarks/Core/bench_move_semantics.cpp
index 83d112b..545d5e6 100644
--- a/benchmarks/Core/bench_move_semantics.cpp
+++ b/benchmarks/Core/bench_move_semantics.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include "../../test/MovableScalar.h"
diff --git a/benchmarks/Core/bench_reductions.cpp b/benchmarks/Core/bench_reductions.cpp
index d6c6159..01e08a7 100644
--- a/benchmarks/Core/bench_reductions.cpp
+++ b/benchmarks/Core/bench_reductions.cpp
@@ -3,6 +3,8 @@
 //
 // These are memory-bandwidth-bound for large vectors, so we report
 // bytes processed rather than FLOPS.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_reverse.cpp b/benchmarks/Core/bench_reverse.cpp
index 808df18..72be27b 100644
--- a/benchmarks/Core/bench_reverse.cpp
+++ b/benchmarks/Core/bench_reverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 
diff --git a/benchmarks/Core/bench_selfadjoint_product.cpp b/benchmarks/Core/bench_selfadjoint_product.cpp
index 7b73bbf..3af5874 100644
--- a/benchmarks/Core/bench_selfadjoint_product.cpp
+++ b/benchmarks/Core/bench_selfadjoint_product.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for self-adjoint (symmetric/hermitian) matrix operations.
 //
 // Tests SYMM (selfadjointView * dense) and rank-k updates.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_small_matrix.cpp b/benchmarks/Core/bench_small_matrix.cpp
index 2970f7f..5d9e2f4 100644
--- a/benchmarks/Core/bench_small_matrix.cpp
+++ b/benchmarks/Core/bench_small_matrix.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/LU>
diff --git a/benchmarks/Core/bench_symv.cpp b/benchmarks/Core/bench_symv.cpp
index 71a1c47..b1c051f 100644
--- a/benchmarks/Core/bench_symv.cpp
+++ b/benchmarks/Core/bench_symv.cpp
@@ -2,6 +2,8 @@
 //
 // Tests y += selfadjointView(A) * x for various sizes and scalar types.
 // Exercises SelfadjointMatrixVector.h kernel.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_syr.cpp b/benchmarks/Core/bench_syr.cpp
index d179c75..653be09 100644
--- a/benchmarks/Core/bench_syr.cpp
+++ b/benchmarks/Core/bench_syr.cpp
@@ -3,6 +3,8 @@
 // Tests C.selfadjointView<Lower>().rankUpdate(v, alpha) which computes
 // C += alpha * v * v^T, updating only the lower (or upper) triangle.
 // Exercises SelfadjointProduct.h / selfadjoint_rank1_update.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_syr2.cpp b/benchmarks/Core/bench_syr2.cpp
index 3bf7510..9d712f6 100644
--- a/benchmarks/Core/bench_syr2.cpp
+++ b/benchmarks/Core/bench_syr2.cpp
@@ -3,6 +3,8 @@
 // Tests C.selfadjointView<Lower>().rankUpdate(u, v, alpha) which computes
 // C += alpha * u * v^T + conj(alpha) * v * u^T.
 // Exercises SelfadjointRank2Update.h.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_triangular_product.cpp b/benchmarks/Core/bench_triangular_product.cpp
index 230dfe6..922a205 100644
--- a/benchmarks/Core/bench_triangular_product.cpp
+++ b/benchmarks/Core/bench_triangular_product.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for triangular-dense matrix products (TRMM).
 //
 // Tests C = triangular(A) * B for various modes (Lower/Upper) and sides (Left/Right).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_trmv.cpp b/benchmarks/Core/bench_trmv.cpp
index 90cb06d..ecc0676 100644
--- a/benchmarks/Core/bench_trmv.cpp
+++ b/benchmarks/Core/bench_trmv.cpp
@@ -2,6 +2,8 @@
 //
 // Tests y += triangularView(A) * x for various modes and sizes.
 // Exercises TriangularMatrixVector.h kernel.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Core/bench_trsm.cpp b/benchmarks/Core/bench_trsm.cpp
index 27d4106..f7f7582 100644
--- a/benchmarks/Core/bench_trsm.cpp
+++ b/benchmarks/Core/bench_trsm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Dense>
 
diff --git a/benchmarks/Core/bench_vecadd.cpp b/benchmarks/Core/bench_vecadd.cpp
index b4db14b..13313e0 100644
--- a/benchmarks/Core/bench_vecadd.cpp
+++ b/benchmarks/Core/bench_vecadd.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 
diff --git a/benchmarks/Eigenvalues/CMakeLists.txt b/benchmarks/Eigenvalues/CMakeLists.txt
index 6760477..0597b3c 100644
--- a/benchmarks/Eigenvalues/CMakeLists.txt
+++ b/benchmarks/Eigenvalues/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_eigensolver bench_eigensolver.cpp)
 eigen_add_benchmark(bench_eigensolver_double bench_eigensolver.cpp DEFINITIONS SCALAR=double)
 eigen_add_benchmark(bench_eig33 bench_eig33.cpp)
diff --git a/benchmarks/Eigenvalues/bench_eig33.cpp b/benchmarks/Eigenvalues/bench_eig33.cpp
index 2b63aaa..e56370e 100644
--- a/benchmarks/Eigenvalues/bench_eig33.cpp
+++ b/benchmarks/Eigenvalues/bench_eig33.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Eigenvalues>
diff --git a/benchmarks/Eigenvalues/bench_eigensolver.cpp b/benchmarks/Eigenvalues/bench_eigensolver.cpp
index 2a1d853..3f94dcf 100644
--- a/benchmarks/Eigenvalues/bench_eigensolver.cpp
+++ b/benchmarks/Eigenvalues/bench_eigensolver.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/QR>
diff --git a/benchmarks/FFT/CMakeLists.txt b/benchmarks/FFT/CMakeLists.txt
index 2c80680..9bde0ec 100644
--- a/benchmarks/FFT/CMakeLists.txt
+++ b/benchmarks/FFT/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_fft bench_fft.cpp)
diff --git a/benchmarks/FFT/bench_fft.cpp b/benchmarks/FFT/bench_fft.cpp
index 4c3f852..deac650 100644
--- a/benchmarks/FFT/bench_fft.cpp
+++ b/benchmarks/FFT/bench_fft.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <unsupported/Eigen/FFT>
diff --git a/benchmarks/Geometry/CMakeLists.txt b/benchmarks/Geometry/CMakeLists.txt
index 4a885a9..cf86267 100644
--- a/benchmarks/Geometry/CMakeLists.txt
+++ b/benchmarks/Geometry/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_transforms bench_transforms.cpp)
 eigen_add_benchmark(bench_geometry bench_geometry.cpp)
 eigen_add_benchmark(bench_quatmul bench_quatmul.cpp)
diff --git a/benchmarks/Geometry/bench_geometry.cpp b/benchmarks/Geometry/bench_geometry.cpp
index 5b5e289..bff4fb4 100644
--- a/benchmarks/Geometry/bench_geometry.cpp
+++ b/benchmarks/Geometry/bench_geometry.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Geometry>
 
diff --git a/benchmarks/Geometry/bench_geometry_ops.cpp b/benchmarks/Geometry/bench_geometry_ops.cpp
index cb743c5..395b23c 100644
--- a/benchmarks/Geometry/bench_geometry_ops.cpp
+++ b/benchmarks/Geometry/bench_geometry_ops.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Geometry>
diff --git a/benchmarks/Geometry/bench_quatmul.cpp b/benchmarks/Geometry/bench_quatmul.cpp
index a35ecba..9ec35d7 100644
--- a/benchmarks/Geometry/bench_quatmul.cpp
+++ b/benchmarks/Geometry/bench_quatmul.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Geometry>
diff --git a/benchmarks/Geometry/bench_transforms.cpp b/benchmarks/Geometry/bench_transforms.cpp
index c64f731..7a47c58 100644
--- a/benchmarks/Geometry/bench_transforms.cpp
+++ b/benchmarks/Geometry/bench_transforms.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Geometry>
diff --git a/benchmarks/Householder/CMakeLists.txt b/benchmarks/Householder/CMakeLists.txt
index 57c3178..8310c92 100644
--- a/benchmarks/Householder/CMakeLists.txt
+++ b/benchmarks/Householder/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_householder bench_householder.cpp)
diff --git a/benchmarks/Householder/bench_householder.cpp b/benchmarks/Householder/bench_householder.cpp
index 047b27b..0f5cf6b 100644
--- a/benchmarks/Householder/bench_householder.cpp
+++ b/benchmarks/Householder/bench_householder.cpp
@@ -3,6 +3,8 @@
 // Tests makeHouseholder, makeHouseholderInPlace, applyHouseholderOnTheLeft,
 // applyHouseholderOnTheRight, HouseholderSequence evaluation, and block
 // Householder operations.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Householder>
diff --git a/benchmarks/LU/CMakeLists.txt b/benchmarks/LU/CMakeLists.txt
index 86483e6..b6923e8 100644
--- a/benchmarks/LU/CMakeLists.txt
+++ b/benchmarks/LU/CMakeLists.txt
@@ -1,2 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_lu bench_lu.cpp)
 eigen_add_benchmark(bench_rcond bench_rcond.cpp)
diff --git a/benchmarks/LU/bench_lu.cpp b/benchmarks/LU/bench_lu.cpp
index dd020da..763bc9a 100644
--- a/benchmarks/LU/bench_lu.cpp
+++ b/benchmarks/LU/bench_lu.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for LU decompositions.
 //
 // Tests PartialPivLU and FullPivLU: compute, solve, inverse, determinant.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/LU>
diff --git a/benchmarks/LU/bench_rcond.cpp b/benchmarks/LU/bench_rcond.cpp
index 99684b4..5c8b913 100644
--- a/benchmarks/LU/bench_rcond.cpp
+++ b/benchmarks/LU/bench_rcond.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Benchmarks for reciprocal condition number estimation.
 //
diff --git a/benchmarks/QR/CMakeLists.txt b/benchmarks/QR/CMakeLists.txt
index 2c90f4c..db0cb67 100644
--- a/benchmarks/QR/CMakeLists.txt
+++ b/benchmarks/QR/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_qr bench_qr.cpp)
diff --git a/benchmarks/QR/bench_qr.cpp b/benchmarks/QR/bench_qr.cpp
index 98bae24..452b161 100644
--- a/benchmarks/QR/bench_qr.cpp
+++ b/benchmarks/QR/bench_qr.cpp
@@ -2,6 +2,8 @@
 //
 // Tests HouseholderQR, ColPivHouseholderQR, FullPivHouseholderQR, and COD.
 // Both square and tall-thin matrix shapes are tested.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/QR>
diff --git a/benchmarks/SVD/CMakeLists.txt b/benchmarks/SVD/CMakeLists.txt
index cd802ed..468b8ee 100644
--- a/benchmarks/SVD/CMakeLists.txt
+++ b/benchmarks/SVD/CMakeLists.txt
@@ -1,2 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_svd bench_svd.cpp)
 eigen_add_benchmark(bench_bidiag bench_bidiag.cpp)
diff --git a/benchmarks/SVD/bench_bidiag.cpp b/benchmarks/SVD/bench_bidiag.cpp
index 8cb1f7e..e4815dc 100644
--- a/benchmarks/SVD/bench_bidiag.cpp
+++ b/benchmarks/SVD/bench_bidiag.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/SVD>
 
diff --git a/benchmarks/SVD/bench_jacobi_sweep.cpp b/benchmarks/SVD/bench_jacobi_sweep.cpp
index 1a446c1..b076d10 100644
--- a/benchmarks/SVD/bench_jacobi_sweep.cpp
+++ b/benchmarks/SVD/bench_jacobi_sweep.cpp
@@ -5,6 +5,8 @@
 // Build example:
 //   g++ -O3 -DNDEBUG -march=native -DBLOCK_SIZE=16 -DBLOCKING_THRESHOLD=128
 //       -I../.. bench_jacobi_sweep.cpp -lbenchmark -lbenchmark_main -lpthread
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 
diff --git a/benchmarks/SVD/bench_svd.cpp b/benchmarks/SVD/bench_svd.cpp
index 5715f01..1bb8081 100644
--- a/benchmarks/SVD/bench_svd.cpp
+++ b/benchmarks/SVD/bench_svd.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Dense>
 
diff --git a/benchmarks/Solvers/CMakeLists.txt b/benchmarks/Solvers/CMakeLists.txt
index 8d50536..b15b947 100644
--- a/benchmarks/Solvers/CMakeLists.txt
+++ b/benchmarks/Solvers/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_dense_solvers bench_dense_solvers.cpp)
diff --git a/benchmarks/Solvers/bench_dense_solvers.cpp b/benchmarks/Solvers/bench_dense_solvers.cpp
index dc14a2d..8280f2b 100644
--- a/benchmarks/Solvers/bench_dense_solvers.cpp
+++ b/benchmarks/Solvers/bench_dense_solvers.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Dense>
 
diff --git a/benchmarks/Sparse/CMakeLists.txt b/benchmarks/Sparse/CMakeLists.txt
index 93168ac..145b702 100644
--- a/benchmarks/Sparse/CMakeLists.txt
+++ b/benchmarks/Sparse/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_spmv bench_spmv.cpp)
 eigen_add_benchmark(bench_spmm bench_spmm.cpp)
 eigen_add_benchmark(bench_sparse_transpose bench_sparse_transpose.cpp)
diff --git a/benchmarks/Sparse/bench_sparse_solvers.cpp b/benchmarks/Sparse/bench_sparse_solvers.cpp
index 977ddd4..c937d2d 100644
--- a/benchmarks/Sparse/bench_sparse_solvers.cpp
+++ b/benchmarks/Sparse/bench_sparse_solvers.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for sparse decomposition solvers.
 // Tests SimplicialLLT, SimplicialLDLT, SparseQR, SparseLU, CG, BiCGSTAB.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Sparse>
diff --git a/benchmarks/Sparse/bench_sparse_transpose.cpp b/benchmarks/Sparse/bench_sparse_transpose.cpp
index e7a4dd6..6acac07 100644
--- a/benchmarks/Sparse/bench_sparse_transpose.cpp
+++ b/benchmarks/Sparse/bench_sparse_transpose.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Sparse>
 #include <set>
diff --git a/benchmarks/Sparse/bench_spmm.cpp b/benchmarks/Sparse/bench_spmm.cpp
index 70313f4..219539e 100644
--- a/benchmarks/Sparse/bench_spmm.cpp
+++ b/benchmarks/Sparse/bench_spmm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Sparse>
 #include <set>
diff --git a/benchmarks/Sparse/bench_spmv.cpp b/benchmarks/Sparse/bench_spmv.cpp
index 54e876f..91a14a3 100644
--- a/benchmarks/Sparse/bench_spmv.cpp
+++ b/benchmarks/Sparse/bench_spmv.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Sparse>
 
diff --git a/benchmarks/Tuning/CMakeLists.txt b/benchmarks/Tuning/CMakeLists.txt
index 19872a8..15c95b6 100644
--- a/benchmarks/Tuning/CMakeLists.txt
+++ b/benchmarks/Tuning/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_blocking_sizes bench_blocking_sizes.cpp)
 eigen_add_benchmark(bench_aocl bench_aocl.cpp)
 
diff --git a/benchmarks/Tuning/bench_aocl.cpp b/benchmarks/Tuning/bench_aocl.cpp
index 04396b5..16446ad 100644
--- a/benchmarks/Tuning/bench_aocl.cpp
+++ b/benchmarks/Tuning/bench_aocl.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
 #include <Eigen/Dense>
diff --git a/benchmarks/Tuning/bench_blas_gemm.cpp b/benchmarks/Tuning/bench_blas_gemm.cpp
index 4d7602e..a3bce54 100644
--- a/benchmarks/Tuning/bench_blas_gemm.cpp
+++ b/benchmarks/Tuning/bench_blas_gemm.cpp
@@ -2,6 +2,8 @@
 // Requires CBLAS: compile with -DHAVE_BLAS and link -lcblas
 //
 // Based on the old bench/benchBlasGemm.cpp (removed)
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/benchmarks/Tuning/bench_blocking_sizes.cpp b/benchmarks/Tuning/bench_blocking_sizes.cpp
index 4ed21d2..f5c8303 100644
--- a/benchmarks/Tuning/bench_blocking_sizes.cpp
+++ b/benchmarks/Tuning/bench_blocking_sizes.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <benchmark/benchmark.h>
 
 #include <cstdint>
diff --git a/benchmarks/Tuning/print_blocking.cpp b/benchmarks/Tuning/print_blocking.cpp
index 3f5a256..803ff0e 100644
--- a/benchmarks/Tuning/print_blocking.cpp
+++ b/benchmarks/Tuning/print_blocking.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <cstdio>
 
diff --git a/blas/BandTriangularSolver.h b/blas/BandTriangularSolver.h
index fbc639f..fae6d89 100644
--- a/blas/BandTriangularSolver.h
+++ b/blas/BandTriangularSolver.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BAND_TRIANGULARSOLVER_H
 #define EIGEN_BAND_TRIANGULARSOLVER_H
diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt
index 2015ef1..f921e68 100644
--- a/blas/CMakeLists.txt
+++ b/blas/CMakeLists.txt
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 project(EigenBlas CXX)
 
diff --git a/blas/GeneralRank1Update.h b/blas/GeneralRank1Update.h
index 48cba97..eeba364 100644
--- a/blas/GeneralRank1Update.h
+++ b/blas/GeneralRank1Update.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GENERAL_RANK1UPDATE_H
 #define EIGEN_GENERAL_RANK1UPDATE_H
diff --git a/blas/PackedSelfadjointProduct.h b/blas/PackedSelfadjointProduct.h
index 6e8c70d..a37afe7 100644
--- a/blas/PackedSelfadjointProduct.h
+++ b/blas/PackedSelfadjointProduct.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SELFADJOINT_PACKED_PRODUCT_H
 #define EIGEN_SELFADJOINT_PACKED_PRODUCT_H
diff --git a/blas/PackedTriangularMatrixVector.h b/blas/PackedTriangularMatrixVector.h
index 5b92670..a7d4ef6 100644
--- a/blas/PackedTriangularMatrixVector.h
+++ b/blas/PackedTriangularMatrixVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKED_TRIANGULAR_MATRIX_VECTOR_H
 #define EIGEN_PACKED_TRIANGULAR_MATRIX_VECTOR_H
diff --git a/blas/PackedTriangularSolverVector.h b/blas/PackedTriangularSolverVector.h
index 76a828a..69e9362 100644
--- a/blas/PackedTriangularSolverVector.h
+++ b/blas/PackedTriangularSolverVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_PACKED_TRIANGULAR_SOLVER_VECTOR_H
 #define EIGEN_PACKED_TRIANGULAR_SOLVER_VECTOR_H
diff --git a/blas/Rank2Update.h b/blas/Rank2Update.h
index 9cb96ee..aea2b1d 100644
--- a/blas/Rank2Update.h
+++ b/blas/Rank2Update.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANK2UPDATE_H
 #define EIGEN_RANK2UPDATE_H
diff --git a/blas/blas.h b/blas/blas.h
index 220e956..7c13c99 100644
--- a/blas/blas.h
+++ b/blas/blas.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef BLAS_H
 #define BLAS_H
 
diff --git a/blas/common.h b/blas/common.h
index 9e46b6e..e06e284 100644
--- a/blas/common.h
+++ b/blas/common.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BLAS_COMMON_H
 #define EIGEN_BLAS_COMMON_H
diff --git a/blas/complex_double.cpp b/blas/complex_double.cpp
index 94b9d20..3be1446 100644
--- a/blas/complex_double.cpp
+++ b/blas/complex_double.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR std::complex<double>
 #define SCALAR_SUFFIX z
diff --git a/blas/complex_single.cpp b/blas/complex_single.cpp
index 842faec..edef995 100644
--- a/blas/complex_single.cpp
+++ b/blas/complex_single.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR std::complex<float>
 #define SCALAR_SUFFIX c
diff --git a/blas/complexdots.cpp b/blas/complexdots.cpp
index 7b8787a..253edbb 100644
--- a/blas/complexdots.cpp
+++ b/blas/complexdots.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // C++ replacements for the f2c complex dot product wrappers.
 // These are thin wrappers around the worker functions (cdotcw_, etc.)
diff --git a/blas/double.cpp b/blas/double.cpp
index 28a2563..eb99aae 100644
--- a/blas/double.cpp
+++ b/blas/double.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR double
 #define SCALAR_SUFFIX d
diff --git a/blas/level1_cplx_impl.h b/blas/level1_cplx_impl.h
index 68698dc..17c056e 100644
--- a/blas/level1_cplx_impl.h
+++ b/blas/level1_cplx_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level1_impl.h b/blas/level1_impl.h
index 13cac93..525a628 100644
--- a/blas/level1_impl.h
+++ b/blas/level1_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level1_real_impl.h b/blas/level1_real_impl.h
index cc003a5..7a213dd 100644
--- a/blas/level1_real_impl.h
+++ b/blas/level1_real_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level2_cplx_impl.h b/blas/level2_cplx_impl.h
index f330975..95d5345 100644
--- a/blas/level2_cplx_impl.h
+++ b/blas/level2_cplx_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level2_impl.h b/blas/level2_impl.h
index 9165d7d..e8ab28c 100644
--- a/blas/level2_impl.h
+++ b/blas/level2_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level2_real_impl.h b/blas/level2_real_impl.h
index 3cf31b2..cfa6808 100644
--- a/blas/level2_real_impl.h
+++ b/blas/level2_real_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 
diff --git a/blas/level3_impl.h b/blas/level3_impl.h
index 03d634c..4d767d1 100644
--- a/blas/level3_impl.h
+++ b/blas/level3_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #include "common.h"
 
 EIGEN_BLAS_FUNC(gemm)
diff --git a/blas/lsame.cpp b/blas/lsame.cpp
index c65b5b0..27673b4 100644
--- a/blas/lsame.cpp
+++ b/blas/lsame.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <cctype>
 
diff --git a/blas/single.cpp b/blas/single.cpp
index fefb695..6928c05 100644
--- a/blas/single.cpp
+++ b/blas/single.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR float
 #define SCALAR_SUFFIX s
diff --git a/blas/testing/CMakeLists.txt b/blas/testing/CMakeLists.txt
index 8b8ff44..6f72e07 100644
--- a/blas/testing/CMakeLists.txt
+++ b/blas/testing/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 include(CheckLanguage)
 check_language(Fortran)
 if(CMAKE_Fortran_COMPILER)
diff --git a/blas/testing/cblat1.f b/blas/testing/cblat1.f
index 73015f5..0637f9e 100644
--- a/blas/testing/cblat1.f
+++ b/blas/testing/cblat1.f
@@ -35,6 +35,8 @@
 *> \ingroup complex_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM CBLAT1
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/cblat2.f b/blas/testing/cblat2.f
index 5833ea8..5b483d2 100644
--- a/blas/testing/cblat2.f
+++ b/blas/testing/cblat2.f
@@ -101,6 +101,8 @@
 *> \ingroup complex_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM CBLAT2
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/cblat3.f b/blas/testing/cblat3.f
index 09f2cb9..2ea3880 100644
--- a/blas/testing/cblat3.f
+++ b/blas/testing/cblat3.f
@@ -83,6 +83,8 @@
 *> \ingroup complex_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM CBLAT3
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/dblat1.f b/blas/testing/dblat1.f
index 03d9f13..693c817 100644
--- a/blas/testing/dblat1.f
+++ b/blas/testing/dblat1.f
@@ -35,6 +35,8 @@
 *> \ingroup double_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM DBLAT1
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/dblat2.f b/blas/testing/dblat2.f
index 0fa80af..7783ae2 100644
--- a/blas/testing/dblat2.f
+++ b/blas/testing/dblat2.f
@@ -100,6 +100,8 @@
 *> \ingroup double_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM DBLAT2
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/dblat3.f b/blas/testing/dblat3.f
index 8d37c74..62fc7fa 100644
--- a/blas/testing/dblat3.f
+++ b/blas/testing/dblat3.f
@@ -80,6 +80,8 @@
 *> \ingroup double_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM DBLAT3
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/runblastest.sh b/blas/testing/runblastest.sh
index 4ffaf01..2577ef9d 100755
--- a/blas/testing/runblastest.sh
+++ b/blas/testing/runblastest.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 black='\E[30m'
 red='\E[31m'
diff --git a/blas/testing/sblat1.f b/blas/testing/sblat1.f
index 4d43d9b..5cc2cda 100644
--- a/blas/testing/sblat1.f
+++ b/blas/testing/sblat1.f
@@ -35,6 +35,8 @@
 *> \ingroup single_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM SBLAT1
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/sblat2.f b/blas/testing/sblat2.f
index 71605ed..6b800d5 100644
--- a/blas/testing/sblat2.f
+++ b/blas/testing/sblat2.f
@@ -100,6 +100,8 @@
 *> \ingroup single_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM SBLAT2
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/sblat3.f b/blas/testing/sblat3.f
index 8792696..4033e39 100644
--- a/blas/testing/sblat3.f
+++ b/blas/testing/sblat3.f
@@ -80,6 +80,8 @@
 *> \ingroup single_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM SBLAT3
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/zblat1.f b/blas/testing/zblat1.f
index c00b67d..ed01519 100644
--- a/blas/testing/zblat1.f
+++ b/blas/testing/zblat1.f
@@ -35,6 +35,8 @@
 *> \ingroup complex16_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM ZBLAT1
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/zblat2.f b/blas/testing/zblat2.f
index 53129a1..8dbdbee 100644
--- a/blas/testing/zblat2.f
+++ b/blas/testing/zblat2.f
@@ -101,6 +101,8 @@
 *> \ingroup complex16_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM ZBLAT2
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/testing/zblat3.f b/blas/testing/zblat3.f
index 59ca241..7ca0de1 100644
--- a/blas/testing/zblat3.f
+++ b/blas/testing/zblat3.f
@@ -84,6 +84,8 @@
 *> \ingroup complex16_blas_testing
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       PROGRAM ZBLAT3
 *
 *  -- Reference BLAS test routine (version 3.4.1) --
diff --git a/blas/xerbla.cpp b/blas/xerbla.cpp
index 94c8c1d..038125e 100644
--- a/blas/xerbla.cpp
+++ b/blas/xerbla.cpp
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <stdio.h>
 
diff --git a/ci/benchmark.gitlab-ci.yml b/ci/benchmark.gitlab-ci.yml
index ddbee78..dbfe179 100644
--- a/ci/benchmark.gitlab-ci.yml
+++ b/ci/benchmark.gitlab-ci.yml
@@ -4,6 +4,8 @@
 # pipelines, with separate jobs per ISA target.  Results are analyzed
 # using Welch's t-test against the last 30 runs stored on the perf-data
 # branch.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 # ============================================================================
 # Variables
diff --git a/ci/build.linux.gitlab-ci.yml b/ci/build.linux.gitlab-ci.yml
index 1907986..1788bae 100644
--- a/ci/build.linux.gitlab-ci.yml
+++ b/ci/build.linux.gitlab-ci.yml
@@ -1,4 +1,6 @@
 # Base configuration for linux cross-compilation.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 .build:linux:cross:
   needs: []
   extends: .common:linux:cross
diff --git a/ci/build.windows.gitlab-ci.yml b/ci/build.windows.gitlab-ci.yml
index c804cf2..08c28c2 100644
--- a/ci/build.windows.gitlab-ci.yml
+++ b/ci/build.windows.gitlab-ci.yml
@@ -1,4 +1,6 @@
 # Base configuration for windows builds.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 .build:windows:
   needs: []
   extends: .common:windows
diff --git a/ci/checkformat.gitlab-ci.yml b/ci/checkformat.gitlab-ci.yml
index a0becc7..8ab6d29 100644
--- a/ci/checkformat.gitlab-ci.yml
+++ b/ci/checkformat.gitlab-ci.yml
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 checkformat:clangformat:
   stage: checkformat
   image: alpine:3.20
@@ -20,6 +23,18 @@
   script:
     - codespell --config setup.cfg
 
+checkformat:reuse:
+  stage: checkformat
+  image: alpine:3.20
+  only:
+    - merge_requests
+  allow_failure: true
+  before_script:
+    - apk add --no-cache py3-pip
+    - pip install --break-system-packages reuse
+  script:
+    - reuse lint
+
 checkformat:clangtidy:
   stage: checkformat
   image: ubuntu:24.04
diff --git a/ci/common.gitlab-ci.yml b/ci/common.gitlab-ci.yml
index 86061f4..ca50496 100644
--- a/ci/common.gitlab-ci.yml
+++ b/ci/common.gitlab-ci.yml
@@ -1,4 +1,6 @@
 # Base configuration for linux builds and tests.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 .common:linux:cross:
   image: ubuntu:24.04
   variables:
diff --git a/ci/deploy.gitlab-ci.yml b/ci/deploy.gitlab-ci.yml
index 70d5042..739eee8 100644
--- a/ci/deploy.gitlab-ci.yml
+++ b/ci/deploy.gitlab-ci.yml
@@ -1,4 +1,6 @@
  # Push a nightly tag if the pipeline succeeded.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 deploy:tag:nightly:
   stage: deploy
   image: alpine:edge
diff --git a/ci/scripts/build.benchmark.sh b/ci/scripts/build.benchmark.sh
index cd2b1ca..128ab78 100755
--- a/ci/scripts/build.benchmark.sh
+++ b/ci/scripts/build.benchmark.sh
@@ -6,6 +6,8 @@
 #   EIGEN_CI_CXX_COMPILER     - C++ compiler
 #   EIGEN_CI_C_COMPILER        - C compiler
 #   EIGEN_BENCH_ISA_FLAGS     - ISA-specific compiler flags (e.g. "-mavx2 -mfma")
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -ex
 
diff --git a/ci/scripts/build.linux.script.sh b/ci/scripts/build.linux.script.sh
index 82d85a5..0d46488 100755
--- a/ci/scripts/build.linux.script.sh
+++ b/ci/scripts/build.linux.script.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -x
 
diff --git a/ci/scripts/build.windows.script.ps1 b/ci/scripts/build.windows.script.ps1
index 8252d77..ee57743 100644
--- a/ci/scripts/build.windows.script.ps1
+++ b/ci/scripts/build.windows.script.ps1
@@ -1,4 +1,6 @@
 # Find Visual Studio installation directory.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 $VS_INSTALL_DIR = &"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath
 
 # Run VCVarsAll.bat initialization script and extract environment variables.
diff --git a/ci/scripts/build_and_install_doxygen.sh b/ci/scripts/build_and_install_doxygen.sh
index 9cb47b7..371894d 100644
--- a/ci/scripts/build_and_install_doxygen.sh
+++ b/ci/scripts/build_and_install_doxygen.sh
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 git clone --depth 1 --branch $1 https://github.com/doxygen/doxygen.git
 cmake -B doxygen/.build -G Ninja                                 \
   -DCMAKE_CXX_COMPILER=${EIGEN_CI_CXX_COMPILER}                  \
diff --git a/ci/scripts/common.linux.before_script.sh b/ci/scripts/common.linux.before_script.sh
index 622e62f..396ebc0 100755
--- a/ci/scripts/common.linux.before_script.sh
+++ b/ci/scripts/common.linux.before_script.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -x
 
diff --git a/ci/scripts/common.windows.before_script.ps1 b/ci/scripts/common.windows.before_script.ps1
index 3a6f456..df58d30 100644
--- a/ci/scripts/common.windows.before_script.ps1
+++ b/ci/scripts/common.windows.before_script.ps1
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 echo "Running ${CI_JOB_NAME}"
 
 # Print configuration variables.
diff --git a/ci/scripts/detect_regressions.py b/ci/scripts/detect_regressions.py
index 6ce4c1c..9c0dd3c 100755
--- a/ci/scripts/detect_regressions.py
+++ b/ci/scripts/detect_regressions.py
@@ -1,4 +1,7 @@
 #!/usr/bin/env python3
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Benchmark regression detection using Welch's t-test.
 
 Compares the current benchmark run against historical data stored on
diff --git a/ci/scripts/push_perf_data.sh b/ci/scripts/push_perf_data.sh
index 485912f..b0fc66d 100755
--- a/ci/scripts/push_perf_data.sh
+++ b/ci/scripts/push_perf_data.sh
@@ -6,6 +6,8 @@
 #   EIGEN_CI_BUILDDIR       - build directory containing results/
 #   EIGEN_CI_GIT_PUSH_URL   - authenticated git push URL
 #   CI_COMMIT_SHORT_SHA     - short commit hash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -ex
 
diff --git a/ci/scripts/run-clang-tidy.sh b/ci/scripts/run-clang-tidy.sh
index 956bbde..c4a7e97 100755
--- a/ci/scripts/run-clang-tidy.sh
+++ b/ci/scripts/run-clang-tidy.sh
@@ -10,6 +10,8 @@
 # For header files under Eigen/src/<Module>/, the script generates a minimal
 # driver .cpp that includes the parent module header so that
 # InternalHeaderCheck.h does not #error out.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -euo pipefail
 
diff --git a/ci/scripts/run.benchmark.sh b/ci/scripts/run.benchmark.sh
index 891d8dc..ca24a48 100755
--- a/ci/scripts/run.benchmark.sh
+++ b/ci/scripts/run.benchmark.sh
@@ -6,6 +6,8 @@
 #   EIGEN_BENCH_TARGET         - ISA target name (e.g. "x86-64-avx2")
 #   EIGEN_BENCH_SCOPE          - "nightly" (core subset) or "weekly" (all)
 #   EIGEN_BENCH_REPETITIONS    - number of repetitions per benchmark (default: 5)
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -ex
 
diff --git a/ci/scripts/test.linux.after_script.sh b/ci/scripts/test.linux.after_script.sh
index 3bc0c2f..c626e45 100755
--- a/ci/scripts/test.linux.after_script.sh
+++ b/ci/scripts/test.linux.after_script.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -x
 
diff --git a/ci/scripts/test.linux.script.sh b/ci/scripts/test.linux.script.sh
index 26cf32c..ea51be0 100755
--- a/ci/scripts/test.linux.script.sh
+++ b/ci/scripts/test.linux.script.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set -x
 
diff --git a/ci/scripts/test.windows.after_script.ps1 b/ci/scripts/test.windows.after_script.ps1
index 59cd5a9..5d6e56f 100644
--- a/ci/scripts/test.windows.after_script.ps1
+++ b/ci/scripts/test.windows.after_script.ps1
@@ -1,4 +1,6 @@
 # Change to build directory.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 $rootdir = Get-Location
 cd ${EIGEN_CI_BUILDDIR}
 
diff --git a/ci/scripts/test.windows.script.ps1 b/ci/scripts/test.windows.script.ps1
index b5041ac..4f18aad 100644
--- a/ci/scripts/test.windows.script.ps1
+++ b/ci/scripts/test.windows.script.ps1
@@ -1,4 +1,6 @@
 # Change to build directory.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 $rootdir = Get-Location
 cd $EIGEN_CI_BUILDDIR
 
diff --git a/ci/scripts/vars.linux.sh b/ci/scripts/vars.linux.sh
index 6676868..f77cc25 100755
--- a/ci/scripts/vars.linux.sh
+++ b/ci/scripts/vars.linux.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 # Initialize default variables used by the CI.
 export EIGEN_CI_ADDITIONAL_ARGS=""
diff --git a/ci/scripts/vars.windows.ps1 b/ci/scripts/vars.windows.ps1
index fc03bff..742f26d 100644
--- a/ci/scripts/vars.windows.ps1
+++ b/ci/scripts/vars.windows.ps1
@@ -1,4 +1,6 @@
 # Initialize default variables used by the CI.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 $EIGEN_CI_ADDITIONAL_ARGS       = ""
 $EIGEN_CI_BEFORE_SCRIPT         = ""
 $EIGEN_CI_BUILD_TARGET          = "buildtests"
diff --git a/ci/test.linux.gitlab-ci.yml b/ci/test.linux.gitlab-ci.yml
index d4d450e..7ede11b 100644
--- a/ci/test.linux.gitlab-ci.yml
+++ b/ci/test.linux.gitlab-ci.yml
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 .test:linux:
   extends: .common:linux:cross
   stage: test
diff --git a/ci/test.windows.gitlab-ci.yml b/ci/test.windows.gitlab-ci.yml
index 94c13e3..2071d02 100644
--- a/ci/test.windows.gitlab-ci.yml
+++ b/ci/test.windows.gitlab-ci.yml
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 .test:windows:
   extends: .common:windows
   stage: test
diff --git a/cmake/ComputeCppCompilerChecks.cmake b/cmake/ComputeCppCompilerChecks.cmake
index 1807485..14a9d34 100644
--- a/cmake/ComputeCppCompilerChecks.cmake
+++ b/cmake/ComputeCppCompilerChecks.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 cmake_minimum_required(VERSION 3.4.3)
 
 if(CMAKE_COMPILER_IS_GNUCXX)
diff --git a/cmake/ComputeCppIRMap.cmake b/cmake/ComputeCppIRMap.cmake
index 942d91d..f2f0590 100644
--- a/cmake/ComputeCppIRMap.cmake
+++ b/cmake/ComputeCppIRMap.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 cmake_minimum_required(VERSION 3.4.3)
 
 # These should match the types of IR output by compute++
diff --git a/cmake/EigenConfigureTesting.cmake b/cmake/EigenConfigureTesting.cmake
index 1103ba2..9a7eaae 100644
--- a/cmake/EigenConfigureTesting.cmake
+++ b/cmake/EigenConfigureTesting.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 include(EigenTesting)
 include(CheckCXXSourceCompiles)
 
diff --git a/cmake/EigenSmokeTestList.cmake b/cmake/EigenSmokeTestList.cmake
index 247b2c4..eb6d8ac 100644
--- a/cmake/EigenSmokeTestList.cmake
+++ b/cmake/EigenSmokeTestList.cmake
@@ -1,6 +1,8 @@
 # List of tests that will be build and run during Eigen's smoke testing. If one
 # of these tests doesn't exists or cannot be build with the current configuration
 # it will just be skipped.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 set(ei_smoke_test_list
   adjoint_1
   alignedvector3
diff --git a/cmake/EigenTesting.cmake b/cmake/EigenTesting.cmake
index 9102148..29eed22 100644
--- a/cmake/EigenTesting.cmake
+++ b/cmake/EigenTesting.cmake
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 macro(ei_add_property prop value)
   get_property(previous GLOBAL PROPERTY ${prop})
diff --git a/cmake/EigenUninstall.cmake b/cmake/EigenUninstall.cmake
index 5e63c98..7c55b1c 100644
--- a/cmake/EigenUninstall.cmake
+++ b/cmake/EigenUninstall.cmake
@@ -4,6 +4,8 @@
 #
 # Used by uinstall target
 #################################################################
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 set(MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt")
 
diff --git a/cmake/FindAOCL.cmake b/cmake/FindAOCL.cmake
index 5e49835..7f8b2a2 100644
--- a/cmake/FindAOCL.cmake
+++ b/cmake/FindAOCL.cmake
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: MPL-2.0
 
 #
 # This Source Code Form is subject to the terms of the Mozilla Public
diff --git a/cmake/FindAccelerate.cmake b/cmake/FindAccelerate.cmake
index 787c31c..30975e4 100644
--- a/cmake/FindAccelerate.cmake
+++ b/cmake/FindAccelerate.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 if (Accelerate_INCLUDES AND Accelerate_LIBRARIES)
   set(Accelerate_FIND_QUIETLY TRUE)
 endif ()
diff --git a/cmake/FindAdolc.cmake b/cmake/FindAdolc.cmake
index 13c59fc..0b76e17 100644
--- a/cmake/FindAdolc.cmake
+++ b/cmake/FindAdolc.cmake
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (ADOLC_INCLUDES AND ADOLC_LIBRARIES)
   set(ADOLC_FIND_QUIETLY TRUE)
diff --git a/cmake/FindBLASEXT.cmake b/cmake/FindBLASEXT.cmake
index 69a9418..43d3951 100644
--- a/cmake/FindBLASEXT.cmake
+++ b/cmake/FindBLASEXT.cmake
@@ -22,6 +22,7 @@
 #  BLAS_LIBRARY_DIRS  - Link directories for BLAS libraries
 #  BLAS_SEQ_LIBRARIES - BLAS component libraries to be linked (sequential)
 #  BLAS_PAR_LIBRARIES - BLAS component libraries to be linked (multithreaded)
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindCHOLMOD.cmake b/cmake/FindCHOLMOD.cmake
index 917c30a..231f37b 100644
--- a/cmake/FindCHOLMOD.cmake
+++ b/cmake/FindCHOLMOD.cmake
@@ -4,6 +4,8 @@
 # This module first tries to find CHOLMOD via its CMake config-mode package
 # (shipped with SuiteSparse >= 7.0). If that fails, it falls back to a
 # manual header/library search for compatibility with older installations.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (CHOLMOD_INCLUDES AND CHOLMOD_LIBRARIES)
   set(CHOLMOD_FIND_QUIETLY TRUE)
diff --git a/cmake/FindCLANG_FORMAT.cmake b/cmake/FindCLANG_FORMAT.cmake
index e00f19f..625e675 100644
--- a/cmake/FindCLANG_FORMAT.cmake
+++ b/cmake/FindCLANG_FORMAT.cmake
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: MPL-2.0
 
 
 # Find clang-format
diff --git a/cmake/FindComputeCpp.cmake b/cmake/FindComputeCpp.cmake
index e200522..bbba60c 100644
--- a/cmake/FindComputeCpp.cmake
+++ b/cmake/FindComputeCpp.cmake
@@ -16,6 +16,7 @@
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
+# SPDX-License-Identifier: Apache-2.0
 
 #########################
 #  FindComputeCpp.cmake
diff --git a/cmake/FindDPCPP.cmake b/cmake/FindDPCPP.cmake
index 73aa30f..4268eef 100644
--- a/cmake/FindDPCPP.cmake
+++ b/cmake/FindDPCPP.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 include_guard()
 
 include(CheckCXXCompilerFlag)
diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake
index ed55c5f..73acbce 100644
--- a/cmake/FindFFTW.cmake
+++ b/cmake/FindFFTW.cmake
@@ -15,6 +15,8 @@
 #   FFTW_LIBRARY            ... fftw library to use
 #   FFTW_INCLUDE_DIR        ... fftw include directory
 #
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 #If environment variable FFTWDIR is specified, it has same effect as FFTW_ROOT
 if( NOT FFTW_ROOT AND ENV{FFTWDIR} )
diff --git a/cmake/FindGMP.cmake b/cmake/FindGMP.cmake
index c41eedc..617d363 100644
--- a/cmake/FindGMP.cmake
+++ b/cmake/FindGMP.cmake
@@ -1,5 +1,7 @@
 # Try to find the GNU Multiple Precision Arithmetic Library (GMP)
 # See http://gmplib.org/
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (GMP_INCLUDES AND GMP_LIBRARIES)
   set(GMP_FIND_QUIETLY TRUE)
diff --git a/cmake/FindGoogleHash.cmake b/cmake/FindGoogleHash.cmake
index 481eb4d..cdad73d 100644
--- a/cmake/FindGoogleHash.cmake
+++ b/cmake/FindGoogleHash.cmake
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (GOOGLEHASH_INCLUDES AND GOOGLEHASH_LIBRARIES)
   set(GOOGLEHASH_FIND_QUIETLY TRUE)
diff --git a/cmake/FindHWLOC.cmake b/cmake/FindHWLOC.cmake
index 522f521..37f6df7 100644
--- a/cmake/FindHWLOC.cmake
+++ b/cmake/FindHWLOC.cmake
@@ -27,6 +27,7 @@
 #  HWLOC_LIBDIR          - Where to find the library files
 # The module can also look for the following environment variables if paths
 # are not given as cmake variable: HWLOC_DIR, HWLOC_INCDIR, HWLOC_LIBDIR
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindKLU.cmake b/cmake/FindKLU.cmake
index 865b0fe..19f099c 100644
--- a/cmake/FindKLU.cmake
+++ b/cmake/FindKLU.cmake
@@ -4,6 +4,8 @@
 # This module first tries to find KLU via its CMake config-mode package
 # (shipped with SuiteSparse >= 7.0). If that fails, it falls back to a
 # manual header/library search for compatibility with older installations.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (KLU_INCLUDES AND KLU_LIBRARIES)
   set(KLU_FIND_QUIETLY TRUE)
diff --git a/cmake/FindMPFR.cmake b/cmake/FindMPFR.cmake
index d8da9d6..b1ffb16 100644
--- a/cmake/FindMPFR.cmake
+++ b/cmake/FindMPFR.cmake
@@ -11,6 +11,7 @@
 #  MPFR_INCLUDES - the MPFR include directory
 #  MPFR_LIBRARIES - the MPFR library
 #  MPFR_VERSION - MPFR version
+# SPDX-License-Identifier: MPL-2.0
 
 # Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
 # Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
diff --git a/cmake/FindMPREAL.cmake b/cmake/FindMPREAL.cmake
index 947a1ce..57d4a23 100644
--- a/cmake/FindMPREAL.cmake
+++ b/cmake/FindMPREAL.cmake
@@ -11,6 +11,7 @@
 #  MPREAL_INCLUDES - MPREAL required include directories
 #  MPREAL_LIBRARIES - MPREAL required libraries
 #  MPREAL_VERSION - MPREAL version
+# SPDX-License-Identifier: MPL-2.0
 
 # Copyright (c) 2020 The Eigen Authors.
 # Redistribution and use is allowed according to the terms of the BSD license.
diff --git a/cmake/FindMetis.cmake b/cmake/FindMetis.cmake
index 747f882..371fc09 100644
--- a/cmake/FindMetis.cmake
+++ b/cmake/FindMetis.cmake
@@ -28,6 +28,7 @@
 #  METIS_LIBDIR          - Where to find the library files
 # The module can also look for the following environment variables if paths
 # are not given as cmake variable: METIS_DIR, METIS_INCDIR, METIS_LIBDIR
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindPASTIX.cmake b/cmake/FindPASTIX.cmake
index db1427b..0a91ccd 100644
--- a/cmake/FindPASTIX.cmake
+++ b/cmake/FindPASTIX.cmake
@@ -54,6 +54,7 @@
 #  PASTIX_LIBDIR           - Where to find the library files
 # The module can also look for the following environment variables if paths
 # are not given as cmake variable: PASTIX_DIR, PASTIX_INCDIR, PASTIX_LIBDIR
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindPTSCOTCH.cmake b/cmake/FindPTSCOTCH.cmake
index 6ccc743..32587dc 100644
--- a/cmake/FindPTSCOTCH.cmake
+++ b/cmake/FindPTSCOTCH.cmake
@@ -41,6 +41,7 @@
 #  PTSCOTCH_LIBDIR           - Where to find the library files
 # The module can also look for the following environment variables if paths
 # are not given as cmake variable: PTSCOTCH_DIR, PTSCOTCH_INCDIR, PTSCOTCH_LIBDIR
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindSCOTCH.cmake b/cmake/FindSCOTCH.cmake
index 11b971a..e3a7b0f 100644
--- a/cmake/FindSCOTCH.cmake
+++ b/cmake/FindSCOTCH.cmake
@@ -33,6 +33,7 @@
 #  SCOTCH_LIBDIR          - Where to find the library files
 # The module can also look for the following environment variables if paths
 # are not given as cmake variable: SCOTCH_DIR, SCOTCH_INCDIR, SCOTCH_LIBDIR
+# SPDX-License-Identifier: BSD-3-Clause
 
 #=============================================================================
 # Copyright 2012-2013 Inria
diff --git a/cmake/FindSPQR.cmake b/cmake/FindSPQR.cmake
index 5811b0d..46b03ee 100644
--- a/cmake/FindSPQR.cmake
+++ b/cmake/FindSPQR.cmake
@@ -7,6 +7,8 @@
 # This module first tries to find SPQR via its CMake config-mode package
 # (shipped with SuiteSparse >= 7.0). If that fails, it falls back to a
 # manual header/library search for compatibility with older installations.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (SPQR_INCLUDES AND SPQR_LIBRARIES)
   set(SPQR_FIND_QUIETLY TRUE)
diff --git a/cmake/FindStandardMathLibrary.cmake b/cmake/FindStandardMathLibrary.cmake
index 1d1e5b3..ea8657f 100644
--- a/cmake/FindStandardMathLibrary.cmake
+++ b/cmake/FindStandardMathLibrary.cmake
@@ -12,6 +12,7 @@
 # Copyright (c) 2010 Benoit Jacob <jacob.benoit.1@gmail.com>
 #               2020 Susi Lehtola <susi.lehtola@gmail.com>
 # Redistribution and use is allowed according to the terms of the 2-clause BSD license.
+# SPDX-License-Identifier: MPL-2.0
 
 
 include(CheckCXXSourceCompiles)
diff --git a/cmake/FindSuperLU.cmake b/cmake/FindSuperLU.cmake
index 4b779f5..ac9df04 100644
--- a/cmake/FindSuperLU.cmake
+++ b/cmake/FindSuperLU.cmake
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 # Umfpack lib usually requires linking to a blas library.
 # It is up to the user of this module to find a BLAS and link to it.
diff --git a/cmake/FindTriSYCL.cmake b/cmake/FindTriSYCL.cmake
index 8104239..f7af078 100644
--- a/cmake/FindTriSYCL.cmake
+++ b/cmake/FindTriSYCL.cmake
@@ -3,6 +3,7 @@
 #---------------
 #
 # TODO : insert Copyright and licence
+# SPDX-License-Identifier: MPL-2.0
 
 #########################
 #  FindTriSYCL.cmake
diff --git a/cmake/FindUMFPACK.cmake b/cmake/FindUMFPACK.cmake
index f799e44..02a7ca4 100644
--- a/cmake/FindUMFPACK.cmake
+++ b/cmake/FindUMFPACK.cmake
@@ -4,6 +4,8 @@
 # This module first tries to find UMFPACK via its CMake config-mode package
 # (shipped with SuiteSparse >= 7.0). If that fails, it falls back to a
 # manual header/library search for compatibility with older installations.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 if (UMFPACK_INCLUDES AND UMFPACK_LIBRARIES)
   set(UMFPACK_FIND_QUIETLY TRUE)
diff --git a/cmake/RegexUtils.cmake b/cmake/RegexUtils.cmake
index f0a1524..f5ba09c 100644
--- a/cmake/RegexUtils.cmake
+++ b/cmake/RegexUtils.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 function(escape_string_as_regex _str_out _str_in)
   string(REGEX REPLACE "\\\\" "\\\\\\\\" FILETEST2 "${_str_in}")
   string(REGEX REPLACE "([.$+*?|-])" "\\\\\\1" FILETEST2 "${FILETEST2}")
diff --git a/cmake/SyclConfigureTesting.cmake b/cmake/SyclConfigureTesting.cmake
index d4aa423..e0f5fea 100644
--- a/cmake/SyclConfigureTesting.cmake
+++ b/cmake/SyclConfigureTesting.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 set(CMAKE_CXX_STANDARD 17)
 # Forward CMake options as preprocessor definitions
 if(EIGEN_SYCL_USE_DEFAULT_SELECTOR)
diff --git a/debug/gdb/__init__.py b/debug/gdb/__init__.py
index bb7b160..7dcb21d 100644
--- a/debug/gdb/__init__.py
+++ b/debug/gdb/__init__.py
@@ -1 +1,3 @@
 # Intentionally empty
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
diff --git a/debug/gdb/printers.py b/debug/gdb/printers.py
index 2c3fccf..ca9e013 100644
--- a/debug/gdb/printers.py
+++ b/debug/gdb/printers.py
@@ -7,6 +7,7 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+# SPDX-License-Identifier: MPL-2.0
 
 # Pretty printers for Eigen::Matrix
 # This is still pretty basic as the python extension to gdb is still pretty basic. 
diff --git a/debug/lldb/eigenlldb.py b/debug/lldb/eigenlldb.py
index 94a52be..776545e 100644
--- a/debug/lldb/eigenlldb.py
+++ b/debug/lldb/eigenlldb.py
@@ -8,6 +8,7 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+# SPDX-License-Identifier: MPL-2.0
 
 # Pretty printers for Eigen::Matrix to use with LLDB debugger
 #
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt
index deb560f..a27f047 100644
--- a/demos/CMakeLists.txt
+++ b/demos/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 project(EigenDemos)
 
 add_custom_target(demos)
diff --git a/demos/mandelbrot/CMakeLists.txt b/demos/mandelbrot/CMakeLists.txt
index ae6001d..66dd13f 100644
--- a/demos/mandelbrot/CMakeLists.txt
+++ b/demos/mandelbrot/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 find_package(Qt4 REQUIRED)
 
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
diff --git a/demos/mandelbrot/mandelbrot.cpp b/demos/mandelbrot/mandelbrot.cpp
index a5b1dc8..9c192fe 100644
--- a/demos/mandelbrot/mandelbrot.cpp
+++ b/demos/mandelbrot/mandelbrot.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "mandelbrot.h"
 #include <iostream>
diff --git a/demos/mandelbrot/mandelbrot.h b/demos/mandelbrot/mandelbrot.h
index 8b8e5b9..0b7d9a6 100644
--- a/demos/mandelbrot/mandelbrot.h
+++ b/demos/mandelbrot/mandelbrot.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef MANDELBROT_H
 #define MANDELBROT_H
diff --git a/demos/mix_eigen_and_c/binary_library.cpp b/demos/mix_eigen_and_c/binary_library.cpp
index 2ac7821..4da74b6 100644
--- a/demos/mix_eigen_and_c/binary_library.cpp
+++ b/demos/mix_eigen_and_c/binary_library.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This C++ file compiles to binary code that can be linked to by your C program,
 // thanks to the extern "C" syntax used in the declarations in binary_library.h.
diff --git a/demos/mix_eigen_and_c/binary_library.h b/demos/mix_eigen_and_c/binary_library.h
index 9f16382..8cb1a8f 100644
--- a/demos/mix_eigen_and_c/binary_library.h
+++ b/demos/mix_eigen_and_c/binary_library.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This is a pure C header, no C++ here.
 // The functions declared here will be implemented in C++ but
diff --git a/demos/mix_eigen_and_c/example.c b/demos/mix_eigen_and_c/example.c
index 790c45b..a8e2e60 100644
--- a/demos/mix_eigen_and_c/example.c
+++ b/demos/mix_eigen_and_c/example.c
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "binary_library.h"
 #include "stdio.h"
diff --git a/demos/opengl/CMakeLists.txt b/demos/opengl/CMakeLists.txt
index 299aa44..38bc5ad 100644
--- a/demos/opengl/CMakeLists.txt
+++ b/demos/opengl/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 find_package(Qt4)
 find_package(OpenGL)
 
diff --git a/demos/opengl/camera.cpp b/demos/opengl/camera.cpp
index 0e5cc58..20f2242 100644
--- a/demos/opengl/camera.cpp
+++ b/demos/opengl/camera.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "camera.h"
 
diff --git a/demos/opengl/camera.h b/demos/opengl/camera.h
index 676ad23..a8f99ca 100644
--- a/demos/opengl/camera.h
+++ b/demos/opengl/camera.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CAMERA_H
 #define EIGEN_CAMERA_H
diff --git a/demos/opengl/gpuhelper.cpp b/demos/opengl/gpuhelper.cpp
index fefd36b..1e4086d 100644
--- a/demos/opengl/gpuhelper.cpp
+++ b/demos/opengl/gpuhelper.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "gpuhelper.h"
 #include "icosphere.h"
diff --git a/demos/opengl/gpuhelper.h b/demos/opengl/gpuhelper.h
index b28c625..e31ffb6 100644
--- a/demos/opengl/gpuhelper.h
+++ b/demos/opengl/gpuhelper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GPUHELPER_H
 #define EIGEN_GPUHELPER_H
diff --git a/demos/opengl/icosphere.cpp b/demos/opengl/icosphere.cpp
index db28c47..e5abdea 100644
--- a/demos/opengl/icosphere.cpp
+++ b/demos/opengl/icosphere.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "icosphere.h"
 
diff --git a/demos/opengl/icosphere.h b/demos/opengl/icosphere.h
index 11418c1..909710f 100644
--- a/demos/opengl/icosphere.h
+++ b/demos/opengl/icosphere.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ICOSPHERE_H
 #define EIGEN_ICOSPHERE_H
diff --git a/demos/opengl/quaternion_demo.cpp b/demos/opengl/quaternion_demo.cpp
index e7472fa..74f8f59 100644
--- a/demos/opengl/quaternion_demo.cpp
+++ b/demos/opengl/quaternion_demo.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "quaternion_demo.h"
 #include "icosphere.h"
diff --git a/demos/opengl/quaternion_demo.h b/demos/opengl/quaternion_demo.h
index 5eb4fce..4c8f351 100644
--- a/demos/opengl/quaternion_demo.h
+++ b/demos/opengl/quaternion_demo.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_QUATERNION_DEMO_H
 #define EIGEN_QUATERNION_DEMO_H
diff --git a/demos/opengl/trackball.cpp b/demos/opengl/trackball.cpp
index 62e7168..dfa22a5 100644
--- a/demos/opengl/trackball.cpp
+++ b/demos/opengl/trackball.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "trackball.h"
 #include "camera.h"
diff --git a/demos/opengl/trackball.h b/demos/opengl/trackball.h
index dda235f..a0026ba 100644
--- a/demos/opengl/trackball.h
+++ b/demos/opengl/trackball.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TRACKBALL_H
 #define EIGEN_TRACKBALL_H
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 6178d4b..c45d2e7 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 project(EigenDoc)
 
 set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE)
diff --git a/doc/examples/CMakeLists.txt b/doc/examples/CMakeLists.txt
index 39766c1..243650b 100644
--- a/doc/examples/CMakeLists.txt
+++ b/doc/examples/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(GLOB examples_SRCS "*.cpp")
 
 foreach(example_src ${examples_SRCS})
diff --git a/doc/examples/CustomizingEigen_Inheritance.cpp b/doc/examples/CustomizingEigen_Inheritance.cpp
index 26e1e3c..c56188d 100644
--- a/doc/examples/CustomizingEigen_Inheritance.cpp
+++ b/doc/examples/CustomizingEigen_Inheritance.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/Cwise_erf.cpp b/doc/examples/Cwise_erf.cpp
index 598c18c..8f9f4d6 100644
--- a/doc/examples/Cwise_erf.cpp
+++ b/doc/examples/Cwise_erf.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <unsupported/Eigen/SpecialFunctions>
 #include <iostream>
diff --git a/doc/examples/Cwise_erfc.cpp b/doc/examples/Cwise_erfc.cpp
index 98b0b75..c2c5df1 100644
--- a/doc/examples/Cwise_erfc.cpp
+++ b/doc/examples/Cwise_erfc.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <unsupported/Eigen/SpecialFunctions>
 #include <iostream>
diff --git a/doc/examples/Cwise_lgamma.cpp b/doc/examples/Cwise_lgamma.cpp
index 10866d8..fc45fbe 100644
--- a/doc/examples/Cwise_lgamma.cpp
+++ b/doc/examples/Cwise_lgamma.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <unsupported/Eigen/SpecialFunctions>
 #include <iostream>
diff --git a/doc/examples/DenseBase_middleCols_int.cpp b/doc/examples/DenseBase_middleCols_int.cpp
index cb7dace..3059cce 100644
--- a/doc/examples/DenseBase_middleCols_int.cpp
+++ b/doc/examples/DenseBase_middleCols_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/DenseBase_middleRows_int.cpp b/doc/examples/DenseBase_middleRows_int.cpp
index 6a25500..0d4c265 100644
--- a/doc/examples/DenseBase_middleRows_int.cpp
+++ b/doc/examples/DenseBase_middleRows_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/DenseBase_template_int_middleCols.cpp b/doc/examples/DenseBase_template_int_middleCols.cpp
index 52c032c..61e5a65 100644
--- a/doc/examples/DenseBase_template_int_middleCols.cpp
+++ b/doc/examples/DenseBase_template_int_middleCols.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/DenseBase_template_int_middleRows.cpp b/doc/examples/DenseBase_template_int_middleRows.cpp
index 4db5e70..f415db1 100644
--- a/doc/examples/DenseBase_template_int_middleRows.cpp
+++ b/doc/examples/DenseBase_template_int_middleRows.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/QuickStart_example.cpp b/doc/examples/QuickStart_example.cpp
index 103ddd5..52c857d 100644
--- a/doc/examples/QuickStart_example.cpp
+++ b/doc/examples/QuickStart_example.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/QuickStart_example2_dynamic.cpp b/doc/examples/QuickStart_example2_dynamic.cpp
index c7e7c32..4f99d04 100644
--- a/doc/examples/QuickStart_example2_dynamic.cpp
+++ b/doc/examples/QuickStart_example2_dynamic.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/QuickStart_example2_fixed.cpp b/doc/examples/QuickStart_example2_fixed.cpp
index e643a47..79a7083 100644
--- a/doc/examples/QuickStart_example2_fixed.cpp
+++ b/doc/examples/QuickStart_example2_fixed.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TemplateKeyword_flexible.cpp b/doc/examples/TemplateKeyword_flexible.cpp
index 09919a3..1fe7922 100644
--- a/doc/examples/TemplateKeyword_flexible.cpp
+++ b/doc/examples/TemplateKeyword_flexible.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/TemplateKeyword_simple.cpp b/doc/examples/TemplateKeyword_simple.cpp
index 4902988..16c7aba 100644
--- a/doc/examples/TemplateKeyword_simple.cpp
+++ b/doc/examples/TemplateKeyword_simple.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/TutorialInplaceLU.cpp b/doc/examples/TutorialInplaceLU.cpp
index a0bf8b5..fabae79 100644
--- a/doc/examples/TutorialInplaceLU.cpp
+++ b/doc/examples/TutorialInplaceLU.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgComputeTwice.cpp b/doc/examples/TutorialLinAlgComputeTwice.cpp
index 41ff22e..40c08bc 100644
--- a/doc/examples/TutorialLinAlgComputeTwice.cpp
+++ b/doc/examples/TutorialLinAlgComputeTwice.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgExComputeSolveError.cpp b/doc/examples/TutorialLinAlgExComputeSolveError.cpp
index 268aa35..040acd2 100644
--- a/doc/examples/TutorialLinAlgExComputeSolveError.cpp
+++ b/doc/examples/TutorialLinAlgExComputeSolveError.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp b/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp
index 7caed4a..c50f9ae 100644
--- a/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp
+++ b/doc/examples/TutorialLinAlgExSolveColPivHouseholderQR.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgExSolveLDLT.cpp b/doc/examples/TutorialLinAlgExSolveLDLT.cpp
index c11557d..6e93477 100644
--- a/doc/examples/TutorialLinAlgExSolveLDLT.cpp
+++ b/doc/examples/TutorialLinAlgExSolveLDLT.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgInverseDeterminant.cpp b/doc/examples/TutorialLinAlgInverseDeterminant.cpp
index c03fe5c..58df51d 100644
--- a/doc/examples/TutorialLinAlgInverseDeterminant.cpp
+++ b/doc/examples/TutorialLinAlgInverseDeterminant.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgRankRevealing.cpp b/doc/examples/TutorialLinAlgRankRevealing.cpp
index 1f89146..7d21b66 100644
--- a/doc/examples/TutorialLinAlgRankRevealing.cpp
+++ b/doc/examples/TutorialLinAlgRankRevealing.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgSVDSolve.cpp b/doc/examples/TutorialLinAlgSVDSolve.cpp
index 3cee2b4..a8d0fa9 100644
--- a/doc/examples/TutorialLinAlgSVDSolve.cpp
+++ b/doc/examples/TutorialLinAlgSVDSolve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp b/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp
index 6faccb6..4a0238e 100644
--- a/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp
+++ b/doc/examples/TutorialLinAlgSelfAdjointEigenSolver.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/TutorialLinAlgSetThreshold.cpp b/doc/examples/TutorialLinAlgSetThreshold.cpp
index 97251f8..c8daea0 100644
--- a/doc/examples/TutorialLinAlgSetThreshold.cpp
+++ b/doc/examples/TutorialLinAlgSetThreshold.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ArrayClass_accessors.cpp b/doc/examples/Tutorial_ArrayClass_accessors.cpp
index 5e91deb..c5761a5 100644
--- a/doc/examples/Tutorial_ArrayClass_accessors.cpp
+++ b/doc/examples/Tutorial_ArrayClass_accessors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ArrayClass_addition.cpp b/doc/examples/Tutorial_ArrayClass_addition.cpp
index e9a8f3e..9223600 100644
--- a/doc/examples/Tutorial_ArrayClass_addition.cpp
+++ b/doc/examples/Tutorial_ArrayClass_addition.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ArrayClass_cwise_other.cpp b/doc/examples/Tutorial_ArrayClass_cwise_other.cpp
index cbd3238..1a33aad 100644
--- a/doc/examples/Tutorial_ArrayClass_cwise_other.cpp
+++ b/doc/examples/Tutorial_ArrayClass_cwise_other.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ArrayClass_interop.cpp b/doc/examples/Tutorial_ArrayClass_interop.cpp
index 9b02f2a..972a0ce 100644
--- a/doc/examples/Tutorial_ArrayClass_interop.cpp
+++ b/doc/examples/Tutorial_ArrayClass_interop.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp b/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp
index b5bc6ae..7f391db 100644
--- a/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp
+++ b/doc/examples/Tutorial_ArrayClass_interop_matrix.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ArrayClass_mult.cpp b/doc/examples/Tutorial_ArrayClass_mult.cpp
index 39c2300..f2e4e14 100644
--- a/doc/examples/Tutorial_ArrayClass_mult.cpp
+++ b/doc/examples/Tutorial_ArrayClass_mult.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_BlockOperations_block_assignment.cpp b/doc/examples/Tutorial_BlockOperations_block_assignment.cpp
index 27b88b3..66963a5 100644
--- a/doc/examples/Tutorial_BlockOperations_block_assignment.cpp
+++ b/doc/examples/Tutorial_BlockOperations_block_assignment.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_BlockOperations_colrow.cpp b/doc/examples/Tutorial_BlockOperations_colrow.cpp
index b236334..e942c9f 100644
--- a/doc/examples/Tutorial_BlockOperations_colrow.cpp
+++ b/doc/examples/Tutorial_BlockOperations_colrow.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_BlockOperations_corner.cpp b/doc/examples/Tutorial_BlockOperations_corner.cpp
index cd093fc..6f4338a 100644
--- a/doc/examples/Tutorial_BlockOperations_corner.cpp
+++ b/doc/examples/Tutorial_BlockOperations_corner.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_BlockOperations_print_block.cpp b/doc/examples/Tutorial_BlockOperations_print_block.cpp
index 45683c9..1a04cb9 100644
--- a/doc/examples/Tutorial_BlockOperations_print_block.cpp
+++ b/doc/examples/Tutorial_BlockOperations_print_block.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_BlockOperations_vector.cpp b/doc/examples/Tutorial_BlockOperations_vector.cpp
index 0ce2b0b..99b1615 100644
--- a/doc/examples/Tutorial_BlockOperations_vector.cpp
+++ b/doc/examples/Tutorial_BlockOperations_vector.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_PartialLU_solve.cpp b/doc/examples/Tutorial_PartialLU_solve.cpp
index bfc0973..4d1ba18 100644
--- a/doc/examples/Tutorial_PartialLU_solve.cpp
+++ b/doc/examples/Tutorial_PartialLU_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <Eigen/LU>
 #include <iostream>
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp
index 61ab75f..2caae33 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp
index 63ee724..1b16ddb 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp
index 1f937ad..b995ba8 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp
index f40184b..b520ec2 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp
index 88e319d..7ca108a 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp
index 71f2030..0c3eb13 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp
index 75bfee0..c5c4cbc 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_operatornorm.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_operatornorm.cpp
index 695f538..c31f199 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_operatornorm.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_reductions_operatornorm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Dense>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp
index b525b2a..9c69963 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp
index ce3ca7e..411dc6c 100644
--- a/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp
+++ b/doc/examples/Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/Tutorial_simple_example_dynamic_size.cpp b/doc/examples/Tutorial_simple_example_dynamic_size.cpp
index 102223f..9706af7 100644
--- a/doc/examples/Tutorial_simple_example_dynamic_size.cpp
+++ b/doc/examples/Tutorial_simple_example_dynamic_size.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/Tutorial_simple_example_fixed_size.cpp b/doc/examples/Tutorial_simple_example_fixed_size.cpp
index 8e20230..ab059bb 100644
--- a/doc/examples/Tutorial_simple_example_fixed_size.cpp
+++ b/doc/examples/Tutorial_simple_example_fixed_size.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_Block.cpp b/doc/examples/class_Block.cpp
index 0fb9202..fa7b5eb 100644
--- a/doc/examples/class_Block.cpp
+++ b/doc/examples/class_Block.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_CwiseBinaryOp.cpp b/doc/examples/class_CwiseBinaryOp.cpp
index f8c1f92..1437189 100644
--- a/doc/examples/class_CwiseBinaryOp.cpp
+++ b/doc/examples/class_CwiseBinaryOp.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_CwiseUnaryOp.cpp b/doc/examples/class_CwiseUnaryOp.cpp
index 24177ce..05b9158 100644
--- a/doc/examples/class_CwiseUnaryOp.cpp
+++ b/doc/examples/class_CwiseUnaryOp.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_CwiseUnaryOp_ptrfun.cpp b/doc/examples/class_CwiseUnaryOp_ptrfun.cpp
index 279355c..fdd7042 100644
--- a/doc/examples/class_CwiseUnaryOp_ptrfun.cpp
+++ b/doc/examples/class_CwiseUnaryOp_ptrfun.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_FixedBlock.cpp b/doc/examples/class_FixedBlock.cpp
index 875e779..5743738 100644
--- a/doc/examples/class_FixedBlock.cpp
+++ b/doc/examples/class_FixedBlock.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_FixedReshaped.cpp b/doc/examples/class_FixedReshaped.cpp
index 29a04f6..e53ba22 100644
--- a/doc/examples/class_FixedReshaped.cpp
+++ b/doc/examples/class_FixedReshaped.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_FixedVectorBlock.cpp b/doc/examples/class_FixedVectorBlock.cpp
index cee8ac8..d2b5aa2 100644
--- a/doc/examples/class_FixedVectorBlock.cpp
+++ b/doc/examples/class_FixedVectorBlock.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_Reshaped.cpp b/doc/examples/class_Reshaped.cpp
index a91c3ff..1de7453 100644
--- a/doc/examples/class_Reshaped.cpp
+++ b/doc/examples/class_Reshaped.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/class_VectorBlock.cpp b/doc/examples/class_VectorBlock.cpp
index d427fa7..48fe8e7 100644
--- a/doc/examples/class_VectorBlock.cpp
+++ b/doc/examples/class_VectorBlock.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/function_taking_eigenbase.cpp b/doc/examples/function_taking_eigenbase.cpp
index 524ea18..6fd5e9b 100644
--- a/doc/examples/function_taking_eigenbase.cpp
+++ b/doc/examples/function_taking_eigenbase.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Core>
 
diff --git a/doc/examples/function_taking_ref.cpp b/doc/examples/function_taking_ref.cpp
index 8fd8c76..e298447 100644
--- a/doc/examples/function_taking_ref.cpp
+++ b/doc/examples/function_taking_ref.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/SVD>
 
diff --git a/doc/examples/make_circulant.cpp b/doc/examples/make_circulant.cpp
index 92e6aaa..7cef8d1 100644
--- a/doc/examples/make_circulant.cpp
+++ b/doc/examples/make_circulant.cpp
@@ -2,6 +2,8 @@
 This program is presented in several fragments in the doc page.
 Every fragment is in its own file; this file simply combines them.
 */
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include "make_circulant.cpp.preamble"
 #include "make_circulant.cpp.traits"
diff --git a/doc/examples/make_circulant2.cpp b/doc/examples/make_circulant2.cpp
index b3bbcfc..655390c 100644
--- a/doc/examples/make_circulant2.cpp
+++ b/doc/examples/make_circulant2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/matrixfree_cg.cpp b/doc/examples/matrixfree_cg.cpp
index 66f2c27..3dba26d 100644
--- a/doc/examples/matrixfree_cg.cpp
+++ b/doc/examples/matrixfree_cg.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Core>
 #include <Eigen/Dense>
diff --git a/doc/examples/nullary_indexing.cpp b/doc/examples/nullary_indexing.cpp
index f98e690..569d674 100644
--- a/doc/examples/nullary_indexing.cpp
+++ b/doc/examples/nullary_indexing.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 
diff --git a/doc/examples/tut_arithmetic_add_sub.cpp b/doc/examples/tut_arithmetic_add_sub.cpp
index ceb43ca..cada0ee 100644
--- a/doc/examples/tut_arithmetic_add_sub.cpp
+++ b/doc/examples/tut_arithmetic_add_sub.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_arithmetic_dot_cross.cpp b/doc/examples/tut_arithmetic_dot_cross.cpp
index 09eea39..3cd30ee 100644
--- a/doc/examples/tut_arithmetic_dot_cross.cpp
+++ b/doc/examples/tut_arithmetic_dot_cross.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_arithmetic_matrix_mul.cpp b/doc/examples/tut_arithmetic_matrix_mul.cpp
index ead4800..f1a22be 100644
--- a/doc/examples/tut_arithmetic_matrix_mul.cpp
+++ b/doc/examples/tut_arithmetic_matrix_mul.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_arithmetic_redux_basic.cpp b/doc/examples/tut_arithmetic_redux_basic.cpp
index 3140237..b3ed1ed 100644
--- a/doc/examples/tut_arithmetic_redux_basic.cpp
+++ b/doc/examples/tut_arithmetic_redux_basic.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_arithmetic_scalar_mul_div.cpp b/doc/examples/tut_arithmetic_scalar_mul_div.cpp
index 05f1ebd..22e0f59 100644
--- a/doc/examples/tut_arithmetic_scalar_mul_div.cpp
+++ b/doc/examples/tut_arithmetic_scalar_mul_div.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_matrix_coefficient_accessors.cpp b/doc/examples/tut_matrix_coefficient_accessors.cpp
index e509a98..065f4c2 100644
--- a/doc/examples/tut_matrix_coefficient_accessors.cpp
+++ b/doc/examples/tut_matrix_coefficient_accessors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_matrix_resize.cpp b/doc/examples/tut_matrix_resize.cpp
index 6e00919..aca785f 100644
--- a/doc/examples/tut_matrix_resize.cpp
+++ b/doc/examples/tut_matrix_resize.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/examples/tut_matrix_resize_fixed_size.cpp b/doc/examples/tut_matrix_resize_fixed_size.cpp
index 44645d8..d7dc975 100644
--- a/doc/examples/tut_matrix_resize_fixed_size.cpp
+++ b/doc/examples/tut_matrix_resize_fixed_size.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #include <Eigen/Dense>
 
diff --git a/doc/snippets/AngleAxis_mimic_euler.cpp b/doc/snippets/AngleAxis_mimic_euler.cpp
index 0033f59..8604a0c 100644
--- a/doc/snippets/AngleAxis_mimic_euler.cpp
+++ b/doc/snippets/AngleAxis_mimic_euler.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m;
 m = AngleAxisf(0.25 * EIGEN_PI, Vector3f::UnitX()) * AngleAxisf(0.5 * EIGEN_PI, Vector3f::UnitY()) *
     AngleAxisf(0.33 * EIGEN_PI, Vector3f::UnitZ());
diff --git a/doc/snippets/Array_initializer_list_23_cxx11.cpp b/doc/snippets/Array_initializer_list_23_cxx11.cpp
index 8f491cb..c17941b 100644
--- a/doc/snippets/Array_initializer_list_23_cxx11.cpp
+++ b/doc/snippets/Array_initializer_list_23_cxx11.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXXi a{{1, 2, 3}, {3, 4, 5}};
 cout << a << endl;
diff --git a/doc/snippets/Array_initializer_list_vector_cxx11.cpp b/doc/snippets/Array_initializer_list_vector_cxx11.cpp
index 398831f..9e14a94 100644
--- a/doc/snippets/Array_initializer_list_vector_cxx11.cpp
+++ b/doc/snippets/Array_initializer_list_vector_cxx11.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array<int, Dynamic, 1> v{{1, 2, 3, 4, 5}};
 cout << v << endl;
diff --git a/doc/snippets/Array_variadic_ctor_cxx11.cpp b/doc/snippets/Array_variadic_ctor_cxx11.cpp
index 6df78a5..9c63a4f 100644
--- a/doc/snippets/Array_variadic_ctor_cxx11.cpp
+++ b/doc/snippets/Array_variadic_ctor_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array<int, 1, 6> a(1, 2, 3, 4, 5, 6);
 Array<int, 3, 1> b{1, 2, 3};
 cout << a << "\n\n" << b << endl;
diff --git a/doc/snippets/BiCGSTAB_simple.cpp b/doc/snippets/BiCGSTAB_simple.cpp
index 68f07c9..d3755c9 100644
--- a/doc/snippets/BiCGSTAB_simple.cpp
+++ b/doc/snippets/BiCGSTAB_simple.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int n = 10000;
 VectorXd x(n), b(n);
 SparseMatrix<double> A(n, n);
diff --git a/doc/snippets/BiCGSTAB_step_by_step.cpp b/doc/snippets/BiCGSTAB_step_by_step.cpp
index 7fe53a5..33c5558 100644
--- a/doc/snippets/BiCGSTAB_step_by_step.cpp
+++ b/doc/snippets/BiCGSTAB_step_by_step.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int n = 10000;
 VectorXd x(n), b(n);
 SparseMatrix<double> A(n, n);
diff --git a/doc/snippets/CMakeLists.txt b/doc/snippets/CMakeLists.txt
index 1c25831..bc5dd5f 100644
--- a/doc/snippets/CMakeLists.txt
+++ b/doc/snippets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(GLOB snippets_SRCS "*.cpp")
 
 add_custom_target(all_snippets)
diff --git a/doc/snippets/ColPivHouseholderQR_solve.cpp b/doc/snippets/ColPivHouseholderQR_solve.cpp
index eb7d1ff..d93853c 100644
--- a/doc/snippets/ColPivHouseholderQR_solve.cpp
+++ b/doc/snippets/ColPivHouseholderQR_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m = Matrix3f::Random();
 Matrix3f y = Matrix3f::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/ComplexEigenSolver_compute.cpp b/doc/snippets/ComplexEigenSolver_compute.cpp
index e55409d..7b99898 100644
--- a/doc/snippets/ComplexEigenSolver_compute.cpp
+++ b/doc/snippets/ComplexEigenSolver_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf A = MatrixXcf::Random(4, 4);
 cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl;
 
diff --git a/doc/snippets/ComplexEigenSolver_eigenvalues.cpp b/doc/snippets/ComplexEigenSolver_eigenvalues.cpp
index d3bff51..ecbbd7e 100644
--- a/doc/snippets/ComplexEigenSolver_eigenvalues.cpp
+++ b/doc/snippets/ComplexEigenSolver_eigenvalues.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf ones = MatrixXcf::Ones(3, 3);
 ComplexEigenSolver<MatrixXcf> ces(ones, /* computeEigenvectors = */ false);
 cout << "The eigenvalues of the 3x3 matrix of ones are:" << endl << ces.eigenvalues() << endl;
diff --git a/doc/snippets/ComplexEigenSolver_eigenvectors.cpp b/doc/snippets/ComplexEigenSolver_eigenvectors.cpp
index 46aab4a..4afb6e5 100644
--- a/doc/snippets/ComplexEigenSolver_eigenvectors.cpp
+++ b/doc/snippets/ComplexEigenSolver_eigenvectors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf ones = MatrixXcf::Ones(3, 3);
 ComplexEigenSolver<MatrixXcf> ces(ones);
 cout << "The first eigenvector of the 3x3 matrix of ones is:" << endl << ces.eigenvectors().col(0) << endl;
diff --git a/doc/snippets/ComplexSchur_compute.cpp b/doc/snippets/ComplexSchur_compute.cpp
index 53b7f8b..0b0d169 100644
--- a/doc/snippets/ComplexSchur_compute.cpp
+++ b/doc/snippets/ComplexSchur_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf A = MatrixXcf::Random(4, 4);
 ComplexSchur<MatrixXcf> schur(4);
 schur.compute(A);
diff --git a/doc/snippets/ComplexSchur_matrixT.cpp b/doc/snippets/ComplexSchur_matrixT.cpp
index e1033ad..d995b67 100644
--- a/doc/snippets/ComplexSchur_matrixT.cpp
+++ b/doc/snippets/ComplexSchur_matrixT.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf A = MatrixXcf::Random(4, 4);
 cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl;
 ComplexSchur<MatrixXcf> schurOfA(A, false);  // false means do not compute U
diff --git a/doc/snippets/ComplexSchur_matrixU.cpp b/doc/snippets/ComplexSchur_matrixU.cpp
index 8138394..fa7fba1 100644
--- a/doc/snippets/ComplexSchur_matrixU.cpp
+++ b/doc/snippets/ComplexSchur_matrixU.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf A = MatrixXcf::Random(4, 4);
 cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl;
 ComplexSchur<MatrixXcf> schurOfA(A);
diff --git a/doc/snippets/Cwise_abs.cpp b/doc/snippets/Cwise_abs.cpp
index 744851a..a45b93b 100644
--- a/doc/snippets/Cwise_abs.cpp
+++ b/doc/snippets/Cwise_abs.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, -2, -3);
 cout << v.abs() << endl;
diff --git a/doc/snippets/Cwise_abs2.cpp b/doc/snippets/Cwise_abs2.cpp
index 71e5cb2..4f873aa 100644
--- a/doc/snippets/Cwise_abs2.cpp
+++ b/doc/snippets/Cwise_abs2.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, -2, -3);
 cout << v.abs2() << endl;
diff --git a/doc/snippets/Cwise_acos.cpp b/doc/snippets/Cwise_acos.cpp
index bbbbf52..6fca747 100644
--- a/doc/snippets/Cwise_acos.cpp
+++ b/doc/snippets/Cwise_acos.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(0, sqrt(2.) / 2, 1);
 cout << v.acos() << endl;
diff --git a/doc/snippets/Cwise_arg.cpp b/doc/snippets/Cwise_arg.cpp
index 3f45133..965fd17 100644
--- a/doc/snippets/Cwise_arg.cpp
+++ b/doc/snippets/Cwise_arg.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXcf v = ArrayXcf::Random(3);
 cout << v << endl << endl;
 cout << arg(v) << endl;
diff --git a/doc/snippets/Cwise_array_atan2_array.cpp b/doc/snippets/Cwise_array_atan2_array.cpp
index 5742f9a..2ba7161 100644
--- a/doc/snippets/Cwise_array_atan2_array.cpp
+++ b/doc/snippets/Cwise_array_atan2_array.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array<double, 1, 3> x(8, -25, 3), y(1. / 3., 0.5, -2.);
 cout << "atan2([" << x << "], [" << y << "]) = " << x.atan2(y) << endl;  // using ArrayBase::pow
 cout << "atan2([" << x << "], [" << y << "] = " << atan2(x, y) << endl;  // using Eigen::pow
diff --git a/doc/snippets/Cwise_array_power_array.cpp b/doc/snippets/Cwise_array_power_array.cpp
index ab2d87a..a9d4e61 100644
--- a/doc/snippets/Cwise_array_power_array.cpp
+++ b/doc/snippets/Cwise_array_power_array.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array<double, 1, 3> x(8, 25, 3), e(1. / 3., 0.5, 2.);
 cout << "[" << x << "]^[" << e << "] = " << x.pow(e) << endl;   // using ArrayBase::pow
 cout << "[" << x << "]^[" << e << "] = " << pow(x, e) << endl;  // using Eigen::pow
diff --git a/doc/snippets/Cwise_asin.cpp b/doc/snippets/Cwise_asin.cpp
index 3a64671..232477b 100644
--- a/doc/snippets/Cwise_asin.cpp
+++ b/doc/snippets/Cwise_asin.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(0, sqrt(2.) / 2, 1);
 cout << v.asin() << endl;
diff --git a/doc/snippets/Cwise_atan.cpp b/doc/snippets/Cwise_atan.cpp
index 1b60a9a..537b8f6 100644
--- a/doc/snippets/Cwise_atan.cpp
+++ b/doc/snippets/Cwise_atan.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(5, 0, 1);
 cout << v.atan() << endl;
diff --git a/doc/snippets/Cwise_boolean_and.cpp b/doc/snippets/Cwise_boolean_and.cpp
index 227ac36..21b128d 100644
--- a/doc/snippets/Cwise_boolean_and.cpp
+++ b/doc/snippets/Cwise_boolean_and.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(-1, 2, 1), w(-3, 2, 3);
 cout << ((v < w) && (v < 0)) << endl;
diff --git a/doc/snippets/Cwise_boolean_not.cpp b/doc/snippets/Cwise_boolean_not.cpp
index 404fd94..28bff2b 100644
--- a/doc/snippets/Cwise_boolean_not.cpp
+++ b/doc/snippets/Cwise_boolean_not.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v(1) *= 0.0 / 0.0;
 v(2) /= 0.0;
diff --git a/doc/snippets/Cwise_boolean_or.cpp b/doc/snippets/Cwise_boolean_or.cpp
index df87f7a..271689b 100644
--- a/doc/snippets/Cwise_boolean_or.cpp
+++ b/doc/snippets/Cwise_boolean_or.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(-1, 2, 1), w(-3, 2, 3);
 cout << ((v < w) || (v < 0)) << endl;
diff --git a/doc/snippets/Cwise_cbrt.cpp b/doc/snippets/Cwise_cbrt.cpp
index b6dcdfc..30cde97 100644
--- a/doc/snippets/Cwise_cbrt.cpp
+++ b/doc/snippets/Cwise_cbrt.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 4);
 cout << v.cbrt() << endl;
diff --git a/doc/snippets/Cwise_ceil.cpp b/doc/snippets/Cwise_ceil.cpp
index 6123891..caec7f9 100644
--- a/doc/snippets/Cwise_ceil.cpp
+++ b/doc/snippets/Cwise_ceil.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(7, -2, 2);
 cout << v << endl << endl;
 cout << ceil(v) << endl;
diff --git a/doc/snippets/Cwise_cos.cpp b/doc/snippets/Cwise_cos.cpp
index 37bb0a5..930d852 100644
--- a/doc/snippets/Cwise_cos.cpp
+++ b/doc/snippets/Cwise_cos.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(EIGEN_PI, EIGEN_PI / 2, EIGEN_PI / 3);
 cout << v.cos() << endl;
diff --git a/doc/snippets/Cwise_cosh.cpp b/doc/snippets/Cwise_cosh.cpp
index 3cd3304..fbbe1d4 100644
--- a/doc/snippets/Cwise_cosh.cpp
+++ b/doc/snippets/Cwise_cosh.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(5, 0, 1);
 cout << cosh(v) << endl;
diff --git a/doc/snippets/Cwise_cube.cpp b/doc/snippets/Cwise_cube.cpp
index 69f4c34..3ace6fa 100644
--- a/doc/snippets/Cwise_cube.cpp
+++ b/doc/snippets/Cwise_cube.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4);
 cout << v.cube() << endl;
diff --git a/doc/snippets/Cwise_equal_equal.cpp b/doc/snippets/Cwise_equal_equal.cpp
index 7fdeafa..66176b8 100644
--- a/doc/snippets/Cwise_equal_equal.cpp
+++ b/doc/snippets/Cwise_equal_equal.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v == w) << endl;
diff --git a/doc/snippets/Cwise_exp.cpp b/doc/snippets/Cwise_exp.cpp
index 9d65259..0cb3d7f 100644
--- a/doc/snippets/Cwise_exp.cpp
+++ b/doc/snippets/Cwise_exp.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 cout << v.exp() << endl;
diff --git a/doc/snippets/Cwise_floor.cpp b/doc/snippets/Cwise_floor.cpp
index 8f3ec85..ed05de1 100644
--- a/doc/snippets/Cwise_floor.cpp
+++ b/doc/snippets/Cwise_floor.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(7, -2, 2);
 cout << v << endl << endl;
 cout << floor(v) << endl;
diff --git a/doc/snippets/Cwise_greater.cpp b/doc/snippets/Cwise_greater.cpp
index 77d448a..51c5b7c 100644
--- a/doc/snippets/Cwise_greater.cpp
+++ b/doc/snippets/Cwise_greater.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v > w) << endl;
diff --git a/doc/snippets/Cwise_greater_equal.cpp b/doc/snippets/Cwise_greater_equal.cpp
index 8aa94e8..63618a9 100644
--- a/doc/snippets/Cwise_greater_equal.cpp
+++ b/doc/snippets/Cwise_greater_equal.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v >= w) << endl;
diff --git a/doc/snippets/Cwise_inverse.cpp b/doc/snippets/Cwise_inverse.cpp
index 292daef..a31d982 100644
--- a/doc/snippets/Cwise_inverse.cpp
+++ b/doc/snippets/Cwise_inverse.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4);
 cout << v.inverse() << endl;
diff --git a/doc/snippets/Cwise_isFinite.cpp b/doc/snippets/Cwise_isFinite.cpp
index c3309f2..744cdaf 100644
--- a/doc/snippets/Cwise_isFinite.cpp
+++ b/doc/snippets/Cwise_isFinite.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v(1) *= 0.0 / 0.0;
 v(2) /= 0.0;
diff --git a/doc/snippets/Cwise_isInf.cpp b/doc/snippets/Cwise_isInf.cpp
index c97b8a6..0a623c5 100644
--- a/doc/snippets/Cwise_isInf.cpp
+++ b/doc/snippets/Cwise_isInf.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v(1) *= 0.0 / 0.0;
 v(2) /= 0.0;
diff --git a/doc/snippets/Cwise_isNaN.cpp b/doc/snippets/Cwise_isNaN.cpp
index ab2b528..520f457 100644
--- a/doc/snippets/Cwise_isNaN.cpp
+++ b/doc/snippets/Cwise_isNaN.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v(1) *= 0.0 / 0.0;
 v(2) /= 0.0;
diff --git a/doc/snippets/Cwise_less.cpp b/doc/snippets/Cwise_less.cpp
index 95ccb30..dacafe7 100644
--- a/doc/snippets/Cwise_less.cpp
+++ b/doc/snippets/Cwise_less.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v < w) << endl;
diff --git a/doc/snippets/Cwise_less_equal.cpp b/doc/snippets/Cwise_less_equal.cpp
index 08d65be..2847286 100644
--- a/doc/snippets/Cwise_less_equal.cpp
+++ b/doc/snippets/Cwise_less_equal.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v <= w) << endl;
diff --git a/doc/snippets/Cwise_log.cpp b/doc/snippets/Cwise_log.cpp
index f3e13d6..275d0d0 100644
--- a/doc/snippets/Cwise_log.cpp
+++ b/doc/snippets/Cwise_log.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 cout << v.log() << endl;
diff --git a/doc/snippets/Cwise_log10.cpp b/doc/snippets/Cwise_log10.cpp
index 8656f48..bc2b1c3 100644
--- a/doc/snippets/Cwise_log10.cpp
+++ b/doc/snippets/Cwise_log10.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array4d v(-1, 0, 1, 2);
 cout << log10(v) << endl;
diff --git a/doc/snippets/Cwise_max.cpp b/doc/snippets/Cwise_max.cpp
index ab8d397..c230650 100644
--- a/doc/snippets/Cwise_max.cpp
+++ b/doc/snippets/Cwise_max.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4), w(4, 2, 3);
 cout << v.max(w) << endl;
diff --git a/doc/snippets/Cwise_min.cpp b/doc/snippets/Cwise_min.cpp
index 771eaf2..22ecc20 100644
--- a/doc/snippets/Cwise_min.cpp
+++ b/doc/snippets/Cwise_min.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4), w(4, 2, 3);
 cout << v.min(w) << endl;
diff --git a/doc/snippets/Cwise_minus.cpp b/doc/snippets/Cwise_minus.cpp
index 1389b4a..9c6876d 100644
--- a/doc/snippets/Cwise_minus.cpp
+++ b/doc/snippets/Cwise_minus.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 cout << v - 5 << endl;
diff --git a/doc/snippets/Cwise_minus_equal.cpp b/doc/snippets/Cwise_minus_equal.cpp
index 33433e0..5ec0cef 100644
--- a/doc/snippets/Cwise_minus_equal.cpp
+++ b/doc/snippets/Cwise_minus_equal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v -= 5;
 cout << v << endl;
diff --git a/doc/snippets/Cwise_not_equal.cpp b/doc/snippets/Cwise_not_equal.cpp
index 60aea2b..3ac90f2 100644
--- a/doc/snippets/Cwise_not_equal.cpp
+++ b/doc/snippets/Cwise_not_equal.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(3, 2, 1);
 cout << (v != w) << endl;
diff --git a/doc/snippets/Cwise_plus.cpp b/doc/snippets/Cwise_plus.cpp
index 7a878d6..f22bf3f 100644
--- a/doc/snippets/Cwise_plus.cpp
+++ b/doc/snippets/Cwise_plus.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 cout << v + 5 << endl;
diff --git a/doc/snippets/Cwise_plus_equal.cpp b/doc/snippets/Cwise_plus_equal.cpp
index 3e00ba2..4d9117d 100644
--- a/doc/snippets/Cwise_plus_equal.cpp
+++ b/doc/snippets/Cwise_plus_equal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3);
 v += 5;
 cout << v << endl;
diff --git a/doc/snippets/Cwise_pow.cpp b/doc/snippets/Cwise_pow.cpp
index 28a9dc5..da62ba1 100644
--- a/doc/snippets/Cwise_pow.cpp
+++ b/doc/snippets/Cwise_pow.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(8, 27, 64);
 cout << v.pow(0.333333) << endl;
diff --git a/doc/snippets/Cwise_product.cpp b/doc/snippets/Cwise_product.cpp
index cee5b20..d614b1c 100644
--- a/doc/snippets/Cwise_product.cpp
+++ b/doc/snippets/Cwise_product.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array33i a = Array33i::Random(), b = Array33i::Random();
 Array33i c = a * b;
 cout << "a:\n" << a << "\nb:\n" << b << "\nc:\n" << c << endl;
diff --git a/doc/snippets/Cwise_quotient.cpp b/doc/snippets/Cwise_quotient.cpp
index ab8b506..04f559c 100644
--- a/doc/snippets/Cwise_quotient.cpp
+++ b/doc/snippets/Cwise_quotient.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4), w(4, 2, 3);
 cout << v / w << endl;
diff --git a/doc/snippets/Cwise_rint.cpp b/doc/snippets/Cwise_rint.cpp
index eb8bc84..7dda1d9 100644
--- a/doc/snippets/Cwise_rint.cpp
+++ b/doc/snippets/Cwise_rint.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(7, -2, 2);
 cout << v << endl << endl;
 cout << rint(v) << endl;
diff --git a/doc/snippets/Cwise_round.cpp b/doc/snippets/Cwise_round.cpp
index d9ff417..f87ae61 100644
--- a/doc/snippets/Cwise_round.cpp
+++ b/doc/snippets/Cwise_round.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(7, -2, 2);
 cout << v << endl << endl;
 cout << round(v) << endl;
diff --git a/doc/snippets/Cwise_scalar_power_array.cpp b/doc/snippets/Cwise_scalar_power_array.cpp
index 65bb478..8d9c88f 100644
--- a/doc/snippets/Cwise_scalar_power_array.cpp
+++ b/doc/snippets/Cwise_scalar_power_array.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array<double, 1, 3> e(2, -3, 1. / 3.);
 cout << "10^[" << e << "] = " << pow(10, e) << endl;
diff --git a/doc/snippets/Cwise_sign.cpp b/doc/snippets/Cwise_sign.cpp
index 55d24ab..985d928 100644
--- a/doc/snippets/Cwise_sign.cpp
+++ b/doc/snippets/Cwise_sign.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(-3, 5, 0);
 cout << v.sign() << endl;
diff --git a/doc/snippets/Cwise_sin.cpp b/doc/snippets/Cwise_sin.cpp
index 697a188..983fec6 100644
--- a/doc/snippets/Cwise_sin.cpp
+++ b/doc/snippets/Cwise_sin.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(EIGEN_PI, EIGEN_PI / 2, EIGEN_PI / 3);
 cout << v.sin() << endl;
diff --git a/doc/snippets/Cwise_sinh.cpp b/doc/snippets/Cwise_sinh.cpp
index aefcd6d..50ea4b3 100644
--- a/doc/snippets/Cwise_sinh.cpp
+++ b/doc/snippets/Cwise_sinh.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(5, 0, 1);
 cout << sinh(v) << endl;
diff --git a/doc/snippets/Cwise_slash_equal.cpp b/doc/snippets/Cwise_slash_equal.cpp
index cb776b8..6b06b34 100644
--- a/doc/snippets/Cwise_slash_equal.cpp
+++ b/doc/snippets/Cwise_slash_equal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(3, 2, 4), w(5, 4, 2);
 v /= w;
 cout << v << endl;
diff --git a/doc/snippets/Cwise_sqrt.cpp b/doc/snippets/Cwise_sqrt.cpp
index e0e5d36..1f55418 100644
--- a/doc/snippets/Cwise_sqrt.cpp
+++ b/doc/snippets/Cwise_sqrt.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 4);
 cout << v.sqrt() << endl;
diff --git a/doc/snippets/Cwise_square.cpp b/doc/snippets/Cwise_square.cpp
index 2b3132e..6fd4226 100644
--- a/doc/snippets/Cwise_square.cpp
+++ b/doc/snippets/Cwise_square.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(2, 3, 4);
 cout << v.square() << endl;
diff --git a/doc/snippets/Cwise_tan.cpp b/doc/snippets/Cwise_tan.cpp
index ccb85f5..6e26d4f 100644
--- a/doc/snippets/Cwise_tan.cpp
+++ b/doc/snippets/Cwise_tan.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(EIGEN_PI, EIGEN_PI / 2, EIGEN_PI / 3);
 cout << v.tan() << endl;
diff --git a/doc/snippets/Cwise_tanh.cpp b/doc/snippets/Cwise_tanh.cpp
index ae8fea5..467da3a 100644
--- a/doc/snippets/Cwise_tanh.cpp
+++ b/doc/snippets/Cwise_tanh.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(5, 0, 1);
 cout << tanh(v) << endl;
diff --git a/doc/snippets/Cwise_times_equal.cpp b/doc/snippets/Cwise_times_equal.cpp
index 45151be..b5d80d5 100644
--- a/doc/snippets/Cwise_times_equal.cpp
+++ b/doc/snippets/Cwise_times_equal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array3d v(1, 2, 3), w(2, 3, 0);
 v *= w;
 cout << v << endl;
diff --git a/doc/snippets/Cwise_trunc.cpp b/doc/snippets/Cwise_trunc.cpp
index 8fb29c8..e242d42 100644
--- a/doc/snippets/Cwise_trunc.cpp
+++ b/doc/snippets/Cwise_trunc.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXd v = ArrayXd::LinSpaced(7, -2, 2);
 cout << v << endl << endl;
 cout << trunc(v) << endl;
diff --git a/doc/snippets/DenseBase_LinSpaced.cpp b/doc/snippets/DenseBase_LinSpaced.cpp
index a57053f..1cca372 100644
--- a/doc/snippets/DenseBase_LinSpaced.cpp
+++ b/doc/snippets/DenseBase_LinSpaced.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << VectorXi::LinSpaced(4, 7, 10).transpose() << endl;
 cout << VectorXd::LinSpaced(5, 0.0, 1.0).transpose() << endl;
diff --git a/doc/snippets/DenseBase_LinSpacedInt.cpp b/doc/snippets/DenseBase_LinSpacedInt.cpp
index 732d70a..e7031a5 100644
--- a/doc/snippets/DenseBase_LinSpacedInt.cpp
+++ b/doc/snippets/DenseBase_LinSpacedInt.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << "Even spacing inputs:" << endl;
 cout << VectorXi::LinSpaced(8, 1, 4).transpose() << endl;
 cout << VectorXi::LinSpaced(8, 1, 8).transpose() << endl;
diff --git a/doc/snippets/DenseBase_LinSpaced_seq_deprecated.cpp b/doc/snippets/DenseBase_LinSpaced_seq_deprecated.cpp
index 3c4a565..2c1cbe9 100644
--- a/doc/snippets/DenseBase_LinSpaced_seq_deprecated.cpp
+++ b/doc/snippets/DenseBase_LinSpaced_seq_deprecated.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << VectorXi::LinSpaced(Sequential, 4, 7, 10).transpose() << endl;
 cout << VectorXd::LinSpaced(Sequential, 5, 0.0, 1.0).transpose() << endl;
diff --git a/doc/snippets/DenseBase_setLinSpaced.cpp b/doc/snippets/DenseBase_setLinSpaced.cpp
index 6c1eca6..83ef5c8 100644
--- a/doc/snippets/DenseBase_setLinSpaced.cpp
+++ b/doc/snippets/DenseBase_setLinSpaced.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXf v;
 v.setLinSpaced(5, 0.5f, 1.5f);
 cout << v << endl;
diff --git a/doc/snippets/DirectionWise_hnormalized.cpp b/doc/snippets/DirectionWise_hnormalized.cpp
index 8a46652..0f00845 100644
--- a/doc/snippets/DirectionWise_hnormalized.cpp
+++ b/doc/snippets/DirectionWise_hnormalized.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4Xd M = Matrix4Xd::Random(4, 5);
 Projective3d P(Matrix4d::Random());
 cout << "The matrix M is:" << endl << M << endl << endl;
diff --git a/doc/snippets/DirectionWise_replicate.cpp b/doc/snippets/DirectionWise_replicate.cpp
index c448307..9e3e11f 100644
--- a/doc/snippets/DirectionWise_replicate.cpp
+++ b/doc/snippets/DirectionWise_replicate.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m = MatrixXi::Random(2, 3);
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "m.colwise().replicate<3>() = ..." << endl;
diff --git a/doc/snippets/DirectionWise_replicate_int.cpp b/doc/snippets/DirectionWise_replicate_int.cpp
index f9b1b53..1529177 100644
--- a/doc/snippets/DirectionWise_replicate_int.cpp
+++ b/doc/snippets/DirectionWise_replicate_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3i v = Vector3i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "v.rowwise().replicate(5) = ..." << endl;
diff --git a/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp b/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp
index b54425f..dda5527 100644
--- a/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp
+++ b/doc/snippets/EigenSolver_EigenSolver_MatrixType.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd A = MatrixXd::Random(6, 6);
 cout << "Here is a random 6x6 matrix, A:" << endl << A << endl << endl;
 
diff --git a/doc/snippets/EigenSolver_compute.cpp b/doc/snippets/EigenSolver_compute.cpp
index 6f794ee..d9e29ff 100644
--- a/doc/snippets/EigenSolver_compute.cpp
+++ b/doc/snippets/EigenSolver_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 EigenSolver<MatrixXf> es;
 MatrixXf A = MatrixXf::Random(4, 4);
 es.compute(A, /* computeEigenvectors = */ false);
diff --git a/doc/snippets/EigenSolver_eigenvalues.cpp b/doc/snippets/EigenSolver_eigenvalues.cpp
index 866183c..0a9a7ce 100644
--- a/doc/snippets/EigenSolver_eigenvalues.cpp
+++ b/doc/snippets/EigenSolver_eigenvalues.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 EigenSolver<MatrixXd> es(ones, false);
 cout << "The eigenvalues of the 3x3 matrix of ones are:" << endl << es.eigenvalues() << endl;
diff --git a/doc/snippets/EigenSolver_eigenvectors.cpp b/doc/snippets/EigenSolver_eigenvectors.cpp
index 6d4606d..16fc84f 100644
--- a/doc/snippets/EigenSolver_eigenvectors.cpp
+++ b/doc/snippets/EigenSolver_eigenvectors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 EigenSolver<MatrixXd> es(ones);
 cout << "The first eigenvector of the 3x3 matrix of ones is:" << endl << es.eigenvectors().col(0) << endl;
diff --git a/doc/snippets/EigenSolver_pseudoEigenvectors.cpp b/doc/snippets/EigenSolver_pseudoEigenvectors.cpp
index d9f3698..633d52b 100644
--- a/doc/snippets/EigenSolver_pseudoEigenvectors.cpp
+++ b/doc/snippets/EigenSolver_pseudoEigenvectors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd A = MatrixXd::Random(6, 6);
 cout << "Here is a random 6x6 matrix, A:" << endl << A << endl << endl;
 
diff --git a/doc/snippets/FullPivHouseholderQR_solve.cpp b/doc/snippets/FullPivHouseholderQR_solve.cpp
index 621d1d1..ba48c21 100644
--- a/doc/snippets/FullPivHouseholderQR_solve.cpp
+++ b/doc/snippets/FullPivHouseholderQR_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m = Matrix3f::Random();
 Matrix3f y = Matrix3f::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/FullPivLU_image.cpp b/doc/snippets/FullPivLU_image.cpp
index a8f664e..8e5ef27 100644
--- a/doc/snippets/FullPivLU_image.cpp
+++ b/doc/snippets/FullPivLU_image.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m;
 m << 1, 1, 0, 1, 3, 2, 0, 1, 1;
 cout << "Here is the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/FullPivLU_kernel.cpp b/doc/snippets/FullPivLU_kernel.cpp
index 448a515..96af748 100644
--- a/doc/snippets/FullPivLU_kernel.cpp
+++ b/doc/snippets/FullPivLU_kernel.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m = MatrixXf::Random(3, 5);
 cout << "Here is the matrix m:" << endl << m << endl;
 MatrixXf ker = m.fullPivLu().kernel();
diff --git a/doc/snippets/FullPivLU_solve.cpp b/doc/snippets/FullPivLU_solve.cpp
index a4ecb83..be277ab 100644
--- a/doc/snippets/FullPivLU_solve.cpp
+++ b/doc/snippets/FullPivLU_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix<float, 2, 3> m = Matrix<float, 2, 3>::Random();
 Matrix2f y = Matrix2f::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/GeneralizedEigenSolver.cpp b/doc/snippets/GeneralizedEigenSolver.cpp
index f7a7254..96d4b93 100644
--- a/doc/snippets/GeneralizedEigenSolver.cpp
+++ b/doc/snippets/GeneralizedEigenSolver.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 GeneralizedEigenSolver<MatrixXf> ges;
 MatrixXf A = MatrixXf::Random(4, 4);
 MatrixXf B = MatrixXf::Random(4, 4);
diff --git a/doc/snippets/HessenbergDecomposition_compute.cpp b/doc/snippets/HessenbergDecomposition_compute.cpp
index 91c015a..8c85116 100644
--- a/doc/snippets/HessenbergDecomposition_compute.cpp
+++ b/doc/snippets/HessenbergDecomposition_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf A = MatrixXcf::Random(4, 4);
 HessenbergDecomposition<MatrixXcf> hd(4);
 hd.compute(A);
diff --git a/doc/snippets/HessenbergDecomposition_matrixH.cpp b/doc/snippets/HessenbergDecomposition_matrixH.cpp
index 1386feb..34000f7 100644
--- a/doc/snippets/HessenbergDecomposition_matrixH.cpp
+++ b/doc/snippets/HessenbergDecomposition_matrixH.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4f A = MatrixXf::Random(4, 4);
 cout << "Here is a random 4x4 matrix:" << endl << A << endl;
 HessenbergDecomposition<MatrixXf> hessOfA(A);
diff --git a/doc/snippets/HessenbergDecomposition_packedMatrix.cpp b/doc/snippets/HessenbergDecomposition_packedMatrix.cpp
index 66c1fd0..82451ce 100644
--- a/doc/snippets/HessenbergDecomposition_packedMatrix.cpp
+++ b/doc/snippets/HessenbergDecomposition_packedMatrix.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4d A = Matrix4d::Random(4, 4);
 cout << "Here is a random 4x4 matrix:" << endl << A << endl;
 HessenbergDecomposition<Matrix4d> hessOfA(A);
diff --git a/doc/snippets/HouseholderQR_householderQ.cpp b/doc/snippets/HouseholderQR_householderQ.cpp
index 6b5cb92..dc53d51 100644
--- a/doc/snippets/HouseholderQR_householderQ.cpp
+++ b/doc/snippets/HouseholderQR_householderQ.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A(MatrixXf::Random(5, 3)), thinQ(MatrixXf::Identity(5, 3)), Q;
 A.setRandom();
 HouseholderQR<MatrixXf> qr(A);
diff --git a/doc/snippets/HouseholderQR_solve.cpp b/doc/snippets/HouseholderQR_solve.cpp
index 35d70ba..84244cd 100644
--- a/doc/snippets/HouseholderQR_solve.cpp
+++ b/doc/snippets/HouseholderQR_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 typedef Matrix<float, 3, 3> Matrix3x3;
 Matrix3x3 m = Matrix3x3::Random();
 Matrix3f y = Matrix3f::Random();
diff --git a/doc/snippets/HouseholderSequence_HouseholderSequence.cpp b/doc/snippets/HouseholderSequence_HouseholderSequence.cpp
index ae088e6..3f21084 100644
--- a/doc/snippets/HouseholderSequence_HouseholderSequence.cpp
+++ b/doc/snippets/HouseholderSequence_HouseholderSequence.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d v = Matrix3d::Random();
 cout << "The matrix v is:" << endl;
 cout << v << endl;
diff --git a/doc/snippets/IOFormat.cpp b/doc/snippets/IOFormat.cpp
index 735f5dd..379c580 100644
--- a/doc/snippets/IOFormat.cpp
+++ b/doc/snippets/IOFormat.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 std::string sep = "\n----------------------------------------\n";
 Matrix3d m1;
 m1 << 1.111111, 2, 3.33333, 4, 5, 6, 7, 8.888888, 9;
diff --git a/doc/snippets/JacobiSVD_basic.cpp b/doc/snippets/JacobiSVD_basic.cpp
index f451727..ebec327 100644
--- a/doc/snippets/JacobiSVD_basic.cpp
+++ b/doc/snippets/JacobiSVD_basic.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m = MatrixXf::Random(3, 2);
 cout << "Here is the matrix m:" << endl << m << endl;
 JacobiSVD<MatrixXf, ComputeThinU | ComputeThinV> svd(m);
diff --git a/doc/snippets/Jacobi_makeGivens.cpp b/doc/snippets/Jacobi_makeGivens.cpp
index 6f8ec05..d31f80e 100644
--- a/doc/snippets/Jacobi_makeGivens.cpp
+++ b/doc/snippets/Jacobi_makeGivens.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector2f v = Vector2f::Random();
 JacobiRotation<float> G;
 G.makeGivens(v.x(), v.y());
diff --git a/doc/snippets/Jacobi_makeJacobi.cpp b/doc/snippets/Jacobi_makeJacobi.cpp
index a86e80a..0db5e59 100644
--- a/doc/snippets/Jacobi_makeJacobi.cpp
+++ b/doc/snippets/Jacobi_makeJacobi.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2f m = Matrix2f::Random();
 m = (m + m.adjoint()).eval();
 JacobiRotation<float> J;
diff --git a/doc/snippets/LLT_example.cpp b/doc/snippets/LLT_example.cpp
index c464ac9..6b14e38 100644
--- a/doc/snippets/LLT_example.cpp
+++ b/doc/snippets/LLT_example.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd A(3, 3);
 A << 4, -1, 2, -1, 6, 0, 2, 0, 5;
 cout << "The matrix A is" << endl << A << endl;
diff --git a/doc/snippets/LLT_solve.cpp b/doc/snippets/LLT_solve.cpp
index 52659ab..137375b 100644
--- a/doc/snippets/LLT_solve.cpp
+++ b/doc/snippets/LLT_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 typedef Matrix<float, Dynamic, 2> DataMatrix;
 // let's generate some samples on the 3D plane of equation z = 2x+3y (with some noise)
 DataMatrix samples = DataMatrix::Random(12, 2);
diff --git a/doc/snippets/LeastSquaresCOD.cpp b/doc/snippets/LeastSquaresCOD.cpp
index b7325bc..943db1d 100644
--- a/doc/snippets/LeastSquaresCOD.cpp
+++ b/doc/snippets/LeastSquaresCOD.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A = MatrixXf::Random(3, 2);
 VectorXf b = VectorXf::Random(3);
 cout << "The solution using the COD is:\n" << A.completeOrthogonalDecomposition().solve(b) << endl;
diff --git a/doc/snippets/LeastSquaresNormalEquations.cpp b/doc/snippets/LeastSquaresNormalEquations.cpp
index 00434f7..f949891 100644
--- a/doc/snippets/LeastSquaresNormalEquations.cpp
+++ b/doc/snippets/LeastSquaresNormalEquations.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A = MatrixXf::Random(3, 2);
 VectorXf b = VectorXf::Random(3);
 cout << "The solution using normal equations is:\n" << (A.transpose() * A).ldlt().solve(A.transpose() * b) << endl;
diff --git a/doc/snippets/LeastSquaresQR.cpp b/doc/snippets/LeastSquaresQR.cpp
index 9f8f723..0bee0f6 100644
--- a/doc/snippets/LeastSquaresQR.cpp
+++ b/doc/snippets/LeastSquaresQR.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A = MatrixXf::Random(3, 2);
 VectorXf b = VectorXf::Random(3);
 cout << "The solution using the QR decomposition is:\n" << A.colPivHouseholderQr().solve(b) << endl;
diff --git a/doc/snippets/Map_general_stride.cpp b/doc/snippets/Map_general_stride.cpp
index e2677ff..abd2c3f 100644
--- a/doc/snippets/Map_general_stride.cpp
+++ b/doc/snippets/Map_general_stride.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int array[24];
 for (int i = 0; i < 24; ++i) array[i] = i;
 cout << Map<MatrixXi, 0, Stride<Dynamic, 2> >(array, 3, 3, Stride<Dynamic, 2>(8, 2)) << endl;
diff --git a/doc/snippets/Map_inner_stride.cpp b/doc/snippets/Map_inner_stride.cpp
index f315756..6f9e650 100644
--- a/doc/snippets/Map_inner_stride.cpp
+++ b/doc/snippets/Map_inner_stride.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int array[12];
 for (int i = 0; i < 12; ++i) array[i] = i;
 cout << Map<VectorXi, 0, InnerStride<2> >(array, 6)  // the inner stride has already been passed as template parameter
diff --git a/doc/snippets/Map_outer_stride.cpp b/doc/snippets/Map_outer_stride.cpp
index 75b1655..2629eb9 100644
--- a/doc/snippets/Map_outer_stride.cpp
+++ b/doc/snippets/Map_outer_stride.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int array[12];
 for (int i = 0; i < 12; ++i) array[i] = i;
 cout << Map<MatrixXi, 0, OuterStride<> >(array, 3, 3, OuterStride<>(4)) << endl;
diff --git a/doc/snippets/Map_placement_new.cpp b/doc/snippets/Map_placement_new.cpp
index eb5213d..3cd37e2 100644
--- a/doc/snippets/Map_placement_new.cpp
+++ b/doc/snippets/Map_placement_new.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
 Map<RowVectorXi> v(data, 4);
 cout << "The mapped vector v is: " << v << "\n";
diff --git a/doc/snippets/Map_simple.cpp b/doc/snippets/Map_simple.cpp
index 3e8fa81..541d529 100644
--- a/doc/snippets/Map_simple.cpp
+++ b/doc/snippets/Map_simple.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int array[9];
 for (int i = 0; i < 9; ++i) array[i] = i;
 cout << Map<Matrix3i>(array) << endl;
diff --git a/doc/snippets/MatrixBase_adjoint.cpp b/doc/snippets/MatrixBase_adjoint.cpp
index 4680d59..74def23 100644
--- a/doc/snippets/MatrixBase_adjoint.cpp
+++ b/doc/snippets/MatrixBase_adjoint.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2cf m = Matrix2cf::Random();
 cout << "Here is the 2x2 complex matrix m:" << endl << m << endl;
 cout << "Here is the adjoint of m:" << endl << m.adjoint() << endl;
diff --git a/doc/snippets/MatrixBase_all.cpp b/doc/snippets/MatrixBase_all.cpp
index f31d10c..371fcc9 100644
--- a/doc/snippets/MatrixBase_all.cpp
+++ b/doc/snippets/MatrixBase_all.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3f boxMin(Vector3f::Zero()), boxMax(Vector3f::Ones());
 Vector3f p0 = Vector3f::Random(), p1 = Vector3f::Random().cwiseAbs();
 // let's check if p0 and p1 are inside the axis aligned box defined by the corners boxMin,boxMax:
diff --git a/doc/snippets/MatrixBase_applyOnTheLeft.cpp b/doc/snippets/MatrixBase_applyOnTheLeft.cpp
index 00676a3..26d402e 100644
--- a/doc/snippets/MatrixBase_applyOnTheLeft.cpp
+++ b/doc/snippets/MatrixBase_applyOnTheLeft.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A = Matrix3f::Random(3, 3), B;
 B << 0, 1, 0, 0, 0, 1, 1, 0, 0;
 cout << "At start, A = " << endl << A << endl;
diff --git a/doc/snippets/MatrixBase_applyOnTheRight.cpp b/doc/snippets/MatrixBase_applyOnTheRight.cpp
index a1008c6..1d25b78 100644
--- a/doc/snippets/MatrixBase_applyOnTheRight.cpp
+++ b/doc/snippets/MatrixBase_applyOnTheRight.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A = Matrix3f::Random(3, 3), B;
 B << 0, 1, 0, 0, 0, 1, 1, 0, 0;
 cout << "At start, A = " << endl << A << endl;
diff --git a/doc/snippets/MatrixBase_array.cpp b/doc/snippets/MatrixBase_array.cpp
index 456d1d6..dfbb047 100644
--- a/doc/snippets/MatrixBase_array.cpp
+++ b/doc/snippets/MatrixBase_array.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(1, 2, 3);
 v.array() += 3;
 v.array() -= 2;
diff --git a/doc/snippets/MatrixBase_array_const.cpp b/doc/snippets/MatrixBase_array_const.cpp
index e662f6c..235022c 100644
--- a/doc/snippets/MatrixBase_array_const.cpp
+++ b/doc/snippets/MatrixBase_array_const.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(-1, 2, -3);
 cout << "the absolute values:" << endl << v.array().abs() << endl;
 cout << "the absolute values plus one:" << endl << v.array().abs() + 1 << endl;
diff --git a/doc/snippets/MatrixBase_asDiagonal.cpp b/doc/snippets/MatrixBase_asDiagonal.cpp
index 637e95b..1fefa51 100644
--- a/doc/snippets/MatrixBase_asDiagonal.cpp
+++ b/doc/snippets/MatrixBase_asDiagonal.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << Matrix3i(Vector3i(2, 5, 6).asDiagonal()) << endl;
diff --git a/doc/snippets/MatrixBase_block_int_int.cpp b/doc/snippets/MatrixBase_block_int_int.cpp
index ade73ee..b457b1f 100644
--- a/doc/snippets/MatrixBase_block_int_int.cpp
+++ b/doc/snippets/MatrixBase_block_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.block<2,2>(1,1):" << endl << m.block<2, 2>(1, 1) << endl;
diff --git a/doc/snippets/MatrixBase_block_int_int_int_int.cpp b/doc/snippets/MatrixBase_block_int_int_int_int.cpp
index 7238cbb..96eb584 100644
--- a/doc/snippets/MatrixBase_block_int_int_int_int.cpp
+++ b/doc/snippets/MatrixBase_block_int_int_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.block(1, 1, 2, 2):" << endl << m.block(1, 1, 2, 2) << endl;
diff --git a/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp b/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp
index ebae95e..67ae4bb 100644
--- a/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_bottomLeftCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomLeftCorner(2, 2):" << endl;
diff --git a/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp b/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp
index bf05093..4a475e8 100644
--- a/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_bottomRightCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomRightCorner(2, 2):" << endl;
diff --git a/doc/snippets/MatrixBase_bottomRows_int.cpp b/doc/snippets/MatrixBase_bottomRows_int.cpp
index 47ca92e..332dbd1 100644
--- a/doc/snippets/MatrixBase_bottomRows_int.cpp
+++ b/doc/snippets/MatrixBase_bottomRows_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.bottomRows(2):" << endl;
diff --git a/doc/snippets/MatrixBase_cast.cpp b/doc/snippets/MatrixBase_cast.cpp
index 016880b..3939f73 100644
--- a/doc/snippets/MatrixBase_cast.cpp
+++ b/doc/snippets/MatrixBase_cast.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2d md = Matrix2d::Identity() * 0.45;
 Matrix2f mf = Matrix2f::Identity();
 cout << md + mf.cast<double>() << endl;
diff --git a/doc/snippets/MatrixBase_col.cpp b/doc/snippets/MatrixBase_col.cpp
index cf0241e..613cc6a 100644
--- a/doc/snippets/MatrixBase_col.cpp
+++ b/doc/snippets/MatrixBase_col.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Identity();
 m.col(1) = Vector3d(4, 5, 6);
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_colwise.cpp b/doc/snippets/MatrixBase_colwise.cpp
index a31033d..b47564c 100644
--- a/doc/snippets/MatrixBase_colwise.cpp
+++ b/doc/snippets/MatrixBase_colwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the sum of each column:" << endl << m.colwise().sum() << endl;
diff --git a/doc/snippets/MatrixBase_colwise_iterator_cxx11.cpp b/doc/snippets/MatrixBase_colwise_iterator_cxx11.cpp
index c033043..3a3de98 100644
--- a/doc/snippets/MatrixBase_colwise_iterator_cxx11.cpp
+++ b/doc/snippets/MatrixBase_colwise_iterator_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i m = Matrix3i::Random();
 cout << "Here is the initial matrix m:" << endl << m << endl;
 int i = -1;
diff --git a/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp b/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp
index 774d4d4..ea7417d 100644
--- a/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp
+++ b/doc/snippets/MatrixBase_computeInverseAndDetWithCheck.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 Matrix3d inverse;
diff --git a/doc/snippets/MatrixBase_computeInverseWithCheck.cpp b/doc/snippets/MatrixBase_computeInverseWithCheck.cpp
index 7c95100..1db4cfd 100644
--- a/doc/snippets/MatrixBase_computeInverseWithCheck.cpp
+++ b/doc/snippets/MatrixBase_computeInverseWithCheck.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 Matrix3d inverse;
diff --git a/doc/snippets/MatrixBase_cwiseAbs.cpp b/doc/snippets/MatrixBase_cwiseAbs.cpp
index e424190..f107315 100644
--- a/doc/snippets/MatrixBase_cwiseAbs.cpp
+++ b/doc/snippets/MatrixBase_cwiseAbs.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(2, 3);
 m << 2, -4, 6, -5, 1, 0;
 cout << m.cwiseAbs() << endl;
diff --git a/doc/snippets/MatrixBase_cwiseAbs2.cpp b/doc/snippets/MatrixBase_cwiseAbs2.cpp
index 952ba9d..55ef4bb 100644
--- a/doc/snippets/MatrixBase_cwiseAbs2.cpp
+++ b/doc/snippets/MatrixBase_cwiseAbs2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(2, 3);
 m << 2, -4, 6, -5, 1, 0;
 cout << m.cwiseAbs2() << endl;
diff --git a/doc/snippets/MatrixBase_cwiseArg.cpp b/doc/snippets/MatrixBase_cwiseArg.cpp
index e0857cf..9c32d7a 100644
--- a/doc/snippets/MatrixBase_cwiseArg.cpp
+++ b/doc/snippets/MatrixBase_cwiseArg.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf v = MatrixXcf::Random(2, 3);
 cout << v << endl << endl;
 cout << v.cwiseArg() << endl;
\ No newline at end of file
diff --git a/doc/snippets/MatrixBase_cwiseEqual.cpp b/doc/snippets/MatrixBase_cwiseEqual.cpp
index dae553c..735f9db 100644
--- a/doc/snippets/MatrixBase_cwiseEqual.cpp
+++ b/doc/snippets/MatrixBase_cwiseEqual.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m(2, 2);
 m << 1, 0, 1, 1;
 cout << "Comparing m with identity matrix:" << endl;
diff --git a/doc/snippets/MatrixBase_cwiseInverse.cpp b/doc/snippets/MatrixBase_cwiseInverse.cpp
index 74551cb..b076fd4 100644
--- a/doc/snippets/MatrixBase_cwiseInverse.cpp
+++ b/doc/snippets/MatrixBase_cwiseInverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(2, 3);
 m << 2, 0.5, 1, 3, 0.25, 1;
 cout << m.cwiseInverse() << endl;
diff --git a/doc/snippets/MatrixBase_cwiseMax.cpp b/doc/snippets/MatrixBase_cwiseMax.cpp
index cd613b5..2e483b6 100644
--- a/doc/snippets/MatrixBase_cwiseMax.cpp
+++ b/doc/snippets/MatrixBase_cwiseMax.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(2, 3, 4), w(4, 2, 3);
 cout << v.cwiseMax(w) << endl;
diff --git a/doc/snippets/MatrixBase_cwiseMin.cpp b/doc/snippets/MatrixBase_cwiseMin.cpp
index 6fa93f3..42bf0ee 100644
--- a/doc/snippets/MatrixBase_cwiseMin.cpp
+++ b/doc/snippets/MatrixBase_cwiseMin.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(2, 3, 4), w(4, 2, 3);
 cout << v.cwiseMin(w) << endl;
diff --git a/doc/snippets/MatrixBase_cwiseNotEqual.cpp b/doc/snippets/MatrixBase_cwiseNotEqual.cpp
index 1a3ec73..a408bf9 100644
--- a/doc/snippets/MatrixBase_cwiseNotEqual.cpp
+++ b/doc/snippets/MatrixBase_cwiseNotEqual.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m(2, 2);
 m << 1, 0, 1, 1;
 cout << "Comparing m with identity matrix:" << endl;
diff --git a/doc/snippets/MatrixBase_cwiseProduct.cpp b/doc/snippets/MatrixBase_cwiseProduct.cpp
index 79540a9..adfb54a 100644
--- a/doc/snippets/MatrixBase_cwiseProduct.cpp
+++ b/doc/snippets/MatrixBase_cwiseProduct.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i a = Matrix3i::Random(), b = Matrix3i::Random();
 Matrix3i c = a.cwiseProduct(b);
 cout << "a:\n" << a << "\nb:\n" << b << "\nc:\n" << c << endl;
diff --git a/doc/snippets/MatrixBase_cwiseQuotient.cpp b/doc/snippets/MatrixBase_cwiseQuotient.cpp
index c78110f..96a2659 100644
--- a/doc/snippets/MatrixBase_cwiseQuotient.cpp
+++ b/doc/snippets/MatrixBase_cwiseQuotient.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(2, 3, 4), w(4, 2, 3);
 cout << v.cwiseQuotient(w) << endl;
diff --git a/doc/snippets/MatrixBase_cwiseSign.cpp b/doc/snippets/MatrixBase_cwiseSign.cpp
index c2ee94d..a0b568a 100644
--- a/doc/snippets/MatrixBase_cwiseSign.cpp
+++ b/doc/snippets/MatrixBase_cwiseSign.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(2, 3);
 m << 2, -4, 6, -5, 1, 0;
 cout << m.cwiseSign() << endl;
diff --git a/doc/snippets/MatrixBase_cwiseSqrt.cpp b/doc/snippets/MatrixBase_cwiseSqrt.cpp
index 5bfb5f3..3d1a205 100644
--- a/doc/snippets/MatrixBase_cwiseSqrt.cpp
+++ b/doc/snippets/MatrixBase_cwiseSqrt.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(1, 2, 4);
 cout << v.cwiseSqrt() << endl;
diff --git a/doc/snippets/MatrixBase_diagonal.cpp b/doc/snippets/MatrixBase_diagonal.cpp
index c15dcf1..9af7fad 100644
--- a/doc/snippets/MatrixBase_diagonal.cpp
+++ b/doc/snippets/MatrixBase_diagonal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i m = Matrix3i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here are the coefficients on the main diagonal of m:" << endl << m.diagonal() << endl;
diff --git a/doc/snippets/MatrixBase_diagonalView.cpp b/doc/snippets/MatrixBase_diagonalView.cpp
index 4fbf719..5396f27 100644
--- a/doc/snippets/MatrixBase_diagonalView.cpp
+++ b/doc/snippets/MatrixBase_diagonalView.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m;
 m << 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_diagonal_int.cpp b/doc/snippets/MatrixBase_diagonal_int.cpp
index 7b66abf..621235e 100644
--- a/doc/snippets/MatrixBase_diagonal_int.cpp
+++ b/doc/snippets/MatrixBase_diagonal_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here are the coefficients on the 1st super-diagonal and 2nd sub-diagonal of m:" << endl
diff --git a/doc/snippets/MatrixBase_diagonal_template_int.cpp b/doc/snippets/MatrixBase_diagonal_template_int.cpp
index 0e73d1c..f02bc79 100644
--- a/doc/snippets/MatrixBase_diagonal_template_int.cpp
+++ b/doc/snippets/MatrixBase_diagonal_template_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here are the coefficients on the 1st super-diagonal and 2nd sub-diagonal of m:" << endl
diff --git a/doc/snippets/MatrixBase_eigenvalues.cpp b/doc/snippets/MatrixBase_eigenvalues.cpp
index 010f45d..0821da4 100644
--- a/doc/snippets/MatrixBase_eigenvalues.cpp
+++ b/doc/snippets/MatrixBase_eigenvalues.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 VectorXcd eivals = ones.eigenvalues();
 cout << "The eigenvalues of the 3x3 matrix of ones are:" << endl << eivals << endl;
diff --git a/doc/snippets/MatrixBase_end_int.cpp b/doc/snippets/MatrixBase_end_int.cpp
index 03c54a9..df43618 100644
--- a/doc/snippets/MatrixBase_end_int.cpp
+++ b/doc/snippets/MatrixBase_end_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.tail(2):" << endl << v.tail(2) << endl;
diff --git a/doc/snippets/MatrixBase_eval.cpp b/doc/snippets/MatrixBase_eval.cpp
index 1df3aa0..d89f1a3 100644
--- a/doc/snippets/MatrixBase_eval.cpp
+++ b/doc/snippets/MatrixBase_eval.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2f M = Matrix2f::Random();
 Matrix2f m;
 m = M;
diff --git a/doc/snippets/MatrixBase_fixedBlock_int_int.cpp b/doc/snippets/MatrixBase_fixedBlock_int_int.cpp
index 6a3a8cb..caba6f5 100644
--- a/doc/snippets/MatrixBase_fixedBlock_int_int.cpp
+++ b/doc/snippets/MatrixBase_fixedBlock_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4d m = Vector4d(1, 2, 3, 4).asDiagonal();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.fixed<2, 2>(2, 2):" << endl << m.block<2, 2>(2, 2) << endl;
diff --git a/doc/snippets/MatrixBase_hnormalized.cpp b/doc/snippets/MatrixBase_hnormalized.cpp
index 23334ac..7edc73a 100644
--- a/doc/snippets/MatrixBase_hnormalized.cpp
+++ b/doc/snippets/MatrixBase_hnormalized.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector4d v = Vector4d::Random();
 Projective3d P(Matrix4d::Random());
 cout << "v                   = " << v.transpose() << "]^T" << endl;
diff --git a/doc/snippets/MatrixBase_homogeneous.cpp b/doc/snippets/MatrixBase_homogeneous.cpp
index ead1796..96ccf75 100644
--- a/doc/snippets/MatrixBase_homogeneous.cpp
+++ b/doc/snippets/MatrixBase_homogeneous.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v = Vector3d::Random();
 Projective3d P(Matrix4d::Random());
 cout << "v                                   = [" << v.transpose() << "]^T" << endl;
diff --git a/doc/snippets/MatrixBase_identity.cpp b/doc/snippets/MatrixBase_identity.cpp
index b5c1e59..c17728b 100644
--- a/doc/snippets/MatrixBase_identity.cpp
+++ b/doc/snippets/MatrixBase_identity.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << Matrix<double, 3, 4>::Identity() << endl;
diff --git a/doc/snippets/MatrixBase_identity_int_int.cpp b/doc/snippets/MatrixBase_identity_int_int.cpp
index 918649d..f809df7 100644
--- a/doc/snippets/MatrixBase_identity_int_int.cpp
+++ b/doc/snippets/MatrixBase_identity_int_int.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << MatrixXd::Identity(4, 3) << endl;
diff --git a/doc/snippets/MatrixBase_inverse.cpp b/doc/snippets/MatrixBase_inverse.cpp
index a56142e..4d8c6be 100644
--- a/doc/snippets/MatrixBase_inverse.cpp
+++ b/doc/snippets/MatrixBase_inverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Its inverse is:" << endl << m.inverse() << endl;
diff --git a/doc/snippets/MatrixBase_isDiagonal.cpp b/doc/snippets/MatrixBase_isDiagonal.cpp
index 290654f..512757e 100644
--- a/doc/snippets/MatrixBase_isDiagonal.cpp
+++ b/doc/snippets/MatrixBase_isDiagonal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = 10000 * Matrix3d::Identity();
 m(0, 2) = 1;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_isIdentity.cpp b/doc/snippets/MatrixBase_isIdentity.cpp
index ea535c7..cfdc74b 100644
--- a/doc/snippets/MatrixBase_isIdentity.cpp
+++ b/doc/snippets/MatrixBase_isIdentity.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Identity();
 m(0, 2) = 1e-4;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_isOnes.cpp b/doc/snippets/MatrixBase_isOnes.cpp
index 899230a..18f777c 100644
--- a/doc/snippets/MatrixBase_isOnes.cpp
+++ b/doc/snippets/MatrixBase_isOnes.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Ones();
 m(0, 2) += 1e-4;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_isOrthogonal.cpp b/doc/snippets/MatrixBase_isOrthogonal.cpp
index 3e079b4..95236d2 100644
--- a/doc/snippets/MatrixBase_isOrthogonal.cpp
+++ b/doc/snippets/MatrixBase_isOrthogonal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3d v(1, 0, 0);
 Vector3d w(1e-4, 0, 1);
 cout << "Here's the vector v:" << endl << v << endl;
diff --git a/doc/snippets/MatrixBase_isUnitary.cpp b/doc/snippets/MatrixBase_isUnitary.cpp
index 56f1b96..c636738 100644
--- a/doc/snippets/MatrixBase_isUnitary.cpp
+++ b/doc/snippets/MatrixBase_isUnitary.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Identity();
 m(0, 2) = 1e-4;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_isZero.cpp b/doc/snippets/MatrixBase_isZero.cpp
index c878f1c..860fcf4 100644
--- a/doc/snippets/MatrixBase_isZero.cpp
+++ b/doc/snippets/MatrixBase_isZero.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Zero();
 m(0, 2) = 1e-4;
 cout << "Here's the matrix m:" << endl << m << endl;
diff --git a/doc/snippets/MatrixBase_leftCols_int.cpp b/doc/snippets/MatrixBase_leftCols_int.cpp
index 6ea984e..39e8140 100644
--- a/doc/snippets/MatrixBase_leftCols_int.cpp
+++ b/doc/snippets/MatrixBase_leftCols_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.leftCols(2):" << endl;
diff --git a/doc/snippets/MatrixBase_noalias.cpp b/doc/snippets/MatrixBase_noalias.cpp
index 607d3d5..f7837f6 100644
--- a/doc/snippets/MatrixBase_noalias.cpp
+++ b/doc/snippets/MatrixBase_noalias.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2d a, b, c;
 a << 1, 2, 3, 4;
 b << 5, 6, 7, 8;
diff --git a/doc/snippets/MatrixBase_ones.cpp b/doc/snippets/MatrixBase_ones.cpp
index 02c767c..0739188 100644
--- a/doc/snippets/MatrixBase_ones.cpp
+++ b/doc/snippets/MatrixBase_ones.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << Matrix2d::Ones() << endl;
 cout << 6 * RowVector4i::Ones() << endl;
diff --git a/doc/snippets/MatrixBase_ones_int.cpp b/doc/snippets/MatrixBase_ones_int.cpp
index 2ef188e..8a6d441 100644
--- a/doc/snippets/MatrixBase_ones_int.cpp
+++ b/doc/snippets/MatrixBase_ones_int.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << 6 * RowVectorXi::Ones(4) << endl;
 cout << VectorXf::Ones(2) << endl;
diff --git a/doc/snippets/MatrixBase_ones_int_int.cpp b/doc/snippets/MatrixBase_ones_int_int.cpp
index 38bd8cf..4e82968 100644
--- a/doc/snippets/MatrixBase_ones_int_int.cpp
+++ b/doc/snippets/MatrixBase_ones_int_int.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << MatrixXi::Ones(2, 3) << endl;
diff --git a/doc/snippets/MatrixBase_operatorNorm.cpp b/doc/snippets/MatrixBase_operatorNorm.cpp
index 99ca14d..599e4b0 100644
--- a/doc/snippets/MatrixBase_operatorNorm.cpp
+++ b/doc/snippets/MatrixBase_operatorNorm.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 cout << "The operator norm of the 3x3 matrix of ones is " << ones.operatorNorm() << endl;
diff --git a/doc/snippets/MatrixBase_prod.cpp b/doc/snippets/MatrixBase_prod.cpp
index d2f27bd..9f4a7bc 100644
--- a/doc/snippets/MatrixBase_prod.cpp
+++ b/doc/snippets/MatrixBase_prod.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the product of all the coefficients:" << endl << m.prod() << endl;
diff --git a/doc/snippets/MatrixBase_random.cpp b/doc/snippets/MatrixBase_random.cpp
index 65fc524..771c3d6 100644
--- a/doc/snippets/MatrixBase_random.cpp
+++ b/doc/snippets/MatrixBase_random.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << 100 * Matrix2i::Random() << endl;
diff --git a/doc/snippets/MatrixBase_random_int.cpp b/doc/snippets/MatrixBase_random_int.cpp
index f161d03..bfd3e6b 100644
--- a/doc/snippets/MatrixBase_random_int.cpp
+++ b/doc/snippets/MatrixBase_random_int.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << VectorXi::Random(2) << endl;
diff --git a/doc/snippets/MatrixBase_random_int_int.cpp b/doc/snippets/MatrixBase_random_int_int.cpp
index 92f87c8..20255b5 100644
--- a/doc/snippets/MatrixBase_random_int_int.cpp
+++ b/doc/snippets/MatrixBase_random_int_int.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << MatrixXi::Random(2, 3) << endl;
diff --git a/doc/snippets/MatrixBase_replicate.cpp b/doc/snippets/MatrixBase_replicate.cpp
index bffd102..c29147b 100644
--- a/doc/snippets/MatrixBase_replicate.cpp
+++ b/doc/snippets/MatrixBase_replicate.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m = MatrixXi::Random(2, 3);
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "m.replicate<3,2>() = ..." << endl;
diff --git a/doc/snippets/MatrixBase_replicate_int_int.cpp b/doc/snippets/MatrixBase_replicate_int_int.cpp
index 1aee265..cfa180d 100644
--- a/doc/snippets/MatrixBase_replicate_int_int.cpp
+++ b/doc/snippets/MatrixBase_replicate_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Vector3i v = Vector3i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "v.replicate(2,5) = ..." << endl;
diff --git a/doc/snippets/MatrixBase_reshaped_auto.cpp b/doc/snippets/MatrixBase_reshaped_auto.cpp
index 59f9d3f..309f5df 100644
--- a/doc/snippets/MatrixBase_reshaped_auto.cpp
+++ b/doc/snippets/MatrixBase_reshaped_auto.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped(2, AutoSize):" << endl << m.reshaped(2, AutoSize) << endl;
diff --git a/doc/snippets/MatrixBase_reshaped_fixed.cpp b/doc/snippets/MatrixBase_reshaped_fixed.cpp
index c1ae2c0..6110516 100644
--- a/doc/snippets/MatrixBase_reshaped_fixed.cpp
+++ b/doc/snippets/MatrixBase_reshaped_fixed.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped(fix<2>,fix<8>):" << endl << m.reshaped(fix<2>, fix<8>) << endl;
diff --git a/doc/snippets/MatrixBase_reshaped_int_int.cpp b/doc/snippets/MatrixBase_reshaped_int_int.cpp
index af4ca59..cb63ff7 100644
--- a/doc/snippets/MatrixBase_reshaped_int_int.cpp
+++ b/doc/snippets/MatrixBase_reshaped_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;
diff --git a/doc/snippets/MatrixBase_reshaped_to_vector.cpp b/doc/snippets/MatrixBase_reshaped_to_vector.cpp
index 37f65f7..be661af 100644
--- a/doc/snippets/MatrixBase_reshaped_to_vector.cpp
+++ b/doc/snippets/MatrixBase_reshaped_to_vector.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped().transpose():" << endl << m.reshaped().transpose() << endl;
diff --git a/doc/snippets/MatrixBase_reverse.cpp b/doc/snippets/MatrixBase_reverse.cpp
index ca12558..865d46a 100644
--- a/doc/snippets/MatrixBase_reverse.cpp
+++ b/doc/snippets/MatrixBase_reverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m = MatrixXi::Random(3, 4);
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the reverse of m:" << endl << m.reverse() << endl;
diff --git a/doc/snippets/MatrixBase_rightCols_int.cpp b/doc/snippets/MatrixBase_rightCols_int.cpp
index cb51340..c4ff3a4 100644
--- a/doc/snippets/MatrixBase_rightCols_int.cpp
+++ b/doc/snippets/MatrixBase_rightCols_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.rightCols(2):" << endl;
diff --git a/doc/snippets/MatrixBase_row.cpp b/doc/snippets/MatrixBase_row.cpp
index 481bff8..5af667a 100644
--- a/doc/snippets/MatrixBase_row.cpp
+++ b/doc/snippets/MatrixBase_row.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Identity();
 m.row(1) = Vector3d(4, 5, 6);
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_rowwise.cpp b/doc/snippets/MatrixBase_rowwise.cpp
index b869224..8f26de6 100644
--- a/doc/snippets/MatrixBase_rowwise.cpp
+++ b/doc/snippets/MatrixBase_rowwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the sum of each row:" << endl << m.rowwise().sum() << endl;
diff --git a/doc/snippets/MatrixBase_segment_int_int.cpp b/doc/snippets/MatrixBase_segment_int_int.cpp
index 70cd6d2..ae74550 100644
--- a/doc/snippets/MatrixBase_segment_int_int.cpp
+++ b/doc/snippets/MatrixBase_segment_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.segment(1, 2):" << endl << v.segment(1, 2) << endl;
diff --git a/doc/snippets/MatrixBase_select.cpp b/doc/snippets/MatrixBase_select.cpp
index d14941b..5e6a3ba 100644
--- a/doc/snippets/MatrixBase_select.cpp
+++ b/doc/snippets/MatrixBase_select.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m(3, 3);
 m << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 m = (m.array() >= 5).select(-m, m);
diff --git a/doc/snippets/MatrixBase_selfadjointView.cpp b/doc/snippets/MatrixBase_selfadjointView.cpp
index 4bd3c7e..38b289f 100644
--- a/doc/snippets/MatrixBase_selfadjointView.cpp
+++ b/doc/snippets/MatrixBase_selfadjointView.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i m = Matrix3i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the symmetric matrix extracted from the upper part of m:" << endl
diff --git a/doc/snippets/MatrixBase_set.cpp b/doc/snippets/MatrixBase_set.cpp
index d392b68..48652eb 100644
--- a/doc/snippets/MatrixBase_set.cpp
+++ b/doc/snippets/MatrixBase_set.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i m1;
 m1 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 cout << m1 << endl << endl;
diff --git a/doc/snippets/MatrixBase_setIdentity.cpp b/doc/snippets/MatrixBase_setIdentity.cpp
index 916b477..f11ea4e 100644
--- a/doc/snippets/MatrixBase_setIdentity.cpp
+++ b/doc/snippets/MatrixBase_setIdentity.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Zero();
 m.block<3, 3>(1, 0).setIdentity();
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_setOnes.cpp b/doc/snippets/MatrixBase_setOnes.cpp
index 4cef9c1..deb6c8d 100644
--- a/doc/snippets/MatrixBase_setOnes.cpp
+++ b/doc/snippets/MatrixBase_setOnes.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 m.row(1).setOnes();
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_setRandom.cpp b/doc/snippets/MatrixBase_setRandom.cpp
index e2c257d..9376476 100644
--- a/doc/snippets/MatrixBase_setRandom.cpp
+++ b/doc/snippets/MatrixBase_setRandom.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Zero();
 m.col(1).setRandom();
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_setZero.cpp b/doc/snippets/MatrixBase_setZero.cpp
index 9b5b958..474414f 100644
--- a/doc/snippets/MatrixBase_setZero.cpp
+++ b/doc/snippets/MatrixBase_setZero.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 m.row(1).setZero();
 cout << m << endl;
diff --git a/doc/snippets/MatrixBase_start_int.cpp b/doc/snippets/MatrixBase_start_int.cpp
index c261d2b..f345089 100644
--- a/doc/snippets/MatrixBase_start_int.cpp
+++ b/doc/snippets/MatrixBase_start_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.head(2):" << endl << v.head(2) << endl;
diff --git a/doc/snippets/MatrixBase_template_int_bottomRows.cpp b/doc/snippets/MatrixBase_template_int_bottomRows.cpp
index f9ea892..e0299d1 100644
--- a/doc/snippets/MatrixBase_template_int_bottomRows.cpp
+++ b/doc/snippets/MatrixBase_template_int_bottomRows.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.bottomRows<2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_end.cpp b/doc/snippets/MatrixBase_template_int_end.cpp
index f5ccb00..d4c6530 100644
--- a/doc/snippets/MatrixBase_template_int_end.cpp
+++ b/doc/snippets/MatrixBase_template_int_end.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.tail(2):" << endl << v.tail<2>() << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp b/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp
index 4dced03..988923b 100644
--- a/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_block_int_int_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the block:" << endl << m.block<2, Dynamic>(1, 1, 2, 3) << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp b/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp
index bf9f0ab..cffcfbf 100644
--- a/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomLeftCorner<2,2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp b/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
index 3d22fc2..e091439 100644
--- a/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomLeftCorner<2,Dynamic>(2,2):" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp b/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp
index 4a78bed..c46f84b 100644
--- a/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_bottomRightCorner.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomRightCorner<2,2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp b/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
index 75a3e93..2e606fc 100644
--- a/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.bottomRightCorner<2,Dynamic>(2,2):" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp b/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp
index 7c765d4..902a778 100644
--- a/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_topLeftCorner.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topLeftCorner<2,2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp b/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp
index ae72684..440a91a 100644
--- a/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_topLeftCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topLeftCorner<2,Dynamic>(2,2):" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp b/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp
index 9698521..55a25b8 100644
--- a/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_topRightCorner.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topRightCorner<2,2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp b/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp
index 4144242..843f690 100644
--- a/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_template_int_int_topRightCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topRightCorner<2,Dynamic>(2,2):" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_leftCols.cpp b/doc/snippets/MatrixBase_template_int_leftCols.cpp
index 1c425d9..cf3764e 100644
--- a/doc/snippets/MatrixBase_template_int_leftCols.cpp
+++ b/doc/snippets/MatrixBase_template_int_leftCols.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.leftCols<2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_rightCols.cpp b/doc/snippets/MatrixBase_template_int_rightCols.cpp
index fc8c0d9..1c38e0b 100644
--- a/doc/snippets/MatrixBase_template_int_rightCols.cpp
+++ b/doc/snippets/MatrixBase_template_int_rightCols.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.rightCols<2>():" << endl;
diff --git a/doc/snippets/MatrixBase_template_int_segment.cpp b/doc/snippets/MatrixBase_template_int_segment.cpp
index e448b40..52066d0 100644
--- a/doc/snippets/MatrixBase_template_int_segment.cpp
+++ b/doc/snippets/MatrixBase_template_int_segment.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.segment<2>(1):" << endl << v.segment<2>(1) << endl;
diff --git a/doc/snippets/MatrixBase_template_int_start.cpp b/doc/snippets/MatrixBase_template_int_start.cpp
index d336b37..27a527b 100644
--- a/doc/snippets/MatrixBase_template_int_start.cpp
+++ b/doc/snippets/MatrixBase_template_int_start.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVector4i v = RowVector4i::Random();
 cout << "Here is the vector v:" << endl << v << endl;
 cout << "Here is v.head(2):" << endl << v.head<2>() << endl;
diff --git a/doc/snippets/MatrixBase_template_int_topRows.cpp b/doc/snippets/MatrixBase_template_int_topRows.cpp
index 0110251..e932f68 100644
--- a/doc/snippets/MatrixBase_template_int_topRows.cpp
+++ b/doc/snippets/MatrixBase_template_int_topRows.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.topRows<2>():" << endl;
diff --git a/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp b/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp
index e52cb3b..2449b93 100644
--- a/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_topLeftCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topLeftCorner(2, 2):" << endl;
diff --git a/doc/snippets/MatrixBase_topRightCorner_int_int.cpp b/doc/snippets/MatrixBase_topRightCorner_int_int.cpp
index 811fa56..ea6f0bc 100644
--- a/doc/snippets/MatrixBase_topRightCorner_int_int.cpp
+++ b/doc/snippets/MatrixBase_topRightCorner_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.topRightCorner(2, 2):" << endl;
diff --git a/doc/snippets/MatrixBase_topRows_int.cpp b/doc/snippets/MatrixBase_topRows_int.cpp
index f2d75f1..c3239d6 100644
--- a/doc/snippets/MatrixBase_topRows_int.cpp
+++ b/doc/snippets/MatrixBase_topRows_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array44i a = Array44i::Random();
 cout << "Here is the array a:" << endl << a << endl;
 cout << "Here is a.topRows(2):" << endl;
diff --git a/doc/snippets/MatrixBase_transpose.cpp b/doc/snippets/MatrixBase_transpose.cpp
index 8bf2716..5ed389b 100644
--- a/doc/snippets/MatrixBase_transpose.cpp
+++ b/doc/snippets/MatrixBase_transpose.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2i m = Matrix2i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the transpose of m:" << endl << m.transpose() << endl;
diff --git a/doc/snippets/MatrixBase_triangularView.cpp b/doc/snippets/MatrixBase_triangularView.cpp
index 03aa303..1ec861d 100644
--- a/doc/snippets/MatrixBase_triangularView.cpp
+++ b/doc/snippets/MatrixBase_triangularView.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3i m = Matrix3i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the upper-triangular matrix extracted from m:" << endl
diff --git a/doc/snippets/MatrixBase_zero.cpp b/doc/snippets/MatrixBase_zero.cpp
index 6064936..e1f8d61 100644
--- a/doc/snippets/MatrixBase_zero.cpp
+++ b/doc/snippets/MatrixBase_zero.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << Matrix2d::Zero() << endl;
 cout << RowVector4i::Zero() << endl;
diff --git a/doc/snippets/MatrixBase_zero_int.cpp b/doc/snippets/MatrixBase_zero_int.cpp
index 370a9ba..b0af884 100644
--- a/doc/snippets/MatrixBase_zero_int.cpp
+++ b/doc/snippets/MatrixBase_zero_int.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << RowVectorXi::Zero(4) << endl;
 cout << VectorXf::Zero(2) << endl;
diff --git a/doc/snippets/MatrixBase_zero_int_int.cpp b/doc/snippets/MatrixBase_zero_int_int.cpp
index a500724..b7ab81d 100644
--- a/doc/snippets/MatrixBase_zero_int_int.cpp
+++ b/doc/snippets/MatrixBase_zero_int_int.cpp
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 cout << MatrixXi::Zero(2, 3) << endl;
diff --git a/doc/snippets/Matrix_Map_stride.cpp b/doc/snippets/Matrix_Map_stride.cpp
index 5125b54..dbe2b10 100644
--- a/doc/snippets/Matrix_Map_stride.cpp
+++ b/doc/snippets/Matrix_Map_stride.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4i A;
 A << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
 
diff --git a/doc/snippets/Matrix_initializer_list_23_cxx11.cpp b/doc/snippets/Matrix_initializer_list_23_cxx11.cpp
index 8cde1cb..b82e7d6 100644
--- a/doc/snippets/Matrix_initializer_list_23_cxx11.cpp
+++ b/doc/snippets/Matrix_initializer_list_23_cxx11.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m{{1, 2, 3}, {4, 5, 6}};
 cout << m << endl;
diff --git a/doc/snippets/Matrix_initializer_list_vector_cxx11.cpp b/doc/snippets/Matrix_initializer_list_vector_cxx11.cpp
index 7096deb..5838e7b 100644
--- a/doc/snippets/Matrix_initializer_list_vector_cxx11.cpp
+++ b/doc/snippets/Matrix_initializer_list_vector_cxx11.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXi v{{1, 2}};
 cout << v << endl;
diff --git a/doc/snippets/Matrix_resize_NoChange_int.cpp b/doc/snippets/Matrix_resize_NoChange_int.cpp
index c86ee30..df6ffd2 100644
--- a/doc/snippets/Matrix_resize_NoChange_int.cpp
+++ b/doc/snippets/Matrix_resize_NoChange_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(3, 4);
 m.resize(NoChange, 5);
 cout << "m: " << m.rows() << " rows, " << m.cols() << " cols" << endl;
diff --git a/doc/snippets/Matrix_resize_int.cpp b/doc/snippets/Matrix_resize_int.cpp
index 7f34df7..e417fa9 100644
--- a/doc/snippets/Matrix_resize_int.cpp
+++ b/doc/snippets/Matrix_resize_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXd v(10);
 v.resize(3);
 RowVector3d w;
diff --git a/doc/snippets/Matrix_resize_int_NoChange.cpp b/doc/snippets/Matrix_resize_int_NoChange.cpp
index e30763d..a471c9b 100644
--- a/doc/snippets/Matrix_resize_int_NoChange.cpp
+++ b/doc/snippets/Matrix_resize_int_NoChange.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(3, 4);
 m.resize(5, NoChange);
 cout << "m: " << m.rows() << " rows, " << m.cols() << " cols" << endl;
diff --git a/doc/snippets/Matrix_resize_int_int.cpp b/doc/snippets/Matrix_resize_int_int.cpp
index 5453dbd..19e9e19 100644
--- a/doc/snippets/Matrix_resize_int_int.cpp
+++ b/doc/snippets/Matrix_resize_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd m(2, 3);
 m << 1, 2, 3, 4, 5, 6;
 cout << "here's the 2x3 matrix m:" << endl << m << endl;
diff --git a/doc/snippets/Matrix_setConstant_int.cpp b/doc/snippets/Matrix_setConstant_int.cpp
index ff5a86c..d6bbee9 100644
--- a/doc/snippets/Matrix_setConstant_int.cpp
+++ b/doc/snippets/Matrix_setConstant_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXf v;
 v.setConstant(3, 5);
 cout << v << endl;
diff --git a/doc/snippets/Matrix_setConstant_int_int.cpp b/doc/snippets/Matrix_setConstant_int_int.cpp
index 32b950c..d4f5e19 100644
--- a/doc/snippets/Matrix_setConstant_int_int.cpp
+++ b/doc/snippets/Matrix_setConstant_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m;
 m.setConstant(3, 3, 5);
 cout << m << endl;
diff --git a/doc/snippets/Matrix_setIdentity_int_int.cpp b/doc/snippets/Matrix_setIdentity_int_int.cpp
index a659671..5cc4e8e 100644
--- a/doc/snippets/Matrix_setIdentity_int_int.cpp
+++ b/doc/snippets/Matrix_setIdentity_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m;
 m.setIdentity(3, 3);
 cout << m << endl;
diff --git a/doc/snippets/Matrix_setOnes_int.cpp b/doc/snippets/Matrix_setOnes_int.cpp
index 752cb35..7471489 100644
--- a/doc/snippets/Matrix_setOnes_int.cpp
+++ b/doc/snippets/Matrix_setOnes_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXf v;
 v.setOnes(3);
 cout << v << endl;
diff --git a/doc/snippets/Matrix_setOnes_int_int.cpp b/doc/snippets/Matrix_setOnes_int_int.cpp
index 1ffb66b..bb6ac7f 100644
--- a/doc/snippets/Matrix_setOnes_int_int.cpp
+++ b/doc/snippets/Matrix_setOnes_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m;
 m.setOnes(3, 3);
 cout << m << endl;
diff --git a/doc/snippets/Matrix_setRandom_int.cpp b/doc/snippets/Matrix_setRandom_int.cpp
index e160dd7..6caa837 100644
--- a/doc/snippets/Matrix_setRandom_int.cpp
+++ b/doc/snippets/Matrix_setRandom_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXf v;
 v.setRandom(3);
 cout << v << endl;
diff --git a/doc/snippets/Matrix_setRandom_int_int.cpp b/doc/snippets/Matrix_setRandom_int_int.cpp
index 80cda11..2fc63ff 100644
--- a/doc/snippets/Matrix_setRandom_int_int.cpp
+++ b/doc/snippets/Matrix_setRandom_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m;
 m.setRandom(3, 3);
 cout << m << endl;
diff --git a/doc/snippets/Matrix_setZero_int.cpp b/doc/snippets/Matrix_setZero_int.cpp
index 0fb16c1..f7302c1 100644
--- a/doc/snippets/Matrix_setZero_int.cpp
+++ b/doc/snippets/Matrix_setZero_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXf v;
 v.setZero(3);
 cout << v << endl;
diff --git a/doc/snippets/Matrix_setZero_int_int.cpp b/doc/snippets/Matrix_setZero_int_int.cpp
index ad883b9..0dd27e6 100644
--- a/doc/snippets/Matrix_setZero_int_int.cpp
+++ b/doc/snippets/Matrix_setZero_int_int.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf m;
 m.setZero(3, 3);
 cout << m << endl;
diff --git a/doc/snippets/Matrix_variadic_ctor_cxx11.cpp b/doc/snippets/Matrix_variadic_ctor_cxx11.cpp
index 45acd99..04238a2 100644
--- a/doc/snippets/Matrix_variadic_ctor_cxx11.cpp
+++ b/doc/snippets/Matrix_variadic_ctor_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix<int, 1, 6> a(1, 2, 3, 4, 5, 6);
 Matrix<int, 3, 1> b{1, 2, 3};
 cout << a << "\n\n" << b << endl;
diff --git a/doc/snippets/PartialPivLU_solve.cpp b/doc/snippets/PartialPivLU_solve.cpp
index ebfa56d..8cb300f 100644
--- a/doc/snippets/PartialPivLU_solve.cpp
+++ b/doc/snippets/PartialPivLU_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd A = MatrixXd::Random(3, 3);
 MatrixXd B = MatrixXd::Random(3, 2);
 cout << "Here is the invertible matrix A:" << endl << A << endl;
diff --git a/doc/snippets/PartialRedux_count.cpp b/doc/snippets/PartialRedux_count.cpp
index 1c3b3a2..39be806 100644
--- a/doc/snippets/PartialRedux_count.cpp
+++ b/doc/snippets/PartialRedux_count.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 Matrix<ptrdiff_t, 3, 1> res = (m.array() >= 0.5).rowwise().count();
diff --git a/doc/snippets/PartialRedux_maxCoeff.cpp b/doc/snippets/PartialRedux_maxCoeff.cpp
index e8fd382..ddd58ce 100644
--- a/doc/snippets/PartialRedux_maxCoeff.cpp
+++ b/doc/snippets/PartialRedux_maxCoeff.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the maximum of each column:" << endl << m.colwise().maxCoeff() << endl;
diff --git a/doc/snippets/PartialRedux_minCoeff.cpp b/doc/snippets/PartialRedux_minCoeff.cpp
index d717bc0..4b150e0 100644
--- a/doc/snippets/PartialRedux_minCoeff.cpp
+++ b/doc/snippets/PartialRedux_minCoeff.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the minimum of each column:" << endl << m.colwise().minCoeff() << endl;
diff --git a/doc/snippets/PartialRedux_norm.cpp b/doc/snippets/PartialRedux_norm.cpp
index dbcf290..9352ba1 100644
--- a/doc/snippets/PartialRedux_norm.cpp
+++ b/doc/snippets/PartialRedux_norm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the norm of each column:" << endl << m.colwise().norm() << endl;
diff --git a/doc/snippets/PartialRedux_prod.cpp b/doc/snippets/PartialRedux_prod.cpp
index aacf09c..8e8f4cf 100644
--- a/doc/snippets/PartialRedux_prod.cpp
+++ b/doc/snippets/PartialRedux_prod.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the product of each row:" << endl << m.rowwise().prod() << endl;
diff --git a/doc/snippets/PartialRedux_squaredNorm.cpp b/doc/snippets/PartialRedux_squaredNorm.cpp
index 9f3293e..c0fc3da 100644
--- a/doc/snippets/PartialRedux_squaredNorm.cpp
+++ b/doc/snippets/PartialRedux_squaredNorm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the square norm of each row:" << endl << m.rowwise().squaredNorm() << endl;
diff --git a/doc/snippets/PartialRedux_sum.cpp b/doc/snippets/PartialRedux_sum.cpp
index ec82d3e..e45acb6 100644
--- a/doc/snippets/PartialRedux_sum.cpp
+++ b/doc/snippets/PartialRedux_sum.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the sum of each row:" << endl << m.rowwise().sum() << endl;
diff --git a/doc/snippets/RealQZ_compute.cpp b/doc/snippets/RealQZ_compute.cpp
index 10edefc..cd042c0 100644
--- a/doc/snippets/RealQZ_compute.cpp
+++ b/doc/snippets/RealQZ_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A = MatrixXf::Random(4, 4);
 MatrixXf B = MatrixXf::Random(4, 4);
 RealQZ<MatrixXf> qz(4);  // preallocate space for 4x4 matrices
diff --git a/doc/snippets/RealSchur_RealSchur_MatrixType.cpp b/doc/snippets/RealSchur_RealSchur_MatrixType.cpp
index 485b0ee..d3fd29c 100644
--- a/doc/snippets/RealSchur_RealSchur_MatrixType.cpp
+++ b/doc/snippets/RealSchur_RealSchur_MatrixType.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd A = MatrixXd::Random(6, 6);
 cout << "Here is a random 6x6 matrix, A:" << endl << A << endl << endl;
 
diff --git a/doc/snippets/RealSchur_compute.cpp b/doc/snippets/RealSchur_compute.cpp
index 78c71c8..6507cc5 100644
--- a/doc/snippets/RealSchur_compute.cpp
+++ b/doc/snippets/RealSchur_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A = MatrixXf::Random(4, 4);
 RealSchur<MatrixXf> schur(4);
 schur.compute(A, /* computeU = */ false);
diff --git a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp
index 0a26e9c..162e610 100644
--- a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 SelfAdjointEigenSolver<Matrix4f> es;
 Matrix4f X = Matrix4f::Random(4, 4);
 Matrix4f A = X + X.transpose();
diff --git a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp
index 0ed9092..2e63819 100644
--- a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(5, 5);
 MatrixXd A = X + X.transpose();
 cout << "Here is a random symmetric 5x5 matrix, A:" << endl << A << endl << endl;
diff --git a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
index e2889b7..8222419 100644
--- a/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(5, 5);
 MatrixXd A = X + X.transpose();
 cout << "Here is a random symmetric matrix, A:" << endl << A << endl;
diff --git a/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp b/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp
index 1548562..fb6ed87 100644
--- a/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 SelfAdjointEigenSolver<MatrixXf> es(4);
 MatrixXf X = MatrixXf::Random(4, 4);
 MatrixXf A = X + X.transpose();
diff --git a/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp b/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp
index 88d44c6..2a87d8c 100644
--- a/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_compute_MatrixType2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(5, 5);
 MatrixXd A = X * X.transpose();
 X = MatrixXd::Random(5, 5);
diff --git a/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp b/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp
index d80f90c..937a88c 100644
--- a/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_eigenvalues.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 SelfAdjointEigenSolver<MatrixXd> es(ones);
 cout << "The eigenvalues of the 3x3 matrix of ones are:" << endl << es.eigenvalues() << endl;
diff --git a/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp b/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp
index a91dca1..e4b28b6 100644
--- a/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_eigenvectors.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 SelfAdjointEigenSolver<MatrixXd> es(ones);
 cout << "The first eigenvector of the 3x3 matrix of ones is:" << endl << es.eigenvectors().col(0) << endl;
diff --git a/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp b/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp
index 50e83f3..496a66c 100644
--- a/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_operatorInverseSqrt.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(4, 4);
 MatrixXd A = X * X.transpose();
 cout << "Here is a random positive-definite matrix, A:" << endl << A << endl << endl;
diff --git a/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp b/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp
index bced567..78c3d5d 100644
--- a/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp
+++ b/doc/snippets/SelfAdjointEigenSolver_operatorSqrt.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(4, 4);
 MatrixXd A = X * X.transpose();
 cout << "Here is a random positive-definite matrix, A:" << endl << A << endl << endl;
diff --git a/doc/snippets/SelfAdjointView_eigenvalues.cpp b/doc/snippets/SelfAdjointView_eigenvalues.cpp
index 8cef6d8..bd6c9df 100644
--- a/doc/snippets/SelfAdjointView_eigenvalues.cpp
+++ b/doc/snippets/SelfAdjointView_eigenvalues.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 VectorXd eivals = ones.selfadjointView<Lower>().eigenvalues();
 cout << "The eigenvalues of the 3x3 matrix of ones are:" << endl << eivals << endl;
diff --git a/doc/snippets/SelfAdjointView_operatorNorm.cpp b/doc/snippets/SelfAdjointView_operatorNorm.cpp
index c229faf..e202732 100644
--- a/doc/snippets/SelfAdjointView_operatorNorm.cpp
+++ b/doc/snippets/SelfAdjointView_operatorNorm.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd ones = MatrixXd::Ones(3, 3);
 cout << "The operator norm of the 3x3 matrix of ones is " << ones.selfadjointView<Lower>().operatorNorm() << endl;
diff --git a/doc/snippets/Slicing_arrayexpr.cpp b/doc/snippets/Slicing_arrayexpr.cpp
index b78dbfa..7ed5571 100644
--- a/doc/snippets/Slicing_arrayexpr.cpp
+++ b/doc/snippets/Slicing_arrayexpr.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXi ind(5);
 ind << 4, 2, 5, 5, 3;
 MatrixXi A = MatrixXi::Random(4, 6);
diff --git a/doc/snippets/Slicing_custom_padding_cxx11.cpp b/doc/snippets/Slicing_custom_padding_cxx11.cpp
index 4d482f6..fc9e72c 100644
--- a/doc/snippets/Slicing_custom_padding_cxx11.cpp
+++ b/doc/snippets/Slicing_custom_padding_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 struct pad {
   Index size() const { return out_size; }
   Index operator[](Index i) const { return std::max<Index>(0, i - (out_size - in_size)); }
diff --git a/doc/snippets/Slicing_rawarray_cxx11.cpp b/doc/snippets/Slicing_rawarray_cxx11.cpp
index 0495db6..47f8cbf 100644
--- a/doc/snippets/Slicing_rawarray_cxx11.cpp
+++ b/doc/snippets/Slicing_rawarray_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi A = MatrixXi::Random(4, 6);
 cout << "Initial matrix A:\n" << A << "\n\n";
 cout << "A(all,{4,2,5,5,3}):\n" << A(Eigen::placeholders::all, {4, 2, 5, 5, 3}) << "\n\n";
diff --git a/doc/snippets/Slicing_stdvector_cxx11.cpp b/doc/snippets/Slicing_stdvector_cxx11.cpp
index 7d5ad0c..5131082 100644
--- a/doc/snippets/Slicing_stdvector_cxx11.cpp
+++ b/doc/snippets/Slicing_stdvector_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 std::vector<int> ind{4, 2, 5, 5, 3};
 MatrixXi A = MatrixXi::Random(4, 6);
 cout << "Initial matrix A:\n" << A << "\n\n";
diff --git a/doc/snippets/SparseMatrix_coeffs.cpp b/doc/snippets/SparseMatrix_coeffs.cpp
index 266e32d..1b33eda 100644
--- a/doc/snippets/SparseMatrix_coeffs.cpp
+++ b/doc/snippets/SparseMatrix_coeffs.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 SparseMatrix<double> A(3, 3);
 A.insert(1, 2) = 0;
 A.insert(0, 1) = 1;
diff --git a/doc/snippets/TopicAliasing_block.cpp b/doc/snippets/TopicAliasing_block.cpp
index bbb7c2a..09b0bde 100644
--- a/doc/snippets/TopicAliasing_block.cpp
+++ b/doc/snippets/TopicAliasing_block.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi mat(3, 3);
 mat << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 cout << "Here is the matrix mat:\n" << mat << endl;
diff --git a/doc/snippets/TopicAliasing_block_correct.cpp b/doc/snippets/TopicAliasing_block_correct.cpp
index 6a3002e..106c88c 100644
--- a/doc/snippets/TopicAliasing_block_correct.cpp
+++ b/doc/snippets/TopicAliasing_block_correct.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi mat(3, 3);
 mat << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 cout << "Here is the matrix mat:\n" << mat << endl;
diff --git a/doc/snippets/TopicAliasing_cwise.cpp b/doc/snippets/TopicAliasing_cwise.cpp
index cb9d08a..200e265 100644
--- a/doc/snippets/TopicAliasing_cwise.cpp
+++ b/doc/snippets/TopicAliasing_cwise.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf mat(2, 2);
 mat << 1, 2, 4, 7;
 cout << "Here is the matrix mat:\n" << mat << endl << endl;
diff --git a/doc/snippets/TopicAliasing_mult1.cpp b/doc/snippets/TopicAliasing_mult1.cpp
index 4ae2a47..06494ec 100644
--- a/doc/snippets/TopicAliasing_mult1.cpp
+++ b/doc/snippets/TopicAliasing_mult1.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf matA(2, 2);
 matA << 2, 0, 0, 2;
 matA = matA * matA;
diff --git a/doc/snippets/TopicAliasing_mult2.cpp b/doc/snippets/TopicAliasing_mult2.cpp
index 52c9987..fcba70b 100644
--- a/doc/snippets/TopicAliasing_mult2.cpp
+++ b/doc/snippets/TopicAliasing_mult2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf matA(2, 2), matB(2, 2);
 matA << 2, 0, 0, 2;
 
diff --git a/doc/snippets/TopicAliasing_mult3.cpp b/doc/snippets/TopicAliasing_mult3.cpp
index b2bed6f..408f280 100644
--- a/doc/snippets/TopicAliasing_mult3.cpp
+++ b/doc/snippets/TopicAliasing_mult3.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf matA(2, 2);
 matA << 2, 0, 0, 2;
 matA.noalias() = matA * matA;
diff --git a/doc/snippets/TopicAliasing_mult4.cpp b/doc/snippets/TopicAliasing_mult4.cpp
index 9a82322..229d00e 100644
--- a/doc/snippets/TopicAliasing_mult4.cpp
+++ b/doc/snippets/TopicAliasing_mult4.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A(2, 2), B(3, 2);
 B << 2, 0, 0, 3, 1, 1;
 A << 2, 0, 0, -2;
diff --git a/doc/snippets/TopicAliasing_mult5.cpp b/doc/snippets/TopicAliasing_mult5.cpp
index 79a94c8..cae9e0d 100644
--- a/doc/snippets/TopicAliasing_mult5.cpp
+++ b/doc/snippets/TopicAliasing_mult5.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf A(2, 2), B(3, 2);
 B << 2, 0, 0, 3, 1, 1;
 A << 2, 0, 0, -2;
diff --git a/doc/snippets/TopicStorageOrders_example.cpp b/doc/snippets/TopicStorageOrders_example.cpp
index 64e2123..75c08b1 100644
--- a/doc/snippets/TopicStorageOrders_example.cpp
+++ b/doc/snippets/TopicStorageOrders_example.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix<int, 3, 4, ColMajor> Acolmajor;
 Acolmajor << 8, 2, 2, 9, 9, 1, 4, 4, 3, 5, 4, 5;
 cout << "The matrix A:" << endl;
diff --git a/doc/snippets/Triangular_solve.cpp b/doc/snippets/Triangular_solve.cpp
index 2da806b..41df445 100644
--- a/doc/snippets/Triangular_solve.cpp
+++ b/doc/snippets/Triangular_solve.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3d m = Matrix3d::Zero();
 m.triangularView<Eigen::Upper>().setOnes();
 cout << "Here is the matrix m:\n" << m << endl;
diff --git a/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp b/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp
index 087b1ec..e6911e6 100644
--- a/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp
+++ b/doc/snippets/Tridiagonalization_Tridiagonalization_MatrixType.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(5, 5);
 MatrixXd A = X + X.transpose();
 cout << "Here is a random symmetric 5x5 matrix:" << endl << A << endl << endl;
diff --git a/doc/snippets/Tridiagonalization_compute.cpp b/doc/snippets/Tridiagonalization_compute.cpp
index 1bb9d28..3680d7f 100644
--- a/doc/snippets/Tridiagonalization_compute.cpp
+++ b/doc/snippets/Tridiagonalization_compute.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Tridiagonalization<MatrixXf> tri;
 MatrixXf X = MatrixXf::Random(4, 4);
 MatrixXf A = X + X.transpose();
diff --git a/doc/snippets/Tridiagonalization_decomposeInPlace.cpp b/doc/snippets/Tridiagonalization_decomposeInPlace.cpp
index b28c935..904d3f7 100644
--- a/doc/snippets/Tridiagonalization_decomposeInPlace.cpp
+++ b/doc/snippets/Tridiagonalization_decomposeInPlace.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXd X = MatrixXd::Random(5, 5);
 MatrixXd A = X + X.transpose();
 cout << "Here is a random symmetric 5x5 matrix:" << endl << A << endl << endl;
diff --git a/doc/snippets/Tridiagonalization_diagonal.cpp b/doc/snippets/Tridiagonalization_diagonal.cpp
index 18edc1e..183da3c 100644
--- a/doc/snippets/Tridiagonalization_diagonal.cpp
+++ b/doc/snippets/Tridiagonalization_diagonal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcd X = MatrixXcd::Random(4, 4);
 MatrixXcd A = X + X.adjoint();
 cout << "Here is a random self-adjoint 4x4 matrix:" << endl << A << endl << endl;
diff --git a/doc/snippets/Tridiagonalization_householderCoefficients.cpp b/doc/snippets/Tridiagonalization_householderCoefficients.cpp
index f880f1d..88b1a28 100644
--- a/doc/snippets/Tridiagonalization_householderCoefficients.cpp
+++ b/doc/snippets/Tridiagonalization_householderCoefficients.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4d X = Matrix4d::Random(4, 4);
 Matrix4d A = X + X.transpose();
 cout << "Here is a random symmetric 4x4 matrix:" << endl << A << endl;
diff --git a/doc/snippets/Tridiagonalization_packedMatrix.cpp b/doc/snippets/Tridiagonalization_packedMatrix.cpp
index 3b186a8..c92abcd 100644
--- a/doc/snippets/Tridiagonalization_packedMatrix.cpp
+++ b/doc/snippets/Tridiagonalization_packedMatrix.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix4d X = Matrix4d::Random(4, 4);
 Matrix4d A = X + X.transpose();
 cout << "Here is a random symmetric 4x4 matrix:" << endl << A << endl;
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp b/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp
index 752c522..f5ecc4a 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_Block.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf matA(2, 2);
 matA << 1, 2, 3, 4;
 MatrixXf matB(4, 4);
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp b/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp
index 8af3d74..7942eba 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_CommaTemporary.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf mat = MatrixXf::Random(2, 3);
 std::cout << mat << std::endl << std::endl;
 mat = (MatrixXf(2, 2) << 0, 1, 1, 0).finished() * mat;
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp b/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp
index 55a2153..1053b06 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_Join.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVectorXd vec1(3);
 vec1 << 1, 2, 3;
 std::cout << "vec1 = " << vec1 << std::endl;
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp b/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp
index a400cb2..a59b2b0 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_LinSpaced.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXXf table(10, 4);
 table.col(0) = ArrayXf::LinSpaced(10, 0, 90);
 table.col(1) = EIGEN_PI / 180 * table.col(0);
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp b/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp
index 4878dd7..73e35c3 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_ThreeWays.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 const int size = 6;
 MatrixXd mat1(size, size);
 mat1.topLeftCorner(size / 2, size / 2) = MatrixXd::Zero(size / 2, size / 2);
diff --git a/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp b/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp
index 03fb899..0df204e 100644
--- a/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp
+++ b/doc/snippets/Tutorial_AdvancedInitialization_Zero.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 std::cout << "A fixed-size array:\n";
 Array33f a1 = Array33f::Zero();
 std::cout << a1 << "\n\n";
diff --git a/doc/snippets/Tutorial_Map_rowmajor.cpp b/doc/snippets/Tutorial_Map_rowmajor.cpp
index f1b9a2f..cb7e56c 100644
--- a/doc/snippets/Tutorial_Map_rowmajor.cpp
+++ b/doc/snippets/Tutorial_Map_rowmajor.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int array[8];
 for (int i = 0; i < 8; ++i) array[i] = i;
 cout << "Column-major:\n" << Map<Matrix<int, 2, 4> >(array) << endl;
diff --git a/doc/snippets/Tutorial_Map_using.cpp b/doc/snippets/Tutorial_Map_using.cpp
index 6fd6ea8..fb8def4 100644
--- a/doc/snippets/Tutorial_Map_using.cpp
+++ b/doc/snippets/Tutorial_Map_using.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 typedef Matrix<float, 1, Dynamic> MatrixType;
 typedef Map<MatrixType> MapType;
 typedef Map<const MatrixType> MapTypeConst;  // a read-only map
diff --git a/doc/snippets/Tutorial_ReshapeMat2Mat.cpp b/doc/snippets/Tutorial_ReshapeMat2Mat.cpp
index 855af31..a67b8f8 100644
--- a/doc/snippets/Tutorial_ReshapeMat2Mat.cpp
+++ b/doc/snippets/Tutorial_ReshapeMat2Mat.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf M1(2, 6);  // Column-major storage
 M1 << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;
 
diff --git a/doc/snippets/Tutorial_ReshapeMat2Vec.cpp b/doc/snippets/Tutorial_ReshapeMat2Vec.cpp
index 9a2df01..90148b5 100644
--- a/doc/snippets/Tutorial_ReshapeMat2Vec.cpp
+++ b/doc/snippets/Tutorial_ReshapeMat2Vec.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf M1(3, 3);  // Column-major storage
 M1 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 
diff --git a/doc/snippets/Tutorial_SlicingCol.cpp b/doc/snippets/Tutorial_SlicingCol.cpp
index bfaec50..41dc671 100644
--- a/doc/snippets/Tutorial_SlicingCol.cpp
+++ b/doc/snippets/Tutorial_SlicingCol.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf M1 = MatrixXf::Random(3, 8);
 cout << "Column major input:" << endl << M1 << "\n";
 Map<MatrixXf, 0, OuterStride<> > M2(M1.data(), M1.rows(), (M1.cols() + 2) / 3, OuterStride<>(M1.outerStride() * 3));
diff --git a/doc/snippets/Tutorial_SlicingVec.cpp b/doc/snippets/Tutorial_SlicingVec.cpp
index d0c81c6..7f3cdf6 100644
--- a/doc/snippets/Tutorial_SlicingVec.cpp
+++ b/doc/snippets/Tutorial_SlicingVec.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 RowVectorXf v = RowVectorXf::LinSpaced(20, 0, 19);
 cout << "Input:" << endl << v << endl;
 Map<RowVectorXf, 0, InnerStride<2> > v2(v.data(), v.size() / 2);
diff --git a/doc/snippets/Tutorial_commainit_01.cpp b/doc/snippets/Tutorial_commainit_01.cpp
index 36728a7..966dee7 100644
--- a/doc/snippets/Tutorial_commainit_01.cpp
+++ b/doc/snippets/Tutorial_commainit_01.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m;
 m << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 std::cout << m;
diff --git a/doc/snippets/Tutorial_commainit_01b.cpp b/doc/snippets/Tutorial_commainit_01b.cpp
index 126277b..a3ecc01 100644
--- a/doc/snippets/Tutorial_commainit_01b.cpp
+++ b/doc/snippets/Tutorial_commainit_01b.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m;
 m.row(0) << 1, 2, 3;
 m.block(1, 0, 2, 2) << 4, 5, 7, 8;
diff --git a/doc/snippets/Tutorial_commainit_02.cpp b/doc/snippets/Tutorial_commainit_02.cpp
index 3437237..80abbef 100644
--- a/doc/snippets/Tutorial_commainit_02.cpp
+++ b/doc/snippets/Tutorial_commainit_02.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 int rows = 5, cols = 5;
 MatrixXf m(rows, cols);
 m << (Matrix3f() << 1, 2, 3, 4, 5, 6, 7, 8, 9).finished(),
diff --git a/doc/snippets/Tutorial_range_for_loop_1d_cxx11.cpp b/doc/snippets/Tutorial_range_for_loop_1d_cxx11.cpp
index ee3af86..447d649 100644
--- a/doc/snippets/Tutorial_range_for_loop_1d_cxx11.cpp
+++ b/doc/snippets/Tutorial_range_for_loop_1d_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 VectorXi v = VectorXi::Random(4);
 cout << "Here is the vector v:\n";
 for (auto x : v) cout << x << " ";
diff --git a/doc/snippets/Tutorial_range_for_loop_2d_cxx11.cpp b/doc/snippets/Tutorial_range_for_loop_2d_cxx11.cpp
index 27e1f8a..dc121f2 100644
--- a/doc/snippets/Tutorial_range_for_loop_2d_cxx11.cpp
+++ b/doc/snippets/Tutorial_range_for_loop_2d_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2i A = Matrix2i::Random();
 cout << "Here are the coeffs of the 2x2 matrix A:\n";
 for (auto x : A.reshaped()) cout << x << " ";
diff --git a/doc/snippets/Tutorial_reshaped_vs_resize_1.cpp b/doc/snippets/Tutorial_reshaped_vs_resize_1.cpp
index 41a5d99..4ef4f73 100644
--- a/doc/snippets/Tutorial_reshaped_vs_resize_1.cpp
+++ b/doc/snippets/Tutorial_reshaped_vs_resize_1.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;
diff --git a/doc/snippets/Tutorial_reshaped_vs_resize_2.cpp b/doc/snippets/Tutorial_reshaped_vs_resize_2.cpp
index c5d3929..9cdcdc2 100644
--- a/doc/snippets/Tutorial_reshaped_vs_resize_2.cpp
+++ b/doc/snippets/Tutorial_reshaped_vs_resize_2.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix<int, Dynamic, Dynamic, RowMajor> m = Matrix4i::Random();
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is m.reshaped(2, 8):" << endl << m.reshaped(2, 8) << endl;
diff --git a/doc/snippets/Tutorial_solve_matrix_inverse.cpp b/doc/snippets/Tutorial_solve_matrix_inverse.cpp
index e39696f..811a206 100644
--- a/doc/snippets/Tutorial_solve_matrix_inverse.cpp
+++ b/doc/snippets/Tutorial_solve_matrix_inverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A;
 Vector3f b;
 A << 1, 2, 3, 4, 5, 6, 7, 8, 10;
diff --git a/doc/snippets/Tutorial_solve_multiple_rhs.cpp b/doc/snippets/Tutorial_solve_multiple_rhs.cpp
index b08100a..d4f3e04 100644
--- a/doc/snippets/Tutorial_solve_multiple_rhs.cpp
+++ b/doc/snippets/Tutorial_solve_multiple_rhs.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A(3, 3);
 A << 1, 2, 3, 4, 5, 6, 7, 8, 10;
 Matrix<float, 3, 2> B;
diff --git a/doc/snippets/Tutorial_solve_reuse_decomposition.cpp b/doc/snippets/Tutorial_solve_reuse_decomposition.cpp
index d47c6ca..380ecc5 100644
--- a/doc/snippets/Tutorial_solve_reuse_decomposition.cpp
+++ b/doc/snippets/Tutorial_solve_reuse_decomposition.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A(3, 3);
 A << 1, 2, 3, 4, 5, 6, 7, 8, 10;
 PartialPivLU<Matrix3f> luOfA(A);  // compute LU decomposition of A
diff --git a/doc/snippets/Tutorial_solve_singular.cpp b/doc/snippets/Tutorial_solve_singular.cpp
index 4d168df..a910acb 100644
--- a/doc/snippets/Tutorial_solve_singular.cpp
+++ b/doc/snippets/Tutorial_solve_singular.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A;
 Vector3f b;
 A << 1, 2, 3, 4, 5, 6, 7, 8, 9;
diff --git a/doc/snippets/Tutorial_solve_triangular.cpp b/doc/snippets/Tutorial_solve_triangular.cpp
index b422f24..4910d81 100644
--- a/doc/snippets/Tutorial_solve_triangular.cpp
+++ b/doc/snippets/Tutorial_solve_triangular.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A;
 Vector3f b;
 A << 1, 2, 3, 0, 5, 6, 0, 0, 10;
diff --git a/doc/snippets/Tutorial_solve_triangular_inplace.cpp b/doc/snippets/Tutorial_solve_triangular_inplace.cpp
index f928e78..930b4f7 100644
--- a/doc/snippets/Tutorial_solve_triangular_inplace.cpp
+++ b/doc/snippets/Tutorial_solve_triangular_inplace.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f A;
 Vector3f b;
 A << 1, 2, 3, 0, 5, 6, 0, 0, 10;
diff --git a/doc/snippets/Tutorial_std_sort.cpp b/doc/snippets/Tutorial_std_sort.cpp
index cde2a6f..fa52364 100644
--- a/doc/snippets/Tutorial_std_sort.cpp
+++ b/doc/snippets/Tutorial_std_sort.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Array4i v = Array4i::Random().abs();
 cout << "Here is the initial vector v:\n" << v.transpose() << "\n";
 std::sort(v.begin(), v.end());
diff --git a/doc/snippets/Tutorial_std_sort_rows_cxx11.cpp b/doc/snippets/Tutorial_std_sort_rows_cxx11.cpp
index d948949..9cbc406 100644
--- a/doc/snippets/Tutorial_std_sort_rows_cxx11.cpp
+++ b/doc/snippets/Tutorial_std_sort_rows_cxx11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 ArrayXXi A = ArrayXXi::Random(4, 4).abs();
 cout << "Here is the initial matrix A:\n" << A << "\n";
 for (auto row : A.rowwise()) std::sort(row.begin(), row.end());
diff --git a/doc/snippets/VectorwiseOp_homogeneous.cpp b/doc/snippets/VectorwiseOp_homogeneous.cpp
index 3d2c8fd..211188d 100644
--- a/doc/snippets/VectorwiseOp_homogeneous.cpp
+++ b/doc/snippets/VectorwiseOp_homogeneous.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3Xd M = Matrix3Xd::Random(3, 5);
 Projective3d P(Matrix4d::Random());
 cout << "The matrix M is:" << endl << M << endl << endl;
diff --git a/doc/snippets/Vectorwise_reverse.cpp b/doc/snippets/Vectorwise_reverse.cpp
index 85a0065..b7a7291 100644
--- a/doc/snippets/Vectorwise_reverse.cpp
+++ b/doc/snippets/Vectorwise_reverse.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXi m = MatrixXi::Random(3, 4);
 cout << "Here is the matrix m:" << endl << m << endl;
 cout << "Here is the rowwise reverse of m:" << endl << m.rowwise().reverse() << endl;
diff --git a/doc/snippets/class_FullPivLU.cpp b/doc/snippets/class_FullPivLU.cpp
index 2951c8d..0b8770a 100644
--- a/doc/snippets/class_FullPivLU.cpp
+++ b/doc/snippets/class_FullPivLU.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 typedef Matrix<double, 5, 3> Matrix5x3;
 typedef Matrix<double, 5, 5> Matrix5x5;
 Matrix5x3 m = Matrix5x3::Random();
diff --git a/doc/snippets/tut_arithmetic_redux_minmax.cpp b/doc/snippets/tut_arithmetic_redux_minmax.cpp
index dc43358..67a6d41 100644
--- a/doc/snippets/tut_arithmetic_redux_minmax.cpp
+++ b/doc/snippets/tut_arithmetic_redux_minmax.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix3f m = Matrix3f::Random();
 std::ptrdiff_t i, j;
 float minOfM = m.minCoeff(&i, &j);
diff --git a/doc/snippets/tut_arithmetic_transpose_aliasing.cpp b/doc/snippets/tut_arithmetic_transpose_aliasing.cpp
index 75d46cf..cedc00e 100644
--- a/doc/snippets/tut_arithmetic_transpose_aliasing.cpp
+++ b/doc/snippets/tut_arithmetic_transpose_aliasing.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 Matrix2i a;
 a << 1, 2, 3, 4;
 cout << "Here is the matrix a:\n" << a << endl;
diff --git a/doc/snippets/tut_arithmetic_transpose_conjugate.cpp b/doc/snippets/tut_arithmetic_transpose_conjugate.cpp
index 3b356d2..b88bc47 100644
--- a/doc/snippets/tut_arithmetic_transpose_conjugate.cpp
+++ b/doc/snippets/tut_arithmetic_transpose_conjugate.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXcf a = MatrixXcf::Random(2, 2);
 cout << "Here is the matrix a\n" << a << endl;
 
diff --git a/doc/snippets/tut_arithmetic_transpose_inplace.cpp b/doc/snippets/tut_arithmetic_transpose_inplace.cpp
index dbf8bc4..57a50d8 100644
--- a/doc/snippets/tut_arithmetic_transpose_inplace.cpp
+++ b/doc/snippets/tut_arithmetic_transpose_inplace.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf a(2, 3);
 a << 1, 2, 3, 4, 5, 6;
 cout << "Here is the initial matrix a:\n" << a << endl;
diff --git a/doc/snippets/tut_matrix_assignment_resizing.cpp b/doc/snippets/tut_matrix_assignment_resizing.cpp
index 9f5da43..6d0b6c8 100644
--- a/doc/snippets/tut_matrix_assignment_resizing.cpp
+++ b/doc/snippets/tut_matrix_assignment_resizing.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 MatrixXf a(2, 2);
 std::cout << "a is of size " << a.rows() << "x" << a.cols() << std::endl;
 MatrixXf b(3, 3);
diff --git a/doc/special_examples/CMakeLists.txt b/doc/special_examples/CMakeLists.txt
index af3f7e4..7b16638 100644
--- a/doc/special_examples/CMakeLists.txt
+++ b/doc/special_examples/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 if(NOT EIGEN_TEST_NOQT)
   find_package(Qt4)
   if(QT4_FOUND)
diff --git a/doc/special_examples/Tutorial_sparse_example.cpp b/doc/special_examples/Tutorial_sparse_example.cpp
index b8994ba..1d7c1a3 100644
--- a/doc/special_examples/Tutorial_sparse_example.cpp
+++ b/doc/special_examples/Tutorial_sparse_example.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Sparse>
 #include <vector>
 #include <iostream>
diff --git a/doc/special_examples/Tutorial_sparse_example_details.cpp b/doc/special_examples/Tutorial_sparse_example_details.cpp
index 1bcdeb5..81ef47a 100644
--- a/doc/special_examples/Tutorial_sparse_example_details.cpp
+++ b/doc/special_examples/Tutorial_sparse_example_details.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Sparse>
 #include <vector>
 #include <QImage>
diff --git a/doc/special_examples/random_cpp11.cpp b/doc/special_examples/random_cpp11.cpp
index a59613a..00489a1 100644
--- a/doc/special_examples/random_cpp11.cpp
+++ b/doc/special_examples/random_cpp11.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Core>
 #include <iostream>
 #include <random>
diff --git a/doc/tutorial.cpp b/doc/tutorial.cpp
index 7e58b61..923aef9 100644
--- a/doc/tutorial.cpp
+++ b/doc/tutorial.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/Array>
 
 int main(int argc, char *argv[]) {
diff --git a/failtest/CMakeLists.txt b/failtest/CMakeLists.txt
index 0e55c0b..aac11ef 100644
--- a/failtest/CMakeLists.txt
+++ b/failtest/CMakeLists.txt
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 ei_add_failtest("failtest_sanity_check")
 
diff --git a/lapack/CMakeLists.txt b/lapack/CMakeLists.txt
index 51bb455..0a91839 100644
--- a/lapack/CMakeLists.txt
+++ b/lapack/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 project(EigenLapack CXX)
 
 if(EIGEN_BUILD_LAPACK AND EIGEN_BUILD_BLAS)
diff --git a/lapack/cholesky.inc b/lapack/cholesky.inc
index 695d3b8..f50adb8 100644
--- a/lapack/cholesky.inc
+++ b/lapack/cholesky.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "lapack_common.h"
 #include <Eigen/Cholesky>
diff --git a/lapack/clacgv.f b/lapack/clacgv.f
index 359eb07..44fff6d 100644
--- a/lapack/clacgv.f
+++ b/lapack/clacgv.f
@@ -72,6 +72,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE CLACGV( N, X, INCX )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/cladiv.f b/lapack/cladiv.f
index 2807ac5..4e14c53 100644
--- a/lapack/cladiv.f
+++ b/lapack/cladiv.f
@@ -62,6 +62,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       COMPLEX FUNCTION CLADIV( X, Y )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/clarf.f b/lapack/clarf.f
index ca0328f..29d99f0 100644
--- a/lapack/clarf.f
+++ b/lapack/clarf.f
@@ -126,6 +126,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE CLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/clarfb.f b/lapack/clarfb.f
index 40bbdf4..6ed99a8 100644
--- a/lapack/clarfb.f
+++ b/lapack/clarfb.f
@@ -192,6 +192,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE CLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
      $                   T, LDT, C, LDC, WORK, LDWORK )
 *
diff --git a/lapack/clarfg.f b/lapack/clarfg.f
index d64f396..74b232e 100644
--- a/lapack/clarfg.f
+++ b/lapack/clarfg.f
@@ -104,6 +104,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE CLARFG( N, ALPHA, X, INCX, TAU )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/clarft.f b/lapack/clarft.f
index 981447f..052c1fb 100644
--- a/lapack/clarft.f
+++ b/lapack/clarft.f
@@ -161,6 +161,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE CLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/complex_double.cpp b/lapack/complex_double.cpp
index 1056767..3556f65 100644
--- a/lapack/complex_double.cpp
+++ b/lapack/complex_double.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR std::complex<double>
 #define SCALAR_SUFFIX z
diff --git a/lapack/complex_single.cpp b/lapack/complex_single.cpp
index 40ab913..ec15341 100644
--- a/lapack/complex_single.cpp
+++ b/lapack/complex_single.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR std::complex<float>
 #define SCALAR_SUFFIX c
diff --git a/lapack/dladiv.f b/lapack/dladiv.f
index 090a906..7a704dc 100644
--- a/lapack/dladiv.f
+++ b/lapack/dladiv.f
@@ -88,6 +88,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE DLADIV( A, B, C, D, P, Q )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlamch.f b/lapack/dlamch.f
index eb307e5..bcb52b6 100644
--- a/lapack/dlamch.f
+++ b/lapack/dlamch.f
@@ -61,6 +61,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlapy2.f b/lapack/dlapy2.f
index e6a62bf..5bd62a4 100644
--- a/lapack/dlapy2.f
+++ b/lapack/dlapy2.f
@@ -61,6 +61,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlapy3.f b/lapack/dlapy3.f
index ae9844f..9e424b6 100644
--- a/lapack/dlapy3.f
+++ b/lapack/dlapy3.f
@@ -66,6 +66,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlarf.f b/lapack/dlarf.f
index 2a82ff4..3dd12d9 100644
--- a/lapack/dlarf.f
+++ b/lapack/dlarf.f
@@ -122,6 +122,8 @@
 *> \ingroup doubleOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlarfb.f b/lapack/dlarfb.f
index 206d3b2..f7d1560 100644
--- a/lapack/dlarfb.f
+++ b/lapack/dlarfb.f
@@ -192,6 +192,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
      $                   T, LDT, C, LDC, WORK, LDWORK )
 *
diff --git a/lapack/dlarfg.f b/lapack/dlarfg.f
index 458ad2e..eeadbfe 100644
--- a/lapack/dlarfg.f
+++ b/lapack/dlarfg.f
@@ -104,6 +104,8 @@
 *> \ingroup doubleOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/dlarft.f b/lapack/dlarft.f
index 4b75504..426c40d 100644
--- a/lapack/dlarft.f
+++ b/lapack/dlarft.f
@@ -161,6 +161,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/double.cpp b/lapack/double.cpp
index 9e57e90..036473d 100644
--- a/lapack/double.cpp
+++ b/lapack/double.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR double
 #define SCALAR_SUFFIX d
diff --git a/lapack/dsecnd_INT_CPU_TIME.cpp b/lapack/dsecnd_INT_CPU_TIME.cpp
index 7dfc5e2..258777e 100644
--- a/lapack/dsecnd_INT_CPU_TIME.cpp
+++ b/lapack/dsecnd_INT_CPU_TIME.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifdef _WIN32
 #include <cstdint>
diff --git a/lapack/dsecnd_NONE.f b/lapack/dsecnd_NONE.f
index 61a8dff..518d4aa 100644
--- a/lapack/dsecnd_NONE.f
+++ b/lapack/dsecnd_NONE.f
@@ -35,6 +35,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       DOUBLE PRECISION FUNCTION DSECND( )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/eigenvalues.inc b/lapack/eigenvalues.inc
index c67c825..6f2d402 100644
--- a/lapack/eigenvalues.inc
+++ b/lapack/eigenvalues.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "lapack_common.h"
 #include <Eigen/Eigenvalues>
diff --git a/lapack/ilaclc.f b/lapack/ilaclc.f
index 4ceb61c..47b270e 100644
--- a/lapack/ilaclc.f
+++ b/lapack/ilaclc.f
@@ -76,6 +76,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILACLC( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/ilaclr.f b/lapack/ilaclr.f
index d8ab09c..0e51651 100644
--- a/lapack/ilaclr.f
+++ b/lapack/ilaclr.f
@@ -76,6 +76,8 @@
 *> \ingroup complexOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILACLR( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/iladlc.f b/lapack/iladlc.f
index f84bd83..e232c91 100644
--- a/lapack/iladlc.f
+++ b/lapack/iladlc.f
@@ -76,6 +76,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILADLC( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/iladlr.f b/lapack/iladlr.f
index 2114c61..eb73540 100644
--- a/lapack/iladlr.f
+++ b/lapack/iladlr.f
@@ -76,6 +76,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILADLR( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/ilaslc.f b/lapack/ilaslc.f
index e3db0f4..4653257 100644
--- a/lapack/ilaslc.f
+++ b/lapack/ilaslc.f
@@ -76,6 +76,8 @@
 *> \ingroup realOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILASLC( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/ilaslr.f b/lapack/ilaslr.f
index 48b73f4..b09cec8 100644
--- a/lapack/ilaslr.f
+++ b/lapack/ilaslr.f
@@ -76,6 +76,8 @@
 *> \ingroup realOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILASLR( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/ilazlc.f b/lapack/ilazlc.f
index 15b1490..0f36839 100644
--- a/lapack/ilazlc.f
+++ b/lapack/ilazlc.f
@@ -76,6 +76,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILAZLC( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/ilazlr.f b/lapack/ilazlr.f
index b2ab943..f2cc91d 100644
--- a/lapack/ilazlr.f
+++ b/lapack/ilazlr.f
@@ -76,6 +76,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       INTEGER FUNCTION ILAZLR( M, N, A, LDA )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/lapack.h b/lapack/lapack.h
index ad6485d..2238fc3 100644
--- a/lapack/lapack.h
+++ b/lapack/lapack.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef LAPACK_H
 #define LAPACK_H
 
diff --git a/lapack/lapack_common.h b/lapack/lapack_common.h
index 726fabf..46368f9 100644
--- a/lapack/lapack_common.h
+++ b/lapack/lapack_common.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LAPACK_COMMON_H
 #define EIGEN_LAPACK_COMMON_H
diff --git a/lapack/lu.inc b/lapack/lu.inc
index 69fdc3d..81bcc6c 100644
--- a/lapack/lu.inc
+++ b/lapack/lu.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "common.h"
 #include <Eigen/LU>
diff --git a/lapack/second_INT_CPU_TIME.cpp b/lapack/second_INT_CPU_TIME.cpp
index 49371ff..a893d92 100644
--- a/lapack/second_INT_CPU_TIME.cpp
+++ b/lapack/second_INT_CPU_TIME.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifdef _WIN32
 #include <cstdint>
diff --git a/lapack/second_NONE.f b/lapack/second_NONE.f
index d3e6d33..7c0d793 100644
--- a/lapack/second_NONE.f
+++ b/lapack/second_NONE.f
@@ -35,6 +35,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       REAL FUNCTION SECOND( )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/single.cpp b/lapack/single.cpp
index 10c0a2b..d83be24 100644
--- a/lapack/single.cpp
+++ b/lapack/single.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define SCALAR float
 #define SCALAR_SUFFIX s
diff --git a/lapack/sladiv.f b/lapack/sladiv.f
index da3afa3..9de8d5d 100644
--- a/lapack/sladiv.f
+++ b/lapack/sladiv.f
@@ -88,6 +88,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE SLADIV( A, B, C, D, P, Q )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slamch.f b/lapack/slamch.f
index 4bffad0..a8c22f8 100644
--- a/lapack/slamch.f
+++ b/lapack/slamch.f
@@ -65,6 +65,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       REAL             FUNCTION SLAMCH( CMACH )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slapy2.f b/lapack/slapy2.f
index 1f6b1ca..1190df6 100644
--- a/lapack/slapy2.f
+++ b/lapack/slapy2.f
@@ -61,6 +61,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       REAL             FUNCTION SLAPY2( X, Y )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slapy3.f b/lapack/slapy3.f
index aa2f5bf..31f7a92 100644
--- a/lapack/slapy3.f
+++ b/lapack/slapy3.f
@@ -66,6 +66,8 @@
 *> \ingroup auxOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       REAL             FUNCTION SLAPY3( X, Y, Z )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slarf.f b/lapack/slarf.f
index 8a8ff30..c7fc628 100644
--- a/lapack/slarf.f
+++ b/lapack/slarf.f
@@ -122,6 +122,8 @@
 *> \ingroup realOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE SLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slarfb.f b/lapack/slarfb.f
index eb95990..5a754a7 100644
--- a/lapack/slarfb.f
+++ b/lapack/slarfb.f
@@ -192,6 +192,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE SLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
      $                   T, LDT, C, LDC, WORK, LDWORK )
 *
diff --git a/lapack/slarfg.f b/lapack/slarfg.f
index 4f10ffc..5fb370d 100644
--- a/lapack/slarfg.f
+++ b/lapack/slarfg.f
@@ -104,6 +104,8 @@
 *> \ingroup realOTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE SLARFG( N, ALPHA, X, INCX, TAU )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/slarft.f b/lapack/slarft.f
index 30b0668..1bd09fb 100644
--- a/lapack/slarft.f
+++ b/lapack/slarft.f
@@ -161,6 +161,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE SLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/lapack/svd.inc b/lapack/svd.inc
index 733f07e..4468821 100644
--- a/lapack/svd.inc
+++ b/lapack/svd.inc
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "lapack_common.h"
 #include <Eigen/SVD>
diff --git a/lapack/zlacgv.f b/lapack/zlacgv.f
index 16c2e2e..48285b7 100644
--- a/lapack/zlacgv.f
+++ b/lapack/zlacgv.f
@@ -72,6 +72,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE ZLACGV( N, X, INCX )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/zladiv.f b/lapack/zladiv.f
index aa71db1..3bf2a9f 100644
--- a/lapack/zladiv.f
+++ b/lapack/zladiv.f
@@ -62,6 +62,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       COMPLEX*16     FUNCTION ZLADIV( X, Y )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/zlarf.f b/lapack/zlarf.f
index 53f314d..9a85ca6 100644
--- a/lapack/zlarf.f
+++ b/lapack/zlarf.f
@@ -126,6 +126,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/zlarfb.f b/lapack/zlarfb.f
index 30fc4b9..828ac31 100644
--- a/lapack/zlarfb.f
+++ b/lapack/zlarfb.f
@@ -192,6 +192,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
      $                   T, LDT, C, LDC, WORK, LDWORK )
 *
diff --git a/lapack/zlarfg.f b/lapack/zlarfg.f
index a90ae9f..2d988e0 100644
--- a/lapack/zlarfg.f
+++ b/lapack/zlarfg.f
@@ -104,6 +104,8 @@
 *> \ingroup complex16OTHERauxiliary
 *
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
 *
 *  -- LAPACK auxiliary routine (version 3.4.0) --
diff --git a/lapack/zlarft.f b/lapack/zlarft.f
index 6a6151f..35e157c 100644
--- a/lapack/zlarft.f
+++ b/lapack/zlarft.f
@@ -161,6 +161,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
+*> SPDX-FileCopyrightText: The Eigen Authors
+*> SPDX-License-Identifier: BSD-3-Clause
       SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 *
 *  -- LAPACK auxiliary routine (version 3.4.1) --
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index 0d9a631..833a2ae 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 get_property(EIGEN_TESTS_LIST GLOBAL PROPERTY EIGEN_TESTS_LIST)
 configure_file(buildtests.in ${CMAKE_BINARY_DIR}/buildtests.sh @ONLY)
 
diff --git a/scripts/add_spdx_headers.py b/scripts/add_spdx_headers.py
new file mode 100755
index 0000000..44d37ab
--- /dev/null
+++ b/scripts/add_spdx_headers.py
@@ -0,0 +1,411 @@
+#!/usr/bin/env python3
+# This file is part of Eigen, a lightweight C++ template library
+# for linear algebra.
+#
+# Copyright (C) 2026 The Eigen Authors
+#
+# This Source Code Form is subject to the terms of the Mozilla
+# Public License v. 2.0. If a copy of the MPL was not distributed
+# with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+# SPDX-License-Identifier: MPL-2.0
+# REUSE-IgnoreStart
+"""
+Insert per-file SPDX license tags across the Eigen tree.
+
+Idempotent: files already containing an SPDX-License-Identifier tag are left
+untouched. Re-running after a clean run produces no changes.
+
+The license id assigned to each file is determined by `classify(path)`:
+- LAPACKE/BLAS bridges with Intel copyright    -> BSD-3-Clause
+- MORSE-derived cmake/Find*.cmake modules      -> BSD-3-Clause
+- Reference-BLAS Fortran tests blas/testing/*.f -> BSD-3-Clause
+- LevenbergMarquardt MINPACK-derived headers   -> MPL-2.0 AND LicenseRef-MINPACK
+- Everything else under repo                    -> MPL-2.0
+
+The comment style is determined by the file extension:
+- C / C++ / CUDA / Inc / Fortran-fixed-form ('//', '#', '*' etc.)
+
+Files explicitly excluded from inline SPDX (handled instead by REUSE.toml):
+- LICENSES/, COPYING.*, LICENSE                                (license texts)
+- *.dox, *.in, *.md, *.dat, *.png, README*, INSTALL,           (assets/templates)
+  *.def, *.natvis, *.css, *.xsl, *.preamble, *.traits, *.krazy
+- .git*, .clang*, .coderabbit*, .gitlab/                       (config dotfiles)
+- failtest/*.cpp                                               (trivial stubs)
+- signature_of_eigen3_matrix_library                           (sentinel file)
+"""
+# REUSE-IgnoreEnd
+
+from __future__ import annotations
+
+import argparse
+import re
+import subprocess
+import sys
+from pathlib import Path
+from typing import Iterable
+
+REPO_ROOT = Path(__file__).resolve().parent.parent
+
+SPDX_RE = re.compile(r"SPDX-License-Identifier\s*:")
+# Match REUSE's own copyright detection (case-sensitive `Copyright`); lowercase
+# `copyright` lines (typo in some headers) won't be recognised, so we'll still
+# inject `SPDX-FileCopyrightText` for those files.
+COPYRIGHT_RE = re.compile(r"Copyright\b")
+
+
+# ---------------------------------------------------------------------------
+# Path classification
+# ---------------------------------------------------------------------------
+
+# Files containing an Intel BSD-3-Clause copyright header (LAPACKE/BLAS bridges).
+# Match by content rather than path so this stays correct as files are added.
+INTEL_BSD_MARKER = b"Copyright (c) 2011, Intel Corporation"
+INTEL_BSD_MARKER_2010 = b"Copyright (c) 2010, Intel Corp"
+
+# MORSE-derived cmake modules (Univ. of Tennessee 2009-2014).
+MORSE_MARKER = b"@copyright (c) 2009-2014 The University of Tennessee"
+
+# Header marker for the LevenbergMarquardt MINPACK-derived files.
+MINPACK_MARKER = b"Minpack license"
+
+# Reference-BLAS / LAPACK Fortran (Univ. of Tennessee/Berkeley/Colorado Denver).
+REFBLAS_MARKERS = (
+    b"Reference BLAS is a software package",
+    b"LAPACK is a software package provided by Univ. of Tennessee",
+)
+
+# Apache-2.0 — TensorFlow-derived BFloat16, Codeplay FindComputeCpp.cmake.
+APACHE_MARKER = b"Licensed under the Apache License"
+
+
+def in_failtest(rel: Path) -> bool:
+    return rel.parts and rel.parts[0] == "failtest"
+
+
+# Bulk-mapped via REUSE.toml — never insert inline SPDX into these.
+SKIP_BY_NAME = {
+    "CHANGELOG.md",
+    "INSTALL",
+    "README.md",
+    "signature_of_eigen3_matrix_library",
+    "CLAUDE.md",
+}
+
+SKIP_BY_SUFFIX = {
+    ".dox",
+    ".in",
+    ".dat",
+    ".png",
+    ".svg",
+    ".jpg",
+    ".jpeg",
+    ".gif",
+    ".md",
+    ".txt",        # README.txt, *.txt config — handled by REUSE.toml
+    ".def",        # blas/eigen_blas.def, lapack/eigen_lapack*.def
+    ".natvis",
+    ".css",
+    ".xsl",
+    ".preamble",
+    ".traits",
+    ".krazy",
+    ".yaml",       # .coderabbit.yaml — REUSE.toml
+    ".entry",      # doc/examples/make_circulant.cpp.entry / .evaluator / ...
+    ".evaluator",
+    ".expression",
+    ".main",
+}
+
+# Top-level / specially-handled excluded paths (relative to repo root).
+SKIP_PATHS = {
+    ".clang-format",
+    ".clang-tidy",
+    ".coderabbit.yaml",
+    ".git-blame-ignore-revs",
+    ".gitattributes",
+    ".gitignore",
+    "LICENSE",
+    "REUSE.toml",
+}
+
+
+def is_skipped(rel: Path) -> bool:
+    name = rel.name
+    posix = rel.as_posix()
+    if posix in SKIP_PATHS:
+        return True
+    if posix.startswith("LICENSES/") or posix.startswith("COPYING"):
+        return True
+    if posix.startswith(".gitlab/") or posix.startswith(".git/"):
+        return True
+    if in_failtest(rel) and rel.suffix == ".cpp":
+        return True
+    # Recognise CMakeLists.txt by name BEFORE the .txt suffix-skip below.
+    if name == "CMakeLists.txt":
+        return False
+    if name in SKIP_BY_NAME:
+        return True
+    if rel.suffix in SKIP_BY_SUFFIX:
+        return True
+    return False
+
+
+def classify(rel: Path, content: bytes) -> str:
+    """Return the SPDX-License-Identifier expression for a file."""
+    if INTEL_BSD_MARKER in content or INTEL_BSD_MARKER_2010 in content:
+        return "BSD-3-Clause"
+    if MORSE_MARKER in content:
+        return "BSD-3-Clause"
+    if MINPACK_MARKER in content:
+        return "MPL-2.0 AND LicenseRef-MINPACK"
+    if any(m in content for m in REFBLAS_MARKERS):
+        return "BSD-3-Clause"
+    if APACHE_MARKER in content:
+        return "Apache-2.0"
+    return "MPL-2.0"
+
+
+# ---------------------------------------------------------------------------
+# Comment-style dispatch
+# ---------------------------------------------------------------------------
+
+# (suffix -> comment prefix). Files without a known suffix are handled by name.
+SLASH_LANGUAGES = {".h", ".hh", ".cpp", ".cc", ".c", ".cu", ".inc", ".js"}
+HASH_LANGUAGES = {".cmake", ".sh", ".py", ".ps1", ".yml", ".cfg"}
+FORTRAN_LANGUAGES = {".f", ".F", ".f90"}
+
+
+def is_eigen_umbrella_header(rel: Path) -> bool:
+    """`Eigen/Core`, `unsupported/Eigen/Tensor`, etc. — extensionless C++ headers."""
+    parts = rel.parts
+    if rel.suffix:
+        return False
+    if len(parts) >= 2 and parts[0] == "Eigen" and parts[-1][:1].isupper():
+        return len(parts) == 2
+    if (
+        len(parts) >= 3
+        and parts[0] == "unsupported"
+        and parts[1] == "Eigen"
+        and parts[-1][:1].isupper()
+    ):
+        # unsupported/Eigen/Tensor, unsupported/Eigen/CXX11/Tensor, ...
+        return True
+    return False
+
+
+def has_shebang(path: Path) -> bool:
+    try:
+        with path.open("rb") as f:
+            return f.read(2) == b"#!"
+    except OSError:
+        return False
+
+
+def comment_prefix_for(rel: Path, full: Path | None = None) -> str | None:
+    if rel.suffix in SLASH_LANGUAGES:
+        return "//"
+    if rel.suffix in HASH_LANGUAGES:
+        return "#"
+    if rel.suffix in FORTRAN_LANGUAGES:
+        return "*>"
+    name = rel.name
+    if name == "CMakeLists.txt":
+        return "#"
+    if is_eigen_umbrella_header(rel):
+        return "//"
+    # Extensionless executable scripts (e.g. scripts/eigen_gen_docs).
+    if not rel.suffix and full is not None and has_shebang(full):
+        return "#"
+    return None
+
+
+# ---------------------------------------------------------------------------
+# Insertion strategy
+# ---------------------------------------------------------------------------
+
+def insert_spdx(
+    path: Path, content: bytes, spdx_id: str, comment: str
+) -> bytes | None:
+    """Return new file bytes with the SPDX line inserted, or None for no-op."""
+    full_text = content.decode("utf-8", errors="replace")
+    if SPDX_RE.search(full_text):
+        return None  # Already tagged.
+
+    head = full_text[:4096]
+    has_copyright = COPYRIGHT_RE.search(head) is not None
+
+    # Match the file's line-ending style (CRLF vs LF) so we don't introduce
+    # mixed endings that clang-format will then "fix".
+    eol = "\r\n" if b"\r\n" in content[:4096] else "\n"
+
+    # REUSE-IgnoreStart
+    spdx_lines = []
+    if not has_copyright:
+        spdx_lines.append(f"{comment} SPDX-FileCopyrightText: The Eigen Authors{eol}")
+    spdx_lines.append(f"{comment} SPDX-License-Identifier: {spdx_id}{eol}")
+    spdx_line = "".join(spdx_lines).encode()
+    # REUSE-IgnoreEnd
+
+    lines = full_text.splitlines(keepends=True)
+
+    # Two header families to consider:
+    #
+    # (a) Existing C-line-comment MPL prose ("// This file is part of Eigen, ...
+    #     // ... obtain one at http://mozilla.org/MPL/2.0/."): append SPDX
+    #     directly after the prose block (last consecutive comment line at
+    #     top-of-file).
+    #
+    # (b) Existing C-block-comment header (Intel "/* Copyright (c) 2011, Intel
+    #     Corporation ... */"): append a comment line right after the closing
+    #     "*/".
+    #
+    # (c) Hash-comment prose (.cmake / .gitlab-ci.yml / etc.): append after the
+    #     last consecutive '#'-comment line at top.
+    #
+    # (d) Fortran '*'-comment prose (Reference BLAS): append a `*>` line after
+    #     the last consecutive '*'-prefixed line at top.
+    #
+    # (e) No header: insert SPDX as the very first line, then a blank line.
+    #
+    # Files starting with `#!shebang` or a `#ifndef` guard — we always insert
+    # the SPDX line above the guard but below any shebang.
+
+    insert_at = 0
+    has_shebang = lines and lines[0].startswith("#!")
+    if has_shebang:
+        insert_at = 1
+
+    # (b) C-block comment opening at index `insert_at`.
+    if insert_at < len(lines) and lines[insert_at].lstrip().startswith("/*"):
+        for i in range(insert_at, len(lines)):
+            if "*/" in lines[i]:
+                insert_at = i + 1
+                # Skip a single blank line after the block, if any.
+                break
+        new_block = spdx_line.decode()
+        # We want SPDX as a // line after the */.
+        return ("".join(lines[:insert_at]) + new_block + "".join(lines[insert_at:])).encode()
+
+    # (a, c, d) Detect a top-of-file run of comment lines and insert after.
+    end_of_block = insert_at
+    if comment == "//":
+        marker_prefixes = ("//",)
+    elif comment == "#":
+        marker_prefixes = ("#",)
+    elif comment == "*>":
+        # Fortran free-form file headers begin with `*` or `*>`.
+        marker_prefixes = ("*",)
+    else:
+        marker_prefixes = (comment,)
+
+    while end_of_block < len(lines):
+        s = lines[end_of_block].lstrip()
+        if any(s.startswith(p) for p in marker_prefixes):
+            end_of_block += 1
+            continue
+        break
+
+    if end_of_block > insert_at:
+        # Append SPDX after the existing prose block.
+        return (
+            "".join(lines[:end_of_block])
+            + spdx_line.decode()
+            + "".join(lines[end_of_block:])
+        ).encode()
+
+    # (e) No header — insert at the top (after shebang if present), and
+    # follow with a single blank line *unless* the file already starts with
+    # one (otherwise clang-format collapses the duplicate).
+    next_is_blank = (
+        insert_at < len(lines) and lines[insert_at].strip() == ""
+    )
+    blank = "" if next_is_blank else eol
+    return (
+        "".join(lines[:insert_at])
+        + spdx_line.decode()
+        + blank
+        + "".join(lines[insert_at:])
+    ).encode()
+
+
+# ---------------------------------------------------------------------------
+# Driver
+# ---------------------------------------------------------------------------
+
+def tracked_files() -> Iterable[Path]:
+    out = subprocess.check_output(
+        ["git", "ls-files"], cwd=REPO_ROOT, text=True
+    )
+    for line in out.splitlines():
+        if line:
+            yield Path(line)
+
+
+def main() -> int:
+    p = argparse.ArgumentParser(description=__doc__)
+    p.add_argument(
+        "--check",
+        action="store_true",
+        help="Don't write; exit 1 if any file would change.",
+    )
+    p.add_argument(
+        "--paths",
+        nargs="*",
+        help="Limit to these paths (relative to repo root). Default: all tracked.",
+    )
+    p.add_argument(
+        "-v", "--verbose",
+        action="store_true",
+        help="Print every file decision (skip / classify / change).",
+    )
+    args = p.parse_args()
+
+    if args.paths:
+        targets = [Path(p) for p in args.paths]
+    else:
+        targets = list(tracked_files())
+
+    changed = []
+    for rel in targets:
+        if is_skipped(rel):
+            if args.verbose:
+                print(f"[skip-rule] {rel}")
+            continue
+
+        full = REPO_ROOT / rel
+        prefix = comment_prefix_for(rel, full)
+        if prefix is None:
+            if args.verbose:
+                print(f"[skip-ext]  {rel}")
+            continue
+        try:
+            content = full.read_bytes()
+        except (FileNotFoundError, IsADirectoryError):
+            continue
+
+        spdx_id = classify(rel, content)
+        new_content = insert_spdx(rel, content, spdx_id, prefix)
+        if new_content is None:
+            if args.verbose:
+                print(f"[ok]        {rel}  ({spdx_id})")
+            continue
+
+        if args.check:
+            print(f"[would-change] {rel}  ({spdx_id})")
+            changed.append(rel)
+            continue
+
+        full.write_bytes(new_content)
+        print(f"[changed]   {rel}  ({spdx_id})")
+        changed.append(rel)
+
+    if args.check and changed:
+        print(f"\n{len(changed)} file(s) need SPDX headers.", file=sys.stderr)
+        return 1
+    if not args.check:
+        print(f"\nUpdated {len(changed)} file(s).")
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/scripts/ci_cmake_msvc.ps1 b/scripts/ci_cmake_msvc.ps1
index c08b9ae..9b20103 100644
--- a/scripts/ci_cmake_msvc.ps1
+++ b/scripts/ci_cmake_msvc.ps1
@@ -1,4 +1,6 @@
 # Powershell script to set up MSVC cmake builds that mirror the CI.  Useful for reproducing issues.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 param ($EIGEN_CI_ROOTDIR,
        $EIGEN_CI_BUILDDIR,
diff --git a/scripts/ci_cmake_msvc_cuda.ps1 b/scripts/ci_cmake_msvc_cuda.ps1
index dd615ec..1b024c2 100644
--- a/scripts/ci_cmake_msvc_cuda.ps1
+++ b/scripts/ci_cmake_msvc_cuda.ps1
@@ -1,4 +1,6 @@
 # Powershell script to set up MSVC CUDA cmake builds that mirror the CI.  Useful for reproducing issues.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 param ($EIGEN_CI_ROOTDIR,
        $EIGEN_CI_BUILDDIR,
diff --git a/scripts/eigen_gen_credits.cpp b/scripts/eigen_gen_credits.cpp
index bf8e4df..8bf81a2 100644
--- a/scripts/eigen_gen_credits.cpp
+++ b/scripts/eigen_gen_credits.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <string>
 #include <sstream>
 #include <iostream>
diff --git a/scripts/eigen_gen_docs b/scripts/eigen_gen_docs
index 787dcb3..953d2e7 100755
--- a/scripts/eigen_gen_docs
+++ b/scripts/eigen_gen_docs
@@ -1,4 +1,6 @@
 #!/bin/sh
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 # configuration
 # You should call this script with USER set as you want, else some default
diff --git a/scripts/eigen_gen_split_test_help.cmake b/scripts/eigen_gen_split_test_help.cmake
index e43f5aa..8d8e44d 100755
--- a/scripts/eigen_gen_split_test_help.cmake
+++ b/scripts/eigen_gen_split_test_help.cmake
@@ -1,4 +1,7 @@
 #!cmake -P
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(WRITE split_test_helper.h "")
 foreach(i RANGE 1 999)
   file(APPEND split_test_helper.h
diff --git a/scripts/format.sh b/scripts/format.sh
index f1c38b2..de34109 100755
--- a/scripts/format.sh
+++ b/scripts/format.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 # Format files with extensions, excluding plugins because they're partial files that don't contain valid syntax
 find . -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.cu' -o -name '*.cxx' -o -name '*.h' -o -name '*.inc' -not -path '*/plugins/*' \) | xargs -n 1 -P 0 clang-format-17 -i
diff --git a/scripts/git_commit_mrs_and_issues.py b/scripts/git_commit_mrs_and_issues.py
index 854ec39..6ebb119 100644
--- a/scripts/git_commit_mrs_and_issues.py
+++ b/scripts/git_commit_mrs_and_issues.py
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Search for MRs and issues related to a list of commits."""
 
 import argparse
diff --git a/scripts/gitlab_api_deploy_package.py b/scripts/gitlab_api_deploy_package.py
index 70dc03f..8c4ae91 100644
--- a/scripts/gitlab_api_deploy_package.py
+++ b/scripts/gitlab_api_deploy_package.py
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Helper script to download source archives and upload them to the Eigen GitLab generic package registry."""
 
 import os
diff --git a/scripts/gitlab_api_issues.py b/scripts/gitlab_api_issues.py
index 1d191fa..7aea324 100644
--- a/scripts/gitlab_api_issues.py
+++ b/scripts/gitlab_api_issues.py
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Downloads all issues from GitLab matching specified criteria."""
 
 import argparse
diff --git a/scripts/gitlab_api_labeller.py b/scripts/gitlab_api_labeller.py
index f5d3530..5ad1950 100644
--- a/scripts/gitlab_api_labeller.py
+++ b/scripts/gitlab_api_labeller.py
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Adds a label to a GitLab merge requests or issues."""
 
 import os
diff --git a/scripts/gitlab_api_mrs.py b/scripts/gitlab_api_mrs.py
index 12eb5f9..26e9924 100644
--- a/scripts/gitlab_api_mrs.py
+++ b/scripts/gitlab_api_mrs.py
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 """Downloads all MRs from GitLab matching specified criteria."""
 
 import argparse
diff --git a/scripts/msvc_setup.ps1 b/scripts/msvc_setup.ps1
index 3890a45..ecc22eb 100644
--- a/scripts/msvc_setup.ps1
+++ b/scripts/msvc_setup.ps1
@@ -1,4 +1,6 @@
 # Powershell script to set up MSVC environment.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 param ($EIGEN_CI_MSVC_ARCH, $EIGEN_CI_MSVC_VER)
 function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
diff --git a/setup.cfg b/setup.cfg
index bf66e51..52c8ffa 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 [codespell]
 # Skip build directories, third-party code, and binary files.
 skip = .git,build,.build,build-clang,*.o,*.a,*.so,*.pyc,blas/f2c,blas/testing,lapack/f2c,CHANGELOG.md
diff --git a/test/AnnoyingScalar.h b/test/AnnoyingScalar.h
index 9e320ea..5b448c5 100644
--- a/test/AnnoyingScalar.h
+++ b/test/AnnoyingScalar.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TEST_ANNOYING_SCALAR_H
 #define EIGEN_TEST_ANNOYING_SCALAR_H
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8d551b0..d824553 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,5 +1,7 @@
 # The file split_test_helper.h was generated at first run,
 # it is now included in test/
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h)
   file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h)
 endif()
diff --git a/test/CustomComplex.h b/test/CustomComplex.h
index 048f65b..079d417 100644
--- a/test/CustomComplex.h
+++ b/test/CustomComplex.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TEST_CUSTOM_COMPLEX_H
 #define EIGEN_TEST_CUSTOM_COMPLEX_H
diff --git a/test/MovableScalar.h b/test/MovableScalar.h
index 6a046de..f3efc7a 100644
--- a/test/MovableScalar.h
+++ b/test/MovableScalar.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MISC_MOVABLE_SCALAR_H
 #define EIGEN_MISC_MOVABLE_SCALAR_H
diff --git a/test/OffByOneScalar.h b/test/OffByOneScalar.h
index 8184571..0bd3934 100644
--- a/test/OffByOneScalar.h
+++ b/test/OffByOneScalar.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // A Scalar with internal representation T+1 so that zero is internally
 // represented by T(1). This is used to test memory fill.
diff --git a/test/SafeScalar.h b/test/SafeScalar.h
index 33a54c5..a6a9029 100644
--- a/test/SafeScalar.h
+++ b/test/SafeScalar.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // A Scalar that asserts for uninitialized access.
 template <typename T>
diff --git a/test/accelerate_support.cpp b/test/accelerate_support.cpp
index ec0609a..4b287fd 100644
--- a/test/accelerate_support.cpp
+++ b/test/accelerate_support.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #if defined(DEBUG)
 #undef DEBUG
 #endif
diff --git a/test/adjoint.cpp b/test/adjoint.cpp
index 8ecbcab..f07f2c7 100644
--- a/test/adjoint.cpp
+++ b/test/adjoint.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp
index d431046..af4a1a5 100644
--- a/test/array_cwise.cpp
+++ b/test/array_cwise.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <vector>
 #include "main.h"
diff --git a/test/array_for_matrix.cpp b/test/array_for_matrix.cpp
index f072434..6ed31ef 100644
--- a/test/array_for_matrix.cpp
+++ b/test/array_for_matrix.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/array_of_string.cpp b/test/array_of_string.cpp
index f92603f..bbc5561 100644
--- a/test/array_of_string.cpp
+++ b/test/array_of_string.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/array_replicate.cpp b/test/array_replicate.cpp
index f5c9246..d29223a 100644
--- a/test/array_replicate.cpp
+++ b/test/array_replicate.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/array_reverse.cpp b/test/array_reverse.cpp
index f83d498..28eae6f 100644
--- a/test/array_reverse.cpp
+++ b/test/array_reverse.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <iostream>
diff --git a/test/assignment_threaded.cpp b/test/assignment_threaded.cpp
index 7505a10..16d5797 100644
--- a/test/assignment_threaded.cpp
+++ b/test/assignment_threaded.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS 1
 
diff --git a/test/bandmatrix.cpp b/test/bandmatrix.cpp
index 027eb06..79d87bf 100644
--- a/test/bandmatrix.cpp
+++ b/test/bandmatrix.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/basicstuff.cpp b/test/basicstuff.cpp
index 4ce3165..94fed53 100644
--- a/test/basicstuff.cpp
+++ b/test/basicstuff.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include "random_without_cast_overflow.h"
diff --git a/test/bdcsvd.cpp b/test/bdcsvd.cpp
index 94a3153..30c9865 100644
--- a/test/bdcsvd.cpp
+++ b/test/bdcsvd.cpp
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/
+// SPDX-License-Identifier: MPL-2.0
 
 // discard stack allocation as that too bypasses malloc
 #define EIGEN_STACK_ALLOCATION_LIMIT 0
diff --git a/test/bfloat16_float.cpp b/test/bfloat16_float.cpp
index 12d6d86..a5d81d9 100644
--- a/test/bfloat16_float.cpp
+++ b/test/bfloat16_float.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <sstream>
 #include <memory>
diff --git a/test/bicgstab.cpp b/test/bicgstab.cpp
index 6d837e5..b5908da 100644
--- a/test/bicgstab.cpp
+++ b/test/bicgstab.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/IterativeLinearSolvers>
diff --git a/test/blasutil.cpp b/test/blasutil.cpp
index 199b571..e56416e 100644
--- a/test/blasutil.cpp
+++ b/test/blasutil.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/block.cpp b/test/block.cpp
index abcae88..ae30445 100644
--- a/test/block.cpp
+++ b/test/block.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/boostmultiprec.cpp b/test/boostmultiprec.cpp
index 0e918d4..4848bf8 100644
--- a/test/boostmultiprec.cpp
+++ b/test/boostmultiprec.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <sstream>
 
diff --git a/test/bug1213.cpp b/test/bug1213.cpp
index 8dbe1a8..c60dc83 100644
--- a/test/bug1213.cpp
+++ b/test/bug1213.cpp
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // This anonymous enum is essential to trigger the linking issue
 enum { Foo };
diff --git a/test/bug1213.h b/test/bug1213.h
index 49687f2..2f4434e 100644
--- a/test/bug1213.h
+++ b/test/bug1213.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <Eigen/Core>
 
diff --git a/test/bug1213_main.cpp b/test/bug1213_main.cpp
index 3543155..1822eb4 100644
--- a/test/bug1213_main.cpp
+++ b/test/bug1213_main.cpp
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // This is a regression unit regarding an unusual linking issue with GCC.
 
diff --git a/test/cholesky.cpp b/test/cholesky.cpp
index 5c8ec85..d2e3891 100644
--- a/test/cholesky.cpp
+++ b/test/cholesky.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/cholmod_support.cpp b/test/cholmod_support.cpp
index 0666749..0597080 100644
--- a/test/cholmod_support.cpp
+++ b/test/cholmod_support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse_solver.h"
diff --git a/test/clz.cpp b/test/clz.cpp
index c0009ca..8b7ee6d 100644
--- a/test/clz.cpp
+++ b/test/clz.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/commainitializer.cpp b/test/commainitializer.cpp
index 771ab6f..eb51b57 100644
--- a/test/commainitializer.cpp
+++ b/test/commainitializer.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/complex_qz.cpp b/test/complex_qz.cpp
index 28ab08e..fee6e50 100644
--- a/test/complex_qz.cpp
+++ b/test/complex_qz.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_RUNTIME_NO_MALLOC
 #include "main.h"
diff --git a/test/concat.cpp b/test/concat.cpp
index 4d1db13..acf8602 100644
--- a/test/concat.cpp
+++ b/test/concat.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/condition_estimator.cpp b/test/condition_estimator.cpp
index ce65f6e..f07b9e9 100644
--- a/test/condition_estimator.cpp
+++ b/test/condition_estimator.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Dense>
diff --git a/test/conjugate_gradient.cpp b/test/conjugate_gradient.cpp
index 87e1f8c..1ecc17e 100644
--- a/test/conjugate_gradient.cpp
+++ b/test/conjugate_gradient.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/IterativeLinearSolvers>
diff --git a/test/conservative_resize.cpp b/test/conservative_resize.cpp
index 73e34a6..d4a2651 100644
--- a/test/conservative_resize.cpp
+++ b/test/conservative_resize.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/constexpr.cpp b/test/constexpr.cpp
index 5eb462e..573d869 100644
--- a/test/constexpr.cpp
+++ b/test/constexpr.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TESTING_CONSTEXPR
 #include "main.h"
diff --git a/test/constructor.cpp b/test/constructor.cpp
index fb125c4..cf09345 100644
--- a/test/constructor.cpp
+++ b/test/constructor.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/corners.cpp b/test/corners.cpp
index 8bbb3f8..c045d19 100644
--- a/test/corners.cpp
+++ b/test/corners.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/ctorleak.cpp b/test/ctorleak.cpp
index eb25897..77b5b8d 100644
--- a/test/ctorleak.cpp
+++ b/test/ctorleak.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include "main.h"
 
 #include <exception>  // std::exception
diff --git a/test/denseLM.cpp b/test/denseLM.cpp
index 471e946..cb8d658 100644
--- a/test/denseLM.cpp
+++ b/test/denseLM.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <iostream>
 #include <fstream>
diff --git a/test/dense_storage.cpp b/test/dense_storage.cpp
index d394a94..65e47f4 100644
--- a/test/dense_storage.cpp
+++ b/test/dense_storage.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TESTING_PLAINOBJECT_CTOR
 
diff --git a/test/determinant.cpp b/test/determinant.cpp
index 88ca1dd..6ab0ec8 100644
--- a/test/determinant.cpp
+++ b/test/determinant.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/diagonal.cpp b/test/diagonal.cpp
index e7c4bf2..d4db302 100644
--- a/test/diagonal.cpp
+++ b/test/diagonal.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/diagonal_matrix_variadic_ctor.cpp b/test/diagonal_matrix_variadic_ctor.cpp
index e3e51aa..c2aa887 100644
--- a/test/diagonal_matrix_variadic_ctor.cpp
+++ b/test/diagonal_matrix_variadic_ctor.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/diagonalmatrices.cpp b/test/diagonalmatrices.cpp
index b2cc914..ce8d663 100644
--- a/test/diagonalmatrices.cpp
+++ b/test/diagonalmatrices.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // discard stack allocation as that too bypasses malloc
 #define EIGEN_STACK_ALLOCATION_LIMIT 0
diff --git a/test/diagonalview.cpp b/test/diagonalview.cpp
index 0d83c8e..1fb4dbb 100644
--- a/test/diagonalview.cpp
+++ b/test/diagonalview.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // discard stack allocation as that too bypasses malloc
 #define EIGEN_STACK_ALLOCATION_LIMIT 0
diff --git a/test/dontalign.cpp b/test/dontalign.cpp
index 2210bad..810b8da 100644
--- a/test/dontalign.cpp
+++ b/test/dontalign.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined EIGEN_TEST_PART_1 || defined EIGEN_TEST_PART_2 || defined EIGEN_TEST_PART_3 || defined EIGEN_TEST_PART_4
 #define EIGEN_DONT_ALIGN
diff --git a/test/dynalloc.cpp b/test/dynalloc.cpp
index 8732f68..86df9d1 100644
--- a/test/dynalloc.cpp
+++ b/test/dynalloc.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/eigen2support.cpp b/test/eigen2support.cpp
index 878352b..4721c41 100644
--- a/test/eigen2support.cpp
+++ b/test/eigen2support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN2_SUPPORT
 
diff --git a/test/eigensolver_complex.cpp b/test/eigensolver_complex.cpp
index 763c161..4a777ff 100644
--- a/test/eigensolver_complex.cpp
+++ b/test/eigensolver_complex.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/test/eigensolver_generalized_real.cpp b/test/eigensolver_generalized_real.cpp
index 6d3fa7e..81e7475 100644
--- a/test/eigensolver_generalized_real.cpp
+++ b/test/eigensolver_generalized_real.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_RUNTIME_NO_MALLOC
 #include "main.h"
diff --git a/test/eigensolver_generic.cpp b/test/eigensolver_generic.cpp
index 4774a91..8cb5707 100644
--- a/test/eigensolver_generic.cpp
+++ b/test/eigensolver_generic.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp
index f2d852f..96a8976 100644
--- a/test/eigensolver_selfadjoint.cpp
+++ b/test/eigensolver_selfadjoint.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include "svd_fill.h"
diff --git a/test/evaluator_common.h b/test/evaluator_common.h
index e69de29..f07db27 100644
--- a/test/evaluator_common.h
+++ b/test/evaluator_common.h
@@ -0,0 +1,2 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
diff --git a/test/evaluators.cpp b/test/evaluators.cpp
index 2941536..4e12d23 100644
--- a/test/evaluators.cpp
+++ b/test/evaluators.cpp
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/exceptions.cpp b/test/exceptions.cpp
index 751e291..6e4538c 100644
--- a/test/exceptions.cpp
+++ b/test/exceptions.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Various sanity tests with exceptions and non trivially copyable scalar type.
 //  - no memory leak when a custom scalar type throw an exceptions
diff --git a/test/fastmath.cpp b/test/fastmath.cpp
index 6d91fe9..334f84a 100644
--- a/test/fastmath.cpp
+++ b/test/fastmath.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/first_aligned.cpp b/test/first_aligned.cpp
index 6695785..b3b545e 100644
--- a/test/first_aligned.cpp
+++ b/test/first_aligned.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/float_conversion.cpp b/test/float_conversion.cpp
index 6ea8a37..1a3f89c 100644
--- a/test/float_conversion.cpp
+++ b/test/float_conversion.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <sstream>
 
diff --git a/test/geo_alignedbox.cpp b/test/geo_alignedbox.cpp
index 67ca27e..22afcc6 100644
--- a/test/geo_alignedbox.cpp
+++ b/test/geo_alignedbox.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_eulerangles.cpp b/test/geo_eulerangles.cpp
index ac00d0f..4bc3a68 100644
--- a/test/geo_eulerangles.cpp
+++ b/test/geo_eulerangles.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Silence warnings about using the deprecated non-canonical .eulerAngles(), which are still being tested.
 #define EIGEN_NO_DEPRECATED_WARNING
diff --git a/test/geo_homogeneous.cpp b/test/geo_homogeneous.cpp
index c5ee736..53941a8 100644
--- a/test/geo_homogeneous.cpp
+++ b/test/geo_homogeneous.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_hyperplane.cpp b/test/geo_hyperplane.cpp
index bf0a181..a1b97f4 100644
--- a/test/geo_hyperplane.cpp
+++ b/test/geo_hyperplane.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_misc.cpp b/test/geo_misc.cpp
index ab88a63..df93ffa 100644
--- a/test/geo_misc.cpp
+++ b/test/geo_misc.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Tests for Geometry module classes that lack dedicated test coverage:
 //   - AngleAxis edge cases
diff --git a/test/geo_orthomethods.cpp b/test/geo_orthomethods.cpp
index 5ee0f47..aa87bd4 100644
--- a/test/geo_orthomethods.cpp
+++ b/test/geo_orthomethods.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_parametrizedline.cpp b/test/geo_parametrizedline.cpp
index 856261e..fbd8a0b 100644
--- a/test/geo_parametrizedline.cpp
+++ b/test/geo_parametrizedline.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_quaternion.cpp b/test/geo_quaternion.cpp
index 897c5e9..40fc7ff 100644
--- a/test/geo_quaternion.cpp
+++ b/test/geo_quaternion.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/geo_transformations.cpp b/test/geo_transformations.cpp
index d10281a..640be31 100644
--- a/test/geo_transformations.cpp
+++ b/test/geo_transformations.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Geometry>
diff --git a/test/gpu_basic.cu b/test/gpu_basic.cu
index c3a188e..a03cbcf 100644
--- a/test/gpu_basic.cu
+++ b/test/gpu_basic.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int
diff --git a/test/gpu_common.h b/test/gpu_common.h
index 4e20850..efd09c1 100644
--- a/test/gpu_common.h
+++ b/test/gpu_common.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_TEST_GPU_COMMON_H
 #define EIGEN_TEST_GPU_COMMON_H
 
diff --git a/test/gpu_example.cu b/test/gpu_example.cu
index 03b2ec5..5583e6e 100644
--- a/test/gpu_example.cu
+++ b/test/gpu_example.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // The following is an example GPU test.
 
diff --git a/test/gpu_test_helper.h b/test/gpu_test_helper.h
index 15a05e6..12d0287 100644
--- a/test/gpu_test_helper.h
+++ b/test/gpu_test_helper.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef GPU_TEST_HELPER_H
 #define GPU_TEST_HELPER_H
 
diff --git a/test/half_float.cpp b/test/half_float.cpp
index aabe896..2f81855 100644
--- a/test/half_float.cpp
+++ b/test/half_float.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <sstream>
 
diff --git a/test/hessenberg.cpp b/test/hessenberg.cpp
index 90364f1..594ae18 100644
--- a/test/hessenberg.cpp
+++ b/test/hessenberg.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Eigenvalues>
diff --git a/test/householder.cpp b/test/householder.cpp
index f884a78..1999576 100644
--- a/test/householder.cpp
+++ b/test/householder.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/QR>
diff --git a/test/incomplete_LUT.cpp b/test/incomplete_LUT.cpp
index b9c1679..b25a301 100644
--- a/test/incomplete_LUT.cpp
+++ b/test/incomplete_LUT.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/IterativeLinearSolvers>
diff --git a/test/incomplete_cholesky.cpp b/test/incomplete_cholesky.cpp
index fccc207..d6db9f2 100644
--- a/test/incomplete_cholesky.cpp
+++ b/test/incomplete_cholesky.cpp
@@ -8,6 +8,7 @@
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
 // #define EIGEN_DONT_VECTORIZE
 // #define EIGEN_MAX_ALIGN_BYTES 0
+// SPDX-License-Identifier: MPL-2.0
 #include "sparse_solver.h"
 #include <Eigen/IterativeLinearSolvers>
 
diff --git a/test/indexed_view.cpp b/test/indexed_view.cpp
index 3e82a2f..6976ceb 100644
--- a/test/indexed_view.cpp
+++ b/test/indexed_view.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <vector>
 
diff --git a/test/initializer_list_construction.cpp b/test/initializer_list_construction.cpp
index 2c3f185..cbc8451 100644
--- a/test/initializer_list_construction.cpp
+++ b/test/initializer_list_construction.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(__GNUC__) && __GNUC__ >= 10
 // GCC 10+ has a bug for unsigned char that thinks we're writing past the
diff --git a/test/inplace_decomposition.cpp b/test/inplace_decomposition.cpp
index a57596c..be1c239 100644
--- a/test/inplace_decomposition.cpp
+++ b/test/inplace_decomposition.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/integer_types.cpp b/test/integer_types.cpp
index bfda96e..4e22620 100644
--- a/test/integer_types.cpp
+++ b/test/integer_types.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/inverse.cpp b/test/inverse.cpp
index 1212936..0641aba 100644
--- a/test/inverse.cpp
+++ b/test/inverse.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/io.cpp b/test/io.cpp
index 637f02d..155b253 100644
--- a/test/io.cpp
+++ b/test/io.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <sstream>
 
diff --git a/test/is_same_dense.cpp b/test/is_same_dense.cpp
index 18c07e6..3641e6e 100644
--- a/test/is_same_dense.cpp
+++ b/test/is_same_dense.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/jacobi.cpp b/test/jacobi.cpp
index 7634604..36e17cc 100644
--- a/test/jacobi.cpp
+++ b/test/jacobi.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/SVD>
diff --git a/test/jacobisvd.cpp b/test/jacobisvd.cpp
index 03bb095..74e545b 100644
--- a/test/jacobisvd.cpp
+++ b/test/jacobisvd.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // discard stack allocation as that too bypasses malloc
 #define EIGEN_STACK_ALLOCATION_LIMIT 0
diff --git a/test/klu_support.cpp b/test/klu_support.cpp
index b4f1f43..76c68ca 100644
--- a/test/klu_support.cpp
+++ b/test/klu_support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse_solver.h"
diff --git a/test/linearstructure.cpp b/test/linearstructure.cpp
index 082fa47..581db38 100644
--- a/test/linearstructure.cpp
+++ b/test/linearstructure.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 static bool g_called;
 #define EIGEN_SCALAR_BINARY_OP_PLUGIN \
diff --git a/test/lscg.cpp b/test/lscg.cpp
index 1c94e0a..1c00a25 100644
--- a/test/lscg.cpp
+++ b/test/lscg.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/IterativeLinearSolvers>
diff --git a/test/lu.cpp b/test/lu.cpp
index a77c86d..a4c7512 100644
--- a/test/lu.cpp
+++ b/test/lu.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/main.h b/test/main.h
index 1f68572..65dbb34 100644
--- a/test/main.h
+++ b/test/main.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <cstdlib>
 #include <cerrno>
diff --git a/test/mapped_matrix.cpp b/test/mapped_matrix.cpp
index 71ecb34..7540ef1 100644
--- a/test/mapped_matrix.cpp
+++ b/test/mapped_matrix.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/mapstaticmethods.cpp b/test/mapstaticmethods.cpp
index b18b24a..72904de 100644
--- a/test/mapstaticmethods.cpp
+++ b/test/mapstaticmethods.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/mapstride.cpp b/test/mapstride.cpp
index 1a9f50c..0155c58 100644
--- a/test/mapstride.cpp
+++ b/test/mapstride.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/matrix_cwise.cpp b/test/matrix_cwise.cpp
index 89df664..d0a8e66 100644
--- a/test/matrix_cwise.cpp
+++ b/test/matrix_cwise.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <vector>
 #include "main.h"
diff --git a/test/maxsizevector.cpp b/test/maxsizevector.cpp
index 82aa257..b99e390 100644
--- a/test/maxsizevector.cpp
+++ b/test/maxsizevector.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include "main.h"
 
 #ifdef EIGEN_EXCEPTIONS
diff --git a/test/meta.cpp b/test/meta.cpp
index d79a01c..834d049 100644
--- a/test/meta.cpp
+++ b/test/meta.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/metis_support.cpp b/test/metis_support.cpp
index cfbea3a..063131b 100644
--- a/test/metis_support.cpp
+++ b/test/metis_support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/SparseLU>
diff --git a/test/miscmatrices.cpp b/test/miscmatrices.cpp
index e3506af..823cc68 100644
--- a/test/miscmatrices.cpp
+++ b/test/miscmatrices.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/mixingtypes.cpp b/test/mixingtypes.cpp
index 047f574..e56c2b2 100644
--- a/test/mixingtypes.cpp
+++ b/test/mixingtypes.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_TEST_PART_7)
 
diff --git a/test/mixingtypes_generic_32.cpp b/test/mixingtypes_generic_32.cpp
index 2118f3b..c60a834 100644
--- a/test/mixingtypes_generic_32.cpp
+++ b/test/mixingtypes_generic_32.cpp
@@ -1,4 +1,6 @@
 // Force the generic clang vector backend with 32-byte vectors.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #define EIGEN_VECTORIZE_GENERIC 1
 #define EIGEN_GENERIC_VECTOR_SIZE_BYTES 32
 #include "mixingtypes.cpp"
diff --git a/test/mixingtypes_generic_64.cpp b/test/mixingtypes_generic_64.cpp
index 6ce6f96..42ee7ee 100644
--- a/test/mixingtypes_generic_64.cpp
+++ b/test/mixingtypes_generic_64.cpp
@@ -1,4 +1,6 @@
 // Force the generic clang vector backend with 64-byte vectors.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #define EIGEN_VECTORIZE_GENERIC 1
 #define EIGEN_GENERIC_VECTOR_SIZE_BYTES 64
 #include "mixingtypes.cpp"
diff --git a/test/nestbyvalue.cpp b/test/nestbyvalue.cpp
index f65621a..52cba6d 100644
--- a/test/nestbyvalue.cpp
+++ b/test/nestbyvalue.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/nesting_ops.cpp b/test/nesting_ops.cpp
index edc86de..1e7c807 100644
--- a/test/nesting_ops.cpp
+++ b/test/nesting_ops.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/no_automatic_resizing.cpp b/test/no_automatic_resizing.cpp
index 6156471..66d1a78 100644
--- a/test/no_automatic_resizing.cpp
+++ b/test/no_automatic_resizing.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Test that EIGEN_NO_AUTOMATIC_RESIZING still allows assignment to
 // default-constructed (empty) matrices and arrays.
diff --git a/test/nomalloc.cpp b/test/nomalloc.cpp
index b4a873e..2442024 100644
--- a/test/nomalloc.cpp
+++ b/test/nomalloc.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // discard stack allocation as that too bypasses malloc
 #define EIGEN_STACK_ALLOCATION_LIMIT 0
diff --git a/test/nullary.cpp b/test/nullary.cpp
index 2025c83..9131b8a 100644
--- a/test/nullary.cpp
+++ b/test/nullary.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/num_dimensions.cpp b/test/num_dimensions.cpp
index dacd8ac..19a2478 100644
--- a/test/num_dimensions.cpp
+++ b/test/num_dimensions.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/SparseCore>
diff --git a/test/numext.cpp b/test/numext.cpp
index 9c15606..d3b1f08 100644
--- a/test/numext.cpp
+++ b/test/numext.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/packet_segment.cpp b/test/packet_segment.cpp
index 8a5469c..a18ce37 100644
--- a/test/packet_segment.cpp
+++ b/test/packet_segment.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index 69b607f..d8d8bf3 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "packetmath_test_shared.h"
 #include "random_without_cast_overflow.h"
diff --git a/test/packetmath_generic_16.cpp b/test/packetmath_generic_16.cpp
index 612a75c..1bf1d83 100644
--- a/test/packetmath_generic_16.cpp
+++ b/test/packetmath_generic_16.cpp
@@ -1,4 +1,6 @@
 // Force the generic clang vector backend with 16-byte vectors.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #define EIGEN_VECTORIZE_GENERIC 1
 #define EIGEN_GENERIC_VECTOR_SIZE_BYTES 16
 #include "packetmath.cpp"
diff --git a/test/packetmath_generic_32.cpp b/test/packetmath_generic_32.cpp
index 9816f9f..e2fb485 100644
--- a/test/packetmath_generic_32.cpp
+++ b/test/packetmath_generic_32.cpp
@@ -1,4 +1,6 @@
 // Force the generic clang vector backend with 32-byte vectors.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #define EIGEN_VECTORIZE_GENERIC 1
 #define EIGEN_GENERIC_VECTOR_SIZE_BYTES 32
 #include "packetmath.cpp"
diff --git a/test/packetmath_generic_64.cpp b/test/packetmath_generic_64.cpp
index 6957544..a881659 100644
--- a/test/packetmath_generic_64.cpp
+++ b/test/packetmath_generic_64.cpp
@@ -1,4 +1,6 @@
 // Force the generic clang vector backend with 64-byte vectors.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #define EIGEN_VECTORIZE_GENERIC 1
 #define EIGEN_GENERIC_VECTOR_SIZE_BYTES 64
 #include "packetmath.cpp"
diff --git a/test/packetmath_test_shared.h b/test/packetmath_test_shared.h
index 64b13e3..1222680 100644
--- a/test/packetmath_test_shared.h
+++ b/test/packetmath_test_shared.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <typeinfo>
diff --git a/test/pardiso_support.cpp b/test/pardiso_support.cpp
index 8358541..02b94cf 100644
--- a/test/pardiso_support.cpp
+++ b/test/pardiso_support.cpp
@@ -1,6 +1,7 @@
 /*
    Intel Copyright (C) ....
 */
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 #include <Eigen/PardisoSupport>
diff --git a/test/pastix_support.cpp b/test/pastix_support.cpp
index e487dd1..1cb58f7 100644
--- a/test/pastix_support.cpp
+++ b/test/pastix_support.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse_solver.h"
diff --git a/test/permutationmatrices.cpp b/test/permutationmatrices.cpp
index ee794b2..a8a9285 100644
--- a/test/permutationmatrices.cpp
+++ b/test/permutationmatrices.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/prec_inverse_4x4.cpp b/test/prec_inverse_4x4.cpp
index 3864ecf..e04e623 100644
--- a/test/prec_inverse_4x4.cpp
+++ b/test/prec_inverse_4x4.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/product.h b/test/product.h
index 0449a5a..17782a1 100644
--- a/test/product.h
+++ b/test/product.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/QR>
diff --git a/test/product_extra.cpp b/test/product_extra.cpp
index 9b6a330..3394448 100644
--- a/test/product_extra.cpp
+++ b/test/product_extra.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_large.cpp b/test/product_large.cpp
index 2fdc261..2334464 100644
--- a/test/product_large.cpp
+++ b/test/product_large.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "product.h"
 #include <Eigen/LU>
diff --git a/test/product_mmtr.cpp b/test/product_mmtr.cpp
index f177b69..f1e36fc 100644
--- a/test/product_mmtr.cpp
+++ b/test/product_mmtr.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_notemporary.cpp b/test/product_notemporary.cpp
index 961d87a..f2c5b3f 100644
--- a/test/product_notemporary.cpp
+++ b/test/product_notemporary.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 #define TEST_IGNORE_STACK_ALLOCATED_TEMPORARY
diff --git a/test/product_selfadjoint.cpp b/test/product_selfadjoint.cpp
index 42cc0d6..e017e67 100644
--- a/test/product_selfadjoint.cpp
+++ b/test/product_selfadjoint.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_small.cpp b/test/product_small.cpp
index 1ad06f6..23e2799 100644
--- a/test/product_small.cpp
+++ b/test/product_small.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "product.h"
 #include <Eigen/LU>
diff --git a/test/product_symm.cpp b/test/product_symm.cpp
index 0b92932..0d427f1 100644
--- a/test/product_symm.cpp
+++ b/test/product_symm.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_syrk.cpp b/test/product_syrk.cpp
index 4945000..a1bf683 100644
--- a/test/product_syrk.cpp
+++ b/test/product_syrk.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_threaded.cpp b/test/product_threaded.cpp
index 6bd9397..6d5b135 100644
--- a/test/product_threaded.cpp
+++ b/test/product_threaded.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_GEMM_THREADPOOL
 #include "main.h"
diff --git a/test/product_trmm.cpp b/test/product_trmm.cpp
index a8a4220..faf46fa 100644
--- a/test/product_trmm.cpp
+++ b/test/product_trmm.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_trmv.cpp b/test/product_trmv.cpp
index 051d475..7957f1c 100644
--- a/test/product_trmv.cpp
+++ b/test/product_trmv.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/product_trsolve.cpp b/test/product_trsolve.cpp
index 998d422..e42762d 100644
--- a/test/product_trsolve.cpp
+++ b/test/product_trsolve.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/qr.cpp b/test/qr.cpp
index f7f6990..c490fac 100644
--- a/test/qr.cpp
+++ b/test/qr.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/QR>
diff --git a/test/qr_colpivoting.cpp b/test/qr_colpivoting.cpp
index 651eb37..47470eb 100644
--- a/test/qr_colpivoting.cpp
+++ b/test/qr_colpivoting.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/QR>
diff --git a/test/qr_fullpivoting.cpp b/test/qr_fullpivoting.cpp
index d3dd2d1..c2fd6da 100644
--- a/test/qr_fullpivoting.cpp
+++ b/test/qr_fullpivoting.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/QR>
diff --git a/test/qtvector.cpp b/test/qtvector.cpp
index 0f2d907..6c332d2 100644
--- a/test/qtvector.cpp
+++ b/test/qtvector.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_WORK_AROUND_QT_BUG_CALLING_WRONG_OPERATOR_NEW_FIXED_IN_QT_4_5
 
diff --git a/test/rand.cpp b/test/rand.cpp
index ddf6a44..793460d 100644
--- a/test/rand.cpp
+++ b/test/rand.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <cstdlib>
 #include "main.h"
diff --git a/test/random_matrix.cpp b/test/random_matrix.cpp
index e95ca47..978d370 100644
--- a/test/random_matrix.cpp
+++ b/test/random_matrix.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/SVD>
diff --git a/test/random_matrix_helper.h b/test/random_matrix_helper.h
index 818d686..ad779ba 100644
--- a/test/random_matrix_helper.h
+++ b/test/random_matrix_helper.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANDOM_MATRIX_HELPER
 #define EIGEN_RANDOM_MATRIX_HELPER
diff --git a/test/random_without_cast_overflow.h b/test/random_without_cast_overflow.h
index c176c07..c248065 100644
--- a/test/random_without_cast_overflow.h
+++ b/test/random_without_cast_overflow.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Utilities for generating random numbers without overflows, which might
 // otherwise result in undefined behavior.
diff --git a/test/real_qz.cpp b/test/real_qz.cpp
index 6f0d0e0..0edfdac 100644
--- a/test/real_qz.cpp
+++ b/test/real_qz.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_RUNTIME_NO_MALLOC
 #include "main.h"
diff --git a/test/realview.cpp b/test/realview.cpp
index 0d82ff2..09281d1 100644
--- a/test/realview.cpp
+++ b/test/realview.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/redux.cpp b/test/redux.cpp
index d0cefb0..d5ae402 100644
--- a/test/redux.cpp
+++ b/test/redux.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 #define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 8
diff --git a/test/ref.cpp b/test/ref.cpp
index 8b19355..f3c39b7 100644
--- a/test/ref.cpp
+++ b/test/ref.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This unit test cannot be easily written to work with EIGEN_DEFAULT_TO_ROW_MAJOR
 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR
diff --git a/test/reshape.cpp b/test/reshape.cpp
index 417d18a..9aeffeb 100644
--- a/test/reshape.cpp
+++ b/test/reshape.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/resize.cpp b/test/resize.cpp
index 69db9b4..a91e092 100644
--- a/test/resize.cpp
+++ b/test/resize.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/rvalue_types.cpp b/test/rvalue_types.cpp
index 5db28b8..4ad58c8 100644
--- a/test/rvalue_types.cpp
+++ b/test/rvalue_types.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_RUNTIME_NO_MALLOC
 
diff --git a/test/schur_complex.cpp b/test/schur_complex.cpp
index 0449896..94faaba 100644
--- a/test/schur_complex.cpp
+++ b/test/schur_complex.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/test/schur_real.cpp b/test/schur_real.cpp
index 4a9dd89..9e42f7b 100644
--- a/test/schur_real.cpp
+++ b/test/schur_real.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/test/selfadjoint.cpp b/test/selfadjoint.cpp
index 87d3152..676a523 100644
--- a/test/selfadjoint.cpp
+++ b/test/selfadjoint.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_CHECK_STATIC_ASSERTIONS
 #include "main.h"
diff --git a/test/serializer.cpp b/test/serializer.cpp
index 0c8416f..93342e1 100644
--- a/test/serializer.cpp
+++ b/test/serializer.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/simplicial_cholesky.cpp b/test/simplicial_cholesky.cpp
index ed93218..a98631f 100644
--- a/test/simplicial_cholesky.cpp
+++ b/test/simplicial_cholesky.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse_solver.h"
 
diff --git a/test/sizeof.cpp b/test/sizeof.cpp
index b75645f..ef74ad6 100644
--- a/test/sizeof.cpp
+++ b/test/sizeof.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/sizeoverflow.cpp b/test/sizeoverflow.cpp
index 612067f..c6fdf29 100644
--- a/test/sizeoverflow.cpp
+++ b/test/sizeoverflow.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/skew_symmetric_matrix3.cpp b/test/skew_symmetric_matrix3.cpp
index a7fcb47..04dfacf 100644
--- a/test/skew_symmetric_matrix3.cpp
+++ b/test/skew_symmetric_matrix3.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/LU>
diff --git a/test/smallvectors.cpp b/test/smallvectors.cpp
index 682b118..52b2bad 100644
--- a/test/smallvectors.cpp
+++ b/test/smallvectors.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/solverbase.h b/test/solverbase.h
index f353943..4429311 100644
--- a/test/solverbase.h
+++ b/test/solverbase.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef TEST_SOLVERBASE_H
 #define TEST_SOLVERBASE_H
 
diff --git a/test/sparse.h b/test/sparse.h
index 1f4a166..65581ff 100644
--- a/test/sparse.h
+++ b/test/sparse.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TESTSPARSE_H
 #define EIGEN_TESTSPARSE_H
diff --git a/test/sparseLM.cpp b/test/sparseLM.cpp
index 0cb4d3a..ca7c7c1 100644
--- a/test/sparseLM.cpp
+++ b/test/sparseLM.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #include <iostream>
 #include <fstream>
 #include <iomanip>
diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp
index b940b09..2a8e710 100644
--- a/test/sparse_basic.cpp
+++ b/test/sparse_basic.cpp
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_TEST_INCLUDED_FROM_SPARSE_EXTRA
 static long g_realloc_count = 0;
diff --git a/test/sparse_block.cpp b/test/sparse_block.cpp
index 100e175..09c8b33 100644
--- a/test/sparse_block.cpp
+++ b/test/sparse_block.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse.h"
 #include "AnnoyingScalar.h"
diff --git a/test/sparse_permutations.cpp b/test/sparse_permutations.cpp
index 1657236..84b7d1c 100644
--- a/test/sparse_permutations.cpp
+++ b/test/sparse_permutations.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 static long int nb_transposed_copies;
 #define EIGEN_SPARSE_TRANSPOSED_COPY_PLUGIN \
diff --git a/test/sparse_product.cpp b/test/sparse_product.cpp
index 8ec80e9..38c69ab 100644
--- a/test/sparse_product.cpp
+++ b/test/sparse_product.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(_MSC_VER) && (_MSC_VER == 1800)
 // This unit test takes forever to compile in Release mode with MSVC 2013,
diff --git a/test/sparse_ref.cpp b/test/sparse_ref.cpp
index 95cc479..ecf6ba0 100644
--- a/test/sparse_ref.cpp
+++ b/test/sparse_ref.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // This unit test cannot be easily written to work with EIGEN_DEFAULT_TO_ROW_MAJOR
 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR
diff --git a/test/sparse_solver.h b/test/sparse_solver.h
index 50cb463..48c63c1 100644
--- a/test/sparse_solver.h
+++ b/test/sparse_solver.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse.h"
 #include <Eigen/SparseCore>
diff --git a/test/sparse_solvers.cpp b/test/sparse_solvers.cpp
index 199dfff..1105798 100644
--- a/test/sparse_solvers.cpp
+++ b/test/sparse_solvers.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse.h"
 
diff --git a/test/sparse_vector.cpp b/test/sparse_vector.cpp
index 8d4db08..18a8c0c 100644
--- a/test/sparse_vector.cpp
+++ b/test/sparse_vector.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "sparse.h"
 
diff --git a/test/sparselu.cpp b/test/sparselu.cpp
index fc2de47..43a6913 100644
--- a/test/sparselu.cpp
+++ b/test/sparselu.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // SparseLU solve does not accept column major matrices for the destination.
 // However, as expected, the generic check_sparse_square_solving routines produces row-major
diff --git a/test/sparseqr.cpp b/test/sparseqr.cpp
index 897f426..b5003c5 100644
--- a/test/sparseqr.cpp
+++ b/test/sparseqr.cpp
@@ -6,6 +6,7 @@
 //
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
+// SPDX-License-Identifier: MPL-2.0
 #include "sparse.h"
 #include <Eigen/SparseQR>
 
diff --git a/test/special_numbers.cpp b/test/special_numbers.cpp
index 943f650..c583d2b 100644
--- a/test/special_numbers.cpp
+++ b/test/special_numbers.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/split_test_helper.h b/test/split_test_helper.h
index 63c809c..774da43 100644
--- a/test/split_test_helper.h
+++ b/test/split_test_helper.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #if defined(EIGEN_TEST_PART_1) || defined(EIGEN_TEST_PART_ALL)
 #define CALL_SUBTEST_1(FUNC) CALL_SUBTEST(FUNC)
 #else
diff --git a/test/spqr_support.cpp b/test/spqr_support.cpp
index 8a2c047..5bda3f5 100644
--- a/test/spqr_support.cpp
+++ b/test/spqr_support.cpp
@@ -5,6 +5,7 @@
 //
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse.h"
diff --git a/test/stable_norm.cpp b/test/stable_norm.cpp
index c0ef4b6..3466749 100644
--- a/test/stable_norm.cpp
+++ b/test/stable_norm.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/stddeque.cpp b/test/stddeque.cpp
index 45608d7..822d309 100644
--- a/test/stddeque.cpp
+++ b/test/stddeque.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/StdDeque>
diff --git a/test/stddeque_overload.cpp b/test/stddeque_overload.cpp
index d0fb261..282f1bd 100644
--- a/test/stddeque_overload.cpp
+++ b/test/stddeque_overload.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/stdlist.cpp b/test/stdlist.cpp
index fe32067..cb65eff 100644
--- a/test/stdlist.cpp
+++ b/test/stdlist.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/StdList>
diff --git a/test/stdlist_overload.cpp b/test/stdlist_overload.cpp
index 77781db..26558d8 100644
--- a/test/stdlist_overload.cpp
+++ b/test/stdlist_overload.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/stdvector.cpp b/test/stdvector.cpp
index 93acfa5..0dd8f88 100644
--- a/test/stdvector.cpp
+++ b/test/stdvector.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/StdVector>
diff --git a/test/stdvector_overload.cpp b/test/stdvector_overload.cpp
index 57d06ca..c084a52 100644
--- a/test/stdvector_overload.cpp
+++ b/test/stdvector_overload.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/stl_iterators.cpp b/test/stl_iterators.cpp
index 9d987e5..e7e4265 100644
--- a/test/stl_iterators.cpp
+++ b/test/stl_iterators.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Include <ranges> before main.h because main.h redefines min/max as
 // error macros, which conflicts with std::ranges internals.
diff --git a/test/structured_bindings.cpp b/test/structured_bindings.cpp
index e497884..7676cb2 100644
--- a/test/structured_bindings.cpp
+++ b/test/structured_bindings.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/superlu_support.cpp b/test/superlu_support.cpp
index 51cc3df..287a9a3 100644
--- a/test/superlu_support.cpp
+++ b/test/superlu_support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse_solver.h"
diff --git a/test/svd_common.h b/test/svd_common.h
index a9aa3b2..978957f 100644
--- a/test/svd_common.h
+++ b/test/svd_common.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef SVD_DEFAULT
 #error a macro SVD_DEFAULT(MatrixType) must be defined prior to including svd_common.h
diff --git a/test/svd_fill.h b/test/svd_fill.h
index 0064b1f..d2d316b 100644
--- a/test/svd_fill.h
+++ b/test/svd_fill.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 template <typename T>
 Array<T, 4, 1> four_denorms();
diff --git a/test/swap.cpp b/test/swap.cpp
index 38deabd..66f9b1c 100644
--- a/test/swap.cpp
+++ b/test/swap.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/sycl_basic.cpp b/test/sycl_basic.cpp
index 62fac81..40dcfd2 100644
--- a/test/sycl_basic.cpp
+++ b/test/sycl_basic.cpp
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int
diff --git a/test/symbolic_index.cpp b/test/symbolic_index.cpp
index 1bd5bd8..7dbcafe 100644
--- a/test/symbolic_index.cpp
+++ b/test/symbolic_index.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/threads_eventcount.cpp b/test/threads_eventcount.cpp
index ebac091..6135036 100644
--- a/test/threads_eventcount.cpp
+++ b/test/threads_eventcount.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 #include "main.h"
diff --git a/test/threads_fork_join.cpp b/test/threads_fork_join.cpp
index ec75bb7..ee899c9 100644
--- a/test/threads_fork_join.cpp
+++ b/test/threads_fork_join.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 #include "main.h"
diff --git a/test/threads_non_blocking_thread_pool.cpp b/test/threads_non_blocking_thread_pool.cpp
index 09990a0..a167689 100644
--- a/test/threads_non_blocking_thread_pool.cpp
+++ b/test/threads_non_blocking_thread_pool.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 #include "main.h"
diff --git a/test/threads_runqueue.cpp b/test/threads_runqueue.cpp
index 4eaaaef..f1fdb57 100644
--- a/test/threads_runqueue.cpp
+++ b/test/threads_runqueue.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 #include <cstdlib>
diff --git a/test/triangular.cpp b/test/triangular.cpp
index 55ff01e..32b5dc7 100644
--- a/test/triangular.cpp
+++ b/test/triangular.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_TEST_PART_100) || defined(EIGEN_TEST_PART_ALL)
 #define EIGEN_NO_DEPRECATED_WARNING
diff --git a/test/tridiag_test_matrices.h b/test/tridiag_test_matrices.h
index 26aa19a..1d50b53 100644
--- a/test/tridiag_test_matrices.h
+++ b/test/tridiag_test_matrices.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_TEST_TRIDIAG_TEST_MATRICES_H
 #define EIGEN_TEST_TRIDIAG_TEST_MATRICES_H
diff --git a/test/tuple_test.cpp b/test/tuple_test.cpp
index 14d771a..7a55fdd 100644
--- a/test/tuple_test.cpp
+++ b/test/tuple_test.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/type_alias.cpp b/test/type_alias.cpp
index 1619d83..c3ec56c 100644
--- a/test/type_alias.cpp
+++ b/test/type_alias.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/ulp_accuracy/mpfr_reference.h b/test/ulp_accuracy/mpfr_reference.h
index 37c6911..02ec374 100644
--- a/test/ulp_accuracy/mpfr_reference.h
+++ b/test/ulp_accuracy/mpfr_reference.h
@@ -5,6 +5,8 @@
 // between float/double and mpfr_t.
 //
 // Only compiled when EIGEN_HAS_MPFR is defined (i.e., MPFR and GMP are found).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ULP_ACCURACY_MPFR_REFERENCE_H
 #define EIGEN_ULP_ACCURACY_MPFR_REFERENCE_H
diff --git a/test/ulp_accuracy/ulp_accuracy.cpp b/test/ulp_accuracy/ulp_accuracy.cpp
index 8a8c62f..24627f6 100644
--- a/test/ulp_accuracy/ulp_accuracy.cpp
+++ b/test/ulp_accuracy/ulp_accuracy.cpp
@@ -12,6 +12,8 @@
 //
 // Build:
 //   cd build && cmake .. && make ulp_accuracy
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <Eigen/Core>
 #include <unsupported/Eigen/SpecialFunctions>
diff --git a/test/umeyama.cpp b/test/umeyama.cpp
index e329f91..5701da9 100644
--- a/test/umeyama.cpp
+++ b/test/umeyama.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/umfpack_support.cpp b/test/umfpack_support.cpp
index 94aa5cc..48570bb 100644
--- a/test/umfpack_support.cpp
+++ b/test/umfpack_support.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS
 #include "sparse_solver.h"
diff --git a/test/unalignedcount.cpp b/test/unalignedcount.cpp
index f508b1a..fc0ba45 100644
--- a/test/unalignedcount.cpp
+++ b/test/unalignedcount.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 static int nb_load;
 static int nb_loadu;
diff --git a/test/unaryview.cpp b/test/unaryview.cpp
index 62c6ecb..9aa54fd 100644
--- a/test/unaryview.cpp
+++ b/test/unaryview.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/upperbidiagonalization.cpp b/test/upperbidiagonalization.cpp
index 2fc31dc..d06a0dc 100644
--- a/test/upperbidiagonalization.cpp
+++ b/test/upperbidiagonalization.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/SVD>
diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp
index edd9285..1e008e3 100644
--- a/test/vectorization_logic.cpp
+++ b/test/vectorization_logic.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifdef EIGEN_TEST_PART_1
 #define EIGEN_UNALIGNED_VECTORIZE 1
diff --git a/test/vectorwiseop.cpp b/test/vectorwiseop.cpp
index b30142d..0062c5c 100644
--- a/test/vectorwiseop.cpp
+++ b/test/vectorwiseop.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define TEST_ENABLE_TEMPORARY_TRACKING
 
diff --git a/test/visitor.cpp b/test/visitor.cpp
index fccc7a4..6765ed3 100644
--- a/test/visitor.cpp
+++ b/test/visitor.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/test/zerosized.cpp b/test/zerosized.cpp
index 2df2f29..4c98e02 100644
--- a/test/zerosized.cpp
+++ b/test/zerosized.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/CMakeLists.txt b/unsupported/CMakeLists.txt
index 3904601..48c5033 100644
--- a/unsupported/CMakeLists.txt
+++ b/unsupported/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 add_subdirectory(Eigen)
 if(EIGEN_BUILD_DOC)
   add_subdirectory(doc EXCLUDE_FROM_ALL)
diff --git a/unsupported/Eigen/AdolcForward b/unsupported/Eigen/AdolcForward
index e73909d..49403d0 100644
--- a/unsupported/Eigen/AdolcForward
+++ b/unsupported/Eigen/AdolcForward
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ADOLC_FORWARD_MODULE_H
 #define EIGEN_ADOLC_FORWARD_MODULE_H
diff --git a/unsupported/Eigen/AlignedVector3 b/unsupported/Eigen/AlignedVector3
index f2d6416..870b043 100644
--- a/unsupported/Eigen/AlignedVector3
+++ b/unsupported/Eigen/AlignedVector3
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ALIGNED_VECTOR3_MODULE_H
 #define EIGEN_ALIGNED_VECTOR3_MODULE_H
diff --git a/unsupported/Eigen/ArpackSupport b/unsupported/Eigen/ArpackSupport
index dcd9858..83e097c 100644
--- a/unsupported/Eigen/ArpackSupport
+++ b/unsupported/Eigen/ArpackSupport
@@ -5,6 +5,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARPACKSUPPORT_MODULE_H
 #define EIGEN_ARPACKSUPPORT_MODULE_H
diff --git a/unsupported/Eigen/AutoDiff b/unsupported/Eigen/AutoDiff
index a1e964f..afd1e4f 100644
--- a/unsupported/Eigen/AutoDiff
+++ b/unsupported/Eigen/AutoDiff
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AUTODIFF_MODULE_H
 #define EIGEN_AUTODIFF_MODULE_H
diff --git a/unsupported/Eigen/BVH b/unsupported/Eigen/BVH
index bcab730..15b0883 100644
--- a/unsupported/Eigen/BVH
+++ b/unsupported/Eigen/BVH
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BVH_MODULE_H
 #define EIGEN_BVH_MODULE_H
diff --git a/unsupported/Eigen/CMakeLists.txt b/unsupported/Eigen/CMakeLists.txt
index d15bfac..2fed1b2 100644
--- a/unsupported/Eigen/CMakeLists.txt
+++ b/unsupported/Eigen/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 set(Eigen_HEADERS
   AdolcForward
   AlignedVector3
diff --git a/unsupported/Eigen/CXX11/CMakeLists.txt b/unsupported/Eigen/CXX11/CMakeLists.txt
index f31b4bc..3896ac7 100644
--- a/unsupported/Eigen/CXX11/CMakeLists.txt
+++ b/unsupported/Eigen/CXX11/CMakeLists.txt
@@ -1,4 +1,6 @@
 # Forwarding headers for backward compatibility.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 set(Eigen_CXX11_HEADERS Tensor TensorSymmetry ThreadPool)
 
 install(FILES
diff --git a/unsupported/Eigen/CXX11/Tensor b/unsupported/Eigen/CXX11/Tensor
index c80aa42..7b8be3e 100644
--- a/unsupported/Eigen/CXX11/Tensor
+++ b/unsupported/Eigen/CXX11/Tensor
@@ -1,2 +1,4 @@
 // Forwarding header for backward compatibility.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "../Tensor"  // IWYU pragma: export
diff --git a/unsupported/Eigen/CXX11/TensorSymmetry b/unsupported/Eigen/CXX11/TensorSymmetry
index 5222978..169c1c1 100644
--- a/unsupported/Eigen/CXX11/TensorSymmetry
+++ b/unsupported/Eigen/CXX11/TensorSymmetry
@@ -1,2 +1,4 @@
 // Forwarding header for backward compatibility.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "../TensorSymmetry"  // IWYU pragma: export
diff --git a/unsupported/Eigen/CXX11/ThreadPool b/unsupported/Eigen/CXX11/ThreadPool
index c215d5f..0fac27e 100644
--- a/unsupported/Eigen/CXX11/ThreadPool
+++ b/unsupported/Eigen/CXX11/ThreadPool
@@ -1,2 +1,4 @@
 // Forwarding header for backward compatibility.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "../ThreadPool"  // IWYU pragma: export
diff --git a/unsupported/Eigen/EulerAngles b/unsupported/Eigen/EulerAngles
index e95dd81..3c794a6 100644
--- a/unsupported/Eigen/EulerAngles
+++ b/unsupported/Eigen/EulerAngles
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EULERANGLES_MODULE_H
 #define EIGEN_EULERANGLES_MODULE_H
diff --git a/unsupported/Eigen/FFT b/unsupported/Eigen/FFT
index 7755334..460fdbe 100644
--- a/unsupported/Eigen/FFT
+++ b/unsupported/Eigen/FFT
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_FFT_MODULE_H
 #define EIGEN_FFT_MODULE_H
diff --git a/unsupported/Eigen/GPU b/unsupported/Eigen/GPU
index ca32cd6..f5d20ba 100644
--- a/unsupported/Eigen/GPU
+++ b/unsupported/Eigen/GPU
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GPU_MODULE_H
 #define EIGEN_GPU_MODULE_H
diff --git a/unsupported/Eigen/IterativeSolvers b/unsupported/Eigen/IterativeSolvers
index af1b335..d189d2f 100644
--- a/unsupported/Eigen/IterativeSolvers
+++ b/unsupported/Eigen/IterativeSolvers
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ITERATIVE_SOLVERS_MODULE_H
 #define EIGEN_ITERATIVE_SOLVERS_MODULE_H
diff --git a/unsupported/Eigen/KroneckerProduct b/unsupported/Eigen/KroneckerProduct
index efc46da..40d0b1b 100644
--- a/unsupported/Eigen/KroneckerProduct
+++ b/unsupported/Eigen/KroneckerProduct
@@ -5,6 +5,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_KRONECKER_PRODUCT_MODULE_H
 #define EIGEN_KRONECKER_PRODUCT_MODULE_H
diff --git a/unsupported/Eigen/LevenbergMarquardt b/unsupported/Eigen/LevenbergMarquardt
index 7a0d178..eba68a7 100644
--- a/unsupported/Eigen/LevenbergMarquardt
+++ b/unsupported/Eigen/LevenbergMarquardt
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_LEVENBERGMARQUARDT_MODULE_H
 #define EIGEN_LEVENBERGMARQUARDT_MODULE_H
diff --git a/unsupported/Eigen/MPRealSupport b/unsupported/Eigen/MPRealSupport
index ce6b48f..661143a 100644
--- a/unsupported/Eigen/MPRealSupport
+++ b/unsupported/Eigen/MPRealSupport
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MPREALSUPPORT_MODULE_H
 #define EIGEN_MPREALSUPPORT_MODULE_H
diff --git a/unsupported/Eigen/MatrixFunctions b/unsupported/Eigen/MatrixFunctions
index 845ee0b..aa2137e 100644
--- a/unsupported/Eigen/MatrixFunctions
+++ b/unsupported/Eigen/MatrixFunctions
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_FUNCTIONS_MODULE_H
 #define EIGEN_MATRIX_FUNCTIONS_MODULE_H
diff --git a/unsupported/Eigen/NNLS b/unsupported/Eigen/NNLS
index 62fad70..2edf9ed 100644
--- a/unsupported/Eigen/NNLS
+++ b/unsupported/Eigen/NNLS
@@ -7,6 +7,7 @@
  * Public License v. 2.0. If a copy of the MPL was not distributed
  * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
+// SPDX-License-Identifier: MPL-2.0
 
 /** \defgroup nnls Non-Negative Least Squares (NNLS) Module
  * This module provides a single class @c Eigen::NNLS implementing the NNLS algorithm.
diff --git a/unsupported/Eigen/NonLinearOptimization b/unsupported/Eigen/NonLinearOptimization
index d678a2b..18a493f 100644
--- a/unsupported/Eigen/NonLinearOptimization
+++ b/unsupported/Eigen/NonLinearOptimization
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NONLINEAROPTIMIZATION_MODULE_H
 #define EIGEN_NONLINEAROPTIMIZATION_MODULE_H
diff --git a/unsupported/Eigen/NumericalDiff b/unsupported/Eigen/NumericalDiff
index ef53faa..0a41291 100644
--- a/unsupported/Eigen/NumericalDiff
+++ b/unsupported/Eigen/NumericalDiff
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_NUMERICALDIFF_MODULE_H
 #define EIGEN_NUMERICALDIFF_MODULE_H
diff --git a/unsupported/Eigen/OpenGLSupport b/unsupported/Eigen/OpenGLSupport
index 8d49c83..ca10408 100644
--- a/unsupported/Eigen/OpenGLSupport
+++ b/unsupported/Eigen/OpenGLSupport
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_OPENGL_MODULE_H
 #define EIGEN_OPENGL_MODULE_H
diff --git a/unsupported/Eigen/Polynomials b/unsupported/Eigen/Polynomials
index aa9aa8e..d6ca037 100644
--- a/unsupported/Eigen/Polynomials
+++ b/unsupported/Eigen/Polynomials
@@ -5,6 +5,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_POLYNOMIALS_MODULE_H
 #define EIGEN_POLYNOMIALS_MODULE_H
diff --git a/unsupported/Eigen/SparseExtra b/unsupported/Eigen/SparseExtra
index 00a87c5..0758beb 100644
--- a/unsupported/Eigen/SparseExtra
+++ b/unsupported/Eigen/SparseExtra
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_EXTRA_MODULE_H
 #define EIGEN_SPARSE_EXTRA_MODULE_H
diff --git a/unsupported/Eigen/SpecialFunctions b/unsupported/Eigen/SpecialFunctions
index 2d84d72..59d9a07 100644
--- a/unsupported/Eigen/SpecialFunctions
+++ b/unsupported/Eigen/SpecialFunctions
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_MODULE_H
 #define EIGEN_SPECIALFUNCTIONS_MODULE_H
diff --git a/unsupported/Eigen/Splines b/unsupported/Eigen/Splines
index 36663a5..721d5d7 100644
--- a/unsupported/Eigen/Splines
+++ b/unsupported/Eigen/Splines
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPLINES_MODULE_H
 #define EIGEN_SPLINES_MODULE_H
diff --git a/unsupported/Eigen/Tensor b/unsupported/Eigen/Tensor
index 9656527..b65fb63 100644
--- a/unsupported/Eigen/Tensor
+++ b/unsupported/Eigen/Tensor
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_MODULE_H
 #define EIGEN_CXX11_TENSOR_MODULE_H
diff --git a/unsupported/Eigen/TensorSymmetry b/unsupported/Eigen/TensorSymmetry
index 6f2e4ab..4ffc307 100644
--- a/unsupported/Eigen/TensorSymmetry
+++ b/unsupported/Eigen/TensorSymmetry
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_MODULE_H
 #define EIGEN_CXX11_TENSORSYMMETRY_MODULE_H
diff --git a/unsupported/Eigen/ThreadPool b/unsupported/Eigen/ThreadPool
index 6012171..6996fca 100644
--- a/unsupported/Eigen/ThreadPool
+++ b/unsupported/Eigen/ThreadPool
@@ -1 +1,4 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include "../../Eigen/ThreadPool"  // IWYU pragma: export
diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h b/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h
index a83bdc3..ba1a38c 100644
--- a/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h
+++ b/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AUTODIFF_JACOBIAN_H
 #define EIGEN_AUTODIFF_JACOBIAN_H
diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
index ea481fc..52afd70 100644
--- a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
+++ b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AUTODIFF_SCALAR_H
 #define EIGEN_AUTODIFF_SCALAR_H
diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h b/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h
index 892980e..bb8eb1b 100644
--- a/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h
+++ b/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_AUTODIFF_VECTOR_H
 #define EIGEN_AUTODIFF_VECTOR_H
diff --git a/unsupported/Eigen/src/AutoDiff/CoherentPadOp.h b/unsupported/Eigen/src/AutoDiff/CoherentPadOp.h
index 68f8b0a..bef142d 100644
--- a/unsupported/Eigen/src/AutoDiff/CoherentPadOp.h
+++ b/unsupported/Eigen/src/AutoDiff/CoherentPadOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COHERENT_PAD_OP_H
 #define EIGEN_COHERENT_PAD_OP_H
diff --git a/unsupported/Eigen/src/AutoDiff/InternalHeaderCheck.h b/unsupported/Eigen/src/AutoDiff/InternalHeaderCheck.h
index 1584337..1d8fee9 100644
--- a/unsupported/Eigen/src/AutoDiff/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/AutoDiff/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_AUTODIFF_MODULE_H
 #error "Please include unsupported/Eigen/AutoDiff instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/BVH/BVAlgorithms.h b/unsupported/Eigen/src/BVH/BVAlgorithms.h
index d9e41da..f9255e4 100644
--- a/unsupported/Eigen/src/BVH/BVAlgorithms.h
+++ b/unsupported/Eigen/src/BVH/BVAlgorithms.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BVALGORITHMS_H
 #define EIGEN_BVALGORITHMS_H
diff --git a/unsupported/Eigen/src/BVH/InternalHeaderCheck.h b/unsupported/Eigen/src/BVH/InternalHeaderCheck.h
index 7aade9b..c5c57d7 100644
--- a/unsupported/Eigen/src/BVH/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/BVH/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_BVH_MODULE_H
 #error "Please include unsupported/Eigen/BVH instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/BVH/KdBVH.h b/unsupported/Eigen/src/BVH/KdBVH.h
index 631aef7..ac60392 100644
--- a/unsupported/Eigen/src/BVH/KdBVH.h
+++ b/unsupported/Eigen/src/BVH/KdBVH.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef KDBVH_H_INCLUDED
 #define KDBVH_H_INCLUDED
diff --git a/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h b/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h
index b110aee..9bd1258 100644
--- a/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h
+++ b/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ARPACKGENERALIZEDSELFADJOINTEIGENSOLVER_H
 #define EIGEN_ARPACKGENERALIZEDSELFADJOINTEIGENSOLVER_H
diff --git a/unsupported/Eigen/src/Eigenvalues/InternalHeaderCheck.h b/unsupported/Eigen/src/Eigenvalues/InternalHeaderCheck.h
index c00cb57..40e5532 100644
--- a/unsupported/Eigen/src/Eigenvalues/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/Eigenvalues/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_EIGENVALUES_MODULE_H
 #error "Please include unsupported/Eigen/Eigenvalues instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/EulerAngles/CMakeLists.txt b/unsupported/Eigen/src/EulerAngles/CMakeLists.txt
index 22088eb..e2ab506 100644
--- a/unsupported/Eigen/src/EulerAngles/CMakeLists.txt
+++ b/unsupported/Eigen/src/EulerAngles/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(GLOB Eigen_EulerAngles_SRCS "*.h")
 
 install(FILES
diff --git a/unsupported/Eigen/src/EulerAngles/EulerAngles.h b/unsupported/Eigen/src/EulerAngles/EulerAngles.h
index b0b3617..c122397 100644
--- a/unsupported/Eigen/src/EulerAngles/EulerAngles.h
+++ b/unsupported/Eigen/src/EulerAngles/EulerAngles.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EULERANGLESCLASS_H  // TODO: Fix previous "EIGEN_EULERANGLES_H" definition?
 #define EIGEN_EULERANGLESCLASS_H
diff --git a/unsupported/Eigen/src/EulerAngles/EulerSystem.h b/unsupported/Eigen/src/EulerAngles/EulerSystem.h
index 8930ba4..52ee4b9 100644
--- a/unsupported/Eigen/src/EulerAngles/EulerSystem.h
+++ b/unsupported/Eigen/src/EulerAngles/EulerSystem.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_EULERSYSTEM_H
 #define EIGEN_EULERSYSTEM_H
diff --git a/unsupported/Eigen/src/EulerAngles/InternalHeaderCheck.h b/unsupported/Eigen/src/EulerAngles/InternalHeaderCheck.h
index 0c00a30..28cad12 100644
--- a/unsupported/Eigen/src/EulerAngles/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/EulerAngles/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_EULERANGLES_MODULE_H
 #error "Please include unsupported/Eigen/EulerAngles instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/FFT/InternalHeaderCheck.h b/unsupported/Eigen/src/FFT/InternalHeaderCheck.h
index 801e245..f61a699 100644
--- a/unsupported/Eigen/src/FFT/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/FFT/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_FFT_MODULE_H
 #error "Please include unsupported/Eigen/FFT instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/FFT/duccfft_impl.h b/unsupported/Eigen/src/FFT/duccfft_impl.h
index 781716d..8711ab9 100644
--- a/unsupported/Eigen/src/FFT/duccfft_impl.h
+++ b/unsupported/Eigen/src/FFT/duccfft_impl.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 namespace Eigen {
 
diff --git a/unsupported/Eigen/src/FFT/fftw_impl.h b/unsupported/Eigen/src/FFT/fftw_impl.h
index 588d09e..cb2f1b8 100644
--- a/unsupported/Eigen/src/FFT/fftw_impl.h
+++ b/unsupported/Eigen/src/FFT/fftw_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // IWYU pragma: private
 #include "./InternalHeaderCheck.h"
diff --git a/unsupported/Eigen/src/FFT/imklfft_impl.h b/unsupported/Eigen/src/FFT/imklfft_impl.h
index 0c5bb26..1b3114b 100644
--- a/unsupported/Eigen/src/FFT/imklfft_impl.h
+++ b/unsupported/Eigen/src/FFT/imklfft_impl.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <mkl_dfti.h>
 
diff --git a/unsupported/Eigen/src/FFT/kissfft_impl.h b/unsupported/Eigen/src/FFT/kissfft_impl.h
index c7e5960..08eb896 100644
--- a/unsupported/Eigen/src/FFT/kissfft_impl.h
+++ b/unsupported/Eigen/src/FFT/kissfft_impl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // IWYU pragma: private
 #include "./InternalHeaderCheck.h"
diff --git a/unsupported/Eigen/src/FFT/pocketfft_impl.h b/unsupported/Eigen/src/FFT/pocketfft_impl.h
index fce105b..095b6ae 100644
--- a/unsupported/Eigen/src/FFT/pocketfft_impl.h
+++ b/unsupported/Eigen/src/FFT/pocketfft_impl.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 namespace Eigen {
 
diff --git a/unsupported/Eigen/src/GPU/CuBlasSupport.h b/unsupported/Eigen/src/GPU/CuBlasSupport.h
index 6201e39..ae30553 100644
--- a/unsupported/Eigen/src/GPU/CuBlasSupport.h
+++ b/unsupported/Eigen/src/GPU/CuBlasSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // cuBLAS-specific support types:
 //   - Error-checking macro
diff --git a/unsupported/Eigen/src/GPU/CuSolverSupport.h b/unsupported/Eigen/src/GPU/CuSolverSupport.h
index 2de889d..7f8c33d 100644
--- a/unsupported/Eigen/src/GPU/CuSolverSupport.h
+++ b/unsupported/Eigen/src/GPU/CuSolverSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // cuSOLVER-specific support types:
 //   - cuSOLVER error-checking macro
diff --git a/unsupported/Eigen/src/GPU/DeviceBlasExpr.h b/unsupported/Eigen/src/GPU/DeviceBlasExpr.h
index 7597320..7a65bef 100644
--- a/unsupported/Eigen/src/GPU/DeviceBlasExpr.h
+++ b/unsupported/Eigen/src/GPU/DeviceBlasExpr.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // BLAS Level 3 expression types for gpu::DeviceMatrix (beyond GEMM):
 //   TrsmExpr           -> cublasXtrsm   (triangular solve)
diff --git a/unsupported/Eigen/src/GPU/DeviceDispatch.h b/unsupported/Eigen/src/GPU/DeviceDispatch.h
index 26ffc8f..82c9112 100644
--- a/unsupported/Eigen/src/GPU/DeviceDispatch.h
+++ b/unsupported/Eigen/src/GPU/DeviceDispatch.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Dispatch functions that map DeviceMatrix expressions to NVIDIA library calls.
 //
diff --git a/unsupported/Eigen/src/GPU/DeviceExpr.h b/unsupported/Eigen/src/GPU/DeviceExpr.h
index bcf842a..a9c6705 100644
--- a/unsupported/Eigen/src/GPU/DeviceExpr.h
+++ b/unsupported/Eigen/src/GPU/DeviceExpr.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Lightweight expression types for DeviceMatrix operations.
 //
diff --git a/unsupported/Eigen/src/GPU/DeviceMatrix.h b/unsupported/Eigen/src/GPU/DeviceMatrix.h
index 2e15c41..acc4ba5 100644
--- a/unsupported/Eigen/src/GPU/DeviceMatrix.h
+++ b/unsupported/Eigen/src/GPU/DeviceMatrix.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Typed RAII wrapper for a dense matrix in GPU device memory.
 //
diff --git a/unsupported/Eigen/src/GPU/DeviceSolverExpr.h b/unsupported/Eigen/src/GPU/DeviceSolverExpr.h
index a71a998..84f8830 100644
--- a/unsupported/Eigen/src/GPU/DeviceSolverExpr.h
+++ b/unsupported/Eigen/src/GPU/DeviceSolverExpr.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Solver expression types for gpu::DeviceMatrix.
 //
diff --git a/unsupported/Eigen/src/GPU/GpuContext.h b/unsupported/Eigen/src/GPU/GpuContext.h
index bff4053..91ba384 100644
--- a/unsupported/Eigen/src/GPU/GpuContext.h
+++ b/unsupported/Eigen/src/GPU/GpuContext.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Unified GPU execution context.
 //
diff --git a/unsupported/Eigen/src/GPU/GpuLLT.h b/unsupported/Eigen/src/GPU/GpuLLT.h
index 8ca3dbd..2dd7299 100644
--- a/unsupported/Eigen/src/GPU/GpuLLT.h
+++ b/unsupported/Eigen/src/GPU/GpuLLT.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // GPU Cholesky (LLT) decomposition using cuSOLVER.
 //
diff --git a/unsupported/Eigen/src/GPU/GpuLU.h b/unsupported/Eigen/src/GPU/GpuLU.h
index e4392bc..afc941b 100644
--- a/unsupported/Eigen/src/GPU/GpuLU.h
+++ b/unsupported/Eigen/src/GPU/GpuLU.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // GPU partial-pivoting LU decomposition using cuSOLVER.
 //
diff --git a/unsupported/Eigen/src/GPU/GpuSupport.h b/unsupported/Eigen/src/GPU/GpuSupport.h
index 7d840bb..d2c129f 100644
--- a/unsupported/Eigen/src/GPU/GpuSupport.h
+++ b/unsupported/Eigen/src/GPU/GpuSupport.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Generic CUDA runtime support shared across all GPU library integrations
 // (cuSOLVER and cuBLAS):
diff --git a/unsupported/Eigen/src/GPU/InternalHeaderCheck.h b/unsupported/Eigen/src/GPU/InternalHeaderCheck.h
index cb2163c..e94db63 100644
--- a/unsupported/Eigen/src/GPU/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/GPU/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_GPU_MODULE_H
 #error "Please include unsupported/Eigen/GPU instead of including headers inside the src/GPU directory directly."
 #endif
diff --git a/unsupported/Eigen/src/IterativeSolvers/BiCGSTABL.h b/unsupported/Eigen/src/IterativeSolvers/BiCGSTABL.h
index 8c49dbc..7eb8771 100644
--- a/unsupported/Eigen/src/IterativeSolvers/BiCGSTABL.h
+++ b/unsupported/Eigen/src/IterativeSolvers/BiCGSTABL.h
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 /*
 
diff --git a/unsupported/Eigen/src/IterativeSolvers/DGMRES.h b/unsupported/Eigen/src/IterativeSolvers/DGMRES.h
index 25f16be..673b446 100644
--- a/unsupported/Eigen/src/IterativeSolvers/DGMRES.h
+++ b/unsupported/Eigen/src/IterativeSolvers/DGMRES.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_DGMRES_H
 #define EIGEN_DGMRES_H
diff --git a/unsupported/Eigen/src/IterativeSolvers/GMRES.h b/unsupported/Eigen/src/IterativeSolvers/GMRES.h
index 4df83e7..8904fbe 100644
--- a/unsupported/Eigen/src/IterativeSolvers/GMRES.h
+++ b/unsupported/Eigen/src/IterativeSolvers/GMRES.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GMRES_H
 #define EIGEN_GMRES_H
diff --git a/unsupported/Eigen/src/IterativeSolvers/IDRS.h b/unsupported/Eigen/src/IterativeSolvers/IDRS.h
index 09568e1..48f1f4e 100644
--- a/unsupported/Eigen/src/IterativeSolvers/IDRS.h
+++ b/unsupported/Eigen/src/IterativeSolvers/IDRS.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_IDRS_H
 #define EIGEN_IDRS_H
diff --git a/unsupported/Eigen/src/IterativeSolvers/IDRSTABL.h b/unsupported/Eigen/src/IterativeSolvers/IDRSTABL.h
index 1ba6773..9791f4a 100644
--- a/unsupported/Eigen/src/IterativeSolvers/IDRSTABL.h
+++ b/unsupported/Eigen/src/IterativeSolvers/IDRSTABL.h
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 /*
 
 The IDR(S)Stab(L) method is a combination of IDR(S) and BiCGStab(L)
diff --git a/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h b/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h
index 1a2edca..0c8b5e4 100644
--- a/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h
+++ b/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_INCOMPLETE_LU_H
 #define EIGEN_INCOMPLETE_LU_H
diff --git a/unsupported/Eigen/src/IterativeSolvers/InternalHeaderCheck.h b/unsupported/Eigen/src/IterativeSolvers/InternalHeaderCheck.h
index 3d6ee41..38443e1 100644
--- a/unsupported/Eigen/src/IterativeSolvers/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/IterativeSolvers/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_ITERATIVE_SOLVERS_MODULE_H
 #error \
     "Please include unsupported/Eigen/IterativeSolvers instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/IterativeSolvers/MINRES.h b/unsupported/Eigen/src/IterativeSolvers/MINRES.h
index 77c6a6c..4a1522f 100644
--- a/unsupported/Eigen/src/IterativeSolvers/MINRES.h
+++ b/unsupported/Eigen/src/IterativeSolvers/MINRES.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MINRES_H
 #define EIGEN_MINRES_H
diff --git a/unsupported/Eigen/src/IterativeSolvers/Scaling.h b/unsupported/Eigen/src/IterativeSolvers/Scaling.h
index 045c24a..035fa5d 100644
--- a/unsupported/Eigen/src/IterativeSolvers/Scaling.h
+++ b/unsupported/Eigen/src/IterativeSolvers/Scaling.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_ITERSCALING_H
 #define EIGEN_ITERSCALING_H
diff --git a/unsupported/Eigen/src/KroneckerProduct/InternalHeaderCheck.h b/unsupported/Eigen/src/KroneckerProduct/InternalHeaderCheck.h
index 3cf30d9..de69b64 100644
--- a/unsupported/Eigen/src/KroneckerProduct/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/KroneckerProduct/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_KRONECKER_PRODUCT_MODULE_H
 #error \
     "Please include unsupported/Eigen/KroneckerProduct instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h b/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h
index 038bf42..f9efa41 100644
--- a/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h
+++ b/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef KRONECKER_TENSOR_PRODUCT_H
 #define KRONECKER_TENSOR_PRODUCT_H
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/InternalHeaderCheck.h b/unsupported/Eigen/src/LevenbergMarquardt/InternalHeaderCheck.h
index a9a646f..6e6f394 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_LEVENBERGMARQUARDT_MODULE_H
 #error \
     "Please include unsupported/Eigen/LevenbergMarquardt instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h b/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h
index b81d5a3..99bc7cd 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h
@@ -8,6 +8,7 @@
 //
 // This Source Code Form is subject to the terms of the Minpack license
 // (a BSD-like license) described in the campaigned CopyrightMINPACK.txt file.
+// SPDX-License-Identifier: MPL-2.0 AND LicenseRef-MINPACK
 
 #ifndef EIGEN_LMCOVAR_H
 #define EIGEN_LMCOVAR_H
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h b/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
index f0697ce..56b63ae 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
@@ -10,6 +10,7 @@
 //
 // This Source Code Form is subject to the terms of the Minpack license
 // (a BSD-like license) described in the campaigned CopyrightMINPACK.txt file.
+// SPDX-License-Identifier: MPL-2.0 AND LicenseRef-MINPACK
 
 #ifndef EIGEN_LMONESTEP_H
 #define EIGEN_LMONESTEP_H
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h b/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h
index 75ca4e8..99002fc 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h
@@ -8,6 +8,7 @@
 //
 // This Source Code Form is subject to the terms of the Minpack license
 // (a BSD-like license) described in the campaigned CopyrightMINPACK.txt file.
+// SPDX-License-Identifier: MPL-2.0 AND LicenseRef-MINPACK
 
 #ifndef EIGEN_LMPAR_H
 #define EIGEN_LMPAR_H
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h b/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h
index 49bf6e1..4dc2aa3 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h
@@ -11,6 +11,7 @@
 //
 // This Source Code Form is subject to the terms of the Minpack license
 // (a BSD-like license) described in the campaigned CopyrightMINPACK.txt file.
+// SPDX-License-Identifier: MPL-2.0 AND LicenseRef-MINPACK
 
 #ifndef EIGEN_LMQRSOLV_H
 #define EIGEN_LMQRSOLV_H
diff --git a/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h b/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
index eea424c..77af49d 100644
--- a/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
+++ b/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
@@ -15,6 +15,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0 AND LicenseRef-MINPACK
 
 #ifndef EIGEN_LEVENBERGMARQUARDT_H
 #define EIGEN_LEVENBERGMARQUARDT_H
diff --git a/unsupported/Eigen/src/MatrixFunctions/InternalHeaderCheck.h b/unsupported/Eigen/src/MatrixFunctions/InternalHeaderCheck.h
index 4fc840e..23f0bf9 100644
--- a/unsupported/Eigen/src/MatrixFunctions/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/MatrixFunctions/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_MATRIX_FUNCTIONS_MODULE_H
 #error \
     "Please include unsupported/Eigen/MatrixFunctions instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h b/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h
index f4e0428..0697119 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_EXPONENTIAL
 #define EIGEN_MATRIX_EXPONENTIAL
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
index 6217ab8..18dbceb 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_FUNCTION_H
 #define EIGEN_MATRIX_FUNCTION_H
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h b/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h
index cbedb1e..1f98829 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_LOGARITHM
 #define EIGEN_MATRIX_LOGARITHM
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h
index ee77e88..1f0c17a 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_POWER
 #define EIGEN_MATRIX_POWER
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h b/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
index a90ffa6..d329824 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_MATRIX_SQUARE_ROOT
 #define EIGEN_MATRIX_SQUARE_ROOT
diff --git a/unsupported/Eigen/src/MatrixFunctions/StemFunction.h b/unsupported/Eigen/src/MatrixFunctions/StemFunction.h
index 8050c37..dad0c38 100644
--- a/unsupported/Eigen/src/MatrixFunctions/StemFunction.h
+++ b/unsupported/Eigen/src/MatrixFunctions/StemFunction.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_STEM_FUNCTION
 #define EIGEN_STEM_FUNCTION
diff --git a/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h b/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h
index 079772e..e5e5151 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h
@@ -1,5 +1,6 @@
 // -*- coding: utf-8
 // vim: set fileencoding=utf-8
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/unsupported/Eigen/src/NonLinearOptimization/InternalHeaderCheck.h b/unsupported/Eigen/src/NonLinearOptimization/InternalHeaderCheck.h
index d06970f..a26cbe6 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_NONLINEAROPTIMIZATION_MODULE_H
 #error \
     "Please include unsupported/Eigen/NonLinearOptimization instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h
index 6503e62..3f7cad3 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h
@@ -1,5 +1,6 @@
 // -*- coding: utf-8
 // vim: set fileencoding=utf-8
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/unsupported/Eigen/src/NonLinearOptimization/chkder.h b/unsupported/Eigen/src/NonLinearOptimization/chkder.h
index a9311ff..3c2ada9 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/chkder.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/chkder.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define chkder_log10e 0.43429448190325182765
 #define chkder_factor 100.
 
diff --git a/unsupported/Eigen/src/NonLinearOptimization/covar.h b/unsupported/Eigen/src/NonLinearOptimization/covar.h
index 311d998..1dbac6d 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/covar.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/covar.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/dogleg.h b/unsupported/Eigen/src/NonLinearOptimization/dogleg.h
index d1abb9e..f79844e 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/dogleg.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/dogleg.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h b/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h
index 70da3f9..4a3f180 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/lmpar.h b/unsupported/Eigen/src/NonLinearOptimization/lmpar.h
index cbff829..4975c47 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/lmpar.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/lmpar.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h b/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h
index 2e4d036..512682b 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h b/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h
index ea41315..a835e19 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/r1updt.h b/unsupported/Eigen/src/NonLinearOptimization/r1updt.h
index 201fba3..0c91193 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/r1updt.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/r1updt.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h b/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h
index 8ae5848..64f705e 100644
--- a/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h
+++ b/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h
@@ -1,4 +1,6 @@
 // IWYU pragma: private
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 #include "./InternalHeaderCheck.h"
 
 namespace Eigen {
diff --git a/unsupported/Eigen/src/NumericalDiff/InternalHeaderCheck.h b/unsupported/Eigen/src/NumericalDiff/InternalHeaderCheck.h
index 8c513d2..849fa5f 100644
--- a/unsupported/Eigen/src/NumericalDiff/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/NumericalDiff/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_NUMERICALDIFF_MODULE_H
 #error "Please include unsupported/Eigen/NumericalDiff instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
index 0f4f929..bac7da1 100644
--- a/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
+++ b/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
@@ -1,5 +1,6 @@
 // -*- coding: utf-8
 // vim: set fileencoding=utf-8
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/unsupported/Eigen/src/Polynomials/Companion.h b/unsupported/Eigen/src/Polynomials/Companion.h
index 3000b4c..b417a48 100644
--- a/unsupported/Eigen/src/Polynomials/Companion.h
+++ b/unsupported/Eigen/src/Polynomials/Companion.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_COMPANION_H
 #define EIGEN_COMPANION_H
diff --git a/unsupported/Eigen/src/Polynomials/InternalHeaderCheck.h b/unsupported/Eigen/src/Polynomials/InternalHeaderCheck.h
index b3aa50c..06c0575 100644
--- a/unsupported/Eigen/src/Polynomials/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/Polynomials/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_POLYNOMIALS_MODULE_H
 #error "Please include unsupported/Eigen/Polynomials instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/Polynomials/PolynomialSolver.h b/unsupported/Eigen/src/Polynomials/PolynomialSolver.h
index a79a49e..3a101e1 100644
--- a/unsupported/Eigen/src/Polynomials/PolynomialSolver.h
+++ b/unsupported/Eigen/src/Polynomials/PolynomialSolver.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_POLYNOMIAL_SOLVER_H
 #define EIGEN_POLYNOMIAL_SOLVER_H
diff --git a/unsupported/Eigen/src/Polynomials/PolynomialUtils.h b/unsupported/Eigen/src/Polynomials/PolynomialUtils.h
index 342ca9a..5254f74 100644
--- a/unsupported/Eigen/src/Polynomials/PolynomialUtils.h
+++ b/unsupported/Eigen/src/Polynomials/PolynomialUtils.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_POLYNOMIAL_UTILS_H
 #define EIGEN_POLYNOMIAL_UTILS_H
diff --git a/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h b/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h
index a7958af..6fb6472 100644
--- a/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h
+++ b/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEBLOCKMATRIX_H
 #define EIGEN_SPARSEBLOCKMATRIX_H
diff --git a/unsupported/Eigen/src/SparseExtra/InternalHeaderCheck.h b/unsupported/Eigen/src/SparseExtra/InternalHeaderCheck.h
index 0e55251..ededff3 100644
--- a/unsupported/Eigen/src/SparseExtra/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/SparseExtra/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPARSE_EXTRA_MODULE_H
 #error "Please include unsupported/Eigen/SparseExtra instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/SparseExtra/MarketIO.h b/unsupported/Eigen/src/SparseExtra/MarketIO.h
index f92622d..d0a33ee 100644
--- a/unsupported/Eigen/src/SparseExtra/MarketIO.h
+++ b/unsupported/Eigen/src/SparseExtra/MarketIO.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSE_MARKET_IO_H
 #define EIGEN_SPARSE_MARKET_IO_H
diff --git a/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h b/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h
index d991e75..1894888 100644
--- a/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h
+++ b/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MPL-2.0
 
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
diff --git a/unsupported/Eigen/src/SparseExtra/RandomSetter.h b/unsupported/Eigen/src/SparseExtra/RandomSetter.h
index fab31f2..651cd79 100644
--- a/unsupported/Eigen/src/SparseExtra/RandomSetter.h
+++ b/unsupported/Eigen/src/SparseExtra/RandomSetter.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_RANDOMSETTER_H
 #define EIGEN_RANDOMSETTER_H
diff --git a/unsupported/Eigen/src/SparseExtra/SparseInverse.h b/unsupported/Eigen/src/SparseExtra/SparseInverse.h
index 31561e7..dd0a788 100644
--- a/unsupported/Eigen/src/SparseExtra/SparseInverse.h
+++ b/unsupported/Eigen/src/SparseExtra/SparseInverse.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPARSEINVERSE_H
 #define EIGEN_SPARSEINVERSE_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h
index 25b91b5..7335a5a 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSELFUNCTIONS_ARRAYAPI_H
 #define EIGEN_BESSELFUNCTIONS_ARRAYAPI_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h
index 45b70b4..d921b9f 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSELFUNCTIONS_BFLOAT16_H
 #define EIGEN_BESSELFUNCTIONS_BFLOAT16_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h
index d877417..a12a19a 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSELFUNCTIONS_FUNCTORS_H
 #define EIGEN_BESSELFUNCTIONS_FUNCTORS_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h
index ac1ea28..6268c08 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSELFUNCTIONS_HALF_H
 #define EIGEN_BESSELFUNCTIONS_HALF_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h
index 59bdaf1..fb2e700 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSEL_FUNCTIONS_H
 #define EIGEN_BESSEL_FUNCTIONS_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
index 1c325fc..d0490fc 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_BESSELFUNCTIONS_PACKETMATH_H
 #define EIGEN_BESSELFUNCTIONS_PACKETMATH_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h b/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h
index 9119335..b9b5ce3 100644
--- a/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h
+++ b/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef HIP_VECTOR_COMPATIBILITY_H
 #define HIP_VECTOR_COMPATIBILITY_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/InternalHeaderCheck.h b/unsupported/Eigen/src/SpecialFunctions/InternalHeaderCheck.h
index a5ef51a..823765a 100644
--- a/unsupported/Eigen/src/SpecialFunctions/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/SpecialFunctions/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPECIALFUNCTIONS_MODULE_H
 #error \
     "Please include unsupported/Eigen/SpecialFunctions instead of including headers inside the src directory directly."
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h
index 3063b9f..61768be 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_ARRAYAPI_H
 #define EIGEN_SPECIALFUNCTIONS_ARRAYAPI_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h
index 90babae..a51a256 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_BFLOAT16_H
 #define EIGEN_SPECIALFUNCTIONS_BFLOAT16_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h
index 483c9ae..683f0ec 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_FUNCTORS_H
 #define EIGEN_SPECIALFUNCTIONS_FUNCTORS_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h
index baba848..e8b0c71 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_HALF_H
 #define EIGEN_SPECIALFUNCTIONS_HALF_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h
index c95fed5..5a7dbf6 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIAL_FUNCTIONS_H
 #define EIGEN_SPECIAL_FUNCTIONS_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h
index d1470db..46c32ac 100644
--- a/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h
+++ b/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPECIALFUNCTIONS_PACKETMATH_H
 #define EIGEN_SPECIALFUNCTIONS_PACKETMATH_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h
index d1a39be..02788c1 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_AVX_BESSELFUNCTIONS_H
 #define EIGEN_AVX_BESSELFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h
index a5a0805..fca747d 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_AVX_SPECIALFUNCTIONS_H
 #define EIGEN_AVX_SPECIALFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h
index 63ccc2d..075911b 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_AVX512_BESSELFUNCTIONS_H
 #define EIGEN_AVX512_BESSELFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h
index d00d991..220fe1b 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_AVX512_SPECIALFUNCTIONS_H
 #define EIGEN_AVX512_SPECIALFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h
index 8f3468b..0ce7576 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_GPU_SPECIALFUNCTIONS_H
 #define EIGEN_GPU_SPECIALFUNCTIONS_H
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h
index 568abab..d26d544 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_NEON_BESSELFUNCTIONS_H
 #define EIGEN_NEON_BESSELFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h b/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h
index c31bb66..935d75d 100644
--- a/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h
+++ b/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_NEON_SPECIALFUNCTIONS_H
 #define EIGEN_NEON_SPECIALFUNCTIONS_H
 
diff --git a/unsupported/Eigen/src/Splines/InternalHeaderCheck.h b/unsupported/Eigen/src/Splines/InternalHeaderCheck.h
index 4a6087e..5124a93 100644
--- a/unsupported/Eigen/src/Splines/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/Splines/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_SPLINES_MODULE_H
 #error "Please include unsupported/Eigen/Splines instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/Splines/Spline.h b/unsupported/Eigen/src/Splines/Spline.h
index 77b3522..c910e2c 100644
--- a/unsupported/Eigen/src/Splines/Spline.h
+++ b/unsupported/Eigen/src/Splines/Spline.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPLINE_H
 #define EIGEN_SPLINE_H
diff --git a/unsupported/Eigen/src/Splines/SplineFitting.h b/unsupported/Eigen/src/Splines/SplineFitting.h
index f6a1111..0de27da 100644
--- a/unsupported/Eigen/src/Splines/SplineFitting.h
+++ b/unsupported/Eigen/src/Splines/SplineFitting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPLINE_FITTING_H
 #define EIGEN_SPLINE_FITTING_H
diff --git a/unsupported/Eigen/src/Splines/SplineFwd.h b/unsupported/Eigen/src/Splines/SplineFwd.h
index 6c120d5..48cce13 100644
--- a/unsupported/Eigen/src/Splines/SplineFwd.h
+++ b/unsupported/Eigen/src/Splines/SplineFwd.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_SPLINES_FWD_H
 #define EIGEN_SPLINES_FWD_H
diff --git a/unsupported/Eigen/src/Tensor/InternalHeaderCheck.h b/unsupported/Eigen/src/Tensor/InternalHeaderCheck.h
index b741924..517466b 100644
--- a/unsupported/Eigen/src/Tensor/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/Tensor/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CXX11_TENSOR_MODULE_H
 #error "Please include unsupported/Eigen/Tensor instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/Tensor/Tensor.h b/unsupported/Eigen/src/Tensor/Tensor.h
index f7aca0b..f506bb9 100644
--- a/unsupported/Eigen/src/Tensor/Tensor.h
+++ b/unsupported/Eigen/src/Tensor/Tensor.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_H
 #define EIGEN_CXX11_TENSOR_TENSOR_H
diff --git a/unsupported/Eigen/src/Tensor/TensorArgMax.h b/unsupported/Eigen/src/Tensor/TensorArgMax.h
index 5d49fa9..a65d6e6 100644
--- a/unsupported/Eigen/src/Tensor/TensorArgMax.h
+++ b/unsupported/Eigen/src/Tensor/TensorArgMax.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_ARG_MAX_H
 #define EIGEN_CXX11_TENSOR_TENSOR_ARG_MAX_H
diff --git a/unsupported/Eigen/src/Tensor/TensorAssign.h b/unsupported/Eigen/src/Tensor/TensorAssign.h
index 330eae7..472783a 100644
--- a/unsupported/Eigen/src/Tensor/TensorAssign.h
+++ b/unsupported/Eigen/src/Tensor/TensorAssign.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_ASSIGN_H
 #define EIGEN_CXX11_TENSOR_TENSOR_ASSIGN_H
diff --git a/unsupported/Eigen/src/Tensor/TensorBase.h b/unsupported/Eigen/src/Tensor/TensorBase.h
index f6812d4..9890a1c 100644
--- a/unsupported/Eigen/src/Tensor/TensorBase.h
+++ b/unsupported/Eigen/src/Tensor/TensorBase.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_BASE_H
 #define EIGEN_CXX11_TENSOR_TENSOR_BASE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorBlock.h b/unsupported/Eigen/src/Tensor/TensorBlock.h
index 7fd993c..c0c9880 100644
--- a/unsupported/Eigen/src/Tensor/TensorBlock.h
+++ b/unsupported/Eigen/src/Tensor/TensorBlock.h
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_BLOCK_H
 #define EIGEN_CXX11_TENSOR_TENSOR_BLOCK_H
diff --git a/unsupported/Eigen/src/Tensor/TensorBroadcasting.h b/unsupported/Eigen/src/Tensor/TensorBroadcasting.h
index 23c0dec..113d636 100644
--- a/unsupported/Eigen/src/Tensor/TensorBroadcasting.h
+++ b/unsupported/Eigen/src/Tensor/TensorBroadcasting.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_BROADCASTING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_BROADCASTING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorChipping.h b/unsupported/Eigen/src/Tensor/TensorChipping.h
index 977f96f..0b6583c 100644
--- a/unsupported/Eigen/src/Tensor/TensorChipping.h
+++ b/unsupported/Eigen/src/Tensor/TensorChipping.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CHIPPING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CHIPPING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorConcatenation.h b/unsupported/Eigen/src/Tensor/TensorConcatenation.h
index ae8b14c..be45353 100644
--- a/unsupported/Eigen/src/Tensor/TensorConcatenation.h
+++ b/unsupported/Eigen/src/Tensor/TensorConcatenation.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONCATENATION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONCATENATION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorContraction.h b/unsupported/Eigen/src/Tensor/TensorContraction.h
index cf59a80..7bcf8a7 100644
--- a/unsupported/Eigen/src/Tensor/TensorContraction.h
+++ b/unsupported/Eigen/src/Tensor/TensorContraction.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionBlocking.h b/unsupported/Eigen/src/Tensor/TensorContractionBlocking.h
index 7fd21fb..f608bb0 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionBlocking.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionBlocking.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_BLOCKING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_BLOCKING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionCuda.h b/unsupported/Eigen/src/Tensor/TensorContractionCuda.h
index 54415af..cfab797 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionCuda.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionCuda.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(__clang__) || defined(__GNUC__)
 #warning \
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionGpu.h b/unsupported/Eigen/src/Tensor/TensorContractionGpu.h
index 79ad6c2..20e2915 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionGpu.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionGpu.h
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_GPU_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_GPU_H
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionMapper.h b/unsupported/Eigen/src/Tensor/TensorContractionMapper.h
index f11c08c..111d88e 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionMapper.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionMapper.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_MAPPER_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_MAPPER_H
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionSycl.h b/unsupported/Eigen/src/Tensor/TensorContractionSycl.h
index fb98d5b..6559350 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionSycl.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionSycl.h
@@ -7,6 +7,8 @@
 //
 // This Source Code Form is subject to the terms of the Mozilla Public License v. 2.0. If a copy of the MPL was not
 // distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * TensorContractionSycl.h
diff --git a/unsupported/Eigen/src/Tensor/TensorContractionThreadPool.h b/unsupported/Eigen/src/Tensor/TensorContractionThreadPool.h
index 2ea7136..6e72060 100644
--- a/unsupported/Eigen/src/Tensor/TensorContractionThreadPool.h
+++ b/unsupported/Eigen/src/Tensor/TensorContractionThreadPool.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_THREAD_POOL_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_THREAD_POOL_H
diff --git a/unsupported/Eigen/src/Tensor/TensorConversion.h b/unsupported/Eigen/src/Tensor/TensorConversion.h
index ccf96b7..2c256aa 100644
--- a/unsupported/Eigen/src/Tensor/TensorConversion.h
+++ b/unsupported/Eigen/src/Tensor/TensorConversion.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONVERSION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONVERSION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorConvolution.h b/unsupported/Eigen/src/Tensor/TensorConvolution.h
index edce942..f2f45ed 100644
--- a/unsupported/Eigen/src/Tensor/TensorConvolution.h
+++ b/unsupported/Eigen/src/Tensor/TensorConvolution.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONVOLUTION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CONVOLUTION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorConvolutionSycl.h b/unsupported/Eigen/src/Tensor/TensorConvolutionSycl.h
index 37cf966..e96ef6e 100644
--- a/unsupported/Eigen/src/Tensor/TensorConvolutionSycl.h
+++ b/unsupported/Eigen/src/Tensor/TensorConvolutionSycl.h
@@ -6,6 +6,7 @@
 // Luke Iwanski  Codeplay Software Ltd.
 // Contact: <eigen@codeplay.com>
 // Copyright (C) 2016 Benoit Steiner <benoit.steiner.goog@gmail.com>
+// SPDX-License-Identifier: MPL-2.0
 
 //
 // This Source Code Form is subject to the terms of the Mozilla
diff --git a/unsupported/Eigen/src/Tensor/TensorCostModel.h b/unsupported/Eigen/src/Tensor/TensorCostModel.h
index b914ac4..bc77973 100644
--- a/unsupported/Eigen/src/Tensor/TensorCostModel.h
+++ b/unsupported/Eigen/src/Tensor/TensorCostModel.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_COST_MODEL_H
 #define EIGEN_CXX11_TENSOR_TENSOR_COST_MODEL_H
diff --git a/unsupported/Eigen/src/Tensor/TensorCustomOp.h b/unsupported/Eigen/src/Tensor/TensorCustomOp.h
index 1cae60f..efac3cf 100644
--- a/unsupported/Eigen/src/Tensor/TensorCustomOp.h
+++ b/unsupported/Eigen/src/Tensor/TensorCustomOp.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CUSTOM_OP_H
 #define EIGEN_CXX11_TENSOR_TENSOR_CUSTOM_OP_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDevice.h b/unsupported/Eigen/src/Tensor/TensorDevice.h
index 1ed2089..979e339 100644
--- a/unsupported/Eigen/src/Tensor/TensorDevice.h
+++ b/unsupported/Eigen/src/Tensor/TensorDevice.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_DEVICE_H
 #define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDeviceCuda.h b/unsupported/Eigen/src/Tensor/TensorDeviceCuda.h
index bad8034..d96f66c 100644
--- a/unsupported/Eigen/src/Tensor/TensorDeviceCuda.h
+++ b/unsupported/Eigen/src/Tensor/TensorDeviceCuda.h
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(__clang__) || defined(__GNUC__)
 #warning \
diff --git a/unsupported/Eigen/src/Tensor/TensorDeviceDefault.h b/unsupported/Eigen/src/Tensor/TensorDeviceDefault.h
index 1f955f0..1772c5c 100644
--- a/unsupported/Eigen/src/Tensor/TensorDeviceDefault.h
+++ b/unsupported/Eigen/src/Tensor/TensorDeviceDefault.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_DEVICE_DEFAULT_H
 #define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_DEFAULT_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDeviceGpu.h b/unsupported/Eigen/src/Tensor/TensorDeviceGpu.h
index e0f74a6..85fdfe9 100644
--- a/unsupported/Eigen/src/Tensor/TensorDeviceGpu.h
+++ b/unsupported/Eigen/src/Tensor/TensorDeviceGpu.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_USE_GPU) && !defined(EIGEN_CXX11_TENSOR_TENSOR_DEVICE_GPU_H)
 #define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_GPU_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDeviceSycl.h b/unsupported/Eigen/src/Tensor/TensorDeviceSycl.h
index b291fed..c078736 100644
--- a/unsupported/Eigen/src/Tensor/TensorDeviceSycl.h
+++ b/unsupported/Eigen/src/Tensor/TensorDeviceSycl.h
@@ -6,6 +6,7 @@
 // Luke Iwanski  Codeplay Software Ltd.
 // Contact: <eigen@codeplay.com>
 // Copyright (C) 2016 Benoit Steiner <benoit.steiner.goog@gmail.com>
+// SPDX-License-Identifier: MPL-2.0
 
 //
 // This Source Code Form is subject to the terms of the Mozilla
diff --git a/unsupported/Eigen/src/Tensor/TensorDeviceThreadPool.h b/unsupported/Eigen/src/Tensor/TensorDeviceThreadPool.h
index dacf93d..b12ca9d 100644
--- a/unsupported/Eigen/src/Tensor/TensorDeviceThreadPool.h
+++ b/unsupported/Eigen/src/Tensor/TensorDeviceThreadPool.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #if defined(EIGEN_USE_THREADS) && !defined(EIGEN_CXX11_TENSOR_TENSOR_DEVICE_THREAD_POOL_H)
 #define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_THREAD_POOL_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDimensionList.h b/unsupported/Eigen/src/Tensor/TensorDimensionList.h
index 249d248..90f0d9e 100644
--- a/unsupported/Eigen/src/Tensor/TensorDimensionList.h
+++ b/unsupported/Eigen/src/Tensor/TensorDimensionList.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H
 #define EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H
diff --git a/unsupported/Eigen/src/Tensor/TensorDimensions.h b/unsupported/Eigen/src/Tensor/TensorDimensions.h
index 3dd8415..55dde46 100644
--- a/unsupported/Eigen/src/Tensor/TensorDimensions.h
+++ b/unsupported/Eigen/src/Tensor/TensorDimensions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorEvalTo.h b/unsupported/Eigen/src/Tensor/TensorEvalTo.h
index 9c83fad..e3b257f 100644
--- a/unsupported/Eigen/src/Tensor/TensorEvalTo.h
+++ b/unsupported/Eigen/src/Tensor/TensorEvalTo.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_EVAL_TO_H
 #define EIGEN_CXX11_TENSOR_TENSOR_EVAL_TO_H
diff --git a/unsupported/Eigen/src/Tensor/TensorEvaluator.h b/unsupported/Eigen/src/Tensor/TensorEvaluator.h
index 8f50171..7b6974c 100644
--- a/unsupported/Eigen/src/Tensor/TensorEvaluator.h
+++ b/unsupported/Eigen/src/Tensor/TensorEvaluator.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H
 #define EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H
diff --git a/unsupported/Eigen/src/Tensor/TensorExecutor.h b/unsupported/Eigen/src/Tensor/TensorExecutor.h
index 2ae0b27..b73c9a6 100644
--- a/unsupported/Eigen/src/Tensor/TensorExecutor.h
+++ b/unsupported/Eigen/src/Tensor/TensorExecutor.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_EXECUTOR_H
 #define EIGEN_CXX11_TENSOR_TENSOR_EXECUTOR_H
diff --git a/unsupported/Eigen/src/Tensor/TensorExpr.h b/unsupported/Eigen/src/Tensor/TensorExpr.h
index 108bc92..8fc4a8e 100644
--- a/unsupported/Eigen/src/Tensor/TensorExpr.h
+++ b/unsupported/Eigen/src/Tensor/TensorExpr.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_EXPR_H
 #define EIGEN_CXX11_TENSOR_TENSOR_EXPR_H
diff --git a/unsupported/Eigen/src/Tensor/TensorFFT.h b/unsupported/Eigen/src/Tensor/TensorFFT.h
index 2cffdae..9887371 100644
--- a/unsupported/Eigen/src/Tensor/TensorFFT.h
+++ b/unsupported/Eigen/src/Tensor/TensorFFT.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_FFT_H
 #define EIGEN_CXX11_TENSOR_TENSOR_FFT_H
diff --git a/unsupported/Eigen/src/Tensor/TensorFixedSize.h b/unsupported/Eigen/src/Tensor/TensorFixedSize.h
index 40f2037..d626e05 100644
--- a/unsupported/Eigen/src/Tensor/TensorFixedSize.h
+++ b/unsupported/Eigen/src/Tensor/TensorFixedSize.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_FIXED_SIZE_H
 #define EIGEN_CXX11_TENSOR_TENSOR_FIXED_SIZE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorForcedEval.h b/unsupported/Eigen/src/Tensor/TensorForcedEval.h
index e945dad..6364912 100644
--- a/unsupported/Eigen/src/Tensor/TensorForcedEval.h
+++ b/unsupported/Eigen/src/Tensor/TensorForcedEval.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_FORCED_EVAL_H
 #define EIGEN_CXX11_TENSOR_TENSOR_FORCED_EVAL_H
diff --git a/unsupported/Eigen/src/Tensor/TensorForwardDeclarations.h b/unsupported/Eigen/src/Tensor/TensorForwardDeclarations.h
index 29ea1da..3014992 100644
--- a/unsupported/Eigen/src/Tensor/TensorForwardDeclarations.h
+++ b/unsupported/Eigen/src/Tensor/TensorForwardDeclarations.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_FORWARD_DECLARATIONS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_FORWARD_DECLARATIONS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorFunctors.h b/unsupported/Eigen/src/Tensor/TensorFunctors.h
index 7a87594..50a65ed 100644
--- a/unsupported/Eigen/src/Tensor/TensorFunctors.h
+++ b/unsupported/Eigen/src/Tensor/TensorFunctors.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_FUNCTORS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_FUNCTORS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorGenerator.h b/unsupported/Eigen/src/Tensor/TensorGenerator.h
index d1fd0b0..90d9473 100644
--- a/unsupported/Eigen/src/Tensor/TensorGenerator.h
+++ b/unsupported/Eigen/src/Tensor/TensorGenerator.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_GENERATOR_H
 #define EIGEN_CXX11_TENSOR_TENSOR_GENERATOR_H
diff --git a/unsupported/Eigen/src/Tensor/TensorGlobalFunctions.h b/unsupported/Eigen/src/Tensor/TensorGlobalFunctions.h
index 7ed0cb0..5fb0251 100644
--- a/unsupported/Eigen/src/Tensor/TensorGlobalFunctions.h
+++ b/unsupported/Eigen/src/Tensor/TensorGlobalFunctions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_GLOBAL_FUNCTIONS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_GLOBAL_FUNCTIONS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorIO.h b/unsupported/Eigen/src/Tensor/TensorIO.h
index 0bdb1ab..7e3ae65 100644
--- a/unsupported/Eigen/src/Tensor/TensorIO.h
+++ b/unsupported/Eigen/src/Tensor/TensorIO.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_IO_H
 #define EIGEN_CXX11_TENSOR_TENSOR_IO_H
diff --git a/unsupported/Eigen/src/Tensor/TensorImagePatch.h b/unsupported/Eigen/src/Tensor/TensorImagePatch.h
index 0a8624d..110a832 100644
--- a/unsupported/Eigen/src/Tensor/TensorImagePatch.h
+++ b/unsupported/Eigen/src/Tensor/TensorImagePatch.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_IMAGE_PATCH_H
 #define EIGEN_CXX11_TENSOR_TENSOR_IMAGE_PATCH_H
diff --git a/unsupported/Eigen/src/Tensor/TensorIndexList.h b/unsupported/Eigen/src/Tensor/TensorIndexList.h
index 3fdb231..aaae4d3 100644
--- a/unsupported/Eigen/src/Tensor/TensorIndexList.h
+++ b/unsupported/Eigen/src/Tensor/TensorIndexList.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_INDEX_LIST_H
 #define EIGEN_CXX11_TENSOR_TENSOR_INDEX_LIST_H
diff --git a/unsupported/Eigen/src/Tensor/TensorInflation.h b/unsupported/Eigen/src/Tensor/TensorInflation.h
index 74a53be..f8c8787 100644
--- a/unsupported/Eigen/src/Tensor/TensorInflation.h
+++ b/unsupported/Eigen/src/Tensor/TensorInflation.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_INFLATION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_INFLATION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorInitializer.h b/unsupported/Eigen/src/Tensor/TensorInitializer.h
index 579caac..4232aa7 100644
--- a/unsupported/Eigen/src/Tensor/TensorInitializer.h
+++ b/unsupported/Eigen/src/Tensor/TensorInitializer.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_INITIALIZER_H
 #define EIGEN_CXX11_TENSOR_TENSOR_INITIALIZER_H
diff --git a/unsupported/Eigen/src/Tensor/TensorIntDiv.h b/unsupported/Eigen/src/Tensor/TensorIntDiv.h
index ed25646..f6cca7f 100644
--- a/unsupported/Eigen/src/Tensor/TensorIntDiv.h
+++ b/unsupported/Eigen/src/Tensor/TensorIntDiv.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_INTDIV_H
 #define EIGEN_CXX11_TENSOR_TENSOR_INTDIV_H
diff --git a/unsupported/Eigen/src/Tensor/TensorLayoutSwap.h b/unsupported/Eigen/src/Tensor/TensorLayoutSwap.h
index 50bb5ec..753325b 100644
--- a/unsupported/Eigen/src/Tensor/TensorLayoutSwap.h
+++ b/unsupported/Eigen/src/Tensor/TensorLayoutSwap.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_LAYOUT_SWAP_H
 #define EIGEN_CXX11_TENSOR_TENSOR_LAYOUT_SWAP_H
diff --git a/unsupported/Eigen/src/Tensor/TensorMacros.h b/unsupported/Eigen/src/Tensor/TensorMacros.h
index 7ab1c4d..fb8a17d 100644
--- a/unsupported/Eigen/src/Tensor/TensorMacros.h
+++ b/unsupported/Eigen/src/Tensor/TensorMacros.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_META_MACROS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_META_MACROS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorMap.h b/unsupported/Eigen/src/Tensor/TensorMap.h
index 548edfe..fcecaf6 100644
--- a/unsupported/Eigen/src/Tensor/TensorMap.h
+++ b/unsupported/Eigen/src/Tensor/TensorMap.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_MAP_H
 #define EIGEN_CXX11_TENSOR_TENSOR_MAP_H
diff --git a/unsupported/Eigen/src/Tensor/TensorMeta.h b/unsupported/Eigen/src/Tensor/TensorMeta.h
index 5dd0145..47ae08d 100644
--- a/unsupported/Eigen/src/Tensor/TensorMeta.h
+++ b/unsupported/Eigen/src/Tensor/TensorMeta.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_META_H
 #define EIGEN_CXX11_TENSOR_TENSOR_META_H
diff --git a/unsupported/Eigen/src/Tensor/TensorMorphing.h b/unsupported/Eigen/src/Tensor/TensorMorphing.h
index 1ccf414..943967a 100644
--- a/unsupported/Eigen/src/Tensor/TensorMorphing.h
+++ b/unsupported/Eigen/src/Tensor/TensorMorphing.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorPadding.h b/unsupported/Eigen/src/Tensor/TensorPadding.h
index fbcd781..ca62c79 100644
--- a/unsupported/Eigen/src/Tensor/TensorPadding.h
+++ b/unsupported/Eigen/src/Tensor/TensorPadding.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_PADDING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_PADDING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorPatch.h b/unsupported/Eigen/src/Tensor/TensorPatch.h
index 6e767a7..5c332e6 100644
--- a/unsupported/Eigen/src/Tensor/TensorPatch.h
+++ b/unsupported/Eigen/src/Tensor/TensorPatch.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_PATCH_H
 #define EIGEN_CXX11_TENSOR_TENSOR_PATCH_H
diff --git a/unsupported/Eigen/src/Tensor/TensorRandom.h b/unsupported/Eigen/src/Tensor/TensorRandom.h
index ffda20a..85ba673 100644
--- a/unsupported/Eigen/src/Tensor/TensorRandom.h
+++ b/unsupported/Eigen/src/Tensor/TensorRandom.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_RANDOM_H
 #define EIGEN_CXX11_TENSOR_TENSOR_RANDOM_H
diff --git a/unsupported/Eigen/src/Tensor/TensorReduction.h b/unsupported/Eigen/src/Tensor/TensorReduction.h
index 751516e..ab33a08 100644
--- a/unsupported/Eigen/src/Tensor/TensorReduction.h
+++ b/unsupported/Eigen/src/Tensor/TensorReduction.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_REDUCTION_H
 #define EIGEN_CXX11_TENSOR_TENSOR_REDUCTION_H
diff --git a/unsupported/Eigen/src/Tensor/TensorReductionGpu.h b/unsupported/Eigen/src/Tensor/TensorReductionGpu.h
index 61910e3..85d30a2 100644
--- a/unsupported/Eigen/src/Tensor/TensorReductionGpu.h
+++ b/unsupported/Eigen/src/Tensor/TensorReductionGpu.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_REDUCTION_GPU_H
 #define EIGEN_CXX11_TENSOR_TENSOR_REDUCTION_GPU_H
diff --git a/unsupported/Eigen/src/Tensor/TensorReductionSycl.h b/unsupported/Eigen/src/Tensor/TensorReductionSycl.h
index 2b5b734..49b87ad 100644
--- a/unsupported/Eigen/src/Tensor/TensorReductionSycl.h
+++ b/unsupported/Eigen/src/Tensor/TensorReductionSycl.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * TensorReductionSycl.h
diff --git a/unsupported/Eigen/src/Tensor/TensorRef.h b/unsupported/Eigen/src/Tensor/TensorRef.h
index d0df443..df77f11 100644
--- a/unsupported/Eigen/src/Tensor/TensorRef.h
+++ b/unsupported/Eigen/src/Tensor/TensorRef.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_REF_H
 #define EIGEN_CXX11_TENSOR_TENSOR_REF_H
diff --git a/unsupported/Eigen/src/Tensor/TensorReverse.h b/unsupported/Eigen/src/Tensor/TensorReverse.h
index 158eac4..771e6f2 100644
--- a/unsupported/Eigen/src/Tensor/TensorReverse.h
+++ b/unsupported/Eigen/src/Tensor/TensorReverse.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_REVERSE_H
 #define EIGEN_CXX11_TENSOR_TENSOR_REVERSE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorRoll.h b/unsupported/Eigen/src/Tensor/TensorRoll.h
index 2184b4d..aacf043 100644
--- a/unsupported/Eigen/src/Tensor/TensorRoll.h
+++ b/unsupported/Eigen/src/Tensor/TensorRoll.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_ROLL_H
 #define EIGEN_CXX11_TENSOR_TENSOR_ROLL_H
diff --git a/unsupported/Eigen/src/Tensor/TensorScan.h b/unsupported/Eigen/src/Tensor/TensorScan.h
index bf99601..e1dccfb 100644
--- a/unsupported/Eigen/src/Tensor/TensorScan.h
+++ b/unsupported/Eigen/src/Tensor/TensorScan.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_SCAN_H
 #define EIGEN_CXX11_TENSOR_TENSOR_SCAN_H
diff --git a/unsupported/Eigen/src/Tensor/TensorScanSycl.h b/unsupported/Eigen/src/Tensor/TensorScanSycl.h
index f08b83a..7af82f4 100644
--- a/unsupported/Eigen/src/Tensor/TensorScanSycl.h
+++ b/unsupported/Eigen/src/Tensor/TensorScanSycl.h
@@ -9,6 +9,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 /*****************************************************************
  * TensorScanSycl.h
diff --git a/unsupported/Eigen/src/Tensor/TensorShuffling.h b/unsupported/Eigen/src/Tensor/TensorShuffling.h
index a9649e6..5c30ec2 100644
--- a/unsupported/Eigen/src/Tensor/TensorShuffling.h
+++ b/unsupported/Eigen/src/Tensor/TensorShuffling.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_SHUFFLING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_SHUFFLING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorStorage.h b/unsupported/Eigen/src/Tensor/TensorStorage.h
index 74a3882..a133ccf 100644
--- a/unsupported/Eigen/src/Tensor/TensorStorage.h
+++ b/unsupported/Eigen/src/Tensor/TensorStorage.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSORSTORAGE_H
 #define EIGEN_CXX11_TENSOR_TENSORSTORAGE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorStriding.h b/unsupported/Eigen/src/Tensor/TensorStriding.h
index eee7c9b..696664b 100644
--- a/unsupported/Eigen/src/Tensor/TensorStriding.h
+++ b/unsupported/Eigen/src/Tensor/TensorStriding.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_STRIDING_H
 #define EIGEN_CXX11_TENSOR_TENSOR_STRIDING_H
diff --git a/unsupported/Eigen/src/Tensor/TensorTrace.h b/unsupported/Eigen/src/Tensor/TensorTrace.h
index 5357a48..419b60b 100644
--- a/unsupported/Eigen/src/Tensor/TensorTrace.h
+++ b/unsupported/Eigen/src/Tensor/TensorTrace.h
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_TRACE_H
 #define EIGEN_CXX11_TENSOR_TENSOR_TRACE_H
diff --git a/unsupported/Eigen/src/Tensor/TensorTraits.h b/unsupported/Eigen/src/Tensor/TensorTraits.h
index 5c97d52..2ed1457 100644
--- a/unsupported/Eigen/src/Tensor/TensorTraits.h
+++ b/unsupported/Eigen/src/Tensor/TensorTraits.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_TRAITS_H
 #define EIGEN_CXX11_TENSOR_TENSOR_TRAITS_H
diff --git a/unsupported/Eigen/src/Tensor/TensorUInt128.h b/unsupported/Eigen/src/Tensor/TensorUInt128.h
index 00d7ec2..87d23c4 100644
--- a/unsupported/Eigen/src/Tensor/TensorUInt128.h
+++ b/unsupported/Eigen/src/Tensor/TensorUInt128.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_UINT128_H
 #define EIGEN_CXX11_TENSOR_TENSOR_UINT128_H
diff --git a/unsupported/Eigen/src/Tensor/TensorVolumePatch.h b/unsupported/Eigen/src/Tensor/TensorVolumePatch.h
index 61e8b04..0516419 100644
--- a/unsupported/Eigen/src/Tensor/TensorVolumePatch.h
+++ b/unsupported/Eigen/src/Tensor/TensorVolumePatch.h
@@ -1,5 +1,7 @@
 // This file is part of Eigen, a lightweight C++ template library
 // for linear algebra.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSOR_TENSOR_VOLUME_PATCH_H
 #define EIGEN_CXX11_TENSOR_TENSOR_VOLUME_PATCH_H
diff --git a/unsupported/Eigen/src/TensorSymmetry/DynamicSymmetry.h b/unsupported/Eigen/src/TensorSymmetry/DynamicSymmetry.h
index 3d50bc0..33d98ac 100644
--- a/unsupported/Eigen/src/TensorSymmetry/DynamicSymmetry.h
+++ b/unsupported/Eigen/src/TensorSymmetry/DynamicSymmetry.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_DYNAMICSYMMETRY_H
 #define EIGEN_CXX11_TENSORSYMMETRY_DYNAMICSYMMETRY_H
diff --git a/unsupported/Eigen/src/TensorSymmetry/InternalHeaderCheck.h b/unsupported/Eigen/src/TensorSymmetry/InternalHeaderCheck.h
index c7f5992..1ddc070 100644
--- a/unsupported/Eigen/src/TensorSymmetry/InternalHeaderCheck.h
+++ b/unsupported/Eigen/src/TensorSymmetry/InternalHeaderCheck.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_MODULE_H
 #error "Please include unsupported/Eigen/TensorSymmetry instead of including headers inside the src directory directly."
 #endif
diff --git a/unsupported/Eigen/src/TensorSymmetry/StaticSymmetry.h b/unsupported/Eigen/src/TensorSymmetry/StaticSymmetry.h
index 6ee508f..0deda1c 100644
--- a/unsupported/Eigen/src/TensorSymmetry/StaticSymmetry.h
+++ b/unsupported/Eigen/src/TensorSymmetry/StaticSymmetry.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_STATICSYMMETRY_H
 #define EIGEN_CXX11_TENSORSYMMETRY_STATICSYMMETRY_H
diff --git a/unsupported/Eigen/src/TensorSymmetry/Symmetry.h b/unsupported/Eigen/src/TensorSymmetry/Symmetry.h
index b750217..0d642d2 100644
--- a/unsupported/Eigen/src/TensorSymmetry/Symmetry.h
+++ b/unsupported/Eigen/src/TensorSymmetry/Symmetry.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_SYMMETRY_H
 #define EIGEN_CXX11_TENSORSYMMETRY_SYMMETRY_H
diff --git a/unsupported/Eigen/src/TensorSymmetry/util/TemplateGroupTheory.h b/unsupported/Eigen/src/TensorSymmetry/util/TemplateGroupTheory.h
index df8da6c..9ec6c08 100644
--- a/unsupported/Eigen/src/TensorSymmetry/util/TemplateGroupTheory.h
+++ b/unsupported/Eigen/src/TensorSymmetry/util/TemplateGroupTheory.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11_TENSORSYMMETRY_TEMPLATEGROUPTHEORY_H
 #define EIGEN_CXX11_TENSORSYMMETRY_TEMPLATEGROUPTHEORY_H
diff --git a/unsupported/Eigen/src/TensorUtil/CXX11Meta.h b/unsupported/Eigen/src/TensorUtil/CXX11Meta.h
index f836cd1..995a4f5 100644
--- a/unsupported/Eigen/src/TensorUtil/CXX11Meta.h
+++ b/unsupported/Eigen/src/TensorUtil/CXX11Meta.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11META_H
 #define EIGEN_CXX11META_H
diff --git a/unsupported/Eigen/src/TensorUtil/CXX11Workarounds.h b/unsupported/Eigen/src/TensorUtil/CXX11Workarounds.h
index ffc198c..8142175 100644
--- a/unsupported/Eigen/src/TensorUtil/CXX11Workarounds.h
+++ b/unsupported/Eigen/src/TensorUtil/CXX11Workarounds.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifndef EIGEN_CXX11WORKAROUNDS_H
 #define EIGEN_CXX11WORKAROUNDS_H
diff --git a/unsupported/benchmarks/AutoDiff/CMakeLists.txt b/unsupported/benchmarks/AutoDiff/CMakeLists.txt
index cb5b986..00230d9 100644
--- a/unsupported/benchmarks/AutoDiff/CMakeLists.txt
+++ b/unsupported/benchmarks/AutoDiff/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_autodiff bench_autodiff.cpp)
diff --git a/unsupported/benchmarks/AutoDiff/bench_autodiff.cpp b/unsupported/benchmarks/AutoDiff/bench_autodiff.cpp
index 74c334f..a77be78 100644
--- a/unsupported/benchmarks/AutoDiff/bench_autodiff.cpp
+++ b/unsupported/benchmarks/AutoDiff/bench_autodiff.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen AutoDiff module.
 // Compares AutoDiff Jacobian computation against NumericalDiff and hand-coded Jacobians.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/CMakeLists.txt b/unsupported/benchmarks/CMakeLists.txt
index d8b9fcd..b0488ac 100644
--- a/unsupported/benchmarks/CMakeLists.txt
+++ b/unsupported/benchmarks/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 cmake_minimum_required(VERSION 3.10)
 project(EigenUnsupportedBenchmarks CXX)
 
diff --git a/unsupported/benchmarks/GPU/CMakeLists.txt b/unsupported/benchmarks/GPU/CMakeLists.txt
index 2c3511f..5447154 100644
--- a/unsupported/benchmarks/GPU/CMakeLists.txt
+++ b/unsupported/benchmarks/GPU/CMakeLists.txt
@@ -9,6 +9,8 @@
 # Profiling:
 #   nsys profile --trace=cuda ./build-bench-gpu/bench_solvers
 #   ncu --set full -o profile ./build-bench-gpu/bench_solvers --benchmark_filter=BM_GpuLLT_Compute/4096
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 cmake_minimum_required(VERSION 3.17)
 project(EigenGpuBenchmarks CXX)
diff --git a/unsupported/benchmarks/GPU/bench_batching.cpp b/unsupported/benchmarks/GPU/bench_batching.cpp
index f9cabc5..67c3e3b 100644
--- a/unsupported/benchmarks/GPU/bench_batching.cpp
+++ b/unsupported/benchmarks/GPU/bench_batching.cpp
@@ -13,6 +13,8 @@
 // different streams in the timeline view.
 //
 //   nsys profile --trace=cuda ./bench_batching
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 
diff --git a/unsupported/benchmarks/GPU/bench_chaining.cpp b/unsupported/benchmarks/GPU/bench_chaining.cpp
index 323d8b2..60a4f2f 100644
--- a/unsupported/benchmarks/GPU/bench_chaining.cpp
+++ b/unsupported/benchmarks/GPU/bench_chaining.cpp
@@ -9,6 +9,8 @@
 // Host round-trip creates visible idle gaps; chaining should show back-to-back kernels.
 //
 //   nsys profile --trace=cuda,nvtx ./bench_chaining
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 
diff --git a/unsupported/benchmarks/GPU/bench_solvers.cpp b/unsupported/benchmarks/GPU/bench_solvers.cpp
index 61d86ce..7e0952e 100644
--- a/unsupported/benchmarks/GPU/bench_solvers.cpp
+++ b/unsupported/benchmarks/GPU/bench_solvers.cpp
@@ -8,6 +8,8 @@
 //
 // For Nsight Compute kernel analysis:
 //   ncu --set full -o profile ./bench_solvers --benchmark_filter=BM_GpuLLT_Compute/4096
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 
diff --git a/unsupported/benchmarks/IterativeSolvers/CMakeLists.txt b/unsupported/benchmarks/IterativeSolvers/CMakeLists.txt
index 4ae536a..479948f 100644
--- a/unsupported/benchmarks/IterativeSolvers/CMakeLists.txt
+++ b/unsupported/benchmarks/IterativeSolvers/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_iterative_solvers bench_iterative_solvers.cpp)
diff --git a/unsupported/benchmarks/IterativeSolvers/bench_iterative_solvers.cpp b/unsupported/benchmarks/IterativeSolvers/bench_iterative_solvers.cpp
index 8027a6d..e0435ae 100644
--- a/unsupported/benchmarks/IterativeSolvers/bench_iterative_solvers.cpp
+++ b/unsupported/benchmarks/IterativeSolvers/bench_iterative_solvers.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for unsupported iterative solvers: GMRES, MINRES, IDRS, IDRSTABL, BiCGSTABL, DGMRES.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Sparse>
diff --git a/unsupported/benchmarks/KroneckerProduct/CMakeLists.txt b/unsupported/benchmarks/KroneckerProduct/CMakeLists.txt
index ff0d289..b72f8ca 100644
--- a/unsupported/benchmarks/KroneckerProduct/CMakeLists.txt
+++ b/unsupported/benchmarks/KroneckerProduct/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_kronecker bench_kronecker.cpp)
diff --git a/unsupported/benchmarks/KroneckerProduct/bench_kronecker.cpp b/unsupported/benchmarks/KroneckerProduct/bench_kronecker.cpp
index 2ad7fed..fdc2db8 100644
--- a/unsupported/benchmarks/KroneckerProduct/bench_kronecker.cpp
+++ b/unsupported/benchmarks/KroneckerProduct/bench_kronecker.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Kronecker product (dense and sparse).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/MatrixFunctions/CMakeLists.txt b/unsupported/benchmarks/MatrixFunctions/CMakeLists.txt
index 2a612ed..9b0ea7c 100644
--- a/unsupported/benchmarks/MatrixFunctions/CMakeLists.txt
+++ b/unsupported/benchmarks/MatrixFunctions/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_matrix_exponential bench_matrix_exponential.cpp)
 eigen_add_benchmark(bench_matrix_logarithm bench_matrix_logarithm.cpp)
 eigen_add_benchmark(bench_matrix_power bench_matrix_power.cpp)
diff --git a/unsupported/benchmarks/MatrixFunctions/bench_matrix_exponential.cpp b/unsupported/benchmarks/MatrixFunctions/bench_matrix_exponential.cpp
index 3778b76..9ee8787 100644
--- a/unsupported/benchmarks/MatrixFunctions/bench_matrix_exponential.cpp
+++ b/unsupported/benchmarks/MatrixFunctions/bench_matrix_exponential.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for matrix exponential.
 // Critical for Sophus Lie group operations (SLAM, visual odometry).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/MatrixFunctions/bench_matrix_logarithm.cpp b/unsupported/benchmarks/MatrixFunctions/bench_matrix_logarithm.cpp
index 4d1c8ea..456f668 100644
--- a/unsupported/benchmarks/MatrixFunctions/bench_matrix_logarithm.cpp
+++ b/unsupported/benchmarks/MatrixFunctions/bench_matrix_logarithm.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for matrix logarithm.
 // Inverse of matrix exponential, used for Lie group log maps.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/MatrixFunctions/bench_matrix_power.cpp b/unsupported/benchmarks/MatrixFunctions/bench_matrix_power.cpp
index 5666937..448271c 100644
--- a/unsupported/benchmarks/MatrixFunctions/bench_matrix_power.cpp
+++ b/unsupported/benchmarks/MatrixFunctions/bench_matrix_power.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for matrix power functions: sqrt, pow, cos, sin, cosh, sinh.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/SpecialFunctions/CMakeLists.txt b/unsupported/benchmarks/SpecialFunctions/CMakeLists.txt
index a673413..c8e9934 100644
--- a/unsupported/benchmarks/SpecialFunctions/CMakeLists.txt
+++ b/unsupported/benchmarks/SpecialFunctions/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_special_functions bench_special_functions.cpp)
diff --git a/unsupported/benchmarks/SpecialFunctions/bench_special_functions.cpp b/unsupported/benchmarks/SpecialFunctions/bench_special_functions.cpp
index 859e41f..9a132e0 100644
--- a/unsupported/benchmarks/SpecialFunctions/bench_special_functions.cpp
+++ b/unsupported/benchmarks/SpecialFunctions/bench_special_functions.cpp
@@ -1,6 +1,8 @@
 // Benchmarks for special functions beyond what bench_cwise_math.cpp covers.
 // Includes Bessel functions, two-argument functions (igamma, betainc),
 // and additional functions (lgamma, digamma, zeta, polygamma).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/Splines/CMakeLists.txt b/unsupported/benchmarks/Splines/CMakeLists.txt
index a54acc4..2fa9d2a 100644
--- a/unsupported/benchmarks/Splines/CMakeLists.txt
+++ b/unsupported/benchmarks/Splines/CMakeLists.txt
@@ -1 +1,4 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_splines bench_splines.cpp)
diff --git a/unsupported/benchmarks/Splines/bench_splines.cpp b/unsupported/benchmarks/Splines/bench_splines.cpp
index 852f1c0..af90276 100644
--- a/unsupported/benchmarks/Splines/bench_splines.cpp
+++ b/unsupported/benchmarks/Splines/bench_splines.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen Spline module.
 // Tests fitting, evaluation, and derivative computation.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <Eigen/Core>
diff --git a/unsupported/benchmarks/Tensor/CMakeLists.txt b/unsupported/benchmarks/Tensor/CMakeLists.txt
index 1c57b1e..276137e 100644
--- a/unsupported/benchmarks/Tensor/CMakeLists.txt
+++ b/unsupported/benchmarks/Tensor/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 eigen_add_benchmark(bench_contraction bench_contraction.cpp)
 eigen_add_benchmark(bench_convolution bench_convolution.cpp)
 eigen_add_benchmark(bench_reduction bench_reduction.cpp)
diff --git a/unsupported/benchmarks/Tensor/bench_broadcasting.cpp b/unsupported/benchmarks/Tensor/bench_broadcasting.cpp
index 6900535..3ada0e3 100644
--- a/unsupported/benchmarks/Tensor/bench_broadcasting.cpp
+++ b/unsupported/benchmarks/Tensor/bench_broadcasting.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen Tensor broadcasting.
 // Tests broadcasting along various dimensions and ranks.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_chained_expressions.cpp b/unsupported/benchmarks/Tensor/bench_chained_expressions.cpp
index b6a9a34..2ae08e3 100644
--- a/unsupported/benchmarks/Tensor/bench_chained_expressions.cpp
+++ b/unsupported/benchmarks/Tensor/bench_chained_expressions.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for chained tensor expressions with ThreadPool.
 // Tests realistic compound expressions spanning memory-bound to compute-bound.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_coefficient_wise.cpp b/unsupported/benchmarks/Tensor/bench_coefficient_wise.cpp
index df8bb11..9ac5453 100644
--- a/unsupported/benchmarks/Tensor/bench_coefficient_wise.cpp
+++ b/unsupported/benchmarks/Tensor/bench_coefficient_wise.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen Tensor coefficient-wise operations.
 // Covers activation functions, normalization, and element-wise arithmetic.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_contraction.cpp b/unsupported/benchmarks/Tensor/bench_contraction.cpp
index 9b1b45d..d38207a 100644
--- a/unsupported/benchmarks/Tensor/bench_contraction.cpp
+++ b/unsupported/benchmarks/Tensor/bench_contraction.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen Tensor contraction (generalized GEMM).
 // Tests single-threaded (DefaultDevice) and multi-threaded (ThreadPoolDevice) variants.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_convolution.cpp b/unsupported/benchmarks/Tensor/bench_convolution.cpp
index c6a1384..6d5f836 100644
--- a/unsupported/benchmarks/Tensor/bench_convolution.cpp
+++ b/unsupported/benchmarks/Tensor/bench_convolution.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen Tensor convolution (1D and 2D).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_image_patch.cpp b/unsupported/benchmarks/Tensor/bench_image_patch.cpp
index fb8a113..d82fe16 100644
--- a/unsupported/benchmarks/Tensor/bench_image_patch.cpp
+++ b/unsupported/benchmarks/Tensor/bench_image_patch.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen TensorImagePatch extraction.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_layout_swap.cpp b/unsupported/benchmarks/Tensor/bench_layout_swap.cpp
index c51d1de..029bd53 100644
--- a/unsupported/benchmarks/Tensor/bench_layout_swap.cpp
+++ b/unsupported/benchmarks/Tensor/bench_layout_swap.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen TensorLayoutSwap.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <unsupported/Eigen/CXX11/Tensor>
diff --git a/unsupported/benchmarks/Tensor/bench_morphing.cpp b/unsupported/benchmarks/Tensor/bench_morphing.cpp
index fa2b5f2..438a71c 100644
--- a/unsupported/benchmarks/Tensor/bench_morphing.cpp
+++ b/unsupported/benchmarks/Tensor/bench_morphing.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen Tensor morphing operations: reshape, slice, chip, pad, stride.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_reduction.cpp b/unsupported/benchmarks/Tensor/bench_reduction.cpp
index cc7f5ce..7304e96 100644
--- a/unsupported/benchmarks/Tensor/bench_reduction.cpp
+++ b/unsupported/benchmarks/Tensor/bench_reduction.cpp
@@ -1,5 +1,7 @@
 // Benchmarks for Eigen Tensor reductions (sum, maximum, mean).
 // Tests full and partial reductions, inner vs outer dimension, DefaultDevice and ThreadPoolDevice.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_reverse.cpp b/unsupported/benchmarks/Tensor/bench_reverse.cpp
index 999266c..69292e8 100644
--- a/unsupported/benchmarks/Tensor/bench_reverse.cpp
+++ b/unsupported/benchmarks/Tensor/bench_reverse.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen TensorReverse.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <unsupported/Eigen/CXX11/Tensor>
diff --git a/unsupported/benchmarks/Tensor/bench_roll.cpp b/unsupported/benchmarks/Tensor/bench_roll.cpp
index 6724374..0205382 100644
--- a/unsupported/benchmarks/Tensor/bench_roll.cpp
+++ b/unsupported/benchmarks/Tensor/bench_roll.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen TensorRoll.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <unsupported/Eigen/CXX11/Tensor>
diff --git a/unsupported/benchmarks/Tensor/bench_shuffling.cpp b/unsupported/benchmarks/Tensor/bench_shuffling.cpp
index b824676..f10ff9c 100644
--- a/unsupported/benchmarks/Tensor/bench_shuffling.cpp
+++ b/unsupported/benchmarks/Tensor/bench_shuffling.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen Tensor shuffling (transpose / permutation).
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/benchmarks/Tensor/bench_tensor_fft.cpp b/unsupported/benchmarks/Tensor/bench_tensor_fft.cpp
index 39850eb..cfd69d2 100644
--- a/unsupported/benchmarks/Tensor/bench_tensor_fft.cpp
+++ b/unsupported/benchmarks/Tensor/bench_tensor_fft.cpp
@@ -1,4 +1,6 @@
 // Benchmarks for Eigen Tensor FFT.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #include <benchmark/benchmark.h>
 #include <unsupported/Eigen/CXX11/Tensor>
diff --git a/unsupported/doc/CMakeLists.txt b/unsupported/doc/CMakeLists.txt
index 9e9ab98..b1d43d4 100644
--- a/unsupported/doc/CMakeLists.txt
+++ b/unsupported/doc/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE)
 
 add_subdirectory(examples)
diff --git a/unsupported/doc/examples/BVH_Example.cpp b/unsupported/doc/examples/BVH_Example.cpp
index 8c37d71..1f5e401 100644
--- a/unsupported/doc/examples/BVH_Example.cpp
+++ b/unsupported/doc/examples/BVH_Example.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <Eigen/StdVector>
 #include <unsupported/Eigen/BVH>
 #include <iostream>
diff --git a/unsupported/doc/examples/CMakeLists.txt b/unsupported/doc/examples/CMakeLists.txt
index 74f36eb..301e799 100644
--- a/unsupported/doc/examples/CMakeLists.txt
+++ b/unsupported/doc/examples/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(GLOB examples_SRCS "*.cpp")
 
 add_custom_target(unsupported_examples)
diff --git a/unsupported/doc/examples/EulerAngles.cpp b/unsupported/doc/examples/EulerAngles.cpp
index 5694770..e417b31 100644
--- a/unsupported/doc/examples/EulerAngles.cpp
+++ b/unsupported/doc/examples/EulerAngles.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/EulerAngles>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/FFT.cpp b/unsupported/doc/examples/FFT.cpp
index bf24de5..56bb830 100644
--- a/unsupported/doc/examples/FFT.cpp
+++ b/unsupported/doc/examples/FFT.cpp
@@ -1,5 +1,7 @@
 //  To use the simple FFT implementation
 //  g++ -o demofft -I.. -Wall -O3 FFT.cpp
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 //  To use the FFTW implementation
 //  g++ -o demofft -I.. -DUSE_FFTW -Wall -O3 FFT.cpp -lfftw3 -lfftw3f -lfftw3l
diff --git a/unsupported/doc/examples/MatrixExponential.cpp b/unsupported/doc/examples/MatrixExponential.cpp
index eab7a5e..bec49b9 100644
--- a/unsupported/doc/examples/MatrixExponential.cpp
+++ b/unsupported/doc/examples/MatrixExponential.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixFunction.cpp b/unsupported/doc/examples/MatrixFunction.cpp
index d72f62a..a20ccb3 100644
--- a/unsupported/doc/examples/MatrixFunction.cpp
+++ b/unsupported/doc/examples/MatrixFunction.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixLogarithm.cpp b/unsupported/doc/examples/MatrixLogarithm.cpp
index 41b7ff6..6926028 100644
--- a/unsupported/doc/examples/MatrixLogarithm.cpp
+++ b/unsupported/doc/examples/MatrixLogarithm.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixPower.cpp b/unsupported/doc/examples/MatrixPower.cpp
index 35501b6..bef161e 100644
--- a/unsupported/doc/examples/MatrixPower.cpp
+++ b/unsupported/doc/examples/MatrixPower.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixPower_optimal.cpp b/unsupported/doc/examples/MatrixPower_optimal.cpp
index 5f5f3e4..2e0cbd3 100644
--- a/unsupported/doc/examples/MatrixPower_optimal.cpp
+++ b/unsupported/doc/examples/MatrixPower_optimal.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixSine.cpp b/unsupported/doc/examples/MatrixSine.cpp
index eeafa50..a144641 100644
--- a/unsupported/doc/examples/MatrixSine.cpp
+++ b/unsupported/doc/examples/MatrixSine.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixSinh.cpp b/unsupported/doc/examples/MatrixSinh.cpp
index 1aabbb3..0b1418f 100644
--- a/unsupported/doc/examples/MatrixSinh.cpp
+++ b/unsupported/doc/examples/MatrixSinh.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/MatrixSquareRoot.cpp b/unsupported/doc/examples/MatrixSquareRoot.cpp
index 0ac4fdc..5837d2b 100644
--- a/unsupported/doc/examples/MatrixSquareRoot.cpp
+++ b/unsupported/doc/examples/MatrixSquareRoot.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/MatrixFunctions>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/PolynomialSolver1.cpp b/unsupported/doc/examples/PolynomialSolver1.cpp
index c1bf976..7bec9a7 100644
--- a/unsupported/doc/examples/PolynomialSolver1.cpp
+++ b/unsupported/doc/examples/PolynomialSolver1.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/Polynomials>
 #include <vector>
 #include <iostream>
diff --git a/unsupported/doc/examples/PolynomialUtils1.cpp b/unsupported/doc/examples/PolynomialUtils1.cpp
index a050b01..c7638bc 100644
--- a/unsupported/doc/examples/PolynomialUtils1.cpp
+++ b/unsupported/doc/examples/PolynomialUtils1.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <unsupported/Eigen/Polynomials>
 #include <iostream>
 
diff --git a/unsupported/doc/examples/SYCL/CMakeLists.txt b/unsupported/doc/examples/SYCL/CMakeLists.txt
index 4fe94c6..eb7b82b 100644
--- a/unsupported/doc/examples/SYCL/CMakeLists.txt
+++ b/unsupported/doc/examples/SYCL/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 FILE(GLOB examples_SRCS "*.cpp")
 
 set(EIGEN_SYCL ON)
diff --git a/unsupported/doc/examples/SYCL/CwiseMul.cpp b/unsupported/doc/examples/SYCL/CwiseMul.cpp
index 0297998..ccd6674 100644
--- a/unsupported/doc/examples/SYCL/CwiseMul.cpp
+++ b/unsupported/doc/examples/SYCL/CwiseMul.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <iostream>
 #define EIGEN_USE_SYCL
 #include <unsupported/Eigen/Tensor>
diff --git a/unsupported/doc/snippets/CMakeLists.txt b/unsupported/doc/snippets/CMakeLists.txt
index adf95a8..b7a4e07 100644
--- a/unsupported/doc/snippets/CMakeLists.txt
+++ b/unsupported/doc/snippets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
+
 file(GLOB snippets_SRCS "*.cpp")
 
 add_custom_target(unsupported_snippets)
diff --git a/unsupported/test/BVH.cpp b/unsupported/test/BVH.cpp
index 54ecc5c..0286c01 100644
--- a/unsupported/test/BVH.cpp
+++ b/unsupported/test/BVH.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/StdVector>
diff --git a/unsupported/test/CMakeLists.txt b/unsupported/test/CMakeLists.txt
index fb79127..93b8fe3 100644
--- a/unsupported/test/CMakeLists.txt
+++ b/unsupported/test/CMakeLists.txt
@@ -1,5 +1,7 @@
 # The file split_test_helper.h was generated at first run,
 # it is now included in test/
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h)
   file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h)
 endif()
diff --git a/unsupported/test/EulerAngles.cpp b/unsupported/test/EulerAngles.cpp
index 975d325..30b6561 100644
--- a/unsupported/test/EulerAngles.cpp
+++ b/unsupported/test/EulerAngles.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/FFT.cpp b/unsupported/test/FFT.cpp
index f85461c..aa2d0a3 100644
--- a/unsupported/test/FFT.cpp
+++ b/unsupported/test/FFT.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define EIGEN_FFT_DEFAULT 1
 #include "fft_test_shared.h"
diff --git a/unsupported/test/FFTW.cpp b/unsupported/test/FFTW.cpp
index 7302196..c776d4d 100644
--- a/unsupported/test/FFTW.cpp
+++ b/unsupported/test/FFTW.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define EIGEN_FFTW_DEFAULT 1
 #include "fft_test_shared.h"
diff --git a/unsupported/test/GPU/CMakeLists.txt b/unsupported/test/GPU/CMakeLists.txt
index 02d6832..cdc96ac 100644
--- a/unsupported/test/GPU/CMakeLists.txt
+++ b/unsupported/test/GPU/CMakeLists.txt
@@ -1,5 +1,7 @@
 # GPU module tests. Included from unsupported/test/CMakeLists.txt inside the
 # if(CUDA_FOUND AND EIGEN_TEST_CUDA) block.
+# SPDX-FileCopyrightText: The Eigen Authors
+# SPDX-License-Identifier: MPL-2.0
 
 find_package(CUDAToolkit)
 
diff --git a/unsupported/test/GPU/cublas.cpp b/unsupported/test/GPU/cublas.cpp
index 7c04eb2..2894171 100644
--- a/unsupported/test/GPU/cublas.cpp
+++ b/unsupported/test/GPU/cublas.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Tests for cuBLAS GEMM dispatch via DeviceMatrix expression syntax.
 // Covers: d_C = d_A * d_B, adjoint, transpose, scaled, +=, .device(ctx).
diff --git a/unsupported/test/GPU/cusolver_llt.cpp b/unsupported/test/GPU/cusolver_llt.cpp
index 011c02a..9e763af 100644
--- a/unsupported/test/GPU/cusolver_llt.cpp
+++ b/unsupported/test/GPU/cusolver_llt.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Tests for GpuLLT: GPU Cholesky (LL^T) using cuSOLVER.
 // Covers cusolverDnXpotrf (factorization) and cusolverDnXpotrs (solve)
diff --git a/unsupported/test/GPU/cusolver_lu.cpp b/unsupported/test/GPU/cusolver_lu.cpp
index 08bfde8..8c4e4be 100644
--- a/unsupported/test/GPU/cusolver_lu.cpp
+++ b/unsupported/test/GPU/cusolver_lu.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Tests for GpuLU: GPU partial-pivoting LU decomposition via cuSOLVER.
 // Covers cusolverDnXgetrf (factorization) and cusolverDnXgetrs (solve)
diff --git a/unsupported/test/GPU/device_matrix.cpp b/unsupported/test/GPU/device_matrix.cpp
index d09e641..4070f49 100644
--- a/unsupported/test/GPU/device_matrix.cpp
+++ b/unsupported/test/GPU/device_matrix.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // Tests for DeviceMatrix and HostTransfer: typed RAII GPU memory wrapper.
 // No cuSOLVER dependency — only CUDA runtime.
diff --git a/unsupported/test/NNLS.cpp b/unsupported/test/NNLS.cpp
index f01b562..dd3486e 100644
--- a/unsupported/test/NNLS.cpp
+++ b/unsupported/test/NNLS.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_RUNTIME_NO_MALLOC
 
diff --git a/unsupported/test/NonLinearOptimization.cpp b/unsupported/test/NonLinearOptimization.cpp
index 3737f18..1fda59e 100644
--- a/unsupported/test/NonLinearOptimization.cpp
+++ b/unsupported/test/NonLinearOptimization.cpp
@@ -2,6 +2,7 @@
 // for linear algebra.
 //
 // Copyright (C) 2009 Thomas Capricelli <orzel@freehackers.org>
+// SPDX-License-Identifier: MPL-2.0
 
 #include <stdio.h>
 
diff --git a/unsupported/test/NumericalDiff.cpp b/unsupported/test/NumericalDiff.cpp
index 543f34f..b46dfb2 100644
--- a/unsupported/test/NumericalDiff.cpp
+++ b/unsupported/test/NumericalDiff.cpp
@@ -2,6 +2,7 @@
 // for linear algebra.
 //
 // Copyright (C) 2009 Thomas Capricelli <orzel@freehackers.org>
+// SPDX-License-Identifier: MPL-2.0
 
 #include <stdio.h>
 
diff --git a/unsupported/test/alignedvector3.cpp b/unsupported/test/alignedvector3.cpp
index 838eaea..ad1d74e 100644
--- a/unsupported/test/alignedvector3.cpp
+++ b/unsupported/test/alignedvector3.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_NO_STATIC_ASSERT
 
diff --git a/unsupported/test/autodiff.cpp b/unsupported/test/autodiff.cpp
index 8a98cd1..da91de6 100644
--- a/unsupported/test/autodiff.cpp
+++ b/unsupported/test/autodiff.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/AutoDiff>
diff --git a/unsupported/test/autodiff_scalar.cpp b/unsupported/test/autodiff_scalar.cpp
index a0bff91..89bd929 100644
--- a/unsupported/test/autodiff_scalar.cpp
+++ b/unsupported/test/autodiff_scalar.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/AutoDiff>
diff --git a/unsupported/test/bessel_functions.cpp b/unsupported/test/bessel_functions.cpp
index 86adfc1..f8d4833 100644
--- a/unsupported/test/bessel_functions.cpp
+++ b/unsupported/test/bessel_functions.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include "../Eigen/SpecialFunctions"
diff --git a/unsupported/test/bicgstabl.cpp b/unsupported/test/bicgstabl.cpp
index 4761e39..4184293 100644
--- a/unsupported/test/bicgstabl.cpp
+++ b/unsupported/test/bicgstabl.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "../../test/sparse_solver.h"
 #include <Eigen/IterativeSolvers>
diff --git a/unsupported/test/dgmres.cpp b/unsupported/test/dgmres.cpp
index 04a4414..fa43be1 100644
--- a/unsupported/test/dgmres.cpp
+++ b/unsupported/test/dgmres.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "../../test/sparse_solver.h"
 #include <unsupported/Eigen/IterativeSolvers>
diff --git a/unsupported/test/duccfft.cpp b/unsupported/test/duccfft.cpp
index 4247663..2bcf077 100644
--- a/unsupported/test/duccfft.cpp
+++ b/unsupported/test/duccfft.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define EIGEN_DUCCFFT_DEFAULT 1
 #include <ducc0/fft/fft.h>         // Needs to be included before main.h
 #include <ducc0/fft/fftnd_impl.h>  // Same requirement
diff --git a/unsupported/test/fft_test_shared.h b/unsupported/test/fft_test_shared.h
index d7380be..21f6167 100644
--- a/unsupported/test/fft_test_shared.h
+++ b/unsupported/test/fft_test_shared.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/FFT>
diff --git a/unsupported/test/forward_adolc.cpp b/unsupported/test/forward_adolc.cpp
index 5d129a0..48df621 100644
--- a/unsupported/test/forward_adolc.cpp
+++ b/unsupported/test/forward_adolc.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Dense>
diff --git a/unsupported/test/gmres.cpp b/unsupported/test/gmres.cpp
index 225bb96..4ccf97d 100644
--- a/unsupported/test/gmres.cpp
+++ b/unsupported/test/gmres.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "../../test/sparse_solver.h"
 #include <Eigen/IterativeSolvers>
diff --git a/unsupported/test/idrs.cpp b/unsupported/test/idrs.cpp
index 9a2e4a5..c64fcbb 100644
--- a/unsupported/test/idrs.cpp
+++ b/unsupported/test/idrs.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "../../test/sparse_solver.h"
 #include <Eigen/IterativeSolvers>
diff --git a/unsupported/test/idrstabl.cpp b/unsupported/test/idrstabl.cpp
index 7e40dd6..4352991 100644
--- a/unsupported/test/idrstabl.cpp
+++ b/unsupported/test/idrstabl.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "../../test/sparse_solver.h"
 #include <unsupported/Eigen/IterativeSolvers>
diff --git a/unsupported/test/kronecker_product.cpp b/unsupported/test/kronecker_product.cpp
index d7396e0..e64515a 100644
--- a/unsupported/test/kronecker_product.cpp
+++ b/unsupported/test/kronecker_product.cpp
@@ -8,6 +8,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #ifdef EIGEN_TEST_PART_1
 
diff --git a/unsupported/test/levenberg_marquardt.cpp b/unsupported/test/levenberg_marquardt.cpp
index 3eb7514..7b16b25 100644
--- a/unsupported/test/levenberg_marquardt.cpp
+++ b/unsupported/test/levenberg_marquardt.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 // FIXME: These tests all check for hard-coded values. Ideally, parameters and start estimates should be randomized.
 
diff --git a/unsupported/test/matrix_exponential.cpp b/unsupported/test/matrix_exponential.cpp
index 0a52169..d9614ba 100644
--- a/unsupported/test/matrix_exponential.cpp
+++ b/unsupported/test/matrix_exponential.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "matrix_functions.h"
 
diff --git a/unsupported/test/matrix_function.cpp b/unsupported/test/matrix_function.cpp
index 6588527..b29da99 100644
--- a/unsupported/test/matrix_function.cpp
+++ b/unsupported/test/matrix_function.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/MatrixFunctions>
diff --git a/unsupported/test/matrix_functions.h b/unsupported/test/matrix_functions.h
index 822f454..deb069f 100644
--- a/unsupported/test/matrix_functions.h
+++ b/unsupported/test/matrix_functions.h
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/MatrixFunctions>
diff --git a/unsupported/test/matrix_power.cpp b/unsupported/test/matrix_power.cpp
index f34c275..25e3a05 100644
--- a/unsupported/test/matrix_power.cpp
+++ b/unsupported/test/matrix_power.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "matrix_functions.h"
 
diff --git a/unsupported/test/matrix_square_root.cpp b/unsupported/test/matrix_square_root.cpp
index c7f8fbe..bc320df 100644
--- a/unsupported/test/matrix_square_root.cpp
+++ b/unsupported/test/matrix_square_root.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "matrix_functions.h"
 
diff --git a/unsupported/test/minres.cpp b/unsupported/test/minres.cpp
index dfd5b9a..40b7849 100644
--- a/unsupported/test/minres.cpp
+++ b/unsupported/test/minres.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #include <cmath>
 
 #include "../../test/sparse_solver.h"
diff --git a/unsupported/test/mklfft.cpp b/unsupported/test/mklfft.cpp
index 631dd20..5cdb5cc 100644
--- a/unsupported/test/mklfft.cpp
+++ b/unsupported/test/mklfft.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define EIGEN_MKL_DEFAULT 1
 #include "fft_test_shared.h"
diff --git a/unsupported/test/mpreal_support.cpp b/unsupported/test/mpreal_support.cpp
index 1598f7f..754b2ae 100644
--- a/unsupported/test/mpreal_support.cpp
+++ b/unsupported/test/mpreal_support.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include <mpreal.h>  // Must be included before main.h.
 #include "main.h"
 #include <Eigen/MPRealSupport>
diff --git a/unsupported/test/openglsupport.cpp b/unsupported/test/openglsupport.cpp
index c70552a..97c1c2f 100644
--- a/unsupported/test/openglsupport.cpp
+++ b/unsupported/test/openglsupport.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <main.h>
 #include <iostream>
diff --git a/unsupported/test/pocketfft.cpp b/unsupported/test/pocketfft.cpp
index 5e8a0b6..d707b48 100644
--- a/unsupported/test/pocketfft.cpp
+++ b/unsupported/test/pocketfft.cpp
@@ -1,2 +1,5 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #define EIGEN_POCKETFFT_DEFAULT 1
 #include "fft_test_shared.h"
diff --git a/unsupported/test/polynomialsolver.cpp b/unsupported/test/polynomialsolver.cpp
index 18d5a2e..df9f04c 100644
--- a/unsupported/test/polynomialsolver.cpp
+++ b/unsupported/test/polynomialsolver.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/Polynomials>
diff --git a/unsupported/test/polynomialutils.cpp b/unsupported/test/polynomialutils.cpp
index f57c874..14df714 100644
--- a/unsupported/test/polynomialutils.cpp
+++ b/unsupported/test/polynomialutils.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <unsupported/Eigen/Polynomials>
diff --git a/unsupported/test/sparse_extra.cpp b/unsupported/test/sparse_extra.cpp
index 18f1881..4c0c3a2 100644
--- a/unsupported/test/sparse_extra.cpp
+++ b/unsupported/test/sparse_extra.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <cstdlib>
 #include <string>
diff --git a/unsupported/test/special_functions.cpp b/unsupported/test/special_functions.cpp
index 0abad05..5adc990 100644
--- a/unsupported/test/special_functions.cpp
+++ b/unsupported/test/special_functions.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <limits.h>
 #include "main.h"
diff --git a/unsupported/test/special_packetmath.cpp b/unsupported/test/special_packetmath.cpp
index 57f00d5..4ab4907 100644
--- a/unsupported/test/special_packetmath.cpp
+++ b/unsupported/test/special_packetmath.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <limits>
 #include "packetmath_test_shared.h"
diff --git a/unsupported/test/splines.cpp b/unsupported/test/splines.cpp
index 8083718..3f0542a 100644
--- a/unsupported/test/splines.cpp
+++ b/unsupported/test/splines.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_argmax.cpp b/unsupported/test/tensor_argmax.cpp
index 5a10276..1bf512b 100644
--- a/unsupported/test/tensor_argmax.cpp
+++ b/unsupported/test/tensor_argmax.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_argmax_gpu.cu b/unsupported/test/tensor_argmax_gpu.cu
index 5df52c7..1b17ce9 100644
--- a/unsupported/test/tensor_argmax_gpu.cu
+++ b/unsupported/test/tensor_argmax_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 
diff --git a/unsupported/test/tensor_argmax_sycl.cpp b/unsupported/test/tensor_argmax_sycl.cpp
index 9ae8f15..a2037d8 100644
--- a/unsupported/test/tensor_argmax_sycl.cpp
+++ b/unsupported/test/tensor_argmax_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_assign.cpp b/unsupported/test/tensor_assign.cpp
index 7ea6502..da98cbc 100644
--- a/unsupported/test/tensor_assign.cpp
+++ b/unsupported/test/tensor_assign.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_block_access.cpp b/unsupported/test/tensor_block_access.cpp
index 2f866b9..635ce6a 100644
--- a/unsupported/test/tensor_block_access.cpp
+++ b/unsupported/test/tensor_block_access.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_block_eval.cpp b/unsupported/test/tensor_block_eval.cpp
index cedfcb9..df7e2a2 100644
--- a/unsupported/test/tensor_block_eval.cpp
+++ b/unsupported/test/tensor_block_eval.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // clang-format off
 #include "main.h"
diff --git a/unsupported/test/tensor_block_io.cpp b/unsupported/test/tensor_block_io.cpp
index d5ebad9..c732502 100644
--- a/unsupported/test/tensor_block_io.cpp
+++ b/unsupported/test/tensor_block_io.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 // clang-format off
 #include "main.h"
diff --git a/unsupported/test/tensor_broadcast_sycl.cpp b/unsupported/test/tensor_broadcast_sycl.cpp
index a916889..422fed6 100644
--- a/unsupported/test/tensor_broadcast_sycl.cpp
+++ b/unsupported/test/tensor_broadcast_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_broadcasting.cpp b/unsupported/test/tensor_broadcasting.cpp
index 3575ea8..18275c8 100644
--- a/unsupported/test/tensor_broadcasting.cpp
+++ b/unsupported/test/tensor_broadcasting.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_builtins_sycl.cpp b/unsupported/test/tensor_builtins_sycl.cpp
index aad3119..937ff70 100644
--- a/unsupported/test/tensor_builtins_sycl.cpp
+++ b/unsupported/test/tensor_builtins_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_cast_float16_gpu.cu b/unsupported/test/tensor_cast_float16_gpu.cu
index ae230b0..ba0bb5c 100644
--- a/unsupported/test/tensor_cast_float16_gpu.cu
+++ b/unsupported/test/tensor_cast_float16_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_casts.cpp b/unsupported/test/tensor_casts.cpp
index b3ae58f..10cc712 100644
--- a/unsupported/test/tensor_casts.cpp
+++ b/unsupported/test/tensor_casts.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include "random_without_cast_overflow.h"
diff --git a/unsupported/test/tensor_chipping.cpp b/unsupported/test/tensor_chipping.cpp
index 34620fa..701de8b 100644
--- a/unsupported/test/tensor_chipping.cpp
+++ b/unsupported/test/tensor_chipping.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_chipping_sycl.cpp b/unsupported/test/tensor_chipping_sycl.cpp
index 4251a0f..9158bcf 100644
--- a/unsupported/test/tensor_chipping_sycl.cpp
+++ b/unsupported/test/tensor_chipping_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_comparisons.cpp b/unsupported/test/tensor_comparisons.cpp
index 311de9e..b7b3a87 100644
--- a/unsupported/test/tensor_comparisons.cpp
+++ b/unsupported/test/tensor_comparisons.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_complex_cwise_ops_gpu.cu b/unsupported/test/tensor_complex_cwise_ops_gpu.cu
index 79759cc..52a2d1c 100644
--- a/unsupported/test/tensor_complex_cwise_ops_gpu.cu
+++ b/unsupported/test/tensor_complex_cwise_ops_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 
diff --git a/unsupported/test/tensor_complex_gpu.cu b/unsupported/test/tensor_complex_gpu.cu
index 290b799..43bf3c5 100644
--- a/unsupported/test/tensor_complex_gpu.cu
+++ b/unsupported/test/tensor_complex_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 
diff --git a/unsupported/test/tensor_concatenation.cpp b/unsupported/test/tensor_concatenation.cpp
index c520a02..cbe36c4 100644
--- a/unsupported/test/tensor_concatenation.cpp
+++ b/unsupported/test/tensor_concatenation.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_concatenation_sycl.cpp b/unsupported/test/tensor_concatenation_sycl.cpp
index 28c9372..7629432 100644
--- a/unsupported/test/tensor_concatenation_sycl.cpp
+++ b/unsupported/test/tensor_concatenation_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_const.cpp b/unsupported/test/tensor_const.cpp
index eea9238..5ee1ed6 100644
--- a/unsupported/test/tensor_const.cpp
+++ b/unsupported/test/tensor_const.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_contract_gpu.cu b/unsupported/test/tensor_contract_gpu.cu
index 4023cfa..beb9fd9 100644
--- a/unsupported/test/tensor_contract_gpu.cu
+++ b/unsupported/test/tensor_contract_gpu.cu
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_contract_sycl.cpp b/unsupported/test/tensor_contract_sycl.cpp
index 02eba8e..698ff37 100644
--- a/unsupported/test/tensor_contract_sycl.cpp
+++ b/unsupported/test/tensor_contract_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_contraction.cpp b/unsupported/test/tensor_contraction.cpp
index d61067f..5b6c3f1 100644
--- a/unsupported/test/tensor_contraction.cpp
+++ b/unsupported/test/tensor_contraction.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_convolution.cpp b/unsupported/test/tensor_convolution.cpp
index 3b91cde..f3c91ca 100644
--- a/unsupported/test/tensor_convolution.cpp
+++ b/unsupported/test/tensor_convolution.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_convolution_sycl.cpp b/unsupported/test/tensor_convolution_sycl.cpp
index c27a330..69e3680 100644
--- a/unsupported/test/tensor_convolution_sycl.cpp
+++ b/unsupported/test/tensor_convolution_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_cost_model.cpp b/unsupported/test/tensor_cost_model.cpp
index f74bde8..58eb996 100644
--- a/unsupported/test/tensor_cost_model.cpp
+++ b/unsupported/test/tensor_cost_model.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_custom_index.cpp b/unsupported/test/tensor_custom_index.cpp
index 8a790f9..efb04f6 100644
--- a/unsupported/test/tensor_custom_index.cpp
+++ b/unsupported/test/tensor_custom_index.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/unsupported/test/tensor_custom_op.cpp b/unsupported/test/tensor_custom_op.cpp
index 65ba001..d14a4a6 100644
--- a/unsupported/test/tensor_custom_op.cpp
+++ b/unsupported/test/tensor_custom_op.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_custom_op_sycl.cpp b/unsupported/test/tensor_custom_op_sycl.cpp
index 54d2ca7..7d089a1 100644
--- a/unsupported/test/tensor_custom_op_sycl.cpp
+++ b/unsupported/test/tensor_custom_op_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_device.cu b/unsupported/test/tensor_device.cu
index c3c4943..d268b7c 100644
--- a/unsupported/test/tensor_device.cu
+++ b/unsupported/test/tensor_device.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_device_sycl.cpp b/unsupported/test/tensor_device_sycl.cpp
index db1ebd2..760a7c5 100644
--- a/unsupported/test/tensor_device_sycl.cpp
+++ b/unsupported/test/tensor_device_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_dimension.cpp b/unsupported/test/tensor_dimension.cpp
index 2517e3d..acc590f 100644
--- a/unsupported/test/tensor_dimension.cpp
+++ b/unsupported/test/tensor_dimension.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_empty.cpp b/unsupported/test/tensor_empty.cpp
index a4ccd27..8ad5954 100644
--- a/unsupported/test/tensor_empty.cpp
+++ b/unsupported/test/tensor_empty.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_executor.cpp b/unsupported/test/tensor_executor.cpp
index f2fd2da..24e3a75 100644
--- a/unsupported/test/tensor_executor.cpp
+++ b/unsupported/test/tensor_executor.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/test/tensor_expr.cpp b/unsupported/test/tensor_expr.cpp
index 6fb58e1..2bc4026 100644
--- a/unsupported/test/tensor_expr.cpp
+++ b/unsupported/test/tensor_expr.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include <numeric>
 
diff --git a/unsupported/test/tensor_fft.cpp b/unsupported/test/tensor_fft.cpp
index f88cf72..4001ac6 100644
--- a/unsupported/test/tensor_fft.cpp
+++ b/unsupported/test/tensor_fft.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <Eigen/Tensor>
diff --git a/unsupported/test/tensor_fixed_size.cpp b/unsupported/test/tensor_fixed_size.cpp
index 20370f4..bbf3146 100644
--- a/unsupported/test/tensor_fixed_size.cpp
+++ b/unsupported/test/tensor_fixed_size.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_forced_eval.cpp b/unsupported/test/tensor_forced_eval.cpp
index 9e21c25..359e6f3 100644
--- a/unsupported/test/tensor_forced_eval.cpp
+++ b/unsupported/test/tensor_forced_eval.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_forced_eval_sycl.cpp b/unsupported/test/tensor_forced_eval_sycl.cpp
index 0d43737..1ba37dc 100644
--- a/unsupported/test/tensor_forced_eval_sycl.cpp
+++ b/unsupported/test/tensor_forced_eval_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_generator.cpp b/unsupported/test/tensor_generator.cpp
index a100f38..6daadf0 100644
--- a/unsupported/test/tensor_generator.cpp
+++ b/unsupported/test/tensor_generator.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_generator_sycl.cpp b/unsupported/test/tensor_generator_sycl.cpp
index 8002119..b0cdb65 100644
--- a/unsupported/test/tensor_generator_sycl.cpp
+++ b/unsupported/test/tensor_generator_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_gpu.cu b/unsupported/test/tensor_gpu.cu
index 3656a5c..99e8cbd 100644
--- a/unsupported/test/tensor_gpu.cu
+++ b/unsupported/test/tensor_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_ifft.cpp b/unsupported/test/tensor_ifft.cpp
index a325251..cd341ec 100644
--- a/unsupported/test/tensor_ifft.cpp
+++ b/unsupported/test/tensor_ifft.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <complex>
diff --git a/unsupported/test/tensor_image_op_sycl.cpp b/unsupported/test/tensor_image_op_sycl.cpp
index df3e8d2..0896669 100644
--- a/unsupported/test/tensor_image_op_sycl.cpp
+++ b/unsupported/test/tensor_image_op_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_image_patch.cpp b/unsupported/test/tensor_image_patch.cpp
index d78c3da..393e623 100644
--- a/unsupported/test/tensor_image_patch.cpp
+++ b/unsupported/test/tensor_image_patch.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_image_patch_sycl.cpp b/unsupported/test/tensor_image_patch_sycl.cpp
index b241d94..a082518 100644
--- a/unsupported/test/tensor_image_patch_sycl.cpp
+++ b/unsupported/test/tensor_image_patch_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_index_list.cpp b/unsupported/test/tensor_index_list.cpp
index ee9c0db..f83a519 100644
--- a/unsupported/test/tensor_index_list.cpp
+++ b/unsupported/test/tensor_index_list.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_inflation.cpp b/unsupported/test/tensor_inflation.cpp
index 0339b8a..308627e 100644
--- a/unsupported/test/tensor_inflation.cpp
+++ b/unsupported/test/tensor_inflation.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_inflation_sycl.cpp b/unsupported/test/tensor_inflation_sycl.cpp
index d24585a..d9b7290 100644
--- a/unsupported/test/tensor_inflation_sycl.cpp
+++ b/unsupported/test/tensor_inflation_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_intdiv.cpp b/unsupported/test/tensor_intdiv.cpp
index ccddf97..8041969 100644
--- a/unsupported/test/tensor_intdiv.cpp
+++ b/unsupported/test/tensor_intdiv.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_io.cpp b/unsupported/test/tensor_io.cpp
index 5804fe2..fd4e827 100644
--- a/unsupported/test/tensor_io.cpp
+++ b/unsupported/test/tensor_io.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 #include "main.h"
 
 #include <sstream>
diff --git a/unsupported/test/tensor_layout_swap.cpp b/unsupported/test/tensor_layout_swap.cpp
index 26478d3..ceea23c 100644
--- a/unsupported/test/tensor_layout_swap.cpp
+++ b/unsupported/test/tensor_layout_swap.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_layout_swap_sycl.cpp b/unsupported/test/tensor_layout_swap_sycl.cpp
index 7889a5c..9674804 100644
--- a/unsupported/test/tensor_layout_swap_sycl.cpp
+++ b/unsupported/test/tensor_layout_swap_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_lvalue.cpp b/unsupported/test/tensor_lvalue.cpp
index d283f5c..d48b1f2 100644
--- a/unsupported/test/tensor_lvalue.cpp
+++ b/unsupported/test/tensor_lvalue.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_map.cpp b/unsupported/test/tensor_map.cpp
index c5706c1..d3f4de8 100644
--- a/unsupported/test/tensor_map.cpp
+++ b/unsupported/test/tensor_map.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_math.cpp b/unsupported/test/tensor_math.cpp
index 247a379..ee1e429 100644
--- a/unsupported/test/tensor_math.cpp
+++ b/unsupported/test/tensor_math.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_math_sycl.cpp b/unsupported/test/tensor_math_sycl.cpp
index 6d3cf60..39dbdbf 100644
--- a/unsupported/test/tensor_math_sycl.cpp
+++ b/unsupported/test/tensor_math_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_mixed_indices.cpp b/unsupported/test/tensor_mixed_indices.cpp
index bb3be1c..6ab77cb 100644
--- a/unsupported/test/tensor_mixed_indices.cpp
+++ b/unsupported/test/tensor_mixed_indices.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_morphing.cpp b/unsupported/test/tensor_morphing.cpp
index 9c91087..7c6cfd2 100644
--- a/unsupported/test/tensor_morphing.cpp
+++ b/unsupported/test/tensor_morphing.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_morphing_sycl.cpp b/unsupported/test/tensor_morphing_sycl.cpp
index 49d738c..1c47093 100644
--- a/unsupported/test/tensor_morphing_sycl.cpp
+++ b/unsupported/test/tensor_morphing_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_move.cpp b/unsupported/test/tensor_move.cpp
index ce71f13..03c3564 100644
--- a/unsupported/test/tensor_move.cpp
+++ b/unsupported/test/tensor_move.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_notification.cpp b/unsupported/test/tensor_notification.cpp
index 014afa5..8090cd2 100644
--- a/unsupported/test/tensor_notification.cpp
+++ b/unsupported/test/tensor_notification.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/test/tensor_of_bfloat16_gpu.cu b/unsupported/test/tensor_of_bfloat16_gpu.cu
index ea3d450..40e73a8 100644
--- a/unsupported/test/tensor_of_bfloat16_gpu.cu
+++ b/unsupported/test/tensor_of_bfloat16_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_of_complex.cpp b/unsupported/test/tensor_of_complex.cpp
index 4c855a4..0e5c698 100644
--- a/unsupported/test/tensor_of_complex.cpp
+++ b/unsupported/test/tensor_of_complex.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_of_const_values.cpp b/unsupported/test/tensor_of_const_values.cpp
index 7d4754c..d6d211c 100644
--- a/unsupported/test/tensor_of_const_values.cpp
+++ b/unsupported/test/tensor_of_const_values.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_of_float16_gpu.cu b/unsupported/test/tensor_of_float16_gpu.cu
index eba57db..266cc85 100644
--- a/unsupported/test/tensor_of_float16_gpu.cu
+++ b/unsupported/test/tensor_of_float16_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_of_float16_sycl.cpp b/unsupported/test/tensor_of_float16_sycl.cpp
index 6dd0682..091b100 100644
--- a/unsupported/test/tensor_of_float16_sycl.cpp
+++ b/unsupported/test/tensor_of_float16_sycl.cpp
@@ -9,6 +9,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_of_strings.cpp b/unsupported/test/tensor_of_strings.cpp
index fa8acde..4fbde53 100644
--- a/unsupported/test/tensor_of_strings.cpp
+++ b/unsupported/test/tensor_of_strings.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_padding.cpp b/unsupported/test/tensor_padding.cpp
index 7100de6..53c2e18 100644
--- a/unsupported/test/tensor_padding.cpp
+++ b/unsupported/test/tensor_padding.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_padding_sycl.cpp b/unsupported/test/tensor_padding_sycl.cpp
index ce10ff7..d78a34f 100644
--- a/unsupported/test/tensor_padding_sycl.cpp
+++ b/unsupported/test/tensor_padding_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_patch.cpp b/unsupported/test/tensor_patch.cpp
index bb23f3a..a16e91e 100644
--- a/unsupported/test/tensor_patch.cpp
+++ b/unsupported/test/tensor_patch.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_patch_sycl.cpp b/unsupported/test/tensor_patch_sycl.cpp
index 9640ba2..faca3b6 100644
--- a/unsupported/test/tensor_patch_sycl.cpp
+++ b/unsupported/test/tensor_patch_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_random.cpp b/unsupported/test/tensor_random.cpp
index 8317c68..0e50b53 100644
--- a/unsupported/test/tensor_random.cpp
+++ b/unsupported/test/tensor_random.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_random_gpu.cu b/unsupported/test/tensor_random_gpu.cu
index 4d627a9..17bdc44 100644
--- a/unsupported/test/tensor_random_gpu.cu
+++ b/unsupported/test/tensor_random_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_random_sycl.cpp b/unsupported/test/tensor_random_sycl.cpp
index 2633705..6e85e9c 100644
--- a/unsupported/test/tensor_random_sycl.cpp
+++ b/unsupported/test/tensor_random_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_reduction.cpp b/unsupported/test/tensor_reduction.cpp
index eaef98c..b9a24a6 100644
--- a/unsupported/test/tensor_reduction.cpp
+++ b/unsupported/test/tensor_reduction.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/unsupported/test/tensor_reduction_gpu.cu b/unsupported/test/tensor_reduction_gpu.cu
index 8fa8be2..a8b0c45 100644
--- a/unsupported/test/tensor_reduction_gpu.cu
+++ b/unsupported/test/tensor_reduction_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_reduction_sycl.cpp b/unsupported/test/tensor_reduction_sycl.cpp
index 90184d9..afa7773 100644
--- a/unsupported/test/tensor_reduction_sycl.cpp
+++ b/unsupported/test/tensor_reduction_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_ref.cpp b/unsupported/test/tensor_ref.cpp
index d0e2415..4aab232 100644
--- a/unsupported/test/tensor_ref.cpp
+++ b/unsupported/test/tensor_ref.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_reverse.cpp b/unsupported/test/tensor_reverse.cpp
index d6b5a7c..397fa2f 100644
--- a/unsupported/test/tensor_reverse.cpp
+++ b/unsupported/test/tensor_reverse.cpp
@@ -7,6 +7,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_reverse_sycl.cpp b/unsupported/test/tensor_reverse_sycl.cpp
index fd78f8a..3597687 100644
--- a/unsupported/test/tensor_reverse_sycl.cpp
+++ b/unsupported/test/tensor_reverse_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_roll.cpp b/unsupported/test/tensor_roll.cpp
index 762b48e..58c6375 100644
--- a/unsupported/test/tensor_roll.cpp
+++ b/unsupported/test/tensor_roll.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_roundings.cpp b/unsupported/test/tensor_roundings.cpp
index ecc1739..e387c78 100644
--- a/unsupported/test/tensor_roundings.cpp
+++ b/unsupported/test/tensor_roundings.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_scan.cpp b/unsupported/test/tensor_scan.cpp
index 307b7a6..0e2bcf4 100644
--- a/unsupported/test/tensor_scan.cpp
+++ b/unsupported/test/tensor_scan.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 #include <limits>
diff --git a/unsupported/test/tensor_scan_gpu.cu b/unsupported/test/tensor_scan_gpu.cu
index f94f770..368d3ad 100644
--- a/unsupported/test/tensor_scan_gpu.cu
+++ b/unsupported/test/tensor_scan_gpu.cu
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_scan_sycl.cpp b/unsupported/test/tensor_scan_sycl.cpp
index 1db0471..03d81d5 100644
--- a/unsupported/test/tensor_scan_sycl.cpp
+++ b/unsupported/test/tensor_scan_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_shuffling.cpp b/unsupported/test/tensor_shuffling.cpp
index 6f374e3..4b5e6d9 100644
--- a/unsupported/test/tensor_shuffling.cpp
+++ b/unsupported/test/tensor_shuffling.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_shuffling_sycl.cpp b/unsupported/test/tensor_shuffling_sycl.cpp
index 4f9207e..907cbe2 100644
--- a/unsupported/test/tensor_shuffling_sycl.cpp
+++ b/unsupported/test/tensor_shuffling_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_simple.cpp b/unsupported/test/tensor_simple.cpp
index c707f40..b0e3fe2 100644
--- a/unsupported/test/tensor_simple.cpp
+++ b/unsupported/test/tensor_simple.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_striding.cpp b/unsupported/test/tensor_striding.cpp
index 6cc7933..3d6af46 100644
--- a/unsupported/test/tensor_striding.cpp
+++ b/unsupported/test/tensor_striding.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_striding_sycl.cpp b/unsupported/test/tensor_striding_sycl.cpp
index 53788d1..c7f4185 100644
--- a/unsupported/test/tensor_striding_sycl.cpp
+++ b/unsupported/test/tensor_striding_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_sugar.cpp b/unsupported/test/tensor_sugar.cpp
index 6f8c6f2..1bf7e09 100644
--- a/unsupported/test/tensor_sugar.cpp
+++ b/unsupported/test/tensor_sugar.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include "main.h"
 
 #include <Eigen/Tensor>
diff --git a/unsupported/test/tensor_sycl.cpp b/unsupported/test/tensor_sycl.cpp
index 3873648..f1b77bd 100644
--- a/unsupported/test/tensor_sycl.cpp
+++ b/unsupported/test/tensor_sycl.cpp
@@ -11,6 +11,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX
diff --git a/unsupported/test/tensor_symmetry.cpp b/unsupported/test/tensor_symmetry.cpp
index 27796b6..02dcaf6 100644
--- a/unsupported/test/tensor_symmetry.cpp
+++ b/unsupported/test/tensor_symmetry.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_thread_local.cpp b/unsupported/test/tensor_thread_local.cpp
index 5fe8fe6..a62874c 100644
--- a/unsupported/test/tensor_thread_local.cpp
+++ b/unsupported/test/tensor_thread_local.cpp
@@ -4,6 +4,8 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/test/tensor_thread_pool.cpp b/unsupported/test/tensor_thread_pool.cpp
index 5d6c0fa..7a5be68 100644
--- a/unsupported/test/tensor_thread_pool.cpp
+++ b/unsupported/test/tensor_thread_pool.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_USE_THREADS
 
diff --git a/unsupported/test/tensor_trace.cpp b/unsupported/test/tensor_trace.cpp
index d641864..e680d46 100644
--- a/unsupported/test/tensor_trace.cpp
+++ b/unsupported/test/tensor_trace.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_uint128.cpp b/unsupported/test/tensor_uint128.cpp
index 534f212..0fb6b0d 100644
--- a/unsupported/test/tensor_uint128.cpp
+++ b/unsupported/test/tensor_uint128.cpp
@@ -6,6 +6,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #include "main.h"
 
diff --git a/unsupported/test/tensor_volume_patch.cpp b/unsupported/test/tensor_volume_patch.cpp
index dbbd772..09a1b8e 100644
--- a/unsupported/test/tensor_volume_patch.cpp
+++ b/unsupported/test/tensor_volume_patch.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: The Eigen Authors
+// SPDX-License-Identifier: MPL-2.0
+
 #include "main.h"
 
 #include <Eigen/Tensor>
diff --git a/unsupported/test/tensor_volume_patch_sycl.cpp b/unsupported/test/tensor_volume_patch_sycl.cpp
index 68b4006..bb597a4 100644
--- a/unsupported/test/tensor_volume_patch_sycl.cpp
+++ b/unsupported/test/tensor_volume_patch_sycl.cpp
@@ -10,6 +10,7 @@
 // This Source Code Form is subject to the terms of the Mozilla
 // Public License v. 2.0. If a copy of the MPL was not distributed
 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+// SPDX-License-Identifier: MPL-2.0
 
 #define EIGEN_TEST_NO_LONGDOUBLE
 #define EIGEN_TEST_NO_COMPLEX