summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2020-05-20 23:36:43 +0200
committerAndreas Sturmlechner <asturm@gentoo.org>2020-05-21 00:17:52 +0200
commit15ac48991620a8b7f73d67788bed75b7ab8853b7 (patch)
tree5d04734dcef48e05128723c01f9b803bf58bf605 /sci-libs/liborigin
parentdev-util/kdbg: Switch to https (diff)
downloadgentoo-15ac48991620a8b7f73d67788bed75b7ab8853b7.tar.gz
gentoo-15ac48991620a8b7f73d67788bed75b7ab8853b7.tar.bz2
gentoo-15ac48991620a8b7f73d67788bed75b7ab8853b7.zip
sci-libs/liborigin: 3.0.0 version bump
Package-Manager: Portage-2.3.99, Repoman-2.3.22 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'sci-libs/liborigin')
-rw-r--r--sci-libs/liborigin/Manifest1
-rw-r--r--sci-libs/liborigin/files/liborigin-3.0.0-buildsystem.patch166
-rw-r--r--sci-libs/liborigin/files/liborigin-3.0.0-missing-header.patch38
-rw-r--r--sci-libs/liborigin/files/liborigin-3.0.0-no-exit-calls.patch89
-rw-r--r--sci-libs/liborigin/files/liborigin-3.0.0-no-standard-streams.patch210
-rw-r--r--sci-libs/liborigin/liborigin-3.0.0.ebuild55
-rw-r--r--sci-libs/liborigin/metadata.xml6
7 files changed, 562 insertions, 3 deletions
diff --git a/sci-libs/liborigin/Manifest b/sci-libs/liborigin/Manifest
index 9f0b954a93d3..9b2da118ce9d 100644
--- a/sci-libs/liborigin/Manifest
+++ b/sci-libs/liborigin/Manifest
@@ -1 +1,2 @@
+DIST liborigin-3.0.0.tar.gz 156736 BLAKE2B 1c1fda3fc3ad47394b65637a808eca1ecf4cff19eb49de0811e50d395c3b7759f8ec19c680ed83f7a8191022aa17b4ba1211baa6ea16a48a5153736d9138ed5c SHA512 1cf00ec33a90b4baede0cd3b2a3e6d78ca4810511c6be58c4d1cce12e7e1001752422fe2ddbca80cd9016b91c5321eca1ab43606ace3acc21955a034ebc4094c
DIST liborigin2-20110829.zip 158364 BLAKE2B fb6902142fe20bd29c8f3dd4c6d0c77b6f94e66f082c6950809367a4049adc1092a5e1abc2705670a15a32d1d680c14fc05061d34d422cd55689bb778ee47fde SHA512 d0e4013a686fbc61c58b1f39e98aace91978bcadffbb2ef9d32576a3b2f19cc2443d595da2d3ecc19298ec6e29c20717db94e1fda6a64d71f3763841228a01c0
diff --git a/sci-libs/liborigin/files/liborigin-3.0.0-buildsystem.patch b/sci-libs/liborigin/files/liborigin-3.0.0-buildsystem.patch
new file mode 100644
index 000000000000..d8444dedafed
--- /dev/null
+++ b/sci-libs/liborigin/files/liborigin-3.0.0-buildsystem.patch
@@ -0,0 +1,166 @@
+From a751f00ebba9fa226860ed4e2c1ae5fa35622e89 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Wed, 20 May 2020 22:33:08 +0200
+Subject: [PATCH 1/4] Don't install bundled tree.hh
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 17c613b..a6b4b8a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -25,7 +25,6 @@ set (devel-headers
+ OriginObj.h
+ OriginFile.h
+ OriginParser.h
+- tree.hh
+ )
+
+ # LIB_SUFFIX can either be defined at cmake command line: cmake -DLIB_SUFFIX:STRING=64 ...
+--
+2.26.2
+
+
+From 0b4fa1ce0946bc293d798484c609c6a7ac5ab50a Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Wed, 20 May 2020 22:35:02 +0200
+Subject: [PATCH 2/4] No static target, compile opj2dat against the shared lib
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ CMakeLists.txt | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a6b4b8a..6f2d87b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -52,22 +52,16 @@ set_target_properties(origin PROPERTIES
+ VERSION ${LIBORIGIN_VERSION_MAJOR}.${LIBORIGIN_VERSION_MINOR}.${LIBORIGIN_VERSION_BUGFIX}
+ SOVERSION ${LIBORIGIN_VERSION_MAJOR} )
+
+-# static library
+-add_library (origin-static STATIC ${sources})
+-set_target_properties(origin-static PROPERTIES OUTPUT_NAME "origin" POSITION_INDEPENDENT_CODE ON)
+-
+ # inform on log setting
+ if (DEFINED GENERATE_CODE_FOR_LOG)
+ message("File parsing will be logged.")
+ target_compile_definitions(origin PRIVATE GENERATE_CODE_FOR_LOG=${GENERATE_CODE_FOR_LOG})
+- target_compile_definitions(origin-static PRIVATE GENERATE_CODE_FOR_LOG=${GENERATE_CODE_FOR_LOG})
+ else()
+ message("File parsing will NOT be logged. Define GENERATE_CODE_FOR_LOG to activate logging.")
+ endif ()
+
+ # install libraries
+ install(TARGETS origin DESTINATION lib${LIB_SUFFIX} OPTIONAL)
+-install(TARGETS origin-static DESTINATION lib${LIB_SUFFIX} OPTIONAL)
+
+ # install headers
+ install(FILES ${devel-headers} DESTINATION include/liborigin)
+@@ -77,7 +71,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liborigin.pc DESTINATION lib${LIB_SUFF
+
+ # command line util
+ add_executable(opj2dat opj2dat.cpp)
+-target_link_libraries (opj2dat origin-static)
++target_link_libraries (opj2dat origin)
+
+ install(TARGETS opj2dat DESTINATION bin OPTIONAL)
+
+--
+2.26.2
+
+
+From 5f4c497408a6f144e581dd17fb3e49963e8b6b2b Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Wed, 20 May 2020 22:43:52 +0200
+Subject: [PATCH 3/4] Don't install README COPYING etc., distro package does
+ that
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6f2d87b..4fc16e0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -76,7 +76,6 @@ target_link_libraries (opj2dat origin)
+ install(TARGETS opj2dat DESTINATION bin OPTIONAL)
+
+ # documentation
+-install(FILES COPYING FORMAT README DESTINATION share/doc/liborigin OPTIONAL)
+ configure_file(doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+ find_package(Doxygen)
+ if(DOXYGEN_FOUND)
+--
+2.26.2
+
+
+From bb554d88b78e7575c04cf3e79098f35b776c3878 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Wed, 20 May 2020 22:47:22 +0200
+Subject: [PATCH 4/4] Drop 'OPTIONAL' from install targets, add ENABLE_TOOLS
+ option
+
+I've never seen an optional install of library.
+ENABLE_TOOLS takes care of the binary.
+Doxygen is already optional.
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ CMakeLists.txt | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4fc16e0..1759eee 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -9,6 +9,8 @@ set(LIBORIGIN_VERSION_MAJOR 3)
+ set(LIBORIGIN_VERSION_MINOR 0)
+ set(LIBORIGIN_VERSION_BUGFIX 0)
+
++option(ENABLE_TOOLS "Install opj2dat command line util" ON)
++
+ # compile-time configuration variables to be linked in
+ configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+@@ -61,7 +63,7 @@ else()
+ endif ()
+
+ # install libraries
+-install(TARGETS origin DESTINATION lib${LIB_SUFFIX} OPTIONAL)
++install(TARGETS origin DESTINATION lib${LIB_SUFFIX})
+
+ # install headers
+ install(FILES ${devel-headers} DESTINATION include/liborigin)
+@@ -70,10 +72,12 @@ install(FILES ${devel-headers} DESTINATION include/liborigin)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liborigin.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
+
+ # command line util
+-add_executable(opj2dat opj2dat.cpp)
+-target_link_libraries (opj2dat origin)
++if(ENABLE_TOOLS)
++ add_executable(opj2dat opj2dat.cpp)
++ target_link_libraries (opj2dat origin)
+
+-install(TARGETS opj2dat DESTINATION bin OPTIONAL)
++ install(TARGETS opj2dat DESTINATION bin)
++endif()
+
+ # documentation
+ configure_file(doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+@@ -82,5 +86,5 @@ if(DOXYGEN_FOUND)
+ add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/html)
+- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc/liborigin OPTIONAL)
++ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc/liborigin)
+ endif(DOXYGEN_FOUND)
+--
+2.26.2
+
diff --git a/sci-libs/liborigin/files/liborigin-3.0.0-missing-header.patch b/sci-libs/liborigin/files/liborigin-3.0.0-missing-header.patch
new file mode 100644
index 000000000000..162dd93c3c5e
--- /dev/null
+++ b/sci-libs/liborigin/files/liborigin-3.0.0-missing-header.patch
@@ -0,0 +1,38 @@
+From 78da3c4456cef15c91b5e5fcc1e82ca2364ea654 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Wed, 20 May 2020 22:28:21 +0200
+Subject: [PATCH] Add missing header
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ OriginAnyParser.cpp | 1 +
+ opj2dat.cpp | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp
+index 07a619e..c90f6e4 100644
+--- a/OriginAnyParser.cpp
++++ b/OriginAnyParser.cpp
+@@ -22,6 +22,7 @@
+ #include "OriginAnyParser.h"
+ #include <sstream>
+ #include <cinttypes>
++#include <iostream>
+
+ /* define a macro to get an int (or uint) from a istringstream in binary mode */
+ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+diff --git a/opj2dat.cpp b/opj2dat.cpp
+index 230ac84..67b0815 100644
+--- a/opj2dat.cpp
++++ b/opj2dat.cpp
+@@ -31,6 +31,7 @@
+ #include <cmath>
+ #include <fstream>
+ #include <sstream>
++#include <iostream>
+ #include <string>
+
+ using namespace std;
+--
+2.26.2
+
diff --git a/sci-libs/liborigin/files/liborigin-3.0.0-no-exit-calls.patch b/sci-libs/liborigin/files/liborigin-3.0.0-no-exit-calls.patch
new file mode 100644
index 000000000000..44b56a296fde
--- /dev/null
+++ b/sci-libs/liborigin/files/liborigin-3.0.0-no-exit-calls.patch
@@ -0,0 +1,89 @@
+From a8b25b489b48086e2616df98688969f89e63fa69 Mon Sep 17 00:00:00 2001
+From: Miquel Garriga <gbmiquel@gmail.com>
+Date: Fri, 23 Nov 2018 00:15:04 +0100
+Subject: [PATCH] Remove exit() calls
+
+---
+ OriginFile.cpp | 15 ++++++++++-----
+ OriginFile.h | 2 +-
+ opj2dat.cpp | 2 ++
+ 3 files changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/OriginFile.cpp b/OriginFile.cpp
+index f6c41b4..bcdcccb 100644
+--- a/OriginFile.cpp
++++ b/OriginFile.cpp
+@@ -33,14 +33,15 @@
+ #include <string>
+
+ OriginFile::OriginFile(const string& fileName)
+-: fileVersion(0)
++: fileVersion(0), ioError(0)
+ {
+ ifstream file(fileName.c_str(), ios_base::binary);
+
+ if (!file.is_open())
+ {
+- cerr << "Could not open " << fileName.c_str() << "!" << endl;
+- exit(EXIT_FAILURE);
++ cerr << endl << "liborigin: " << strerror(errno) << ": " << fileName.c_str() << endl;
++ ioError = errno;
++ return;
+ }
+
+ #ifdef GENERATE_CODE_FOR_LOG
+@@ -48,8 +49,9 @@ OriginFile::OriginFile(const string& fileName)
+ logfile = fopen("./opjfile.log", "w");
+ if (logfile == nullptr)
+ {
+- cerr << "Could not open opjfile.log !" << endl;
+- exit(EXIT_FAILURE);
++ cerr << endl << "liborigin: " << strerror(errno) << ": opjfile.log" << endl;
++ ioError = errno;
++ return;
+ }
+ #endif // GENERATE_CODE_FOR_LOG
+
+@@ -152,10 +154,13 @@ OriginFile::OriginFile(const string& fileName)
+ fclose(logfile);
+ #endif // GENERATE_CODE_FOR_LOG
+ parser.reset(createOriginAnyParser(fileName));
++ ioError=0;
+ }
+
+ bool OriginFile::parse()
+ {
++ if (ioError != 0)
++ return false;
+ parser->buildVersion = buildVersion;
+ parser->fileVersion = fileVersion;
+ return parser->parse();
+diff --git a/OriginFile.h b/OriginFile.h
+index 80b6ff2..3a49395 100644
+--- a/OriginFile.h
++++ b/OriginFile.h
+@@ -70,7 +70,7 @@ public:
+ string resultsLogString() const; //!< get Results Log
+
+ private:
+- unsigned int fileVersion, buildVersion;
++ unsigned int fileVersion, buildVersion, ioError;
+ unique_ptr<OriginParser> parser;
+ };
+
+diff --git a/opj2dat.cpp b/opj2dat.cpp
+index ff53309..230ac84 100644
+--- a/opj2dat.cpp
++++ b/opj2dat.cpp
+@@ -54,6 +54,8 @@ int main(int argc, char *argv[]) {
+ OriginFile opj(inputfile);
+ int status = opj.parse();
+ cout << "Parsing status = " << status << endl;
++ if (! status)
++ return -1;
+ cout << "OPJ PROJECT \"" << inputfile.c_str() << "\" VERSION = " << opj.version() << endl;
+
+ cout << "number of datasets = " << opj.datasetCount() << endl;
+--
+2.26.2
+
diff --git a/sci-libs/liborigin/files/liborigin-3.0.0-no-standard-streams.patch b/sci-libs/liborigin/files/liborigin-3.0.0-no-standard-streams.patch
new file mode 100644
index 000000000000..227ce7b14d5e
--- /dev/null
+++ b/sci-libs/liborigin/files/liborigin-3.0.0-no-standard-streams.patch
@@ -0,0 +1,210 @@
+From 6cb6d9b328195e11c1f168f6e4b915b522c7089f Mon Sep 17 00:00:00 2001
+From: Stefan Gerlach <stefan.gerlach@uni-konstanz.de>
+Date: Wed, 15 May 2019 23:16:09 +0200
+Subject: [PATCH 1/3] do not output to standard streams (cout,
+ cerr) by default
+
+it might be better to hide all such usage behind #ifdefs,
+since the streams might not belong to the shared library
+
+provided by Ivan Krylov (Ropj)
+---
+ OriginAnyParser.cpp | 11 +++++------
+ OriginAnyParser.h | 2 +-
+ OriginFile.cpp | 2 --
+ 3 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp
+index d45026b..ff7b8f7 100644
+--- a/OriginAnyParser.cpp
++++ b/OriginAnyParser.cpp
+@@ -756,7 +756,7 @@ void OriginAnyParser::readProjectTree() {
+
+ // log info on project tree
+ #ifdef GENERATE_CODE_FOR_LOG
+- outputProjectTree();
++ outputProjectTree(cout);
+ #endif // GENERATE_CODE_FOR_LOG
+
+ return;
+@@ -2835,7 +2835,6 @@ void OriginAnyParser::getColorMap(ColorMap& cmap, const string& cmapdata, unsign
+ // check we have enough data to fill the map
+ unsigned int minDataSize = cmoffset + 0x114 + (colorMapSize+2)*0x38;
+ if (minDataSize > cmapdatasz) {
+- cerr << "WARNING: Too few data while getting ColorMap. Needed: at least " << minDataSize << " bytes. Have: " << cmapdatasz << " bytes." << endl;
+ LOG_PRINT(logfile, "WARNING: Too few data while getting ColorMap. Needed: at least %d bytes. Have: %d bytes.\n", minDataSize, cmapdatasz)
+ return;
+ }
+@@ -2988,15 +2987,15 @@ void OriginAnyParser::getProjectFolderProperties(tree<ProjectNode>::iterator cur
+ (*current_folder).modificationDate = doubleToPosixTime(modificationDate);
+ }
+
+-void OriginAnyParser::outputProjectTree() {
++void OriginAnyParser::outputProjectTree(std::ostream & out) {
+ size_t windowsCount = spreadSheets.size()+matrixes.size()+excels.size()+graphs.size()+notes.size();
+
+- cout << "Project has " << windowsCount << " windows." << endl;
+- cout << "Origin project Tree" << endl;
++ out << "Project has " << windowsCount << " windows." << endl;
++ out << "Origin project Tree" << endl;
+
+ char cdsz[21];
+ for (tree<ProjectNode>::iterator it = projectTree.begin(projectTree.begin()); it != projectTree.end(projectTree.begin()); ++it) {
+ strftime(cdsz, sizeof(cdsz), "%F %T", gmtime(&(*it).creationDate));
+- cout << string(projectTree.depth(it) - 1, ' ') << (*it).name.c_str() << "\t" << cdsz << endl;
++ out << string(projectTree.depth(it) - 1, ' ') << (*it).name.c_str() << "\t" << cdsz << endl;
+ }
+ }
+diff --git a/OriginAnyParser.h b/OriginAnyParser.h
+index ed62bbb..bd7c1ae 100644
+--- a/OriginAnyParser.h
++++ b/OriginAnyParser.h
+@@ -68,7 +68,7 @@ protected:
+ void getZcolorsMap(ColorMap&, const string&, unsigned int);
+ void getProjectLeafProperties(tree<ProjectNode>::iterator, const string&, unsigned int);
+ void getProjectFolderProperties(tree<ProjectNode>::iterator, const string&, unsigned int);
+- void outputProjectTree();
++ void outputProjectTree(std::ostream &);
+
+ inline time_t doubleToPosixTime(double jdt)
+ {
+diff --git a/OriginFile.cpp b/OriginFile.cpp
+index 5ac8e22..dba050f 100644
+--- a/OriginFile.cpp
++++ b/OriginFile.cpp
+@@ -39,7 +39,6 @@ OriginFile::OriginFile(const string& fileName)
+
+ if (!file.is_open())
+ {
+- cerr << endl << "liborigin: " << strerror(errno) << ": " << fileName.c_str() << endl;
+ ioError = errno;
+ return;
+ }
+@@ -49,7 +48,6 @@ OriginFile::OriginFile(const string& fileName)
+ logfile = fopen("./opjfile.log", "w");
+ if (logfile == nullptr)
+ {
+- cerr << endl << "liborigin: " << strerror(errno) << ": opjfile.log" << endl;
+ ioError = errno;
+ return;
+ }
+--
+2.26.2
+
+
+From 588bbc357cd34b9d353470ed6c0632b6f00805f5 Mon Sep 17 00:00:00 2001
+From: Stefan Gerlach <stefan.gerlach@uni-konstanz.de>
+Date: Wed, 15 May 2019 23:28:46 +0200
+Subject: [PATCH 2/3] fix bugs found by UBSan
+
+ - check values before casting to enum Attach
+ - default-initialize sensitive struct elements
+
+provided by Ivan Krylov (Ropj)
+---
+ OriginAnyParser.cpp | 1 +
+ OriginObj.h | 5 ++++-
+ README | 3 +++
+ 3 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp
+index ff7b8f7..9f9731c 100644
+--- a/OriginAnyParser.cpp
++++ b/OriginAnyParser.cpp
+@@ -1543,6 +1543,7 @@ void OriginAnyParser::getAnnotationProperties(const string& anhd, unsigned int a
+ GET_SHORT(stmp, r.bottom)
+
+ unsigned char attach = anhd[0x28];
++ if (attach >= (unsigned char)Attach::End_) attach = Attach::Frame;
+ unsigned char border = anhd[0x29];
+
+ Color color = getColor(anhd.substr(0x33,4));
+diff --git a/OriginObj.h b/OriginObj.h
+index 3a9f719..aeeeb6b 100644
+--- a/OriginObj.h
++++ b/OriginObj.h
+@@ -67,7 +67,7 @@ namespace Origin
+ enum DayOfWeekFormat {DAY_DDD = 0, DAY_DDDD = 1, DAY_LETTER = 2};
+
+ enum NumericDisplayType {DefaultDecimalDigits = 0, DecimalPlaces = 1, SignificantDigits = 2};
+- enum Attach {Frame = 0, Page = 1, Scale = 2};
++ enum Attach {Frame = 0, Page = 1, Scale = 2, End_};
+ enum BorderType {BlackLine = 0, Shadow = 1, DarkMarble = 2, WhiteOut = 3, BlackOut = 4, None = -1};
+ enum FillPattern {NoFill = 0, BDiagDense = 1, BDiagMedium = 2, BDiagSparse = 3, FDiagDense = 4, FDiagMedium = 5, FDiagSparse = 6,
+ DiagCrossDense = 7, DiagCrossMedium = 8, DiagCrossSparse = 9, HorizontalDense = 10, HorizontalMedium = 11, HorizontalSparse = 12,
+@@ -345,6 +345,7 @@ namespace Origin
+ , width(8)
+ , index(_index)
+ , view(DataView)
++ , colorMap()
+ {coordinates.push_back(10.0);coordinates.push_back(10.0);coordinates.push_back(1.0);coordinates.push_back(1.0);};
+ };
+
+@@ -895,9 +896,11 @@ namespace Origin
+ GraphLayer()
+ : backgroundColor({Color::Regular, {Color::White}})
+ , borderType(BlackLine)
++ , xAxis(), yAxis(), zAxis()
+ , histogramBin(0.5)
+ , histogramBegin(0.0)
+ , histogramEnd(10.0)
++ , colorMap()
+ , xAngle(0)
+ , yAngle(0)
+ , zAngle(0)
+diff --git a/README b/README
+index 1dd56ef..598eacc 100644
+--- a/README
++++ b/README
+@@ -7,6 +7,9 @@ It is based on the code at
+ http://sourceforge.net/projects/liborigin
+ http://soft.proindependent.com/liborigin2
+
++Additionally, some fixes were applied to silence UBSan warnings caused by
++uninitialised POD struct members.
++
+ AUTHORS: Knut Franke, Miquel Garriga, Stefan Gerlach, Alex Kargovsky, Russell Standish, Ion Vasilief
+
+ DEPENDENCIES: tree.hh (included) http://tree.phi-sci.com/
+--
+2.26.2
+
+
+From 88b4de31e1860b8b5de6e3eea4a32e92f2e58c71 Mon Sep 17 00:00:00 2001
+From: Stefan Gerlach <stefan.gerlach@uni-konstanz.de>
+Date: Wed, 15 May 2019 23:32:50 +0200
+Subject: [PATCH 3/3] readProjectTree: provide root node to append
+ to
+
+append_child() is not supposed to work on an empty tree,
+and I couldn't find any initialization before its use.
+All inserted nodes seemed to end up below tree_node::feet
+(or something) and were not cleaned up by the destructor.
+
+Using insert() to create a dummy node for others to be
+children of fixes the leak.
+
+provided by Ivan Krylov (Ropj)
+---
+ OriginAnyParser.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp
+index 9f9731c..4a79423 100644
+--- a/OriginAnyParser.cpp
++++ b/OriginAnyParser.cpp
+@@ -743,7 +743,10 @@ void OriginAnyParser::readProjectTree() {
+ string pte_pre2 = readObjectAsString(pte_pre2_size);
+
+ // root element and children
+- unsigned int rootfolder = readFolderTree(projectTree.begin(), pte_depth);
++ unsigned int rootfolder = readFolderTree(
++ projectTree.insert(projectTree.begin(), ProjectNode("", ProjectNode::Folder)),
++ pte_depth
++ );
+ if (rootfolder > 0) {
+ LOG_PRINT(logfile, "Number of files at root: %d\n", rootfolder)
+ }
+--
+2.26.2
+
diff --git a/sci-libs/liborigin/liborigin-3.0.0.ebuild b/sci-libs/liborigin/liborigin-3.0.0.ebuild
new file mode 100644
index 000000000000..aa4538748af9
--- /dev/null
+++ b/sci-libs/liborigin/liborigin-3.0.0.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake
+
+DESCRIPTION="Library for reading OriginLab OPJ project files"
+HOMEPAGE="https://sourceforge.net/projects/liborigin/"
+SRC_URI="http://downloads.sourceforge.net/liborigin/${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="2"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="debug doc tools"
+
+BDEPEND="
+ doc? ( app-doc/doxygen )
+"
+RDEPEND="
+ dev-cpp/tree
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ # git master
+ "${FILESDIR}/${P}-no-exit-calls.patch"
+ "${FILESDIR}/${P}-no-standard-streams.patch"
+ # TODO upstream
+ "${FILESDIR}/${P}-missing-header.patch"
+ # downstream
+ "${FILESDIR}/${P}-buildsystem.patch" # ENABLE_TOOLS, shared link, doc paths
+)
+
+src_prepare() {
+ cmake_src_prepare
+ rm tree.hh || die "failed to remove bundled tree.hh"
+
+ sed -e "/install.*html/s/liborigin/${PF}/" \
+ -i CMakeLists.txt || die "failed to fix htmldoc install path"
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DGENERATE_CODE_FOR_LOG=$(usex debug)
+ $(cmake_use_find_package doc Doxygen)
+ -DENABLE_TOOLS=$(usex tools)
+ )
+ cmake_src_configure
+}
+
+src_compile() {
+ cmake_src_compile
+ use doc && cmake_src_compile doc
+}
diff --git a/sci-libs/liborigin/metadata.xml b/sci-libs/liborigin/metadata.xml
index c049cd0777bf..e7dc202da9b1 100644
--- a/sci-libs/liborigin/metadata.xml
+++ b/sci-libs/liborigin/metadata.xml
@@ -5,7 +5,7 @@
<email>sci@gentoo.org</email>
<name>Gentoo Science Project</name>
</maintainer>
- <longdescription>
- A library providing IO for Microcal Origin files.
- </longdescription>
+ <use>
+ <flag name="tools">Install opj2dat command line util</flag>
+ </use>
</pkgmetadata>