aboutsummaryrefslogtreecommitdiff
path: root/academic
diff options
context:
space:
mode:
authorFellype do Nascimento <fellype (at) gmail (dot) com>2023-04-20 22:10:09 +0100
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2023-04-22 11:38:29 +0700
commit44c088db793d9490ae359ea750331714e7adc794 (patch)
tree46f8eb79f942b6311ef67d241b8cb74462f7645b /academic
parent5f19b4539831b762c4045e4ebdc16498f596b0d7 (diff)
academic/labplot2: Updated for version 2.10.0.
Signed-off-by: bedlam <dave@slackbuilds.org> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'academic')
-rw-r--r--academic/labplot2/README4
-rw-r--r--academic/labplot2/labplot2.SlackBuild16
-rw-r--r--academic/labplot2/labplot2.info8
-rw-r--r--academic/labplot2/p1_do_not_build_dbc_parser_and_vector_blf.patch55
-rw-r--r--academic/labplot2/p2.patch875
-rw-r--r--academic/labplot2/p3.patch50
6 files changed, 995 insertions, 13 deletions
diff --git a/academic/labplot2/README b/academic/labplot2/README
index d2d56dd8cd857..11b9ca743063c 100644
--- a/academic/labplot2/README
+++ b/academic/labplot2/README
@@ -16,6 +16,8 @@ in LabPlot1.
optional dependencies:
-- fftw
- hdf5
- netcdf
+- cfitsio
+- matio
+- discount
diff --git a/academic/labplot2/labplot2.SlackBuild b/academic/labplot2/labplot2.SlackBuild
index 525baee06e6c9..4fa929a9ee25d 100644
--- a/academic/labplot2/labplot2.SlackBuild
+++ b/academic/labplot2/labplot2.SlackBuild
@@ -3,7 +3,7 @@
# Slackware build script for LabPlot
# Based on the Slackware 15.0 SlackBuild and AUR PKGBUILD for labplot
#
-# Copyright 2014-2022, Fellype do Nascimento, Guaratingueta - Brazil
+# Copyright 2014-2023, Fellype do Nascimento, Guaratingueta - Brazil
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -24,10 +24,10 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cd $(dirname $0) ; CWD=$(pwd)
+NAME=labplot
PRGNAM=labplot2
-NAME=labplot
-VERSION=${VERSION:-2.9.0}
+VERSION=${VERSION:-2.10.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -75,10 +75,11 @@ rm -rf $NAME-$VERSION
tar -xJf $CWD/$NAME-$VERSION.tar.xz
cd $NAME-$VERSION
-# Avoid readstat-1.1.6.tar.gz to be removed and downloaded again from github.
-# Use the one downloaded previously instead.
-sed -i "s:https\://github.com/WizardMac/ReadStat/releases/download/v\${ext_version}/readstat-\${ext_version}.tar.gz:$CWD/readstat-1.1.6.tar.gz:" src/3rdparty/CMakeLists.txt
-
+# Apply patches to avoid the download of dbc parser and Vector BLF (not used here)
+patch -p1 < $CWD/p1_do_not_build_dbc_parser_and_vector_blf.patch src/3rdparty/CMakeLists.txt
+patch -p1 < $CWD/p2.patch tests/import_export/CAN/BLFFilterTest.cpp
+patch -p1 < $CWD/p3.patch tests/import_export/CAN/BLFFilterTest.h
+
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
@@ -94,6 +95,7 @@ cmake ./ -DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_BUILD_TYPE=Release \
-DMAN_INSTALL_DIR=/usr/man \
+ -DENABLE_READSTAT=OFF \
..
make
make install/strip DESTDIR=$PKG
diff --git a/academic/labplot2/labplot2.info b/academic/labplot2/labplot2.info
index e2d5be4ad88d8..43ecf7c119d96 100644
--- a/academic/labplot2/labplot2.info
+++ b/academic/labplot2/labplot2.info
@@ -1,10 +1,8 @@
PRGNAM="labplot2"
-VERSION="2.9.0"
+VERSION="2.10.0"
HOMEPAGE="https://labplot.kde.org/"
-DOWNLOAD="https://download.kde.org/stable/labplot/2.9.0/labplot-2.9.0.tar.xz \
- https://github.com/WizardMac/ReadStat/releases/download/v1.1.6/readstat-1.1.6.tar.gz"
-MD5SUM="6a189f66f610954aa54461f4faf9815d \
- b95f9385ecd629f665d8c5d7e2570398"
+DOWNLOAD="https://download.kde.org/stable/labplot/labplot-2.10.0.tar.xz"
+MD5SUM="a276d0449e7913bbd655ed1558df09d0"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/academic/labplot2/p1_do_not_build_dbc_parser_and_vector_blf.patch b/academic/labplot2/p1_do_not_build_dbc_parser_and_vector_blf.patch
new file mode 100644
index 0000000000000..9e9b14a3dc6dc
--- /dev/null
+++ b/academic/labplot2/p1_do_not_build_dbc_parser_and_vector_blf.patch
@@ -0,0 +1,55 @@
+--- CMakeLists.txt 2023-03-18 18:11:00.000000000 -0300
++++ CMakeLists.txt.new 2023-04-14 19:55:11.222386447 -0300
+@@ -67,15 +67,16 @@
+
+ ### Vector BLF ###############################
+ FIND_PACKAGE(PkgConfig REQUIRED)
+-option(LOCAL_DBC_PARSER "Use local build of dbc parser" ON)
+-option(LOCAL_VECTOR_BLF "Use local build of Vector BLF" ON)
++# git download is not allowed on all system (set to ON if needed)
++option(LOCAL_DBC_PARSER "Use local build of dbc parser" OFF)
++option(LOCAL_VECTOR_BLF "Use local build of Vector BLF" OFF)
+ if (ENABLE_VECTOR_BLF)
+ set(OPTION_RUN_DOXYGEN OFF CACHE BOOL "" FORCE) # disable running doxygen
+ if (${LOCAL_DBC_PARSER})
+ FetchContent_Declare(
+ dbc_parser_cpp
+ GIT_REPOSITORY https://github.com/Murmele/dbc_parser_cpp.git
+- GIT_TAG ca69d0dd08a03fc0210820a4f81bfd217ad25722
++ GIT_TAG 18a2a4e46f44a06617e1fa9c2e4524eff2bc389d
+ #GIT_REPOSITORY https://github.com/LinuxDevon/dbc_parser_cpp.git
+ #GIT_TAG master
+ )
+@@ -87,11 +88,14 @@
+ # the path must be added
+ target_include_directories(labplot2lib PUBLIC ${dbc_parser_cpp_SOURCE_DIR}/include)
+ target_link_libraries(labplot2lib dbc)
++ target_compile_definitions(labplot2lib PRIVATE HAVE_DBC_PARSER)
+ else ()
+- pkg_check_modules(dbc REQUIRED IMPORTED_TARGET GLOBAL dbc)
++ pkg_check_modules(dbc IMPORTED_TARGET GLOBAL dbc)
++ if (dbc_FOUND)
+ target_link_libraries(labplot2lib PkgConfig::dbc)
+- endif()
+ target_compile_definitions(labplot2lib PRIVATE HAVE_DBC_PARSER)
++ endif()
++ endif()
+
+ if (${LOCAL_VECTOR_BLF})
+ FetchContent_Declare(
+@@ -111,10 +115,13 @@
+ target_include_directories(Vector_BLF PUBLIC ${vector_blf_SOURCE_DIR}/src
+ ${vector_blf_BINARY_DIR}/src) # config.h is in there
+ target_link_libraries(labplot2lib Vector_BLF)
++ target_compile_definitions(labplot2lib PRIVATE HAVE_VECTOR_BLF)
+ else()
+- pkg_check_modules(Vector_BLF REQUIRED IMPORTED_TARGET GLOBAL Vector_BLF)
++ pkg_check_modules(Vector_BLF IMPORTED_TARGET GLOBAL Vector_BLF)
++ if (Vector_BLF_FOUND)
+ target_link_libraries(labplot2lib PkgConfig::Vector_BLF)
+- endif()
+ target_compile_definitions(labplot2lib PRIVATE HAVE_VECTOR_BLF)
++ endif()
++ endif()
+ endif()
+
diff --git a/academic/labplot2/p2.patch b/academic/labplot2/p2.patch
new file mode 100644
index 0000000000000..51a58d97b1a2e
--- /dev/null
+++ b/academic/labplot2/p2.patch
@@ -0,0 +1,875 @@
+--- BLFFilterTest.cpp 2023-03-18 18:11:03.000000000 -0300
++++ BLFFilterTest.cpp.new 2023-04-17 19:04:26.304237377 -0300
+@@ -1,12 +1,12 @@
+ /*
+- File : BLFFilterTest.cpp
++ F ile : B*LFFilterTest.cpp
+ Project : LabPlot
+ Description : Tests for the BLF Filter
+ --------------------------------------------------------------------
+ SPDX-FileCopyrightText: 2023 Martin Marmsoler <martin.marmsoler@gmail.com>
+
+ SPDX-License-Identifier: GPL-2.0-or-later
+-*/
++ */
+
+ #include "BLFFilterTest.h"
+ #include "backend/datasources/filters/CANFilterPrivate.h"
+@@ -15,10 +15,12 @@
+ #include "qtestcase.h"
+ #include <math.h>
+
++#ifdef HAVE_VECTOR_BLF
++
+ #include <Vector/BLF.h>
+
+ static const std::string PRIMITIVE_DBC =
+- R"(VERSION "1.0.0"
++R"(VERSION "1.0.0"
+
+ NS_ :
+
+@@ -101,20 +103,20 @@
+ QTemporaryFile dbcFile(QStringLiteral("XXXXXX.dbc"));
+ QVERIFY(dbcFile.open());
+ const auto dbcContent = R"(BO_ 234 MSG1: 8 Vector__XXX
+-SG_ Sig1 : 0|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
+-SG_ Sig2 : 8|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
+-
+- // Start Test
+-
+- VectorBLFFilter filter;
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // File is valid, but dbc file not
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 2); // column count not changed means no data was added
++ SG_ Sig1 : 0|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
++ SG_ Sig2 : 8|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
++
++// Start Test
++
++VectorBLFFilter filter;
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// File is valid, but dbc file not
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 2); // column count not changed means no data was added
+ }
+
+ void BLFFilterTest::testValidBLFValidDBCSingleMessageBigEndian() {
+@@ -130,40 +132,40 @@
+ const auto dbcContent = R"(BO_ 234 MSG1: 8 Vector__XXX
+ SG_ Sig1 : 7|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
+ SG_ Sig2 : 15|8@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++VectorBLFFilter filter;
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 3); // time + Sig1 + Sig2
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 3); // time + Sig1 + Sig2
+
+- {
++{
+ // Time
+ const auto* c = s.column(0);
+ QCOMPARE(c->rowCount(), 1);
+ QCOMPARE(c->valueAt(0), 5e-9); // nanoseconds
+- }
++}
+
+- {
++{
+ // Sig1
+ const auto* c = s.column(1);
+ QCOMPARE(c->rowCount(), 1);
+ QCOMPARE(c->valueAt(0), 0x01 * 0.1);
+- }
++}
+
+- {
++{
+ // Sig2
+ const auto* c = s.column(2);
+ QCOMPARE(c->rowCount(), 1);
+ QCOMPARE(c->valueAt(0), 0x02 * 0.1);
+- }
++}
+ }
+
+ // Use the previous value if there is no value at the current timestamp
+@@ -188,24 +190,24 @@
+ SG_ MSG1Sig2 : 23|16@0+ (0.1,0) [0|6553.5] "V" Vector__XXX
+ SG_ MSG1Sig3 : 55|16@0- (0.1,0) [0|0] "" Vector__XXX
+ SG_ MSG1Sig4 : 7|16@0+ (0.1,0) [0|6553.5] "V" Vector__XXX
+-BO_ 565 MSG2: 8 Vector__XXX
++ BO_ 565 MSG2: 8 Vector__XXX
+ SG_ MSG2Sig1 : 55|16@0- (0.1,0) [0|0] "" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatPrevious);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 6); // time + Msg1Sig1 + Msg1Sig2 + Msg1Sig3 + Msg1Sig4 + Msg2Sig1
++VectorBLFFilter filter;
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatPrevious);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 6); // time + Msg1Sig1 + Msg1Sig2 + Msg1Sig3 + Msg1Sig4 + Msg2Sig1
+
+- {
++{
+ const auto* c = s.column(0);
+ QCOMPARE(c->name(), QStringLiteral("Time_s"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -215,9 +217,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ const auto* c = s.column(1);
+ QCOMPARE(c->name(), QStringLiteral("MSG1Sig1_%"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -227,9 +229,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ const auto* c = s.column(2);
+ QCOMPARE(c->name(), QStringLiteral("MSG1Sig2_V"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -239,9 +241,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ const auto* c = s.column(3);
+ QCOMPARE(c->name(), QStringLiteral("MSG1Sig3_"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -251,9 +253,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ const auto* c = s.column(4);
+ QCOMPARE(c->name(), QStringLiteral("MSG1Sig4_V"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -263,9 +265,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ const auto* c = s.column(5);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Sig1_"));
+ QCOMPARE(c->rowCount(), 6);
+@@ -275,7 +277,7 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+ }
+
+ // Use NAN if the current message does not contain no value for the signal
+@@ -298,26 +300,26 @@
+ const auto dbcContent = R"(BO_ 234 MSG1: 8 Vector__XXX
+ SG_ Msg1Sig1 : 7|8@0+ (1,0) [-3276.8|-3276.7] "C" Vector__XXX
+ SG_ Msg1Sig2 : 15|8@0+ (1,0) [-3276.8|-3276.7] "km/h" Vector__XXX
+-BO_ 123 MSG2: 8 Vector__XXX
++ BO_ 123 MSG2: 8 Vector__XXX
+ SG_ Msg2Sig1 : 7|8@0+ (1,0) [-3276.8|-3276.7] "mm" Vector__XXX
+ SG_ Msg2Sig2 : 15|8@0+ (1,0) [-3276.8|-3276.7] "m" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setConvertTimeToSeconds(true);
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 5); // time + Msg1Sig1 + Msg1Sig2 + Msg2Sig1 + Msg2Sig2
++VectorBLFFilter filter;
++filter.setConvertTimeToSeconds(true);
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 5); // time + Msg1Sig1 + Msg1Sig2 + Msg2Sig1 + Msg2Sig2
+
+- {
++{
+ // Time
+ const auto* c = s.column(0);
+ QCOMPARE(c->name(), QStringLiteral("Time_s"));
+@@ -328,9 +330,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig1
+ const auto* c = s.column(1);
+ QCOMPARE(c->name(), QStringLiteral("Msg1Sig1_C"));
+@@ -341,9 +343,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig2
+ const auto* c = s.column(2);
+ QCOMPARE(c->name(), QStringLiteral("Msg1Sig2_km/h"));
+@@ -354,9 +356,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig1
+ const auto* c = s.column(3);
+ QCOMPARE(c->name(), QStringLiteral("Msg2Sig1_mm"));
+@@ -367,9 +369,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig2
+ const auto* c = s.column(4);
+ QCOMPARE(c->name(), QStringLiteral("Msg2Sig2_m"));
+@@ -380,7 +382,7 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+ }
+
+ void BLFFilterTest::testTimeNative() {
+@@ -402,26 +404,26 @@
+ const auto dbcContent = R"(BO_ 234 MSG1: 8 Vector__XXX
+ SG_ Msg1Sig1 : 0|8@0+ (1,0) [-3276.8|-3276.7] "C" Vector__XXX
+ SG_ Msg1Sig2 : 8|8@0+ (1,0) [-3276.8|-3276.7] "km/h" Vector__XXX
+-BO_ 123 MSG2: 8 Vector__XXX
++ BO_ 123 MSG2: 8 Vector__XXX
+ SG_ Msg2Sig1 : 0|8@0+ (1,0) [-3276.8|-3276.7] "mm" Vector__XXX
+ SG_ Msg2Sig2 : 8|8@0+ (1,0) [-3276.8|-3276.7] "m" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setConvertTimeToSeconds(false);
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 5); // time + Msg1Sig1 + Msg1Sig2 + Msg2Sig1 + Msg2Sig2
++VectorBLFFilter filter;
++filter.setConvertTimeToSeconds(false);
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 5); // time + Msg1Sig1 + Msg1Sig2 + Msg2Sig1 + Msg2Sig2
+
+- {
++{
+ // Time
+ const auto* c = s.column(0);
+ QCOMPARE(c->name(), QStringLiteral("Time_ns"));
+@@ -432,7 +434,7 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+ }
+
+ // Value5 is a value larger than one byte, but not exactly a multiple
+@@ -457,92 +459,92 @@
+ SG_ Value7 : 30|2@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value4 : 11|4@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value1 : 0|8@1+ (1,0) [0|204] "Km/h" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setConvertTimeToSeconds(true);
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- QCOMPARE(filter.d->readDataFromFile(blfFileName.fileName(), 4), 3);
+- const auto dc = filter.dataContainer();
+- QCOMPARE(dc.size(), 8); // Time + 7 signals
+- {
++VectorBLFFilter filter;
++filter.setConvertTimeToSeconds(true);
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++QCOMPARE(filter.d->readDataFromFile(blfFileName.fileName(), 4), 3);
++const auto dc = filter.dataContainer();
++QCOMPARE(dc.size(), 8); // Time + 7 signals
++{
+ // Time
+ const auto* v = static_cast<QVector<double>*>(dc.at(0));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 5e-9);
+ QCOMPARE(v->at(1), 10e-9);
+ QCOMPARE(v->at(2), 15e-9);
+- }
++}
+
+- {
++{
+ // Value6
+ const auto* v = static_cast<QVector<double>*>(dc.at(1));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 2.);
+ QCOMPARE(v->at(1), 3.);
+ QCOMPARE(v->at(2), 3.);
+- }
++}
+
+- {
++{
+ // Value5
+ const auto* v = static_cast<QVector<double>*>(dc.at(2));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 0.);
+ QCOMPARE(v->at(1), 32.);
+ QCOMPARE(v->at(2), 51.);
+- }
++}
+
+- {
++{
+ // Value2
+ const auto* v = static_cast<QVector<double>*>(dc.at(3));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 0.);
+ QCOMPARE(v->at(1), 0.);
+ QCOMPARE(v->at(2), 0.);
+- }
++}
+
+- {
++{
+ // Value3
+ const auto* v = static_cast<QVector<double>*>(dc.at(4));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 1.);
+ QCOMPARE(v->at(1), 1.);
+ QCOMPARE(v->at(2), 1.);
+- }
++}
+
+- {
++{
+ // Value7
+ const auto* v = static_cast<QVector<double>*>(dc.at(5));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 0.);
+ QCOMPARE(v->at(1), 0.);
+ QCOMPARE(v->at(2), 0.);
+- }
++}
+
+- {
++{
+ // Value4
+ const auto* v = static_cast<QVector<double>*>(dc.at(6));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 0.);
+ QCOMPARE(v->at(1), 0.);
+ QCOMPARE(v->at(2), 0.);
+- }
++}
+
+- {
++{
+ // Value1
+ const auto* v = static_cast<QVector<double>*>(dc.at(7));
+ QCOMPARE(v->length(), 3);
+ QCOMPARE(v->at(0), 0.);
+ QCOMPARE(v->at(1), 47.);
+ QCOMPARE(v->at(2), 57.);
+- }
++}
+ }
+
+ // Use NAN if the current message does not contain no value for the signal
+@@ -568,28 +570,28 @@
+ SG_ Value7 : 30|2@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value4 : 11|4@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value1 : 0|8@1+ (1,0) [0|204] "Km/h" Vector__XXX"
+-BO_ 541 MSG2: 8 Vector__XXX
++ BO_ 541 MSG2: 8 Vector__XXX
+ SG_ MSG2Value4 : 48|16@1+ (0.01,-40) [-40|125] "C" Vector__XXX
+ SG_ MSG2Value1 : 0|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+ SG_ MSG2Value3 : 32|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+ SG_ MSG2Value2 : 16|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setConvertTimeToSeconds(true);
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 12); // time + 7 * Msg1 + 4* Msg2
++VectorBLFFilter filter;
++filter.setConvertTimeToSeconds(true);
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatNAN);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 12); // time + 7 * Msg1 + 4* Msg2
+
+- {
++{
+ // Time
+ const auto* c = s.column(0);
+ QCOMPARE(c->name(), QStringLiteral("Time_s"));
+@@ -600,9 +602,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig6
+ const auto* c = s.column(1);
+ QCOMPARE(c->name(), QStringLiteral("Value6_"));
+@@ -613,9 +615,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig5
+ const auto* c = s.column(2);
+ QCOMPARE(c->name(), QStringLiteral("Value5_%"));
+@@ -626,9 +628,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig2
+ const auto* c = s.column(3);
+ QCOMPARE(c->name(), QStringLiteral("Value2_"));
+@@ -639,9 +641,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig3
+ const auto* c = s.column(4);
+ QCOMPARE(c->name(), QStringLiteral("Value3_"));
+@@ -652,9 +654,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig7
+ const auto* c = s.column(5);
+ QCOMPARE(c->name(), QStringLiteral("Value7_"));
+@@ -665,9 +667,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg12Sig4
+ const auto* c = s.column(6);
+ QCOMPARE(c->name(), QStringLiteral("Value4_"));
+@@ -678,9 +680,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig1
+ const auto* c = s.column(7);
+ QCOMPARE(c->name(), QStringLiteral("Value1_Km/h"));
+@@ -691,9 +693,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig4
+ const auto* c = s.column(8);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value4_C"));
+@@ -704,9 +706,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig1
+ const auto* c = s.column(9);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value1_%"));
+@@ -717,9 +719,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig3
+ const auto* c = s.column(10);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value3_%"));
+@@ -730,9 +732,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig2
+ const auto* c = s.column(11);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value2_%"));
+@@ -743,7 +745,7 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+ }
+
+ // Use previous value if the current message does not contain no value for the signal
+@@ -769,28 +771,28 @@
+ SG_ Value7 : 30|2@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value4 : 11|4@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ Value1 : 0|8@1+ (1,0) [0|204] "Km/h" Vector__XXX"
+-BO_ 541 MSG2: 8 Vector__XXX
++ BO_ 541 MSG2: 8 Vector__XXX
+ SG_ MSG2Value4 : 48|16@1+ (0.01,-40) [-40|125] "C" Vector__XXX
+ SG_ MSG2Value1 : 0|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+ SG_ MSG2Value3 : 32|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+ SG_ MSG2Value2 : 16|16@1+ (0.01,0) [0|100] "%" Vector__XXX
+-)";
+- createDBCFile(dbcFile.fileName(), dbcContent);
++ )";
++createDBCFile(dbcFile.fileName(), dbcContent);
+
+- // Start Test
++// Start Test
+
+- VectorBLFFilter filter;
+- filter.setConvertTimeToSeconds(true);
+- filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatPrevious);
+- QCOMPARE(filter.isValid(blfFileName.fileName()), true);
+-
+- // Valid blf and valid dbc
+- filter.setDBCFile(dbcFile.fileName());
+- Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
+- filter.readDataFromFile(blfFileName.fileName(), &s);
+- QCOMPARE(s.columnCount(), 12); // time + 7 * Msg1 + 4* Msg2
++VectorBLFFilter filter;
++filter.setConvertTimeToSeconds(true);
++filter.setTimeHandlingMode(CANFilter::TimeHandling::ConcatPrevious);
++QCOMPARE(filter.isValid(blfFileName.fileName()), true);
++
++// Valid blf and valid dbc
++filter.setDBCFile(dbcFile.fileName());
++Spreadsheet s(QStringLiteral("TestSpreadsheet"), false);
++filter.readDataFromFile(blfFileName.fileName(), &s);
++QCOMPARE(s.columnCount(), 12); // time + 7 * Msg1 + 4* Msg2
+
+- {
++{
+ // Time
+ const auto* c = s.column(0);
+ QCOMPARE(c->name(), QStringLiteral("Time_s"));
+@@ -801,9 +803,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig6
+ const auto* c = s.column(1);
+ QCOMPARE(c->name(), QStringLiteral("Value6_"));
+@@ -814,9 +816,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig5
+ const auto* c = s.column(2);
+ QCOMPARE(c->name(), QStringLiteral("Value5_%"));
+@@ -827,9 +829,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig2
+ const auto* c = s.column(3);
+ QCOMPARE(c->name(), QStringLiteral("Value2_"));
+@@ -840,9 +842,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig3
+ const auto* c = s.column(4);
+ QCOMPARE(c->name(), QStringLiteral("Value3_"));
+@@ -853,9 +855,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig7
+ const auto* c = s.column(5);
+ QCOMPARE(c->name(), QStringLiteral("Value7_"));
+@@ -866,9 +868,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg12Sig4
+ const auto* c = s.column(6);
+ QCOMPARE(c->name(), QStringLiteral("Value4_"));
+@@ -879,9 +881,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg1Sig1
+ const auto* c = s.column(7);
+ QCOMPARE(c->name(), QStringLiteral("Value1_Km/h"));
+@@ -892,9 +894,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ QCOMPARE(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig4
+ const auto* c = s.column(8);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value4_C"));
+@@ -905,9 +907,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig1
+ const auto* c = s.column(9);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value1_%"));
+@@ -918,9 +920,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig3
+ const auto* c = s.column(10);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value3_%"));
+@@ -931,9 +933,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
++}
+
+- {
++{
+ // Msg2Sig2
+ const auto* c = s.column(11);
+ QCOMPARE(c->name(), QStringLiteral("MSG2Value2_%"));
+@@ -944,7 +946,9 @@
+ for (int i = 0; i < c->rowCount(); i++) {
+ VALUES_EQUAL(c->valueAt(i), refData.at(i));
+ }
+- }
+ }
++}
++
++#endif
+
+ QTEST_MAIN(BLFFilterTest)
diff --git a/academic/labplot2/p3.patch b/academic/labplot2/p3.patch
new file mode 100644
index 0000000000000..e2942e02eaf03
--- /dev/null
+++ b/academic/labplot2/p3.patch
@@ -0,0 +1,50 @@
+--- BLFFilterTest.h 2023-03-18 18:11:03.000000000 -0300
++++ BLFFilterTest.h.new 2023-04-17 19:03:30.503938882 -0300
+@@ -1,12 +1,12 @@
+ /*
+- File : BLFFilterTest.h
+- Project : LabPlot
+- Description : Tests for the BLF filter
+- --------------------------------------------------------------------
+- SPDX-FileCopyrightText: 2023 Martin Marmsoler <martin.marmsoler@gmail.com>
+-
+- SPDX-License-Identifier: GPL-2.0-or-later
+-*/
++ * File : BLFFilterTest.h
++ * Project : LabPlot
++ * Description : Tests for the BLF filter
++ * --------------------------------------------------------------------
++ * SPDX-FileCopyrightText: 2023 Martin Marmsoler <martin.marmsoler@gmail.com>
++ *
++ * SPDX-License-Identifier: GPL-2.0-or-later
++ */
+ #ifndef BLFFILTERTEST_H
+ #define BLFFILTERTEST_H
+
+@@ -14,15 +14,16 @@
+ #include <QtTest>
+
+ namespace Vector {
+-namespace BLF {
+-struct CanMessage2;
+-} // namespace BLF
++ namespace BLF {
++ struct CanMessage2;
++ } // namespace BLF
+ } // namespace Vector
+
+ class BLFFilterTest : public CommonTest {
+ Q_OBJECT
+
+ private Q_SLOTS:
++ #ifdef HAVE_VECTOR_BLF
+ void testInvalidBLF();
+ void testNotFoundBLF();
+ void testInvalidDBC();
+@@ -42,5 +43,6 @@
+ void createDBCFile(const QString& filename, const std::string& content);
+ Vector::BLF::CanMessage2* createCANMessage(uint32_t id, uint64_t timestamp, const std::vector<uint8_t>& data);
+ void createBLFFile(const QString& filename, QVector<Vector::BLF::CanMessage2*> messages);
++ #endif
+ };
+ #endif // BLFFILTERTEST_H