From patchwork Mon Feb 3 20:08:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Kjellerstedt X-Patchwork-Id: 56596 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04FD8C02198 for ; Mon, 3 Feb 2025 20:08:43 +0000 (UTC) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (EUR03-DBA-obe.outbound.protection.outlook.com [40.107.104.72]) by mx.groups.io with SMTP id smtpd.web11.98043.1738613316059215398 for ; Mon, 03 Feb 2025 12:08:36 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@axis.com header.s=selector1 header.b=gFMXgI/4; spf=pass (domain: axis.com, ip: 40.107.104.72, mailfrom: peter.kjellerstedt@axis.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rZ41bsr62ANIZqkyPxZZ63utdFlcbO1vCge8+zhoUy4pWfgyns0qSO5FgJ2wkKQtOT1nZGh1dyph4Y7HjtIbFGog6qIhEYnvjHi311j/1/V9bP3XToB61XoEdjhzw6Npl9h1ZlcYGTyEkK09z1arO1R70MA97E8bMcFi3LCvnapa13J8XdU3CIWDgwlP0J0p8F89YqGwVeSEP2HqNnoiWT1u+X8ls7yK6PQzWNvfLCyZw/RRnbkS7nlNwvEcygRjP4N6FOrl5/x5gQEXwSOek1CjOUjF8sI2qiQptilEftlKE3h2WB/azzNJr0sSjm/6lhIDPNfx3w97i7SM4ZqZyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9P70ulksmsOphSGboKUINz7bSk9u14GgGSn8O8z2ycU=; b=IszgjPmUxpOBoahpHBPmRLItRpn06RBKhwh5N6Mx+XFa2sWYz5o3V8tRZZHQlLzhmb4nVYFAc5pcVebtPuz9ERrUL1a1n1QkJpwfpQKD0A+S4Bj3itc2ynNalamplmGzGCMWKpb6J+s4+NxJQsB2/qCnZRcLT1zfKXOHIlFnKIowpVREtP99/CUPKPPnLZ4m6KMAXpI7ItTZ7RW8Gf869++r9iC/jigFYbuXoffqs6LR7lNpbSoJHlqGGF+qSdjL2tur9Ei49hkukx+/5VLJRgEQhEYixiasf64wJ1sbJ0v/Bqgfv4/yoHEETHwX2BfxsQPtxhTc4d2mpSaerXoJcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 195.60.68.100) smtp.rcpttodomain=lists.openembedded.org smtp.mailfrom=axis.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=axis.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axis.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9P70ulksmsOphSGboKUINz7bSk9u14GgGSn8O8z2ycU=; b=gFMXgI/4QD+6WcZzcnHNX2AYh8CUdXK0hI1nSvvN+l9GffrWSJ87HpDs6nG+3w92xX87WoU+Rl53AJo7P2IFVLkAfGyNdVMiFDPbrcMLM7useVG97lEicAL4SZI4ShYznCSLXti+ASmzT1KXeCxjBKreoZZFK4ViKx/+S3FGbtQ= Received: from AS4P192CA0032.EURP192.PROD.OUTLOOK.COM (2603:10a6:20b:658::15) by PA4PR02MB10355.eurprd02.prod.outlook.com (2603:10a6:102:270::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.25; Mon, 3 Feb 2025 20:08:30 +0000 Received: from AM1PEPF000252DC.eurprd07.prod.outlook.com (2603:10a6:20b:658:cafe::46) by AS4P192CA0032.outlook.office365.com (2603:10a6:20b:658::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.25 via Frontend Transport; Mon, 3 Feb 2025 20:08:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 195.60.68.100) smtp.mailfrom=axis.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=axis.com; Received-SPF: Pass (protection.outlook.com: domain of axis.com designates 195.60.68.100 as permitted sender) receiver=protection.outlook.com; client-ip=195.60.68.100; helo=mail.axis.com; pr=C Received: from mail.axis.com (195.60.68.100) by AM1PEPF000252DC.mail.protection.outlook.com (10.167.16.54) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8398.14 via Frontend Transport; Mon, 3 Feb 2025 20:08:29 +0000 Received: from se-mail02w.axis.com (10.20.40.8) by se-mail01w.axis.com (10.20.40.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Mon, 3 Feb 2025 21:08:28 +0100 Received: from se-intmail02x.se.axis.com (10.4.0.28) by se-mail02w.axis.com (10.20.40.8) with Microsoft SMTP Server id 15.1.2507.44 via Frontend Transport; Mon, 3 Feb 2025 21:08:28 +0100 Received: from saur (saur.se.axis.com [10.92.3.10]) by se-intmail02x.se.axis.com (Postfix) with ESMTP id C7276BA for ; Mon, 3 Feb 2025 21:08:28 +0100 (CET) Received: from saur.se.axis.com (localhost [127.0.0.1]) by saur (8.17.1/8.15.2) with ESMTPS id 513K8SUW1200024 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Mon, 3 Feb 2025 21:08:28 +0100 Received: (from pkj@localhost) by saur.se.axis.com (8.17.1/8.17.1/Submit) id 513K8ScY1200023 for openembedded-devel@lists.openembedded.org; Mon, 3 Feb 2025 21:08:28 +0100 From: Peter Kjellerstedt To: Subject: [meta-oe][PATCH 1/2] libeigen: Remove LGPL code Date: Mon, 3 Feb 2025 21:08:22 +0100 Message-ID: <20250203200823.1199979-1-pkj@axis.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM1PEPF000252DC:EE_|PA4PR02MB10355:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b3dfc20-6785-42f0-3fc0-08dd448e86b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|34020700016|36860700013|82310400026|1800799024|376014|13003099007; X-Microsoft-Antispam-Message-Info: YjAK/M1WL+NXs+cdpef+4MDSNiTcx2HS0IHW2TgMRubx1RhuvLQ4ChotfAsFx5fELwpr3dTgg/pDL9EnTap/w260eufeECZTPJfUxLE87xQjIyldfJV2AIkXqcB8TG8F360Xs0Uu0vyX0nbz/S0BwxgOVuvyb2Kxu221G+1fd1MRUVYCySofVrVsmFw/Jc2mE1iMuW6OxzdOTSbR3E3GfrGPq67Rg0y7kt6/UjCNFhZTxfvjvBq96oVYczvexgo3qQ54xPHjOYL8SncDScbf3Ujq01lwpxIxyVNjEGFNGxiDxSnOoOdV7NKM0AL4XAvlDamREDJLzCMCSYkfaoxLpfMVJBnPJDu627sHG0Fy5Cc93nwYoYMpfiJL3FLe9QvzFwKrbs3OnpvhTgn6tqbCYq0LfYa9yS4BEwkVz3ymp+1kQ2Uu2G0ZR/ZzmIs92xgwxsNlTs0NFcIINDRNwHtRk7je4fjBtAKKdzG6yN3lQSI1olBGmbfcSLEa1tE8is52mEH057au01CvjqHGFEAuk/9xJhQSbaadSw2R6eMuVKB/wB+2/1dNIHkjxA5K/dpzwXqzxJ6+FsO3+/SB/LTCfMDClt5uBWYTlGCupeUgYeMq8vzMAwmwmxtIGdcIBEgoik7hD1AuGGJ0vo9rWSsDIfMhRgV234WCTizkHfN0wVF0fOzNspqBXPLObHstjZQzAenmv5jKbrqROvIueIq110YOhdiWlUAp2Iaf6RtmHSJunQexKlT6KqjAS+RiKGPrgj4TnXIe0v9wjyDo8ARFtOC8XZkdBz3NQVSOMzgsCHAQHt9Az5cz0tOiHGzxsCXfWGOF/0iMEc+f9n+9HD8CtkySeOfvPbQM533Vv33ph+FHY1q8l6GnHafAbIm2F1fXtNqqYUOSLUfiwpGBWdv03J+KUWsGmCc2zdZYx8IPRbpxL6SJt48immUC6BKl1fzUOe+S3fvekEL4BMhbVohh1UN8SApWpqm6DWEmaMmbKZ3MiGcaedt7vTeIsZJe86Hf+jElV1xgHFHTUQdYqyzFQ3Q9mz7yq6qGbT5aXGMYK9grYi8H8I0vrAjb4UuMrcaBuQuKSenBdL1FcmAoJylzuadRIpHDEUmTzsZX54IKFwA5e1/5mKwRKLul0JD6B1q3ny/ZZU0L4Ymgwgh5KETH2DI6BmHYjWGMWSxAz6FT8IV1DjjV1v/eKTKGbZJ86r7SiKZaCk3U3IbnXn3XidbzTDas6tgPuJbHK6R0rmNOGLfJIS3XtQv4Szk+IWa6PLq6lQxxcPLux19I8NIsfd48eVKMmr8sS+/aBbXgzYFc+VCnfl3CtK13tynxHPY09Zooa1L1pv+XpYqbKnCfATlq4l9jLfzixeMKIJgK/IMF4YS2Ip9FfaG2V4v23Lx+JjaZ3wfdQQbUjzRO8p3beNoqm/hUhHh9rgEQdVh1/P2o8FU= X-Forefront-Antispam-Report: CIP:195.60.68.100;CTRY:SE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.axis.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(34020700016)(36860700013)(82310400026)(1800799024)(376014)(13003099007);DIR:OUT;SFP:1101; X-OriginatorOrg: axis.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Feb 2025 20:08:29.2341 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2b3dfc20-6785-42f0-3fc0-08dd448e86b9 X-MS-Exchange-CrossTenant-Id: 78703d3c-b907-432f-b066-88f7af9ca3af X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=78703d3c-b907-432f-b066-88f7af9ca3af;Ip=[195.60.68.100];Helo=[mail.axis.com] X-MS-Exchange-CrossTenant-AuthSource: AM1PEPF000252DC.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR02MB10355 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 03 Feb 2025 20:08:43 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-devel/message/115259 Since libeigen is a header-only library, LGPL effectively has the same properties as GPL when it comes to affecting the licensing of the code that uses libeigen. To avoid the problem, backport a patch to remove all LGPL-2.1 code from the library. Switch to using "Minpack" rather than "MINPACK" as license since the former is the official SPDX name. Also correct the licenses for ${PN}, ${PN}-dbg and ${PN}-dev to reflect that they do not contain any GPL code (the GPL code is only used for benchmark tests and does not affect what is installed). License-Update: Correct the license information Signed-off-by: Peter Kjellerstedt --- ...0002-Remove-LGPL-Code-and-references.patch | 1040 +++++++++++++++++ .../libeigen/libeigen_3.4.0.bb | 9 +- 2 files changed, 1047 insertions(+), 2 deletions(-) create mode 100644 meta-oe/recipes-support/libeigen/libeigen/0002-Remove-LGPL-Code-and-references.patch diff --git a/meta-oe/recipes-support/libeigen/libeigen/0002-Remove-LGPL-Code-and-references.patch b/meta-oe/recipes-support/libeigen/libeigen/0002-Remove-LGPL-Code-and-references.patch new file mode 100644 index 0000000000..2d19bc23c8 --- /dev/null +++ b/meta-oe/recipes-support/libeigen/libeigen/0002-Remove-LGPL-Code-and-references.patch @@ -0,0 +1,1040 @@ +From e63a6950dbebf4dd95e5c74c423c06fd65df5182 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Antonio=20S=C3=A1nchez?= +Date: Wed, 8 Feb 2023 01:25:06 +0000 +Subject: [PATCH] Remove LGPL Code and references. + +Upstream-Status: Backport [https://gitlab.com/libeigen/eigen/-/commit/e256ad1823c2eddd6954241ddc99bfeb7bb29cb3] +--- + COPYING.LGPL | 502 ------------------ + COPYING.README | 16 +- + Eigen/src/Core/util/NonMPL2.h | 3 - + .../IncompleteCholesky.h | 3 +- + bench/tensors/eigen_sycl_bench.sh | 1 - + bench/tensors/eigen_sycl_bench_contract.sh | 2 +- + doc/PreprocessorDirectives.dox | 3 - + test/CMakeLists.txt | 1 - + test/mpl2only.cpp | 24 - + unsupported/Eigen/IterativeSolvers | 6 - + .../IterativeSolvers/ConstrainedConjGrad.h | 187 ------- + .../IterativeSolvers/IterationController.h | 154 ------ + 12 files changed, 4 insertions(+), 898 deletions(-) + delete mode 100644 COPYING.LGPL + delete mode 100644 Eigen/src/Core/util/NonMPL2.h + delete mode 100644 test/mpl2only.cpp + delete mode 100644 unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h + delete mode 100644 unsupported/Eigen/src/IterativeSolvers/IterationController.h + +diff --git a/COPYING.LGPL b/COPYING.LGPL +deleted file mode 100644 +index 4362b4915..000000000 +--- a/COPYING.LGPL ++++ /dev/null +@@ -1,502 +0,0 @@ +- GNU LESSER GENERAL PUBLIC LICENSE +- Version 2.1, February 1999 +- +- Copyright (C) 1991, 1999 Free Software Foundation, Inc. +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +-[This is the first released version of the Lesser GPL. It also counts +- as the successor of the GNU Library Public License, version 2, hence +- the version number 2.1.] +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-Licenses are intended to guarantee your freedom to share and change +-free software--to make sure the software is free for all its users. +- +- This license, the Lesser General Public License, applies to some +-specially designated software packages--typically libraries--of the +-Free Software Foundation and other authors who decide to use it. You +-can use it too, but we suggest you first think carefully about whether +-this license or the ordinary General Public License is the better +-strategy to use in any particular case, based on the explanations below. +- +- When we speak of free software, we are referring to freedom of use, +-not price. Our General Public Licenses are designed to make sure that +-you have the freedom to distribute copies of free software (and charge +-for this service if you wish); that you receive source code or can get +-it if you want it; that you can change the software and use pieces of +-it in new free programs; and that you are informed that you can do +-these things. +- +- To protect your rights, we need to make restrictions that forbid +-distributors to deny you these rights or to ask you to surrender these +-rights. These restrictions translate to certain responsibilities for +-you if you distribute copies of the library or if you modify it. +- +- For example, if you distribute copies of the library, whether gratis +-or for a fee, you must give the recipients all the rights that we gave +-you. You must make sure that they, too, receive or can get the source +-code. If you link other code with the library, you must provide +-complete object files to the recipients, so that they can relink them +-with the library after making changes to the library and recompiling +-it. And you must show them these terms so they know their rights. +- +- We protect your rights with a two-step method: (1) we copyright the +-library, and (2) we offer you this license, which gives you legal +-permission to copy, distribute and/or modify the library. +- +- To protect each distributor, we want to make it very clear that +-there is no warranty for the free library. Also, if the library is +-modified by someone else and passed on, the recipients should know +-that what they have is not the original version, so that the original +-author's reputation will not be affected by problems that might be +-introduced by others. +- +- Finally, software patents pose a constant threat to the existence of +-any free program. We wish to make sure that a company cannot +-effectively restrict the users of a free program by obtaining a +-restrictive license from a patent holder. Therefore, we insist that +-any patent license obtained for a version of the library must be +-consistent with the full freedom of use specified in this license. +- +- Most GNU software, including some libraries, is covered by the +-ordinary GNU General Public License. This license, the GNU Lesser +-General Public License, applies to certain designated libraries, and +-is quite different from the ordinary General Public License. We use +-this license for certain libraries in order to permit linking those +-libraries into non-free programs. +- +- When a program is linked with a library, whether statically or using +-a shared library, the combination of the two is legally speaking a +-combined work, a derivative of the original library. The ordinary +-General Public License therefore permits such linking only if the +-entire combination fits its criteria of freedom. The Lesser General +-Public License permits more lax criteria for linking other code with +-the library. +- +- We call this license the "Lesser" General Public License because it +-does Less to protect the user's freedom than the ordinary General +-Public License. It also provides other free software developers Less +-of an advantage over competing non-free programs. These disadvantages +-are the reason we use the ordinary General Public License for many +-libraries. However, the Lesser license provides advantages in certain +-special circumstances. +- +- For example, on rare occasions, there may be a special need to +-encourage the widest possible use of a certain library, so that it becomes +-a de-facto standard. To achieve this, non-free programs must be +-allowed to use the library. A more frequent case is that a free +-library does the same job as widely used non-free libraries. In this +-case, there is little to gain by limiting the free library to free +-software only, so we use the Lesser General Public License. +- +- In other cases, permission to use a particular library in non-free +-programs enables a greater number of people to use a large body of +-free software. For example, permission to use the GNU C Library in +-non-free programs enables many more people to use the whole GNU +-operating system, as well as its variant, the GNU/Linux operating +-system. +- +- Although the Lesser General Public License is Less protective of the +-users' freedom, it does ensure that the user of a program that is +-linked with the Library has the freedom and the wherewithal to run +-that program using a modified version of the Library. +- +- The precise terms and conditions for copying, distribution and +-modification follow. Pay close attention to the difference between a +-"work based on the library" and a "work that uses the library". The +-former contains code derived from the library, whereas the latter must +-be combined with the library in order to run. +- +- GNU LESSER GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License Agreement applies to any software library or other +-program which contains a notice placed by the copyright holder or +-other authorized party saying it may be distributed under the terms of +-this Lesser General Public License (also called "this License"). +-Each licensee is addressed as "you". +- +- A "library" means a collection of software functions and/or data +-prepared so as to be conveniently linked with application programs +-(which use some of those functions and data) to form executables. +- +- The "Library", below, refers to any such software library or work +-which has been distributed under these terms. A "work based on the +-Library" means either the Library or any derivative work under +-copyright law: that is to say, a work containing the Library or a +-portion of it, either verbatim or with modifications and/or translated +-straightforwardly into another language. (Hereinafter, translation is +-included without limitation in the term "modification".) +- +- "Source code" for a work means the preferred form of the work for +-making modifications to it. For a library, complete source code means +-all the source code for all modules it contains, plus any associated +-interface definition files, plus the scripts used to control compilation +-and installation of the library. +- +- Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running a program using the Library is not restricted, and output from +-such a program is covered only if its contents constitute a work based +-on the Library (independent of the use of the Library in a tool for +-writing it). Whether that is true depends on what the Library does +-and what the program that uses the Library does. +- +- 1. You may copy and distribute verbatim copies of the Library's +-complete source code as you receive it, in any medium, provided that +-you conspicuously and appropriately publish on each copy an +-appropriate copyright notice and disclaimer of warranty; keep intact +-all the notices that refer to this License and to the absence of any +-warranty; and distribute a copy of this License along with the +-Library. +- +- You may charge a fee for the physical act of transferring a copy, +-and you may at your option offer warranty protection in exchange for a +-fee. +- +- 2. You may modify your copy or copies of the Library or any portion +-of it, thus forming a work based on the Library, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) The modified work must itself be a software library. +- +- b) You must cause the files modified to carry prominent notices +- stating that you changed the files and the date of any change. +- +- c) You must cause the whole of the work to be licensed at no +- charge to all third parties under the terms of this License. +- +- d) If a facility in the modified Library refers to a function or a +- table of data to be supplied by an application program that uses +- the facility, other than as an argument passed when the facility +- is invoked, then you must make a good faith effort to ensure that, +- in the event an application does not supply such function or +- table, the facility still operates, and performs whatever part of +- its purpose remains meaningful. +- +- (For example, a function in a library to compute square roots has +- a purpose that is entirely well-defined independent of the +- application. Therefore, Subsection 2d requires that any +- application-supplied function or table used by this function must +- be optional: if the application does not supply it, the square +- root function must still compute square roots.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Library, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Library, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote +-it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Library. +- +-In addition, mere aggregation of another work not based on the Library +-with the Library (or with a work based on the Library) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may opt to apply the terms of the ordinary GNU General Public +-License instead of this License to a given copy of the Library. To do +-this, you must alter all the notices that refer to this License, so +-that they refer to the ordinary GNU General Public License, version 2, +-instead of to this License. (If a newer version than version 2 of the +-ordinary GNU General Public License has appeared, then you can specify +-that version instead if you wish.) Do not make any other change in +-these notices. +- +- Once this change is made in a given copy, it is irreversible for +-that copy, so the ordinary GNU General Public License applies to all +-subsequent copies and derivative works made from that copy. +- +- This option is useful when you wish to copy part of the code of +-the Library into a program that is not a library. +- +- 4. You may copy and distribute the Library (or a portion or +-derivative of it, under Section 2) in object code or executable form +-under the terms of Sections 1 and 2 above provided that you accompany +-it with the complete corresponding machine-readable source code, which +-must be distributed under the terms of Sections 1 and 2 above on a +-medium customarily used for software interchange. +- +- If distribution of object code is made by offering access to copy +-from a designated place, then offering equivalent access to copy the +-source code from the same place satisfies the requirement to +-distribute the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 5. A program that contains no derivative of any portion of the +-Library, but is designed to work with the Library by being compiled or +-linked with it, is called a "work that uses the Library". Such a +-work, in isolation, is not a derivative work of the Library, and +-therefore falls outside the scope of this License. +- +- However, linking a "work that uses the Library" with the Library +-creates an executable that is a derivative of the Library (because it +-contains portions of the Library), rather than a "work that uses the +-library". The executable is therefore covered by this License. +-Section 6 states terms for distribution of such executables. +- +- When a "work that uses the Library" uses material from a header file +-that is part of the Library, the object code for the work may be a +-derivative work of the Library even though the source code is not. +-Whether this is true is especially significant if the work can be +-linked without the Library, or if the work is itself a library. The +-threshold for this to be true is not precisely defined by law. +- +- If such an object file uses only numerical parameters, data +-structure layouts and accessors, and small macros and small inline +-functions (ten lines or less in length), then the use of the object +-file is unrestricted, regardless of whether it is legally a derivative +-work. (Executables containing this object code plus portions of the +-Library will still fall under Section 6.) +- +- Otherwise, if the work is a derivative of the Library, you may +-distribute the object code for the work under the terms of Section 6. +-Any executables containing that work also fall under Section 6, +-whether or not they are linked directly with the Library itself. +- +- 6. As an exception to the Sections above, you may also combine or +-link a "work that uses the Library" with the Library to produce a +-work containing portions of the Library, and distribute that work +-under terms of your choice, provided that the terms permit +-modification of the work for the customer's own use and reverse +-engineering for debugging such modifications. +- +- You must give prominent notice with each copy of the work that the +-Library is used in it and that the Library and its use are covered by +-this License. You must supply a copy of this License. If the work +-during execution displays copyright notices, you must include the +-copyright notice for the Library among them, as well as a reference +-directing the user to the copy of this License. Also, you must do one +-of these things: +- +- a) Accompany the work with the complete corresponding +- machine-readable source code for the Library including whatever +- changes were used in the work (which must be distributed under +- Sections 1 and 2 above); and, if the work is an executable linked +- with the Library, with the complete machine-readable "work that +- uses the Library", as object code and/or source code, so that the +- user can modify the Library and then relink to produce a modified +- executable containing the modified Library. (It is understood +- that the user who changes the contents of definitions files in the +- Library will not necessarily be able to recompile the application +- to use the modified definitions.) +- +- b) Use a suitable shared library mechanism for linking with the +- Library. A suitable mechanism is one that (1) uses at run time a +- copy of the library already present on the user's computer system, +- rather than copying library functions into the executable, and (2) +- will operate properly with a modified version of the library, if +- the user installs one, as long as the modified version is +- interface-compatible with the version that the work was made with. +- +- c) Accompany the work with a written offer, valid for at +- least three years, to give the same user the materials +- specified in Subsection 6a, above, for a charge no more +- than the cost of performing this distribution. +- +- d) If distribution of the work is made by offering access to copy +- from a designated place, offer equivalent access to copy the above +- specified materials from the same place. +- +- e) Verify that the user has already received a copy of these +- materials or that you have already sent this user a copy. +- +- For an executable, the required form of the "work that uses the +-Library" must include any data and utility programs needed for +-reproducing the executable from it. However, as a special exception, +-the materials to be distributed need not include anything that is +-normally distributed (in either source or binary form) with the major +-components (compiler, kernel, and so on) of the operating system on +-which the executable runs, unless that component itself accompanies +-the executable. +- +- It may happen that this requirement contradicts the license +-restrictions of other proprietary libraries that do not normally +-accompany the operating system. Such a contradiction means you cannot +-use both them and the Library together in an executable that you +-distribute. +- +- 7. You may place library facilities that are a work based on the +-Library side-by-side in a single library together with other library +-facilities not covered by this License, and distribute such a combined +-library, provided that the separate distribution of the work based on +-the Library and of the other library facilities is otherwise +-permitted, and provided that you do these two things: +- +- a) Accompany the combined library with a copy of the same work +- based on the Library, uncombined with any other library +- facilities. This must be distributed under the terms of the +- Sections above. +- +- b) Give prominent notice with the combined library of the fact +- that part of it is a work based on the Library, and explaining +- where to find the accompanying uncombined form of the same work. +- +- 8. You may not copy, modify, sublicense, link with, or distribute +-the Library except as expressly provided under this License. Any +-attempt otherwise to copy, modify, sublicense, link with, or +-distribute the Library is void, and will automatically terminate your +-rights under this License. However, parties who have received copies, +-or rights, from you under this License will not have their licenses +-terminated so long as such parties remain in full compliance. +- +- 9. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Library or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Library (or any work based on the +-Library), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Library or works based on it. +- +- 10. Each time you redistribute the Library (or any work based on the +-Library), the recipient automatically receives a license from the +-original licensor to copy, distribute, link with or modify the Library +-subject to these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties with +-this License. +- +- 11. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Library at all. For example, if a patent +-license would not permit royalty-free redistribution of the Library by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Library. +- +-If any portion of this section is held invalid or unenforceable under any +-particular circumstance, the balance of the section is intended to apply, +-and the section as a whole is intended to apply in other circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 12. If the distribution and/or use of the Library is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Library under this License may add +-an explicit geographical distribution limitation excluding those countries, +-so that distribution is permitted only in or among countries not thus +-excluded. In such case, this License incorporates the limitation as if +-written in the body of this License. +- +- 13. The Free Software Foundation may publish revised and/or new +-versions of the Lesser General Public License from time to time. +-Such new versions will be similar in spirit to the present version, +-but may differ in detail to address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Library +-specifies a version number of this License which applies to it and +-"any later version", you have the option of following the terms and +-conditions either of that version or of any later version published by +-the Free Software Foundation. If the Library does not specify a +-license version number, you may choose any version ever published by +-the Free Software Foundation. +- +- 14. If you wish to incorporate parts of the Library into other free +-programs whose distribution conditions are incompatible with these, +-write to the author to ask for permission. For software which is +-copyrighted by the Free Software Foundation, write to the Free +-Software Foundation; we sometimes make exceptions for this. Our +-decision will be guided by the two goals of preserving the free status +-of all derivatives of our free software and of promoting the sharing +-and reuse of software generally. +- +- NO WARRANTY +- +- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +- +- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +-DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Libraries +- +- If you develop a new library, and you want it to be of the greatest +-possible use to the public, we recommend making it free software that +-everyone can redistribute and change. You can do so by permitting +-redistribution under these terms (or, alternatively, under the terms of the +-ordinary General Public License). +- +- To apply these terms, attach the following notices to the library. It is +-safest to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least the +-"copyright" line and a pointer to where the full notice is found. +- +- +- Copyright (C) +- +- This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- This library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- +-Also add information on how to contact you by electronic and paper mail. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the library, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the +- library `Frob' (a library for tweaking knobs) written by James Random Hacker. +- +- , 1 April 1990 +- Ty Coon, President of Vice +- +-That's all there is to it! +diff --git a/COPYING.README b/COPYING.README +index de5b63215..11af93ca7 100644 +--- a/COPYING.README ++++ b/COPYING.README +@@ -2,17 +2,5 @@ Eigen is primarily MPL2 licensed. See COPYING.MPL2 and these links: + http://www.mozilla.org/MPL/2.0/ + http://www.mozilla.org/MPL/2.0/FAQ.html + +-Some files contain third-party code under BSD or LGPL licenses, whence the other +-COPYING.* files here. +- +-All the LGPL code is either LGPL 2.1-only, or LGPL 2.1-or-later. +-For this reason, the COPYING.LGPL file contains the LGPL 2.1 text. +- +-If you want to guarantee that the Eigen code that you are #including is licensed +-under the MPL2 and possibly more permissive licenses (like BSD), #define this +-preprocessor symbol: +- EIGEN_MPL2_ONLY +-For example, with most compilers, you could add this to your project CXXFLAGS: +- -DEIGEN_MPL2_ONLY +-This will cause a compilation error to be generated if you #include any code that is +-LGPL licensed. ++Some files contain third-party code under BSD or other MPL2-compatible licenses, ++whence the other COPYING.* files here. +\ No newline at end of file +diff --git a/Eigen/src/Core/util/NonMPL2.h b/Eigen/src/Core/util/NonMPL2.h +deleted file mode 100644 +index 1af67cf18..000000000 +--- a/Eigen/src/Core/util/NonMPL2.h ++++ /dev/null +@@ -1,3 +0,0 @@ +-#ifdef EIGEN_MPL2_ONLY +-#error Including non-MPL2 code in EIGEN_MPL2_ONLY mode +-#endif +diff --git a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +index 7803fd817..1a5d7faeb 100644 +--- a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h ++++ b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +@@ -24,8 +24,7 @@ namespace Eigen { + * \tparam Scalar the scalar type of the input matrices + * \tparam _UpLo The triangular part that will be used for the computations. It can be Lower + * or Upper. Default is Lower. +- * \tparam _OrderingType The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering, +- * unless EIGEN_MPL2_ONLY is defined, in which case the default is NaturalOrdering. ++ * \tparam _OrderingType The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering. + * + * \implsparsesolverconcept + * +diff --git a/bench/tensors/eigen_sycl_bench.sh b/bench/tensors/eigen_sycl_bench.sh +index 3f67b3d86..4cb8f7be4 100755 +--- a/bench/tensors/eigen_sycl_bench.sh ++++ b/bench/tensors/eigen_sycl_bench.sh +@@ -10,7 +10,6 @@ benchmark_main.cc \ + -march=native \ + -O3 \ + -DNDEBUG \ +--DEIGEN_MPL2_ONLY \ + -DEIGEN_USE_SYCL=1 \ + -DEIGEN_SYCL_LOCAL_MEM=1 \ + -no-serial-memop \ +diff --git a/bench/tensors/eigen_sycl_bench_contract.sh b/bench/tensors/eigen_sycl_bench_contract.sh +index 73fd6c4a0..3ab0138a1 100644 +--- a/bench/tensors/eigen_sycl_bench_contract.sh ++++ b/bench/tensors/eigen_sycl_bench_contract.sh +@@ -1,7 +1,7 @@ + rm -f tensor_contract_sycl_bench + : "${COMPUTECPP_PACKAGE_ROOT_DIR:?Need to set COMPUTECPP_PACKAGE_ROOT_DIR}" + echo "COMPUTECPP_PACKAGE_ROOT_DIR is set to: "$COMPUTECPP_PACKAGE_ROOT_DIR +-${COMPUTECPP_PACKAGE_ROOT_DIR}/bin/compute++ tensor_contract_sycl_bench.cc -I ../../ -I ${COMPUTECPP_PACKAGE_ROOT_DIR}/include/ -std=c++11 -O3 -DNDEBUG -DEIGEN_MPL2_ONLY -DEIGEN_USE_SYCL=1 -no-serial-memop -mllvm -inline-threshold=10000 -fsycl-ih-last -sycl-driver -Xclang -cl-mad-enable -lOpenCL -lComputeCpp -lpthread -o tensor_contract_sycl_bench ${@:1} ++${COMPUTECPP_PACKAGE_ROOT_DIR}/bin/compute++ tensor_contract_sycl_bench.cc -I ../../ -I ${COMPUTECPP_PACKAGE_ROOT_DIR}/include/ -std=c++11 -O3 -DNDEBUG -DEIGEN_USE_SYCL=1 -no-serial-memop -mllvm -inline-threshold=10000 -fsycl-ih-last -sycl-driver -Xclang -cl-mad-enable -lOpenCL -lComputeCpp -lpthread -o tensor_contract_sycl_bench ${@:1} + export LD_LIBRARY_PATH=${COMPUTECPP_PACKAGE_ROOT_DIR}/lib:$LD_LIBRARY_PATH + ./tensor_contract_sycl_bench + +diff --git a/doc/PreprocessorDirectives.dox b/doc/PreprocessorDirectives.dox +index 0f545b086..b7d59ccbc 100644 +--- a/doc/PreprocessorDirectives.dox ++++ b/doc/PreprocessorDirectives.dox +@@ -92,9 +92,6 @@ run time. However, these assertions do cost time and can thus be turned off. + - \b eigen_assert - macro with one argument that is used inside %Eigen for assertions. By default, it is + basically defined to be \c assert, which aborts the program if the assertion is violated. Redefine this + macro if you want to do something else, like throwing an exception. +- - \b EIGEN_MPL2_ONLY - disable non MPL2 compatible features, or in other words disable the features which +- are still under the LGPL. +- + + \section TopicPreprocessorDirectivesPerformance Alignment, vectorization and performance tweaking + +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index 5136f82aa..9f557743a 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -277,7 +277,6 @@ ei_add_test(special_numbers) + ei_add_test(rvalue_types) + ei_add_test(dense_storage) + ei_add_test(ctorleak) +-ei_add_test(mpl2only) + ei_add_test(inplace_decomposition) + ei_add_test(half_float) + ei_add_test(bfloat16_float) +diff --git a/test/mpl2only.cpp b/test/mpl2only.cpp +deleted file mode 100644 +index 296350d08..000000000 +--- a/test/mpl2only.cpp ++++ /dev/null +@@ -1,24 +0,0 @@ +-// This file is part of Eigen, a lightweight C++ template library +-// for linear algebra. +-// +-// Copyright (C) 2015 Gael Guennebaud +-// +-// This Source Code Form is subject to the terms of the Mozilla +-// Public License v. 2.0. If a copy of the MPL was not distributed +-// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. +- +-#ifndef EIGEN_MPL2_ONLY +-#define EIGEN_MPL2_ONLY +-#endif +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-int main() +-{ +- return 0; +-} +diff --git a/unsupported/Eigen/IterativeSolvers b/unsupported/Eigen/IterativeSolvers +index a3f58d676..f045fb607 100644 +--- a/unsupported/Eigen/IterativeSolvers ++++ b/unsupported/Eigen/IterativeSolvers +@@ -19,7 +19,6 @@ + * \defgroup IterativeLinearSolvers_Module Iterative solvers module + * This module aims to provide various iterative linear and non linear solver algorithms. + * It currently provides: +- * - a constrained conjugate gradient + * - a Householder GMRES implementation + * - an IDR(s) implementation + * - a DGMRES implementation +@@ -33,11 +32,6 @@ + + #include "../../Eigen/src/Core/util/DisableStupidWarnings.h" + +-#ifndef EIGEN_MPL2_ONLY +-#include "src/IterativeSolvers/IterationController.h" +-#include "src/IterativeSolvers/ConstrainedConjGrad.h" +-#endif +- + #include "src/IterativeSolvers/IncompleteLU.h" + #include "src/IterativeSolvers/GMRES.h" + #include "src/IterativeSolvers/DGMRES.h" +diff --git a/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h b/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +deleted file mode 100644 +index e7d70f39d..000000000 +--- a/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h ++++ /dev/null +@@ -1,187 +0,0 @@ +-// This file is part of Eigen, a lightweight C++ template library +-// for linear algebra. +-// +-// Copyright (C) 2008 Gael Guennebaud +- +-/* NOTE The functions of this file have been adapted from the GMM++ library */ +- +-//======================================================================== +-// +-// Copyright (C) 2002-2007 Yves Renard +-// +-// This file is a part of GETFEM++ +-// +-// Getfem++ is free software; you can redistribute it and/or modify +-// it under the terms of the GNU Lesser General Public License as +-// published by the Free Software Foundation; version 2.1 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU Lesser General Public License for more details. +-// You should have received a copy of the GNU Lesser General Public +-// License along with this program; if not, write to the Free Software +-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, +-// USA. +-// +-//======================================================================== +- +-#include "../../../../Eigen/src/Core/util/NonMPL2.h" +- +-#ifndef EIGEN_CONSTRAINEDCG_H +-#define EIGEN_CONSTRAINEDCG_H +- +-#include "../../../../Eigen/Core" +- +-namespace Eigen { +- +-namespace internal { +- +-/** \ingroup IterativeLinearSolvers_Module +- * Compute the pseudo inverse of the non-square matrix C such that +- * \f$ CINV = (C * C^T)^{-1} * C \f$ based on a conjugate gradient method. +- * +- * This function is internally used by constrained_cg. +- */ +-template +-void pseudo_inverse(const CMatrix &C, CINVMatrix &CINV) +-{ +- // optimisable : copie de la ligne, precalcul de C * trans(C). +- typedef typename CMatrix::Scalar Scalar; +- typedef typename CMatrix::Index Index; +- // FIXME use sparse vectors ? +- typedef Matrix TmpVec; +- +- Index rows = C.rows(), cols = C.cols(); +- +- TmpVec d(rows), e(rows), l(cols), p(rows), q(rows), r(rows); +- Scalar rho, rho_1, alpha; +- d.setZero(); +- +- typedef Triplet T; +- std::vector tripletList; +- +- for (Index i = 0; i < rows; ++i) +- { +- d[i] = 1.0; +- rho = 1.0; +- e.setZero(); +- r = d; +- p = d; +- +- while (rho >= 1e-38) +- { /* conjugate gradient to compute e */ +- /* which is the i-th row of inv(C * trans(C)) */ +- l = C.transpose() * p; +- q = C * l; +- alpha = rho / p.dot(q); +- e += alpha * p; +- r += -alpha * q; +- rho_1 = rho; +- rho = r.dot(r); +- p = (rho/rho_1) * p + r; +- } +- +- l = C.transpose() * e; // l is the i-th row of CINV +- // FIXME add a generic "prune/filter" expression for both dense and sparse object to sparse +- for (Index j=0; j +-void constrained_cg(const TMatrix& A, const CMatrix& C, VectorX& x, +- const VectorB& b, const VectorF& f, IterationController &iter) +-{ +- using std::sqrt; +- typedef typename TMatrix::Scalar Scalar; +- typedef typename TMatrix::Index Index; +- typedef Matrix TmpVec; +- +- Scalar rho = 1.0, rho_1, lambda, gamma; +- Index xSize = x.size(); +- TmpVec p(xSize), q(xSize), q2(xSize), +- r(xSize), old_z(xSize), z(xSize), +- memox(xSize); +- std::vector satured(C.rows()); +- p.setZero(); +- iter.setRhsNorm(sqrt(b.dot(b))); // gael vect_sp(PS, b, b) +- if (iter.rhsNorm() == 0.0) iter.setRhsNorm(1.0); +- +- SparseMatrix CINV(C.rows(), C.cols()); +- pseudo_inverse(C, CINV); +- +- while(true) +- { +- // computation of residual +- old_z = z; +- memox = x; +- r = b; +- r += A * -x; +- z = r; +- bool transition = false; +- for (Index i = 0; i < C.rows(); ++i) +- { +- Scalar al = C.row(i).dot(x) - f.coeff(i); +- if (al >= -1.0E-15) +- { +- if (!satured[i]) +- { +- satured[i] = true; +- transition = true; +- } +- Scalar bb = CINV.row(i).dot(z); +- if (bb > 0.0) +- // FIXME: we should allow that: z += -bb * C.row(i); +- for (typename CMatrix::InnerIterator it(C,i); it; ++it) +- z.coeffRef(it.index()) -= bb*it.value(); +- } +- else +- satured[i] = false; +- } +- +- // descent direction +- rho_1 = rho; +- rho = r.dot(z); +- +- if (iter.finished(rho)) break; +- if (transition || iter.first()) gamma = 0.0; +- else gamma = (std::max)(0.0, (rho - old_z.dot(z)) / rho_1); +- p = z + gamma*p; +- +- ++iter; +- // one dimensionnal optimization +- q = A * p; +- lambda = rho / q.dot(p); +- for (Index i = 0; i < C.rows(); ++i) +- { +- if (!satured[i]) +- { +- Scalar bb = C.row(i).dot(p) - f[i]; +- if (bb > 0.0) +- lambda = (std::min)(lambda, (f.coeff(i)-C.row(i).dot(x)) / bb); +- } +- } +- x += lambda * p; +- memox -= x; +- } +-} +- +-} // end namespace internal +- +-} // end namespace Eigen +- +-#endif // EIGEN_CONSTRAINEDCG_H +diff --git a/unsupported/Eigen/src/IterativeSolvers/IterationController.h b/unsupported/Eigen/src/IterativeSolvers/IterationController.h +deleted file mode 100644 +index a116e09e2..000000000 +--- a/unsupported/Eigen/src/IterativeSolvers/IterationController.h ++++ /dev/null +@@ -1,154 +0,0 @@ +-// This file is part of Eigen, a lightweight C++ template library +-// for linear algebra. +-// +-// Copyright (C) 2008-2009 Gael Guennebaud +- +-/* NOTE The class IterationController has been adapted from the iteration +- * class of the GMM++ and ITL libraries. +- */ +- +-//======================================================================= +-// Copyright (C) 1997-2001 +-// Authors: Andrew Lumsdaine +-// Lie-Quan Lee +-// +-// This file is part of the Iterative Template Library +-// +-// You should have received a copy of the License Agreement for the +-// Iterative Template Library along with the software; see the +-// file LICENSE. +-// +-// Permission to modify the code and to distribute modified code is +-// granted, provided the text of this NOTICE is retained, a notice that +-// the code was modified is included with the above COPYRIGHT NOTICE and +-// with the COPYRIGHT NOTICE in the LICENSE file, and that the LICENSE +-// file is distributed with the modified code. +-// +-// LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. +-// By way of example, but not limitation, Licensor MAKES NO +-// REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY +-// PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS +-// OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS +-// OR OTHER RIGHTS. +-//======================================================================= +- +-//======================================================================== +-// +-// Copyright (C) 2002-2007 Yves Renard +-// +-// This file is a part of GETFEM++ +-// +-// Getfem++ is free software; you can redistribute it and/or modify +-// it under the terms of the GNU Lesser General Public License as +-// published by the Free Software Foundation; version 2.1 of the License. +-// +-// This program is distributed in the hope that it will be useful, +-// but WITHOUT ANY WARRANTY; without even the implied warranty of +-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-// GNU Lesser General Public License for more details. +-// You should have received a copy of the GNU Lesser General Public +-// License along with this program; if not, write to the Free Software +-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, +-// USA. +-// +-//======================================================================== +- +-#include "../../../../Eigen/src/Core/util/NonMPL2.h" +- +-#ifndef EIGEN_ITERATION_CONTROLLER_H +-#define EIGEN_ITERATION_CONTROLLER_H +- +-namespace Eigen { +- +-/** \ingroup IterativeLinearSolvers_Module +- * \class IterationController +- * +- * \brief Controls the iterations of the iterative solvers +- * +- * This class has been adapted from the iteration class of GMM++ and ITL libraries. +- * +- */ +-class IterationController +-{ +- protected : +- double m_rhsn; ///< Right hand side norm +- size_t m_maxiter; ///< Max. number of iterations +- int m_noise; ///< if noise > 0 iterations are printed +- double m_resmax; ///< maximum residual +- double m_resminreach, m_resadd; +- size_t m_nit; ///< iteration number +- double m_res; ///< last computed residual +- bool m_written; +- void (*m_callback)(const IterationController&); +- public : +- +- void init() +- { +- m_nit = 0; m_res = 0.0; m_written = false; +- m_resminreach = 1E50; m_resadd = 0.0; +- m_callback = 0; +- } +- +- IterationController(double r = 1.0E-8, int noi = 0, size_t mit = size_t(-1)) +- : m_rhsn(1.0), m_maxiter(mit), m_noise(noi), m_resmax(r) { init(); } +- +- void operator ++(int) { m_nit++; m_written = false; m_resadd += m_res; } +- void operator ++() { (*this)++; } +- +- bool first() { return m_nit == 0; } +- +- /* get/set the "noisyness" (verbosity) of the solvers */ +- int noiseLevel() const { return m_noise; } +- void setNoiseLevel(int n) { m_noise = n; } +- void reduceNoiseLevel() { if (m_noise > 0) m_noise--; } +- +- double maxResidual() const { return m_resmax; } +- void setMaxResidual(double r) { m_resmax = r; } +- +- double residual() const { return m_res; } +- +- /* change the user-definable callback, called after each iteration */ +- void setCallback(void (*t)(const IterationController&)) +- { +- m_callback = t; +- } +- +- size_t iteration() const { return m_nit; } +- void setIteration(size_t i) { m_nit = i; } +- +- size_t maxIterarions() const { return m_maxiter; } +- void setMaxIterations(size_t i) { m_maxiter = i; } +- +- double rhsNorm() const { return m_rhsn; } +- void setRhsNorm(double r) { m_rhsn = r; } +- +- bool converged() const { return m_res <= m_rhsn * m_resmax; } +- bool converged(double nr) +- { +- using std::abs; +- m_res = abs(nr); +- m_resminreach = (std::min)(m_resminreach, m_res); +- return converged(); +- } +- template bool converged(const VectorType &v) +- { return converged(v.squaredNorm()); } +- +- bool finished(double nr) +- { +- if (m_callback) m_callback(*this); +- if (m_noise > 0 && !m_written) +- { +- converged(nr); +- m_written = true; +- } +- return (m_nit >= m_maxiter || converged(nr)); +- } +- template +- bool finished(const MatrixBase &v) +- { return finished(double(v.squaredNorm())); } +- +-}; +- +-} // end namespace Eigen +- +-#endif // EIGEN_ITERATION_CONTROLLER_H diff --git a/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb b/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb index 72044427dd..998a396af1 100644 --- a/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb +++ b/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb @@ -1,15 +1,20 @@ DESCRIPTION = "Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms." HOMEPAGE = "http://eigen.tuxfamily.org/" -LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-2.0-only & LGPL-2.1-only & MINPACK" +LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-2.0-only & Minpack" +# The GPL code is only used for benchmark tests and does not affect what is installed. +LICENSE:${PN} = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & Minpack" +LICENSE:${PN}-dbg = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & Minpack" +LICENSE:${PN}-dev = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & Minpack" LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad \ + file://COPYING.APACHE;md5=8de23b8e93c63005353056b2475e9aa5 \ file://COPYING.BSD;md5=2dd0510ee95e59ca28834b875bc96596 \ file://COPYING.GPL;md5=d32239bcb673463ab874e80d47fae504 \ - file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c \ file://COPYING.MINPACK;md5=71d91b0f75ce79a75d3108a72bef8116 \ " SRC_URI = "git://gitlab.com/libeigen/eigen.git;protocol=http;branch=3.4 \ file://0001-Default-eigen_packet_wrapper-constructor.patch \ + file://0002-Remove-LGPL-Code-and-references.patch \ " SRCREV = "3147391d946bb4b6c68edd901f2add6ac1f31f8c"