sci-libs/liborigin: 3.0.0 version bump
authorAndreas Sturmlechner <asturm@gentoo.org>
Wed, 20 May 2020 21:36:43 +0000 (23:36 +0200)
committerAndreas Sturmlechner <asturm@gentoo.org>
Wed, 20 May 2020 22:17:52 +0000 (00:17 +0200)
Package-Manager: Portage-2.3.99, Repoman-2.3.22
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
sci-libs/liborigin/Manifest
sci-libs/liborigin/files/liborigin-3.0.0-buildsystem.patch [new file with mode: 0644]
sci-libs/liborigin/files/liborigin-3.0.0-missing-header.patch [new file with mode: 0644]
sci-libs/liborigin/files/liborigin-3.0.0-no-exit-calls.patch [new file with mode: 0644]
sci-libs/liborigin/files/liborigin-3.0.0-no-standard-streams.patch [new file with mode: 0644]
sci-libs/liborigin/liborigin-3.0.0.ebuild [new file with mode: 0644]
sci-libs/liborigin/metadata.xml

index 9f0b954a93d37fbbbee096cd7105c3e4d341671f..9b2da118ce9d5c87233f2e2dac6d57f37ace7d0a 100644 (file)
@@ -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 (file)
index 0000000..d8444de
--- /dev/null
@@ -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 (file)
index 0000000..162dd93
--- /dev/null
@@ -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 (file)
index 0000000..44b56a2
--- /dev/null
@@ -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 (file)
index 0000000..227ce7b
--- /dev/null
@@ -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 (file)
index 0000000..aa45387
--- /dev/null
@@ -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
+}
index c049cd0777bf7c17797be975d14411c609b54948..e7dc202da9b14d97a9cc0dc690c84fef8f836ecb 100644 (file)
@@ -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>