From 6a96c45631d41c0f68812eb0c5ff1be348fcb0ce Mon Sep 17 00:00:00 2001 From: "J. Daniel Smith" Date: Mon, 27 Feb 2023 15:44:18 -0500 Subject: [PATCH] latest from coda-oss and NITRO (#634) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * latest from coda-oss * Squashed 'externals/coda-oss/' changes from 67d6362bcf..d06dc6534d d06dc6534d mem::AutoPtr for C++17 (#615) 83443602a6 mem::AutoPtr class to aid C++17 transition (#614) f10fa2009c Release 2022-11-04 (#613) a32e697044 remove exception specifications (#609) 084f19126a utilities to find files/directories for unittests (#608) a3cedada96 Merge branch 'master' fde6c864fa Merge pull request #607 from mdaus/bugfix/change-order-of-config-header-install c8a0044010 Install the cmake-configured header after installing the xercesc source tree. Otherwise, the original config will persist in the install dda2c9acda Merge pull request #606 from mdaus/fix-xerces-config 004a00f09b Bump zlib version for conan builds 207f4dbb9f Fix Xerces config issue and install its config.h b842417671 Add support for debug optimizations. 0f6cda57dc Use enhanced debug information with gcc/gdb. 5047dce1a9 Work around GCC avx support bug. 001ab18751 Rebuild the waf self-extractor with a fix for the FIPS error. 5a7f64fca2 Revert "Rebuild the waf self-extractor with a fix for the FIPS problem." 9f6f775f8f Rebuild the waf self-extractor with a fix for the FIPS problem. af7229bd83 utilities to find files from a build (#605) 264ae49dd7 be sure downstream projects build w/C++14 (#604) 7a7b13cbd5 "hello world" for HDF5 (#602) 33cff0ff43 more C++14 963e8ff40c Revert "add HDF5 source code (#603)" 7b5e71a006 add HDF5 source code (#603) ec7bb2e520 add HDF5 source code (#603) ec26f703e7 build in NITRO and SIX (#601) f4361a9730 make it easier to write cli unit-tests (#600) 34b6fdeee1 tweak toString() to reduce specialization (#599) 5907b3ed60 remove C++11 workarounds (#598) caed59480d Release 2022-08-30_cpp14 (#597) 2630d41e08 get rid of merge conflict 652bce3854 Merge branch 'master' 6f41c09d71 Release 2022-08-30 (#596) 838c323d6a Merge branch 'master' f916680126 Added handler accessor to MinidomParser for inheriting modules (#594) 72d29e9c27 get unittests working when "nested" in other projects (#595) f8f18fea5f Actually look at unit test results when using waf (#593) 4189c429e8 Merge branch 'master' cda679ceee more overloads to take a string length (#592) b95a32bc4c by default, Uri()s aren't validated (#591) 903ee7ffff Merge branch 'master' 173930a6f2 fix a UTF-8 conversion bug (#590) a1c0a1eea6 Merge branch 'master' c5c221a832 CODA code inherits from xml.lite classes :-( (#589) 1bfe5fc402 Merge branch 'master' a4c6294c30 use EncodedStringView instead of _bstr_t (#588) 6c2df8bb62 "main" is now C++14 (not C++20) 2ce4161080 Squashed commit of the following: 3a0f7fd14d Merge branch 'master' 83c982f0cf remove work-arounds to write non-UTF-8 XML (#586) 142fd7185e Merge branch 'master' ebf6db1762 is part of C++20 d3aa8aa5ce std::u8string is in C++20, not C++17 03654933c4 changes to math.linear from coda (#587) d442e5be0f Merge branch 'master' 5a2f8e52f1 release 2022-08-02 (#585) e5516aba29 tweak names to match utf8:: conventions (#584) 32f08a9e40 Squashed commit of the following: ee15ba3172 Merge branch 'master' 3083ec7915 move most platform-specific code to EncodedStringView (#583) bede753547 fix unit-test with C++20 61a8033f62 consistent use of coda_oss:: and std:: 5d3bf9eb83 Merge branch 'master' 36371410c0 EncodedString tweaks for XML processing (#582) cf2016205c remove any vestiges of Expat and libXML (#580) 33538aa0fc update for newer Intel compiler ed65e4ccc5 Add two patch candidates to fix FIPS problems in waf. 34c40bd397 Merge branch 'master' a731ebf8e8 release 2022-06-29 (#579) a9b9d2a9fa Merge branch 'master' 59387bd87b update "ReleaseNotes.md" for recent changes (#578) 24a3f01afe Merge branch 'master' e4f940854a remove "boost" and "serialize" (#577) 80b70537e9 update to zlib-1.2.12 (#576) f92811a53b Merge branch 'master' 202084bacb Remove some compiler warnings (#575) 414c25c551 build with C++20 in VS 1a99a29da3 Merge branch 'master' c61232224b build most code with Visual Studio (#574) 5cca863d7e Merge branch 'master' 6e4d952bea some unit-tests need argc/argv (#573) 36e051d7b6 Add run1D method to GenerationThreadPool (#572) 6d4776235e Merge branch 'master' 0a08b8e4e9 build "coda-oss-lite" as a VS2022 project (#571) 6677cc38e3 simplify creation of encodes string (#570) ba62c610c1 Add the 'universal_newlines=True' flag to python Popen calls. 984e4a96ce Fix a bug in waf platform detection. 8f1173f4a6 fix build errors f21af35b0b Merge branch 'master' d2aca8d4b5 release 2022-05-03 (#569) ff55fed596 can't replace all TEST_ASSERT macros with functions (#568) 4db8ada411 restore changes clobbered with merge from "master" a1f36e1839 Merge branch 'master' 89a636a6af fix copy/assignment in EncodedString (#567) c3fe91d424 latest tweaks to build with C++17 (#566) a59a51b571 be sure we use a 64-bit time_t (#565) 1f79fb3ddf Poly2D::atY() bugfix (#564) ac5307662d Testing to see if windows-2019 works with github actions (#563) 8d0726b37e Fix a bug in waf platform detection. 80fe8e9f8a Merge branch 'master' c662b5aac3 Update ReleaseNotes.md ef4a3bbd9a Release 2022-02-22 (aka 2/22/22) (#562) 33b0f3f6eb Merge branch 'master' 8bd0c8cf4a Merge branch 'main' of github.com:mdaus/coda-oss 0a0e6cf145 use char16_t on Linux (#560) 7e41b4b5e4 Merge branch 'feature/use-cpp11-code' fe65bfddfb fix units for ICC, sys::filesystem (#559) fc99e4b3e6 recreate from "master" 510317c07a use std::filesystem to "implement" sys::filesystem 895f6c77cd always implement sys::filesystem 0d83ae22fc "units" changes from master b58173b781 latest from "master" (not quite) 793e3442c8 Squashed commit of the following: 91a729f5a2 re-create from "master" def979170b update to GSL 4.0.0 (#558) fe365e5a41 fix XML validation for UTF-8 (#557) 502e5829b8 support conversion to std::wstring (#556) e69422596a Delete codeql-analysis.yml 45bc6a9640 Create codeql-analysis.yml 87d9a7ef54 remove CodeQL eab5ecb899 Update build_unittest.yml 8ab12d47e9 Delete codeql-analysis.yml 9e542092b8 try running CodeQL as part of build-linux-cmake de0c50651e Create codeql-analysis.yml 049608782b tweaks to build in "coda" (#554) 0ba24233b9 replace sys::U8string with coda_oss::u8string (#553) bcee6551f2 add EncodedString class (#552) c2eecd3925 simplify implementation of EncodedStringView (#551) c1320ef00d fix 'typename' for other compilers (#550) ac3b93931f tweaks to make "main" build easier (#549) 78da741cf5 remove sys/Optional.h (#548) f31730ac77 put our std work-arounds in one place (#547) 9b7bb571a9 Add an EncodedStringView class (#545) c0e1da5201 another batch of tweaks to cleanup compiler warnings, etc. (#546) 0f3bfd9d05 added missing "virtual", support unique_ptr (#544) ca32f99c03 Add option to specify curl installation location. (#501) 2df9c1a819 allow std::filesystem::path to be used for validation (#543) 2891435760 add SinCos for units::Angle (#542) e430eddefb Delete log4j as 1) it's old, 2) coda-oss doesn't use it, and 3) remove any questions about security vulnerability (#541) bb11134fd0 xml.lite tweaks (#540) 955b33e215 Release 2021_12_13 (#539) d73d74d5c1 xml.lite tweaks (#537) 3a90e25c6f use more C++11 functionality (#538) 9ca2a0e50c remove more compiler warnings (#536) 0ec9da1e91 be sure == and != are in-sync (#535) 9084be32c4 fix size_t compiler warnings (#534) abd6469ec8 fix ICC errors (#533) 09cb36fff4 update version number before cutting a new release (#532) c29e4d2988 fix ICC warnings/errors from high-side (#531) 91f8f1c089 simplify our std:: implementations (#530) 7c633c7bb5 Further reduce use of std::auto_ptr (#529) d85883749c Provide support for creating simple version numbers (#528) b035825929 Merge pull request #527 from mdaus/fix-crypt-h-clash ffed3d6339 Disable encryption support in minizip build and remove crypt.h header ee2b2bf8c0 Merge pull request #525 from mdaus/swig-fix 3c02ff2893 Fix config-python prefix issue 6149053d4e Add new config-python module for SWIG compatibility workarounds 30acf5b9af mt::transform_async(), mem::SharedPtr, math::SinCos() (#526) 21efd6a6c9 Implement better workaround for lack of SWIG support for "final" 60837a62ea Revert unneeded changes 0bc994dea7 Fix SWIG path issue for waf build 070f4e9150 Update SWIG generated files f8472b0c46 Fix SWIG path issues and warnings e10707f758 Set minimum SWIG version to 4.0.1 b8cdba5c75 Fix waf SWIG build issue 2bd0ee39e5 Enable SWIG in Github waf build f2b001146f Try fixing SWIG compile issue again afafabcc28 Fix SWIG compile issue on Linux due to missing macro 7c8d4a81d5 Add SWIG to the CI flow 4023d721c5 Regenerate SWIG bindings 1d8c70109c Add some compile definitions needed by SWIG for CMake build e5cc58545f Remove some functions which return unique_ptr from SWIG bindings (incompatible). 965a2913dd Remove "final" specifier from structs bound in SWIG (incompatible) f1bec56014 Merge branch 'master' of https://github.com/mdaus/coda-oss c01c4d7de5 do in-line initialization (#524) fb7230ea1e Update CMakeLists.txt 5dfb056898 tweaks for C++17 (#523) 1a7d3ab522 Merge pull request #515 from mdaus/security-and-conan-updates d13885df66 make it easier to create a new Element with the right encoding (#522) 3fb09e73ab Merge pull request #359 from mdaus/parseArgUpdate 0d546a8f1b Tweak some ArgumentParser tests for the ignoreUnknownArguments option 14bd1f26d4 Merge remote-tracking branch 'origin/master' into parseArgUpdate cf398c0d36 tweak code for C++11/C++17 (#521) 2d0322b070 reduce use of std::auto_ptr (#520) 853320e90f reduce use of deprecated C++98 code (#519) 4752ba2221 Replace some warning pragmas with macros 32685554ff Merge remote-tracking branch 'origin/master' into security-and-conan-updates f0350c0cfd Merge pull request #518 from mdaus/bugfix/python3.9-related fc01df0d8c fix typos in gcc macros 9d356f36cd fix gcc impl 8124da763f remove unreachable code d034b3a849 clobber warnings from numpy innards 9941a401e1 macros to disable warnings around system headers 8a725bb8f3 Merge pull request #516 from mdaus/mbraswell-enablecpp17-windows 2e7b8165ae Fixed pragma stuff on gcc 9775bb02d9 Fixed pragma stuff on gcc 680d3cce41 Merge branch 'master' of https://github.com/mdaus/coda-oss 8ffd6ed790 forgot to add "units" to CMakeFiles.txt 06835676e5 Remove Auto_ptr flag and make disable warnings cross_platform compatible d62efece56 Merge branch 'master' of https://github.com/mdaus/coda-oss into mbraswell-enablecpp17-windows d04042ee9a Merge pull request #517 from mdaus/develop/compiler-warning-helpers cf5cd16b33 Fix macro usage on gcc a88bbcd202 Macros to narrowly target disabling warnings c0d5cdf004 Formatting Changes be019b44b2 Formatting Changes 2eb04dc9e7 Fixed compiler warnings and added option to compile cpp17 with waf on windows 5d9f27faeb Refactor coda-oss conan recipe ce66457149 Disable warning for MSVC2017 and earlier ecfefbfbec Merge remote-tracking branch 'origin/master' into security-and-conan-updates 8b1479881d Merge pull request #514 from mdaus/develop/fix-unused-symbol-errors 1d9a4ec712 Add conan option to use std::regex instead of pcre 6dd5d44576 add required include 4c0ae77811 add required include 1873ceeb8a parameterize build (somewhat) c9ef567a7a fix Release compile error e6b47e94ee fix compiler error eff205ba2d helper macro to fix unusual targets 342098a32c Fix CMake build for modules without include files 5625706ebf Enable cpp17 option for windows builds 98e12b138e Use consistent line endings for *.in template files d01fea0b73 Configure coda_add_module to install more file extension types 30823f673b Delete stray file ac7760ba22 Load dependency targets when loading coda-oss for conan build 14781cab8e Implement conan build for openjpeg and pcre2 dependencies 9d955efa53 Exclude unsupported XML backend wrappers from CMake build to remove warnings 1e8c9b2643 Merge remote-tracking branch 'origin/master' into security-and-conan-updates 772d804951 Implement conan build for libjpeg dependency 98b653dea4 Implement conan build for xerces-c dependency 11323e8e98 Implement conan build for zlib dependency d0e6bf2c4b Improve conan test_package a03e1294e1 Fix uninitialized member variable warning in mt::AbstractTiedThreadPool c7bb47b5f8 Remove member variable duplicated in derived class io::ToggleOutputStream 0838ac2ca2 Use consistent line endings for conan recipes and CMake files. 2768e5f07e Update libjpeg to v9d d75f55bcac Update zlib to 1.2.11 ca2f84cff3 Fix warning in GSL for MSVC 2015 and earlier 1babd19b55 Fix warning in thread tests for MSVC 2f17632496 Fix warning in except module for Visual Studio 2015 and earlier a485bf6bb1 Fix BIGENDIAN redefinition warning 59543e42b2 Disable warning in dbi for MSVC 2017 and earlier b4b212834b Fix warnings in numpyutils for MSVC 2017 and earlier 2b179b6587 Fix integer overflow issue 898151ad75 Hook up simple "units" (#513) 4d6beeecc5 Merge pull request #511 from mdaus/develop/horizontal-improved-numerical-precision c1878b228e Fix for numerical precision issues surrounding horizontal lines 7d1442c66c Merge pull request #510 from mbraswell/fix-testnumelements-build 58fc85f096 Whitespace change to trigger workflow ab74026b9f Fix wscript to successfully build test_num_elements 323283cd78 Merge pull request #509 from mbraswell/develop-mbraswell-cpp17 16a5502896 Added option to enable cpp17 b0625cf5a2 tweak debug stuff (#508) 8455494878 fix RowCol casting (#507) 01fbb5f008 Get std::u8string working right with C++20 (#506) df9413efae more "noexcept" for fewer code-analysis diagnostics (#505) e6219f97f9 reduce compiler warnings/code-analysis diagnostics (#504) 4c9ea0ef18 tweaks for VS2019 16.10 (#503) 0d8ea070a5 reduce compiler warnings (#502) 625b8b59d4 reduce compiler warnings (#500) 3795758da0 get rid of more compiler warnings/code-analysis diagnostics (#499) 427f91be85 reduce compiler-warnings and code-analysis diagnostics (#498) c82dd9e370 cleanup compiler and code-analysis diagnistics (#496) b5105b54ae reduce compiler warnings (#495) e0099cc269 Develop/compiler optimizations (#494) 0eeb3f9638 tweaks to python wrappers made in "nitro" (#492) 5f91f70604 fix printf() format string (#491) 55b855a865 Delete codeql-analysis.yml 603c192d3b Update codeql-analysis.yml f306979e87 Update codeql-analysis.yml 4a1f78f8ef Create codeql-analysis.yml 3c80a65680 add back coda_oss::filesystem::path (#490) eaea659ed3 tweak how std:: features are exposed (#489) 0492f0d95f simplify code exposing std:: routines (#488) e5f3d77701 remove code-analysis diagnostics (#485) 5be599e5af make HOME and USERPROFILE the same (#484) 62b22ae019 cleanup more compiler warnings (#483) c32ec7dcc1 add unit-tests for env-var editing (#482) 311aea4623 allow an environment-variable to be "edited" during expansion (#481) bbcab13103 static_assert is C++11, don't use it when checking for C++11 (#480) 068562f589 fix glitches in expandEnviromentVariables() (#479) 30ed1d95e2 produce a new Path::expandEnviromentVariables() function (#478) 074a873b28 remove compiler warnings (#477) e29f65479f latest C++17 tweaks (#476) c4e681b0ae tweak code when wchar_t is a built-in type (#474) 8449ac29a4 wchar_t might not be a built-in type on old systems (#473) a62bdb3e64 add operator= to sys::Optional (#472) 8e310a776d use compiler-provided macros to determine features (#470) 88405c8edb "constexpr" can be hard to get right with older compilers; don't even try (#471) b195ab3efc need at least VS2017 to use the real GSL (#469) 2978f9114f tweaks to build with older compilers (#468) 7235b898d3 The (old) version of SWIG we're using doesn't like certain C++11 features. (#464) cccde7f126 only look in the Win1252->UTF-8 map as a last resort (#467) 3db09742c1 get rid of more compiler warnings (#465) 5e0d2e8451 get rid of "char8_t" compiler warning (#463) d710bc6882 make getValue() easier to use (#462) f5a9284768 make getElement*() be consistent for both 0 and >1 (#461) 88be6dba35 consistently add C++14/17/20 library features (#459) 59c3a7e2ef use coda_oss:: as a drop-in replacement for std:: (#458) 35de4524c4 use sys::Filesystem::path rather than std::string (#457) cace666005 make sys::Filesystem::path better conform to std::filesystem::path (#456) f395edc891 remove ambiguous overloads w/C++17 (#455) eac4371f19 use newly added sys::Optional<> to manage "encoding" (#454) 243ef5e500 don't derive from std::iterator (#453) a48b011411 Arguments should be "const&" to prevent C4866 (#452) 878bff901f provide std::span (#451) 81727c4854 remove newly added a new pure virtual as that's a breaking change (#450) 93cf0f03ef main -> master (#449) 5af37a7363 be sure code compiles with C++17 (#448) 82b5aecfb5 build with C++17 (#407) 6ffb888d79 reduce compiler warnings (#439) 9137dda7dc GSL (Guideline Support Library) from https://github.com/Microsoft/GSL (#423) bc5552cd20 update to xerces-c-3.2.3 (#409) 6fe09e1dbb update to openjpeg-2.3.1 (#417) 6405c0ce59 reduce differences in #407 (#438) 2987bbf8d6 tweak how std::filesystem is enabled (#437) 8fd3c2f202 tweak how std::endian is enabled (#436) 138372c886 more straight-forward reduction of std::auto_ptr (#435) f13c7cec89 straight-forward reduction of std::auto_ptr (#434) d243b08e1b add mem::auto_ptr for transition to C++17 (#432) 54ed52158e allow clients to specify custom toType and toString (#431) 7f90aab25e remove trailing underscore from macro (#429) 999e490686 with C++11, several sys typedefs are the same on both Windows & *nix (#427) 6f075b1be5 add sys::Byte (#426) 92221bd0d9 allow except::Throwable to derive from std::exception (#421) a8f52d0ad4 reduce compiler warnings (#424) 63ea20af69 #including w/C++17 generates warnings (#408) 10ef060313 reduce compiler warnings (#405) cf233fdcfd forgot Conf.cpp changes for sys::Endian (#403) cc53b18537 fix several compiler warnings/code-analysis diagnostics (#404) 1db3751a3c implmeent sys::Endian from C++20 (#402) f042cd6bb9 support std::filesystem if desired (#400) 4895a9f2dc WIN32 is old, but existing code might still use it; _WIN32 is better (#398) e2a62f8ec2 make it easier to use xml.lite (#396) 1059b7da1c allow for explicit use of a UTF-8 string (#395) 27de8b8a44 Optionally record how std::string is encoded when manipulating XML (#378) e0018cea75 implement some -like routines until we can use C++17 (#388) cafb2365b7 Merge pull request #363 from mdaus/feature/fix-compiler-warnings 6a78bec201 use the existing sys::ubyte rather than making our own pre-C++17 std::byte 14c9fc4ca4 fix a couple of G++ compiler warnings via static_cast<> e596a60070 std::numeric_limits::epsilon() can be "constexpr" 78b0f6bb26 another try at removing the compiler warning from tiff::split() 8e1de21e17 fixed typo; added a few nots about why we're not using strncpy() fed3ba8cdb retore previous tiff::split() code as the change got rid of the compiler warning but wasn't portable 98a589616d get rid of g++ strncpy() warning 798f847117 don't use memset(0) with C++ objects 7f697d078c casting result of system() to void doesn't get rid of compiler warning d55a849c51 remove new g++ compiler warnings in WSL d0aaa29884 Merge pull request #361 from mdaus/feature/fix-compiler-warnings cc62e866b0 fix compiler warnings d45c1f9a09 Updates based on peer review comments which include changing ostream to pointer, adding a couple of more tests, and updating all auto_ptr to unique_ptr in unit test. fb12ba1266 Update ArgumentParser to use a stream as an argument if the ignore unknown argument flag is set to true. 536d2b0cad Added ability to ignore unknown arguments in the ArgumentParser. 27288f49bb Merge pull request #358 from mdaus/conan-options fd5e1eecb7 Expose additional CMake options in conan recipe c972161793 Remove unneeded CMake function git-subtree-dir: externals/coda-oss git-subtree-split: d06dc6534d713ecce71db9986d8db3bb5f7a213f * trying to get git subtree working * Squashed 'externals/nitro/' content from commit 29125a3472 git-subtree-dir: externals/nitro git-subtree-split: 29125a3472688d0c60803c0d6ed922ac5248f69a * git subtree for nitro * pull from main, not master * Squashed 'externals/coda-oss/' changes from d06dc6534d..8241dfe7e6 8241dfe7e6 remove last vestiges of std::auto_ptr (#616) git-subtree-dir: externals/coda-oss git-subtree-split: 8241dfe7e68d566d9b7ca1ccf572279f41cf6848 * latest from nitro * add externals/nitro to fix merge conflicts * remove externals/nitro/externals * Squashed 'externals/nitro/' changes from 29125a3472..52fe000594 52fe000594 latest from coda-oss (#514) 1d29e4d865 remove std::auto_ptr (#513) git-subtree-dir: externals/nitro git-subtree-split: 52fe00059422c54625e26162ae3423ab2f19a8bb * finish deleting externals/nitro/externals * Squashed 'externals/coda-oss/' changes from 8241dfe7e6..ab45464820 ab45464820 remove C++17 workarounds (#618) 3d5daf702e unittests for creating XML from scratch (#617) git-subtree-dir: externals/coda-oss git-subtree-split: ab454648207b2923020bea7614a49def65f1108f * add externals/nitro/externals for sync_externals * remove externals/nitro/externals * Squashed 'externals/nitro/' changes from 52fe000594..ffcce1e304 ffcce1e304 latest from coda-oss (#515) git-subtree-dir: externals/nitro git-subtree-split: ffcce1e3048179e93b0a4da5af3085a66dd3ecb4 * latest from coda-oss and nitro * Squashed 'externals/coda-oss/' changes from ab4546482..566597043 566597043 Conan versioning, hdf5, and pcre2 fixes (#622) 61aa5e430 Squashed commit of the following: 6557ee34c Yet another attempt at finding test files for unittests (#621) 501add035 -march=native for fastest optimization level (#620) f1dd0a5b4 overloads to make creating XML documents easier (#619) git-subtree-dir: externals/coda-oss git-subtree-split: 56659704390d9cd8a19931676454f498b245e027 * latest from coda-oss * NITRO-2.11.2 * Squashed 'externals/coda-oss/' changes from 566597043..418130d4d 418130d4d trying to fix build error on github 59d2f678e Release 2022-12-14 (#628) 1e8244291 new --with-optz=fastest-possible option (#627) 6ae81142d new --optz=faster option for WAF builds (#626) 11206c179 sym-links don't work on Windows filesystems edd3e8fb9 overloads to make simplify routine XML processing (#625) dfece6106 use sym-links rather than copying files (#624) 22f1f0776 build hdf5.lite with WAF (#623) git-subtree-dir: externals/coda-oss git-subtree-split: 418130d4d1c02074963117ba112fd69cf477699d * Squashed 'externals/nitro/' changes from 7306ac86a..46c6702f8 46c6702f8 NITRO-2.11.2 (#521) cd053bd7f coda-oss 2022-12-14 (#520) 28b65f4dc get unittests working in other projects (#518) 9182384db latest from coda-oss (#517) ab88a99f5 Merge branch 'master' b39ccc4c0 Fix conan build issues (#516) abbf7e318 remove .git directory right away 5be12fc35 merge develop/sync_externals 103dd73ee latest from coda-oss (#508) f71128d6f Adding tarfile member sanitization to extractall() (#505) git-subtree-dir: externals/nitro git-subtree-split: 46c6702f869f30fe2dbb1fb85692f3e714d545f6 * NITRO-2.11.2 * latest from coda-oss * Squashed 'externals/coda-oss/' changes from c53304a90..1384b8a5e 1384b8a5e Merge pull request #629 from mdaus/zlib-update ebbd57247 ZIP APIs use std::string in this branch 9cc19fe82 ZIP unittests b8d25d364 Update zlib to 1.2.13 git-subtree-dir: externals/coda-oss git-subtree-split: 1384b8a5e260c4a7418904508b1ab671950d8e45 * Squashed 'externals/nitro/' changes from 76047c7d3..bd741e4f1 bd741e4f1 latest from coda-oss (#522) git-subtree-dir: externals/nitro git-subtree-split: bd741e4f1e850b290b04343e915ac8fba6637157 * latest from coda-oss * copy_externals * Squashed 'externals/coda-oss/' changes from 1384b8a5e..1582c6ac9 1582c6ac9 further progress on implementing hdf5::lite (#631) 0622af1fe rename "11" exception classes to "Ex" (#630) git-subtree-dir: externals/coda-oss git-subtree-split: 1582c6ac9e9f26ee4dbaa7018e6c98ab92ca88ec * Squashed 'externals/nitro/' changes from bd741e4f1..a153ad562 a153ad562 latest from coda-oss (#523) git-subtree-dir: externals/nitro git-subtree-split: a153ad562458b05be7b79fe56596c2d4b8eb9567 * copy_externals * copy_externals * copy_externals * Squashed 'externals/coda-oss/' changes from 1582c6ac9..986307c9c 986307c9c Merge branch 'master' e1b0fa349 commit (but not build) HDF5 source code (#634) 3fd5ddae5 Merge branch 'main' into develop/remove-cpp11-workarounds 37d7ec76e restore C++14 workarounds for older compilers (#632) 244dfdb3d Merge branch 'develop/main' into develop/remove-cpp11-workarounds 714ca4ed7 restore C++14 workarounds for older compilers 640f2247c Delete hdf5-hdf5-1_13_2.tar.gz eb365cbfb Merge branch 'master' into develop/remove-cpp11-workarounds 57b938eeb don't need __INTEL_COMPILER work-around with C++14 65779f3b1 build C code with -std=gnu99 94dc9280f C++14 work-arounds for an old version of the Intel compiler 3744d05e2 slam-in "main" 82b2fd63b restore some C++14 work-arounds for old compilers that only have partial C++14 support 94f6950a2 Merge branch 'main' into develop/remove-cpp11-workarounds 1ac97fe48 add HDF5 source code (not built) (#612) 8ab982820 Squashed commit of the following: 31781a14a remove C++17 work-arounds c15f6930c Revert " is in C++17" 0fe38c16f restore recent buld.py changes 0c75411ee is in C++17 bbbcd562a remove C++11 work-arounds c1e15e9d9 Merge branch 'main' into main-cpp17 bea818fb0 must use C++17 in this branch 91653a096 another place where C++17 is set 7d555f2be back to C++17 b1969d996 merge main 0792c77bf Merge branch 'main' into develop/remove-cpp11-workarounds e49f273c1 Merge branch 'main' into develop/remove-cpp11-workarounds 240b61044 allow sys::Mutex references, instead of pointers, to be passed to sys::ConditionVar 9500d6f4b Merge branch 'main' into develop/remove-cpp11-workarounds f1529942f std::make_unique instead of new be9b6a71c Squashed commit of the following: 62a2ec4e1 Revert "remove our GSL work-around for C++11" 1db082c21 Revert "try the current "main" of GSL" 44b70edde try the current "main" of GSL 4edbf6bad Revert ""There is no warning 4814"" bcd7458be "There is no warning 4814" c185bf3f1 starting working on MutexCpp11 313bdd1d9 AtomicCounter* files have been removed c1c448051 remove our GSL work-around for C++11 37ae1193e remove our mem::SharedPtr, it's now always std::shared_ptr 71f3c1299 remove no-longer-used NSPR code 8e77cb210 removed no-longer-used Irix and Solaris files fabef6966 use std::atomic for all AtomicCounter implementations ace5b6d5a TEST_FAIL -> TEST_FAIL_MSG 30076c1d1 turns out there was already a TEST_FAIL macro d73ee16fb need "::" to find global test ba01c48df remove C++11 workarounds for C++14 features cbd4a31ae Squashed commit of the following: b21c203b8 Squashed commit of the following: 5b542c60f Squashed commit of the following: cb0cf94ff ByteStream.cpp is now warning-free f5daa37fc cast to DWORD; "const" correctness bfaf644ff #pragma-away compiler warnings from standard headers 72d202dbe Merge branch 'master' into develop/reduce-compiler-warnings b076580cd trying to fix GCC compiler warning 1687dc7fc Merge branch 'master' into develop/reduce-compiler-warnings 2c5db86db Merge branch 'master' into develop/reduce-compiler-warnings 6f76c2e3e Update CMakeLists.txt c3ca4a538 do in-line initialization 8e6733618 remove G++ compiler warning a0eff51cf Merge branch 'master' into develop/reduce-compiler-warnings af19d88a6 Merge branch 'master' into develop/reduce-compiler-warnings ba31cbaa9 use "void*" to avoid reinterpret_cast<> 08da1f8a1 Merge branch 'master' into develop/reduce-compiler-warnings d1d453a2e Merge branch 'master' into develop/reduce-compiler-warnings f5074a996 CODA_OSS_NDEBUG is extra gunk and not used; omit for now. 22de48858 don't even bother compiling our own versions of localtime_s() and gmtime_s() if we're not going to use them (compiler warning about "unused static funtion.") 0c92eba58 tweak NDEBUG/CODA_OSS_NDEBUG; update comments 544604775 Don't need to expose our own versions of localtime_s() and gmtime_s() a050796c1 Merge branch 'develop/reduce-compiler-warnings' of github.com:mdaus/coda-oss into develop/reduce-compiler-warnings fed604617 older compilers want std::string() as argument to std::logic_error() cf2c502a6 do more debug & release builds on GitHub d4aa99256 build some debug targets on Gitlab 368245258 tweak CODA_OSS_DEBUG again for G++ 24ba64f71 tweak how CODA_OSS_DEBUG is set 9680e8f0e add check for _GLIBCXX_DEBUG 943218f83 Merge branch 'master' into develop/reduce-compiler-warnings 01c68e705 %#@*@%)*%@ fix RowCol::cast() again! :-( b8472b457 oops ... gsl::narrow<> should be gsl::narrow_cast<> so that int/double conversion doesn't throw 109255ca8 "final" breaks SWIG; wrap RowCol use of gsl::narrow e51e4c2ad no need to create local just to return e546f2510 Merge branch 'master' into develop/reduce-compiler-warnings d1391f989 use template for to_std_string() overloading 566942680 fix std::char8_t when building with C++20 cf604b1ab fix C++17 build errors 48a0fbedb get rid of coda_oss namespace; use CODA_OSS_cpp17 instead 9706a4336 remove code-analysis diagnostics 50592e4f8 G++ complains about an unneeded call to std::move() 9c7643c3f Merge branch 'master' into develop/reduce-compiler-warnings ecfe1f8a7 more "noexcept" b7ac50fb9 Merge branch 'master' into develop/reduce-compiler-warnings eaecf46ed tweak CODA_OSS_cplusplus from "main" 5773b1ec1 trying to get C++17 WAF build working on Windows a048a00a1 unique names for waf & CMake 7a5a0d5b2 do a better job of setting CODA_OSS_DEBUG 4355aae92 Merge branch 'master' into develop/reduce-compiler-warnings 1fd8cede2 cleanup for VS 2019 16.10 4dffa1394 explicitly =delete copy/assignment df8f8920a Merge branch 'master' into develop/reduce-compiler-warnings 42b4e99b6 remove code-analysis diagnostics 70ce322c9 reduce compiler warnings/code-analysis diagnostics when building six 20eac2f49 Merge branch 'master' into develop/reduce-compiler-warnings ff3ded56d get rid of more compiler warnings/code-analysis diagnostics 669dd51ff Merge branch 'master' into develop/reduce-compiler-warnings 623b65ab9 Merge branch 'master' into develop/reduce-compiler-warnings 11c75df53 fix release build errors 66f048b92 turn on more compiler warnings where possible eb615e315 consolidate calls to mem::make::unique a6f5eb690 reduce use of explicit new 84d5e1b01 use mem::make::unique instead of explicit new 019d726ea = default for default constructors 86ab5d8f3 use std::unique_ptr and "const noexcept" b071972d7 another batch of =default for default constructors 98276da94 more =default for default .ctor()s ceb7bc596 do default constructors with =default 7bed51750 more code-analysis cleanup f9c04b117 "noexcept" code-analysis warnings 6586ae390 need gsl::make_span from gsl/span_ext 722089774 remove gsl/mem dependency cycle d741a0761 use gsl::narrow<> instead of static_cast 99eb4b36e get rid of signed/unsigned mismatch compiler warning 814450522 remove more code-analysis diagnostics c8441b309 Merge branch 'master' into develop/reduce-compiler-warnings e6d70a9ff last of "const" from code-analysis b8445814a mark a few more things as "const" per code-analysis d18544ec7 don't need to create temporary std::strings ee7faa979 still more code-analysis cleanup 5cd6f864d cleanup more code-analysis diagnostics 492fb0a86 one more compiler warning about implicitly deleted copy/assignment b8f782c88 remove compiler warnings about implicitly deleted copy/assignment/move 14d1d1cb8 #pragma-away warnings from GSL 86c40ea6c assert() to prevent some code-analysis diagnostics 7204517a9 make copy/assignment explicit 3ce824079 reduce code-analysis diagnostics 01e367a56 Merge branch 'master' into develop/reduce-compiler-warnings 03f3ddde9 proper printf format 877d7dc93 Merge branch 'master' into develop/reduce-compiler-warnings 5a4a3d575 code-analysis doesn't like C-style casts a3fdae416 code-analysis doesn't like NULL 6309baedc Merge branch 'master' into develop/reduce-compiler-warnings d1194a2fe Merge branch 'master' into develop/reduce-compiler-warnings 535b4757d Merge branch 'develop/reduce-compiler-warnings' of github.com:mdaus/coda-oss into develop/reduce-compiler-warnings a60b95d60 "constexpr" can be hard to get right with older C++11 compilers; don't even try c07b5303e Merge branch 'master' into develop/reduce-compiler-warnings 04306bbee need at least VS2017 to use the real GSL 796ad820b Merge branch 'master' into develop/reduce-compiler-warnings 16c240cd6 Merge branch 'master' into develop/reduce-compiler-warnings e07e89f0c turn on "warnings as errors" for CMAKE builds 5c019f891 complex "constexpr" functions not available with our version of g++ 4ab074a58 fix a few more compiler warnings ... nearing the end! :-) dea7ea41b And still more compiler warnings ... almost done 🤞🏻 fbe3bbb20 remove assorted compiler warnings e60b7fd3c Merge branch 'master' into develop/reduce-compiler-warnings e9df212c6 Arguments should be "const&" to prevent C4866 94e75cbed Merge branch 'master' into develop/reduce-compiler-warnings d3130414a Merge branch 'master' into develop/reduce-compiler-warnings 9a5e71f31 Merge branch 'master' into develop/reduce-compiler-warnings bd27c0232 Merge branch 'master' into develop/reduce-compiler-warnings c053362d2 remove still more compiler warnings 9f133b85a remove some more compiler warnings 0883c729c Merge branch 'master' into develop/reduce-compiler-warnings f4b766880 avoid comparision between signed/unsigned to prevent compiler warning 1e6564a6e eliminate more compiler warnings 85a7b8ad0 remove a few compiler warnings 09c82049f Merge branch 'master' into develop/reduce-compiler-warnings 31f1662fa Merge branch 'master' into develop/reduce-compiler-warnings a313562a3 Merge branch 'feature/fix-compiler-warnings' into develop/reduce-compiler-warnings 8547cdd24 eliminiate GCC warnings from Filesystem.h b5044b2a2 fix several compiler warnings/code-analysis diagnostics 9d2f90b8c GetEnvironmentVariable() and getenv() aren't quite the same 6faa3666f remove more compiler warnings git-subtree-dir: externals/coda-oss git-subtree-split: 986307c9c05f6b341e78245d220115fabe5b2fdb * Squashed 'externals/nitro/' changes from e1a64da1f..08cbb96f9 08cbb96f9 build with older C++14 compilers (#524) git-subtree-dir: externals/nitro git-subtree-split: 08cbb96f95ca26da1ee8a42bf408551dc208e37a * copy_externals * latest from coda-oss and nitro * latest from coda-oss and nitro * Squashed 'externals/coda-oss/' changes from 986307c9c..b44709a95 b44709a95 added ComplexSpansView utility (#635) git-subtree-dir: externals/coda-oss git-subtree-split: b44709a950f710ff790aae6f9f8eb9f6ec6b0df8 * Squashed 'externals/nitro/' changes from 08cbb96f9..c71acc492 c71acc492 latest from coda-oss (#526) git-subtree-dir: externals/nitro git-subtree-split: c71acc492f4e00dfd0a3d10147deea0f819135bd * copy_externals * --depth 1 for git-clone * latest from coda-oss * Squashed 'externals/coda-oss/' changes from b44709a95..b04ccca17 b04ccca17 remove more C++11 work-arounds (#641) e460970a7 increase GCC warnings (#640) 91284249b provide ComplexView iterator support (#639) 453b7ec68 try to get std::make_unique working with old Intel compiler (#638) 5736cfd4d is_trivially_copyable for old Intel compiler (#637) 7c2aea38f use H5 SDK naming conventions (#636) fc3008b8d use 'modern' C pre-processor git-subtree-dir: externals/coda-oss git-subtree-split: b04ccca17493e538130c350208da59be42eb6bc7 * Squashed 'externals/nitro/' changes from c71acc492..4ccdf5b37 4ccdf5b37 latest from coda-oss (#527) git-subtree-dir: externals/nitro git-subtree-split: 4ccdf5b3750bc565d45e7b5f3ca161ddb3b6ecb4 * latest from coda-oss * --depth 1 for git-clone * latest from coda-oss and nitro * latest from coda-oss and NITRO * Squashed 'externals/coda-oss/' changes from b04ccca17..9cfe9a4a8 9cfe9a4a8 Merge branch 'master' e989b0910 createElement() needs to be virtual (#646) 4bdaf10d9 Change xml lite function to virtual (#645) d17b57a54 Merge branch 'master' fa00a5430 move debug -g flags to be turned on only if debugging (#644) 6be8f0a2e move debug -g flags to be turned on only if debugging (#644) 44ab72854 routines for simple writing to HDF5 files (#643) aabc5818e remove more C++11 work-arounds (#642) git-subtree-dir: externals/coda-oss git-subtree-split: 9cfe9a4a8b92e982a5afce3938219dc3dc38bcc2 * Squashed 'externals/nitro/' changes from 4ccdf5b37..24ff32863 24ff32863 -j 6 seems to work for SIX, how about NITRO? 713ee8538 -j 6 seems to work for SIX, how about NITRO? git-subtree-dir: externals/nitro git-subtree-split: 24ff328636e3acbf1745e49df45b787403ecb113 * latest from coda-oss and NITRO * Squashed 'externals/coda-oss/' changes from 9cfe9a4a8..b9ea37bbf b9ea37bbf xml::lite::Validator can be moved (#648) git-subtree-dir: externals/coda-oss git-subtree-split: b9ea37bbf3fce6f09a8e1b4bb2deb6abb57ca075 * Squashed 'externals/nitro/' changes from 24ff32863..463c9e418 463c9e418 latest from coda-oss (#531) git-subtree-dir: externals/nitro git-subtree-split: 463c9e4189a86679ff6d9d2d57cdafadcf9281ce * latest from coda-oss and NITRO * latest from coda-oss and NITRO * Squashed 'externals/coda-oss/' changes from b9ea37bbf..81285872f 81285872f build cleanly with all G++ warnings enabled (#649) git-subtree-dir: externals/coda-oss git-subtree-split: 81285872ff37b85594398a6752f7855ad84a2e92 * Squashed 'externals/nitro/' changes from 463c9e418..b871d2b9c b871d2b9c latest from coda-oss (#532) e8ff6b444 apps: fix display of TREs from file extended header section (#529) git-subtree-dir: externals/nitro git-subtree-split: b871d2b9c76d02b9b56f8edb1fdbb5a67fe15d0f * latest from coda-oss and NITRO * fix DECLARE_EXCEPTION syntax * latest from coda-oss and NITRO * Squashed 'externals/nitro/' changes from b871d2b9c..eea09a38d eea09a38d latest from coda-oss (#534) e2f038e45 adjust compiler flags for clean CMake builds (#533) git-subtree-dir: externals/nitro git-subtree-split: eea09a38d87765f6b65d598d1a541f4d8da1bff1 * latest from coda-oss and NITRO * Squashed 'externals/coda-oss/' changes from 81285872f..ba8547621 ba8547621 don't put 'struct' in the macro bd79aa11f require Python 3.7, do MD5 check ecfa687c5 use std::filesystem (instead of sys::filesystem) where possible (#652) 243bc9991 add 'override' c0fd2124d wrap common "file open" routines to support sys::expandEnviromentVariables() (#651) 0657f3297 adjust compiler flags for clean CMake builds (#650) git-subtree-dir: externals/coda-oss git-subtree-split: ba8547621a4fb41ff2b61b21dc46a3ad9a22293a * latest from coda-oss * Squashed 'externals/coda-oss/' changes from ba8547621..4c68fa0d3 4c68fa0d3 fix directory names 5ee2f039a poor-man's version of "import module std;" (#655) fad02842c Add HighFive library (#654) b31f5b6ab have Python 3.6 on a build server git-subtree-dir: externals/coda-oss git-subtree-split: 4c68fa0d34fbc53eb59de36ee3abd3a4978510bb * Squashed 'externals/nitro/' changes from eea09a38d..437978da8 437978da8 latest from coda-oss (#535) git-subtree-dir: externals/nitro git-subtree-split: 437978da8d41ea6279c7e6ea52be84df0d9f9b99 * latest from coda-oss * latest from coda-oss * Squashed 'externals/coda-oss/' changes from 4c68fa0d3..605d24898 605d24898 duplicate existing HDF5 unittests using HighFive (#657) 134233279 add 'override'; fix ASAN-detected memory leaks (#656) git-subtree-dir: externals/coda-oss git-subtree-split: 605d248984a7636963909c4010f24832f47aae73 * Squashed 'externals/nitro/' changes from 437978da8..7d77233db 7d77233db latest from coda-oss (#536) git-subtree-dir: externals/nitro git-subtree-split: 7d77233dbaf2b31e28d1667936ff1dc7f38536d2 --- externals/coda-oss/CMakeLists.txt | 10 + externals/coda-oss/ReleaseNotes.md | 11 +- externals/coda-oss/UnitTest/UnitTest.vcxproj | 2 + externals/coda-oss/modules/c++/CMakeLists.txt | 4 +- .../modules/c++/cli/unittests/test_cli.cpp | 8 +- .../modules/c++/coda-oss-lite.vcxproj | 2 + .../modules/c++/except/source/Backtrace.cpp | 4 + .../modules/c++/hdf5.lite/CMakeLists.txt | 4 +- .../c++/hdf5.lite/include/hdf5/lite/Write.h | 12 +- .../hdf5.lite/include/hdf5/lite/highfive.h | 75 ++++ .../hdf5.lite/unittests/test_hdf5write.cpp | 2 +- .../c++/hdf5.lite/unittests/test_highfive.cpp | 396 ++++++++++++++++++ .../coda-oss/modules/c++/hdf5.lite/wscript | 2 +- .../c++/io/include/io/BufferViewStream.h | 10 +- .../modules/c++/io/include/io/TempFile.h | 5 +- .../modules/c++/io/source/TempFile.cpp | 2 +- .../modules/c++/io/tests/serializeTest1.cpp | 4 +- .../c++/io/unittests/test_tempfile.cpp | 3 +- .../logging/include/logging/MemoryHandler.h | 2 +- .../include/logging/StandardFormatter.h | 2 +- .../logging/include/logging/StreamHandler.h | 8 +- .../logging/include/logging/XMLFormatter.h | 2 +- .../unittests/test_exception_logger.cpp | 2 +- .../logging/unittests/test_rotating_log.cpp | 5 +- .../modules/c++/mt/include/mt/Runnable1D.h | 2 +- .../modules/c++/mt/include/mt/WorkerThread.h | 2 +- .../c++/mt/tests/BasicThreadPoolTest.cpp | 2 +- .../c++/mt/tests/GenerationThreadPoolTest.cpp | 2 +- .../modules/c++/mt/tests/MTSingletonTest.cpp | 10 +- .../c++/mt/tests/ThreadExceptionTest.cpp | 2 +- .../c++/mt/tests/ThreadGroupAffinityTest.cpp | 2 +- .../net/ssl/SSLConnectionClientFactory.h | 2 +- .../c++/net/include/net/ClientSocketFactory.h | 2 +- .../modules/c++/net/include/net/DaemonUnix.h | 16 +- .../c++/net/include/net/NetConnection.h | 6 +- .../net/PerRequestThreadAllocStrategy.h | 6 +- .../c++/net/include/net/RequestHandler.h | 2 +- .../c++/net/include/net/ServerSocketFactory.h | 4 +- .../include/net/SingleThreadedAllocStrategy.h | 4 +- .../net/include/net/ThreadPoolAllocStrategy.h | 8 +- .../c++/net/tests/NetConnectionServerTest.cpp | 2 +- .../c++/plugin/include/plugin/ErrorHandler.h | 10 +- .../sio.lite/include/sio/lite/SioFileReader.h | 6 +- .../sio.lite/include/sio/lite/StreamReader.h | 4 +- .../modules/c++/str/source/Encoding.cpp | 2 +- .../coda-oss/modules/c++/str/source/Manip.cpp | 3 +- .../modules/c++/sys/source/OSWin32.cpp | 12 +- .../c++/tiff/include/tiff/GenericType.h | 10 +- .../modules/c++/tiff/include/tiff/Header.h | 4 +- .../modules/c++/tiff/include/tiff/IFD.h | 4 +- .../modules/c++/tiff/include/tiff/IFDEntry.h | 4 +- .../modules/c++/xml.lite/CMakeLists.txt | 1 + .../include/xml/lite/UtilitiesXerces.h | 22 +- .../include/xml/lite/XMLReaderXerces.h | 10 +- .../xml.lite/unittests/test_soapelements.cpp | 4 +- .../c++/zip/include/zip/GZipInputStream.h | 2 +- .../c++/zip/include/zip/GZipOutputStream.h | 4 +- .../c++/zip/include/zip/ZipOutputStream.h | 4 +- 58 files changed, 630 insertions(+), 127 deletions(-) create mode 100644 externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/highfive.h create mode 100644 externals/coda-oss/modules/c++/hdf5.lite/unittests/test_highfive.cpp diff --git a/externals/coda-oss/CMakeLists.txt b/externals/coda-oss/CMakeLists.txt index f512d520a8..f1aa8e5ac9 100644 --- a/externals/coda-oss/CMakeLists.txt +++ b/externals/coda-oss/CMakeLists.txt @@ -24,8 +24,18 @@ if (${CMAKE_PROJECT_NAME} STREQUAL coda-oss) if (MSVC) add_compile_options(/WX) # warnings as errors add_compile_options(/MP) # multi-processor compile + + if (ENABLE_ASAN) + # https://docs.microsoft.com/en-us/cpp/sanitizers/asan?view=msvc-160 + add_compile_options(/fsanitize=address) + endif() elseif (UNIX) add_compile_options(-Werror) # warnings as errors + if (ENABLE_ASAN) + # https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html + add_compile_options(-fsanitize=address) + add_link_options(-fsanitize=address) + endif() endif() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") diff --git a/externals/coda-oss/ReleaseNotes.md b/externals/coda-oss/ReleaseNotes.md index dd7dd197e4..a6a8c326b6 100644 --- a/externals/coda-oss/ReleaseNotes.md +++ b/externals/coda-oss/ReleaseNotes.md @@ -11,8 +11,15 @@ ``` # coda-oss Release Notes +## [Release 2023-??-??](https://github.com/mdaus/coda-oss/releases/tag/2023-??-??) +* *zlib* updated to [1.2.13](https://github.com/madler/zlib/releases/tag/v1.2.13). +* new `mem::ComplexView` class to make it easier to process complex data stored in parallel. +* adjust compiler flags for clean *CMake* builds. +* wrap common "file open" routines (e.g., `fopen()`) to support `sys::expandEnvironmentVariables()`. +* add header-only [HighFive](https://github.com/BlueBrain/HighFive) HDF5-wrapper library. + ## [Release 2022-12-14](https://github.com/mdaus/coda-oss/releases/tag/2022-12-14) -* removed remaining vestigates of `std::auto_ptr`, provide `mem::AutoPtr` for the tiny handful of +* removed remaining vestiges of `std::auto_ptr`, provide `mem::AutoPtr` for the tiny handful of places (e.g., SWIG bindings) that still need copying. * `xml::lite::Element` overloads to make creting new XML documents easier; see unittests for examples. * try even harder to find unittest files in various scenarios. @@ -30,7 +37,7 @@ * Utilitiy routines for finding various files when unit-testing. * Removed C++14 work-arounds needed in C++11. Legacy C++ exception specificatons removed. * Rebuild `waf` for FIPS error; added more debug options. - + ## [Release 2022-08-30](https://github.com/mdaus/coda-oss/releases/tag/2022-08-30) * XML is now always written as UTF-8; the code will still try to read Windows-1252. * `Uri`s are no longer validated by default. diff --git a/externals/coda-oss/UnitTest/UnitTest.vcxproj b/externals/coda-oss/UnitTest/UnitTest.vcxproj index 8caaa20fbf..5f55f6360d 100644 --- a/externals/coda-oss/UnitTest/UnitTest.vcxproj +++ b/externals/coda-oss/UnitTest/UnitTest.vcxproj @@ -25,6 +25,7 @@ v143 false Unicode + true DynamicLibrary @@ -33,6 +34,7 @@ true false Unicode + true diff --git a/externals/coda-oss/modules/c++/CMakeLists.txt b/externals/coda-oss/modules/c++/CMakeLists.txt index 6a5d8c7adf..5d6ec9ed88 100644 --- a/externals/coda-oss/modules/c++/CMakeLists.txt +++ b/externals/coda-oss/modules/c++/CMakeLists.txt @@ -18,8 +18,8 @@ elseif (UNIX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wzero-as-null-pointer-constant") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast") - #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-final-types -Wsuggest-final-methods") - #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-final-types -Wsuggest-final-methods") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override") endif() # add an interface library for unittests diff --git a/externals/coda-oss/modules/c++/cli/unittests/test_cli.cpp b/externals/coda-oss/modules/c++/cli/unittests/test_cli.cpp index ba10dfdee1..62fa2192f9 100644 --- a/externals/coda-oss/modules/c++/cli/unittests/test_cli.cpp +++ b/externals/coda-oss/modules/c++/cli/unittests/test_cli.cpp @@ -171,10 +171,10 @@ TEST_CASE(testRequired) parser.addArgument("-v --verbose", "Toggle verbose", cli::STORE_TRUE); parser.addArgument("-c --config", "Specify a config file", cli::STORE)->setRequired(true); - std::unique_ptr results; - TEST_EXCEPTION(results.reset(parser.parse(str::split("")))); - TEST_EXCEPTION(results.reset(parser.parse(str::split("-c")))); - results.reset(parser.parse(str::split("-c configFile"))); + const std::string program(testName); + TEST_EXCEPTION(parser.parse(program, str::split(""))); + TEST_EXCEPTION(parser.parse(program, str::split("-c"))); + const auto results = parser.parse(program, str::split("-c configFile")); TEST_ASSERT_EQ(results->get("config"), "configFile"); } diff --git a/externals/coda-oss/modules/c++/coda-oss-lite.vcxproj b/externals/coda-oss/modules/c++/coda-oss-lite.vcxproj index ab34ea98a9..f50ac4a193 100644 --- a/externals/coda-oss/modules/c++/coda-oss-lite.vcxproj +++ b/externals/coda-oss/modules/c++/coda-oss-lite.vcxproj @@ -421,12 +421,14 @@ DynamicLibrary true v143 + true DynamicLibrary false v143 true + true diff --git a/externals/coda-oss/modules/c++/except/source/Backtrace.cpp b/externals/coda-oss/modules/c++/except/source/Backtrace.cpp index 6b8e24a622..a6a326415e 100644 --- a/externals/coda-oss/modules/c++/except/source/Backtrace.cpp +++ b/externals/coda-oss/modules/c++/except/source/Backtrace.cpp @@ -57,6 +57,10 @@ struct BacktraceHelper final BacktraceHelper(char** stackSymbols) : mStackSymbols(stackSymbols) {} + BacktraceHelper(const BacktraceHelper&) = delete; + BacktraceHelper& operator=(const BacktraceHelper&) = delete; + BacktraceHelper(BacktraceHelper&&) = default; + BacktraceHelper& operator=(BacktraceHelper&&) = default; ~BacktraceHelper() { diff --git a/externals/coda-oss/modules/c++/hdf5.lite/CMakeLists.txt b/externals/coda-oss/modules/c++/hdf5.lite/CMakeLists.txt index 927e11d93b..0efec0c88a 100644 --- a/externals/coda-oss/modules/c++/hdf5.lite/CMakeLists.txt +++ b/externals/coda-oss/modules/c++/hdf5.lite/CMakeLists.txt @@ -1,8 +1,8 @@ set(MODULE_NAME hdf5.lite) if(CODA_ENABLE_HDF5) - set(MODULE_DEPS except-c++ types-c++ io-c++ coda_oss-c++) - list(APPEND MODULE_DEPS hdf5-c++) + set(MODULE_DEPS highfive-c++ hdf5-c++) + list(APPEND MODULE_DEPS except-c++ types-c++ io-c++ coda_oss-c++) coda_add_module( ${MODULE_NAME} diff --git a/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/Write.h b/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/Write.h index 3a0e4c7c25..dea204a7f9 100644 --- a/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/Write.h +++ b/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/Write.h @@ -25,8 +25,8 @@ #pragma once /*! - * \file Read.h - * \brief HDF File-reading API + * \file Write.h + * \brief HDF File-writing API * * These are simple routines to write HDF5 files; they're loosely modeled after the MATLab API * https://www.mathworks.com/help/matlab/ref/h5create.html @@ -51,20 +51,20 @@ CODA_OSS_API void createFile(const coda_oss::filesystem::path&, const std::strin CODA_OSS_API void createFile(const coda_oss::filesystem::path&, const std::string& ds, SpanRC); inline void createFile(const coda_oss::filesystem::path& path, const std::string& ds, SpanRC data_) { - SpanRC data(data_.data(), data_.dims()); - createFile(path, ds, data); + SpanRC data(data_.data(), data_.dims()); + createFile(path, ds, data); } CODA_OSS_API void createFile(const coda_oss::filesystem::path&, const std::string& ds, SpanRC); inline void createFile(const coda_oss::filesystem::path& path, const std::string& ds, SpanRC data_) { SpanRC data(data_.data(), data_.dims()); - createFile(path, ds, data); + createFile(path, ds, data); } CODA_OSS_API void writeFile(const coda_oss::filesystem::path&, const std::string& loc, SpanRC); inline void writeFile(const coda_oss::filesystem::path& path, const std::string& ds, SpanRC data_) { - SpanRC data(data_.data(), data_.dims()); + SpanRC data(data_.data(), data_.dims()); writeFile(path, ds, data); } CODA_OSS_API void writeFile(const coda_oss::filesystem::path&, const std::string& loc, SpanRC); diff --git a/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/highfive.h b/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/highfive.h new file mode 100644 index 0000000000..6203344c30 --- /dev/null +++ b/externals/coda-oss/modules/c++/hdf5.lite/include/hdf5/lite/highfive.h @@ -0,0 +1,75 @@ +/* ========================================================================= + * This file is part of hdf5.lite-c++ + * ========================================================================= + * + * (C) Copyright 2022, Maxar Technologies, Inc. + * + * hdf5.lite-c++ 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 3 of the License, or + * (at your option) any later version. + * + * 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, + * see . + * + */ + +#ifndef CODA_OSS_hdf5_lite_highfive_h_INCLUDED_ +#define CODA_OSS_hdf5_lite_highfive_h_INCLUDED_ +#pragma once + +/*! + * \file highfive.h + * \brief Utility routines for using HighFive + */ + +#include + +#include "highfive/H5Easy.hpp" +#include "highfive/H5DataSet.hpp" + +#include "SpanRC.h" + +namespace hdf5 +{ +namespace lite +{ +template +inline HighFive::DataSet writeDataSet(H5Easy::File& file, SpanRC data, const std::string& dataset_name /*, TODO ...*/) +{ + const std::vector dims{data.dims().row, data.dims().col}; + const HighFive::DataSpace dataspace{dims}; + auto retval = file.createDataSet(dataset_name, dataspace); + retval.write_raw(data.data()); + return retval; +} + +template +inline SpanRC readDataSet(HighFive::DataSet& dataSet, std::vector& result /*, TODO ...*/) +{ + const auto dimensions = dataSet.getSpace().getDimensions(); + const types::RowCol dims(dimensions[0], dimensions[1]); + + result.resize(dims.area()); + dataSet.read(result.data()); + + return SpanRC(result.data(), dims); +} + +template +inline SpanRC load(H5Easy::File& file, const std::string& dataset_name, std::vector& result /*, TODO ...*/) +{ + auto dataSet = file.getDataSet(dataset_name); + return readDataSet(dataSet, result); +} + +} +} + +#endif // CODA_OSS_hdf5_lite_highfive_h_INCLUDED_ diff --git a/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_hdf5write.cpp b/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_hdf5write.cpp index 2d0dde8502..7a4412fe05 100644 --- a/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_hdf5write.cpp +++ b/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_hdf5write.cpp @@ -85,7 +85,7 @@ TEST_CASE(test_hdf5Write) for (size_t i = 0; i < result.size(); i++) { const auto expected = static_cast(i); - TEST_ASSERT_ALMOST_EQ(result[i], expected); + TEST_ASSERT_EQ(result[i], expected); } } diff --git a/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_highfive.cpp b/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_highfive.cpp new file mode 100644 index 0000000000..1b6ee28626 --- /dev/null +++ b/externals/coda-oss/modules/c++/hdf5.lite/unittests/test_highfive.cpp @@ -0,0 +1,396 @@ +/* ========================================================================= + * This file is part of hdf5.lite-c++ + * ========================================================================= + * + * (C) Copyright 2022, Maxar Technologies, Inc. + * + * hdf5.lite-c++ 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 3 of the License, or + * (at your option) any later version. + * + * 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, + * see . + * + */ + +#include "import/std.h" +#include + +#include + +#include "sys/FileFinder.h" +#include "types/RowCol.h" + +#include "highfive/H5Easy.hpp" +#include "highfive/H5DataSet.hpp" +#include "highfive/H5File.hpp" + +#include "hdf5/lite/SpanRC.h" +#include "hdf5/lite/highfive.h" + +static std::filesystem::path find_unittest_file(const std::filesystem::path& name) +{ + static const auto unittests = std::filesystem::path("modules") / "c++" / "hdf5.lite" / "unittests"; + return sys::test::findGITModuleFile("coda-oss", unittests, name); +} + +TEST_CASE(test_highfive_load) +{ + static const auto path = find_unittest_file("example.h5"); + + const H5Easy::File file(path.string()); + const auto lat = H5Easy::load>(file, "/g4/lat"); + TEST_ASSERT_EQ(lat.size(), 19); + TEST_ASSERT_ALMOST_EQ(lat[0], -90.0); + TEST_ASSERT_ALMOST_EQ(lat[0], -lat[18]); +} + +TEST_CASE(test_highfive_FileException) +{ + static const std::filesystem::path path = "does not exist . h5"; + HighFive::SilenceHDF5 silencer; // no need for diagnostics, we're expecting a failure + TEST_SPECIFIC_EXCEPTION(H5Easy::File(path.string()), HighFive::FileException); +} + +TEST_CASE(test_highfive_nested) +{ + /* + Group '/' + Group '/1' + Group '/1/bar' + Group '/1/bar/cat' + Dataset 'i' + Size: 10x1 + MaxSize: 10x1 + Datatype: H5T_IEEE_F64LE (double) + ChunkSize: [] + Filters: none + FillValue: 0.000000 + */ + static const auto path = find_unittest_file("123_barfoo_catdog_cx.h5"); + + const H5Easy::File file(path.string()); + const auto i = H5Easy::load>>(file, "/1/bar/cat/i"); + TEST_ASSERT_EQ(i.size(), 1); + TEST_ASSERT_EQ(i[0].size(), 10); + + const auto r = H5Easy::load>>(file, "/1/bar/dog/r"); + TEST_ASSERT_EQ(r.size(), 1); + TEST_ASSERT_EQ(r[0].size(), 10); + + TEST_ASSERT_EQ(i.size(), r.size()); + TEST_ASSERT_EQ(i[0].size(), r[0].size()); +} + +TEST_CASE(test_highfive_nested_small) +{ + // top group: Data + // outer groups: 1, 2, 3, 4, 5 + // sub groups: bar, foo + // sub-sub groups: cat, dog + // sub-sub-sub groups: a, b, c, d + // data: i (float array), r (float array) + static const auto path = find_unittest_file("nested_complex_float32_data_small.h5"); + + const H5Easy::File file(path.string()); + const auto i = H5Easy::load>(file, "/Data/1/bar/cat/a/i"); + TEST_ASSERT_EQ(i.size(), 10); + auto actual = std::accumulate(i.cbegin(), i.cend(), 0.0); + TEST_ASSERT_EQ(actual, 0.0); + + const auto r = H5Easy::load>(file, "/Data/5/foo/dog/d/r"); + TEST_ASSERT_EQ(r.size(), 10); + actual = std::accumulate(r.cbegin(), r.cend(), 0.0); + TEST_ASSERT_EQ(actual, 10.0); +} + +TEST_CASE(test_highfive_nested_small_wrongType) +{ + static const auto path = find_unittest_file("nested_complex_float32_data_small.h5"); + + const H5Easy::File file(path.string()); + HighFive::SilenceHDF5 silencer; // no need for diagnostics, we're expecting a failure + TEST_SPECIFIC_EXCEPTION( + H5Easy::load>>(file, "/Data/1/bar/cat/a/i"), + HighFive::DataSetException); +} + + +//******************************************************************************* + +TEST_CASE(test_highfive_info) +{ + static const auto path = find_unittest_file("example.h5"); + const H5Easy::File file(path.string()); + + // https://www.mathworks.com/help/matlab/ref/h5info.html + /* + info = struct with fields: + Filename: '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/example.h5' + Name: '/' + Groups: [4x1 struct] + Datasets: [] + Datatypes: [] + Links: [] + Attributes: [2x1 struct] + */ + + TEST_ASSERT_EQ(path.string(), file.getName()); + TEST_ASSERT_EQ("/", file.getPath()); + TEST_ASSERT_EQ(file.getNumberObjects(), 4); // 4 groups + const auto objectNames = file.listObjectNames(); + TEST_ASSERT_EQ(objectNames.size(), 4); // 4 groups + for (auto&& name : objectNames) + { + const auto type = file.getObjectType(name); + TEST_ASSERT(type == HighFive::ObjectType::Group); + + const auto group = file.getGroup(name); + TEST_ASSERT_EQ(group.getPath(), "/" + name); + } + TEST_ASSERT_EQ(file.getNumberAttributes(), 2); +} + +TEST_CASE(test_highfive_groupinfo) +{ + static const auto path = find_unittest_file("example.h5"); + const H5Easy::File file(path.string()); + + // https://www.mathworks.com/help/matlab/ref/h5info.html + const auto g4 = file.getGroup("g4"); + /* + info = struct with fields: + Filename: '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/example.h5' + Name: '/g4' + Groups: [] + Datasets: [4x1 struct] + Datatypes: [] + Links: [] + Attributes: [] + */ + TEST_ASSERT_EQ(path.string(), g4.getFile().getName()); + const std::string groupPath("/g4"); + TEST_ASSERT_EQ(groupPath, g4.getPath()); + TEST_ASSERT_EQ(g4.getNumberObjects(), 4); // 4 dataSets + const auto objectNames = g4.listObjectNames(); + TEST_ASSERT_EQ(objectNames.size(), 4); // 4 dataSets + for (auto&& name : objectNames) + { + const auto type = g4.getObjectType(name); + TEST_ASSERT(type == HighFive::ObjectType::Dataset); + + const auto dataset = g4.getDataSet(name); + TEST_ASSERT_EQ(dataset.getPath(), groupPath + "/" + name); + } +} + +TEST_CASE(test_highfive_datasetinfo) +{ + static const auto path = find_unittest_file("example.h5"); + const H5Easy::File file(path.string()); + + // https://www.mathworks.com/help/matlab/ref/h5info.html + const auto time = file.getDataSet("/g4/time"); + /* + info = struct with fields: + Filename: '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/example.h5' + Name: 'time' + Datatype: [1x1 struct] + Dataspace: [1x1 struct] + ChunkSize: 10 + FillValue: 0 + Filters: [] + Attributes: [2x1 struct] + */ + TEST_ASSERT_EQ(path.string(), time.getFile().getName()); + const std::string dsPath("/g4/time"); + TEST_ASSERT_EQ(dsPath, time.getPath()); + + const auto dataType = time.getDataType(); + TEST_ASSERT(dataType.getClass() == HighFive::DataTypeClass::Float); + + auto dims = time.getDimensions(); + TEST_ASSERT_EQ(dims.size(), 1); + TEST_ASSERT_EQ(10, dims[0]); // ChunkSize ??? + + const auto dataSpace = time.getSpace(); + dims = dataSpace.getDimensions(); + TEST_ASSERT_EQ(dims.size(), 1); + TEST_ASSERT_EQ(10, dims[0]); // ChunkSize ??? + + TEST_ASSERT_EQ(time.listAttributeNames().size(), 2); +} + +static void read_complex(const std::string& testName, const HighFive::Group& group) +{ + const auto i = group.getDataSet("i"); + TEST_ASSERT(i.getDataType().getClass() == HighFive::DataTypeClass::Float); + TEST_ASSERT_EQ(i.getElementCount(), 10); + + const auto r = group.getDataSet("r"); + TEST_ASSERT(r.getDataType().getClass() == HighFive::DataTypeClass::Float); + TEST_ASSERT_EQ(r.getElementCount(), 10); +} +TEST_CASE(test_highfive_info_nested) +{ + /* + Group '/' + Group '/1' + Group '/1/bar' + Group '/1/bar/cat' + Dataset 'i' + Size: 10x1 + MaxSize: 10x1 + Datatype: H5T_IEEE_F64LE (double) + ChunkSize: [] + Filters: none + FillValue: 0.000000 + */ + + static const auto path = find_unittest_file("123_barfoo_catdog_cx.h5"); + const H5Easy::File file(path.string()); + + TEST_ASSERT_EQ(path.string(), file.getName()); + TEST_ASSERT_EQ("/", file.getPath()); + + TEST_ASSERT_EQ(file.getNumberObjects(), 3); // 3 groups + auto objectNames = file.listObjectNames(); + const std::vector expectedOuterGroupNames{"1", "2", "3"}; + TEST_ASSERT_EQ(objectNames.size(), expectedOuterGroupNames.size()); + for (auto&& outer : expectedOuterGroupNames) + { + const auto groupPath = "/" + outer; + const auto group = file.getGroup(groupPath); + TEST_ASSERT_EQ(group.getPath(), groupPath); + + TEST_ASSERT_EQ(group.getNumberObjects(), 2); // 2 groups + objectNames = group.listObjectNames(); + const std::vector expectedSubGroupNames{"bar", "foo"}; + TEST_ASSERT_EQ(objectNames.size(), expectedSubGroupNames.size()); + for (auto&& subGroupName : expectedSubGroupNames) + { + const auto subGroup = group.getGroup(subGroupName); + const auto subGroupPath = groupPath + "/" + subGroupName; + TEST_ASSERT_EQ(subGroup.getPath(), subGroupPath); + + + TEST_ASSERT_EQ(subGroup.getNumberObjects(), 2); // 2 groups + objectNames = subGroup.listObjectNames(); + const std::vector expectedSubSubGroupNames{"cat", "dog"}; + TEST_ASSERT_EQ(objectNames.size(), expectedSubSubGroupNames.size()); + for (auto&& subSubGroupName : expectedSubSubGroupNames) + { + const auto subSubGroup = subGroup.getGroup(subSubGroupName); + const auto subSubGroupPath = subGroupPath + "/" + subSubGroupName; + TEST_ASSERT_EQ(subSubGroup.getPath(), subSubGroupPath); + + read_complex(testName, subSubGroup); + } + } + } +} + +//******************************************************************************* + +TEST_CASE(test_highfive_create) +{ + static const auto path_ = find_unittest_file("example.h5"); + static const auto path = path_.parent_path() / "TEST_highfive_create_TMP.h5"; + H5Easy::File file(path.string(), H5Easy::File::Overwrite); + + const types::RowCol dims{10, 20}; + std::vector> DS1(dims.row); + float d = 0.0f; + for (auto&& r : DS1) + { + r.resize(dims.col); + for (size_t c = 0; c < r.size(); c++) + { + r[c] = d++; + } + } + + H5Easy::dump(file, "/DS1", DS1); + TEST_SUCCESS; +} + +TEST_CASE(test_highfive_write) +{ + static const auto path_ = find_unittest_file("example.h5"); + static const auto path = path_.parent_path() / "TEST_highfive_write_TMP.h5"; + + const types::RowCol dims{10, 20}; + std::vector data_(dims.area()); + const hdf5::lite::SpanRC data(data_.data(), dims); + double d = 0.0; + for (size_t r = 0; r>>(file, "/DS1"); + TEST_ASSERT_EQ(DS1.size(), dims.row); + TEST_ASSERT_EQ(DS1[0].size(), dims.col); + + for (size_t r = 0; r < DS1.size(); r++) + { + for (size_t c = 0; c < DS1[r].size(); c++) + { + const auto expected = data(r, c); + const auto actual = DS1[r][c]; + TEST_ASSERT_EQ(actual, expected); + } + } + } + { + H5Easy::File file(path.string()); + + std::vector result; + const auto rc = hdf5::lite::load(file, "/DS1", result); + TEST_ASSERT(rc.dims() == dims); + TEST_ASSERT_EQ(dims.area(), result.size()); + for (size_t i = 0; i < result.size(); i++) + { + const auto expected = static_cast(i); + TEST_ASSERT_EQ(result[i], expected); + } + } +} + +TEST_MAIN( + TEST_CHECK(test_highfive_load); + TEST_CHECK(test_highfive_FileException); + TEST_CHECK(test_highfive_nested); + TEST_CHECK(test_highfive_nested_small); + TEST_CHECK(test_highfive_nested_small_wrongType); + + TEST_CHECK(test_highfive_info); + TEST_CHECK(test_highfive_groupinfo); + TEST_CHECK(test_highfive_datasetinfo); + TEST_CHECK(test_highfive_info_nested); + + //TEST_CHECK(test_highfive_create); + //TEST_CHECK(test_highfive_write); +) diff --git a/externals/coda-oss/modules/c++/hdf5.lite/wscript b/externals/coda-oss/modules/c++/hdf5.lite/wscript index c8c8b5ef60..32be36054d 100644 --- a/externals/coda-oss/modules/c++/hdf5.lite/wscript +++ b/externals/coda-oss/modules/c++/hdf5.lite/wscript @@ -1,6 +1,6 @@ NAME = 'hdf5.lite' VERSION = '1.0' -MODULE_DEPS = 'hdf5 hdf5cpp except types io coda_oss' +MODULE_DEPS = 'highfive hdf5 hdf5cpp except types io coda_oss' USELIB_LOCAL = 'hdf5-c hdf5cpp-c' options = configure = distclean = lambda p: None diff --git a/externals/coda-oss/modules/c++/io/include/io/BufferViewStream.h b/externals/coda-oss/modules/c++/io/include/io/BufferViewStream.h index 45bc468189..beb00d23a2 100644 --- a/externals/coda-oss/modules/c++/io/include/io/BufferViewStream.h +++ b/externals/coda-oss/modules/c++/io/include/io/BufferViewStream.h @@ -61,7 +61,7 @@ struct BufferViewStream: public SeekableInputStream, public SeekableOutputStream BufferViewStream& operator=(BufferViewStream&&) = delete; //! Returns current location in buffer in bytes - virtual sys::Off_T tell() + virtual sys::Off_T tell() override { return gsl::narrow(mPosition * sizeof(T)); } @@ -73,12 +73,12 @@ struct BufferViewStream: public SeekableInputStream, public SeekableOutputStream * \param whence Location to seek from * \return new position */ - virtual sys::Off_T seek(sys::Off_T offset, Whence whence); + virtual sys::Off_T seek(sys::Off_T offset, Whence whence) override; /* * \return The available bytes to read from the stream */ - virtual sys::Off_T available() + virtual sys::Off_T available() override { return gsl::narrow((mBufferView.size - mPosition) * sizeof(T)); } @@ -92,7 +92,7 @@ struct BufferViewStream: public SeekableInputStream, public SeekableOutputStream * \param buffer The data to write to the stream * \param size The number of bytes to write to the stream */ - virtual void write(const void* buffer, size_t size); + virtual void write(const void* buffer, size_t size) override; /*! * Get a pointer to the internal buffer. @@ -139,7 +139,7 @@ struct BufferViewStream: public SeekableInputStream, public SeekableOutputStream * \param len The length to read * \return The number of bytes read */ - virtual sys::SSize_T readImpl(void* buffer, size_t len); + virtual sys::SSize_T readImpl(void* buffer, size_t len) override; private: diff --git a/externals/coda-oss/modules/c++/io/include/io/TempFile.h b/externals/coda-oss/modules/c++/io/include/io/TempFile.h index 8e80e054be..b997bc948b 100644 --- a/externals/coda-oss/modules/c++/io/include/io/TempFile.h +++ b/externals/coda-oss/modules/c++/io/include/io/TempFile.h @@ -33,7 +33,7 @@ namespace io * RAII object for a temporary file that gets deleted * upon object destruction */ -struct CODA_OSS_API TempFile +struct CODA_OSS_API TempFile final { /*! * Constructor for TempFile object. Provided a directory, @@ -49,7 +49,7 @@ struct CODA_OSS_API TempFile * * \return The pathname of the created file */ - inline std::string pathname() const + const std::string& pathname() const { return mPathname; } @@ -58,7 +58,6 @@ struct CODA_OSS_API TempFile TempFile& operator=(const TempFile&) = delete; private: - const sys::OS mOS; const std::string mPathname; }; } diff --git a/externals/coda-oss/modules/c++/io/source/TempFile.cpp b/externals/coda-oss/modules/c++/io/source/TempFile.cpp index e23bc29c37..1424aac29b 100644 --- a/externals/coda-oss/modules/c++/io/source/TempFile.cpp +++ b/externals/coda-oss/modules/c++/io/source/TempFile.cpp @@ -22,8 +22,8 @@ #include + static const sys::OS mOS; io::TempFile::TempFile(const std::string& dirname) : - mOS(sys::OS()), mPathname(mOS.getTempName(dirname)) { } diff --git a/externals/coda-oss/modules/c++/io/tests/serializeTest1.cpp b/externals/coda-oss/modules/c++/io/tests/serializeTest1.cpp index c3c37d2527..2037899aee 100644 --- a/externals/coda-oss/modules/c++/io/tests/serializeTest1.cpp +++ b/externals/coda-oss/modules/c++/io/tests/serializeTest1.cpp @@ -44,7 +44,7 @@ class A : public Serializable vec[2] = 0.0; } virtual ~A() {} - virtual void serialize(OutputStream& os) + virtual void serialize(OutputStream& os) override { os.writeln("Class A"); os.writeln(FmtX("%f", vec[0])); @@ -52,7 +52,7 @@ class A : public Serializable os.writeln(FmtX("%f", vec[2])); } - virtual void deserialize(InputStream& is) + virtual void deserialize(InputStream& is) override { string classType = fillString(is); string vec_0 = fillString(is); diff --git a/externals/coda-oss/modules/c++/io/unittests/test_tempfile.cpp b/externals/coda-oss/modules/c++/io/unittests/test_tempfile.cpp index ae391a26d6..60e5398c29 100644 --- a/externals/coda-oss/modules/c++/io/unittests/test_tempfile.cpp +++ b/externals/coda-oss/modules/c++/io/unittests/test_tempfile.cpp @@ -41,7 +41,8 @@ TEST_CASE(testFileDestroyed) { const io::TempFile tempFile; pathname = tempFile.pathname(); - std::ofstream out(pathname.c_str()); + std::ofstream out(pathname); + TEST_ASSERT_TRUE(static_cast(out)); out << "Test text"; } // File should be destroyed on destruction diff --git a/externals/coda-oss/modules/c++/logging/include/logging/MemoryHandler.h b/externals/coda-oss/modules/c++/logging/include/logging/MemoryHandler.h index 0bd91982d0..6654333183 100644 --- a/externals/coda-oss/modules/c++/logging/include/logging/MemoryHandler.h +++ b/externals/coda-oss/modules/c++/logging/include/logging/MemoryHandler.h @@ -52,7 +52,7 @@ struct MemoryHandler : public Handler getLogs(LogLevel level = LogLevel::LOG_NOTSET) const; protected: - virtual void write(const std::string& str); + virtual void write(const std::string& str) override; void emitRecord(const LogRecord* record) override; diff --git a/externals/coda-oss/modules/c++/logging/include/logging/StandardFormatter.h b/externals/coda-oss/modules/c++/logging/include/logging/StandardFormatter.h index 0e11d3d30c..798082e819 100644 --- a/externals/coda-oss/modules/c++/logging/include/logging/StandardFormatter.h +++ b/externals/coda-oss/modules/c++/logging/include/logging/StandardFormatter.h @@ -67,7 +67,7 @@ class CODA_OSS_API StandardFormatter : public Formatter StandardFormatter& operator=(const StandardFormatter&) = delete; - virtual void format(const LogRecord* record, io::OutputStream& os) const; + virtual void format(const LogRecord* record, io::OutputStream& os) const override; }; diff --git a/externals/coda-oss/modules/c++/logging/include/logging/StreamHandler.h b/externals/coda-oss/modules/c++/logging/include/logging/StreamHandler.h index fa66e54b5a..49d12f1aff 100644 --- a/externals/coda-oss/modules/c++/logging/include/logging/StreamHandler.h +++ b/externals/coda-oss/modules/c++/logging/include/logging/StreamHandler.h @@ -57,10 +57,10 @@ struct CODA_OSS_API StreamHandler : public Handler //! adds the need to write epilogue before deleting formatter // and then writing the prologue with the new formatter - virtual void setFormatter(Formatter* formatter); - virtual void setFormatter(std::unique_ptr&&); + virtual void setFormatter(Formatter* formatter) override; + virtual void setFormatter(std::unique_ptr&&) override; - virtual void close(); + virtual void close() override; protected: // This is necessary so this class and an inherited class can call a @@ -68,7 +68,7 @@ struct CODA_OSS_API StreamHandler : public Handler void closeImpl(); //! for general string write - virtual void write(const std::string&); + virtual void write(const std::string&) override; //! for writing directly to stream, // used for the bulk of the logging for speed diff --git a/externals/coda-oss/modules/c++/logging/include/logging/XMLFormatter.h b/externals/coda-oss/modules/c++/logging/include/logging/XMLFormatter.h index 7eb6556152..b6d8e8e834 100644 --- a/externals/coda-oss/modules/c++/logging/include/logging/XMLFormatter.h +++ b/externals/coda-oss/modules/c++/logging/include/logging/XMLFormatter.h @@ -63,7 +63,7 @@ struct XMLFormatter : public logging::Formatter XMLFormatter& operator=(const XMLFormatter&) = delete; - virtual void format(const logging::LogRecord* record, io::OutputStream& os) const; + virtual void format(const logging::LogRecord* record, io::OutputStream& os) const override; }; diff --git a/externals/coda-oss/modules/c++/logging/unittests/test_exception_logger.cpp b/externals/coda-oss/modules/c++/logging/unittests/test_exception_logger.cpp index 375b4b5f47..f85d8cc54a 100644 --- a/externals/coda-oss/modules/c++/logging/unittests/test_exception_logger.cpp +++ b/externals/coda-oss/modules/c++/logging/unittests/test_exception_logger.cpp @@ -45,7 +45,7 @@ class RunNothing final : public sys::Runnable public: RunNothing(size_t& c, logging::ExceptionLogger* el, bool getBacktrace=false) : counter(c), exLog(el), getBacktrace(getBacktrace) {} - virtual void run() + virtual void run() override { if(exLog->hasLogged()) return; diff --git a/externals/coda-oss/modules/c++/logging/unittests/test_rotating_log.cpp b/externals/coda-oss/modules/c++/logging/unittests/test_rotating_log.cpp index dff0bc97d3..6f0c4f7251 100644 --- a/externals/coda-oss/modules/c++/logging/unittests/test_rotating_log.cpp +++ b/externals/coda-oss/modules/c++/logging/unittests/test_rotating_log.cpp @@ -60,10 +60,11 @@ TEST_CASE(testRotate) log.debug("0123456789"); TEST_ASSERT(os.exists(outFile)); - TEST_ASSERT_FALSE(os.isFile(outFile + ".1")); + const auto outFile1 = outFile + ".1"; + TEST_ASSERT_FALSE(os.isFile(outFile1)); log.debug("1"); - TEST_ASSERT(os.isFile(outFile + ".1")); + TEST_ASSERT(os.isFile(outFile1)); } cleanupFiles( outFile); diff --git a/externals/coda-oss/modules/c++/mt/include/mt/Runnable1D.h b/externals/coda-oss/modules/c++/mt/include/mt/Runnable1D.h index bb73e94bfc..406f9903f1 100644 --- a/externals/coda-oss/modules/c++/mt/include/mt/Runnable1D.h +++ b/externals/coda-oss/modules/c++/mt/include/mt/Runnable1D.h @@ -25,7 +25,7 @@ class Runnable1D : public sys::Runnable { } - virtual void run() + virtual void run() override { for (size_t ii = mStartElement; ii < mEndElement; ++ii) { diff --git a/externals/coda-oss/modules/c++/mt/include/mt/WorkerThread.h b/externals/coda-oss/modules/c++/mt/include/mt/WorkerThread.h index 0cf0ce2dd4..4e865d0fff 100644 --- a/externals/coda-oss/modules/c++/mt/include/mt/WorkerThread.h +++ b/externals/coda-oss/modules/c++/mt/include/mt/WorkerThread.h @@ -60,7 +60,7 @@ template class WorkerThread : public sys::Thread /*! * Run this request */ - virtual void run() + virtual void run() override { initialize(); while (!isDone()) diff --git a/externals/coda-oss/modules/c++/mt/tests/BasicThreadPoolTest.cpp b/externals/coda-oss/modules/c++/mt/tests/BasicThreadPoolTest.cpp index aece0cd81b..56b9903012 100644 --- a/externals/coda-oss/modules/c++/mt/tests/BasicThreadPoolTest.cpp +++ b/externals/coda-oss/modules/c++/mt/tests/BasicThreadPoolTest.cpp @@ -51,7 +51,7 @@ class MyRunTask : public Runnable { } - virtual void run() + virtual void run() override { sleep(TO_SLEEP); mSem.signal(); diff --git a/externals/coda-oss/modules/c++/mt/tests/GenerationThreadPoolTest.cpp b/externals/coda-oss/modules/c++/mt/tests/GenerationThreadPoolTest.cpp index 26b873c5de..498ab6f25a 100644 --- a/externals/coda-oss/modules/c++/mt/tests/GenerationThreadPoolTest.cpp +++ b/externals/coda-oss/modules/c++/mt/tests/GenerationThreadPoolTest.cpp @@ -50,7 +50,7 @@ class MyRunTask : public sys::Runnable { } - void run() + void run() override { sleep(TO_SLEEP); diff --git a/externals/coda-oss/modules/c++/mt/tests/MTSingletonTest.cpp b/externals/coda-oss/modules/c++/mt/tests/MTSingletonTest.cpp index 0488595271..beb1719e35 100644 --- a/externals/coda-oss/modules/c++/mt/tests/MTSingletonTest.cpp +++ b/externals/coda-oss/modules/c++/mt/tests/MTSingletonTest.cpp @@ -138,7 +138,7 @@ class Calpurnia : public Thespian ~Calpurnia() { } - void doLines() + void doLines() override { //__warning__("Caesar, I never stood on ceremonies, Yet now they fright me. There is one within, 15 Besides the things that we have heard and seen, Recounts most horrid sights seen by the watch. A lioness hath whelped in the streets; And graves have yawn'd, and yielded up their dead; Fierce fiery warriors fought upon the clouds, 20 In ranks and squadrons and right form of war, Which drizzled blood upon the Capitol; The noise of battle hurtled in the air, Horses did neigh, and dying men did groan, And ghosts did shriek and squeal about the streets. 25 O Caesar! these things are beyond all use, And I do fear them."); } @@ -154,7 +154,7 @@ class Caesar : public Thespian ~Caesar() { } - void doLines() + void doLines() override { //__status__("Cowards die many times before their deaths; The valiant never taste of death but once. 35 Of all the wonders that I yet have heard. It seems to me most strange that men should fear; Seeing that death, a necessary end, Will come when it will come."); } @@ -172,7 +172,7 @@ class Brutus : public Thespian { } - virtual void doLines() + virtual void doLines() override { //__status__("Be patient till the last. Romans, countrymen, and lovers! hear me for my 15 cause, and be silent, that you may hear: believe me for mine honour, and have respect to mine honour, that you may believe: censure me in your wisdom, and awake your senses, that you may the better judge. If there be any in this assembly, any dear friend of 20 Caesar's, to him I say, that Brutus' love to Caesar was no less than his. If then that friend demand why Brutus rose against Caesar, this is my answer: --Not that I loved Caesar less, but that I loved Rome more. Had you rather Caesar were living and 25 die all slaves, than that Caesar were dead, to live all free men? As Caesar loved me, I weep for him; as he was fortunate, I rejoice at it; as he was valiant, I honour him: but, as he was ambitious, I slew him. There is tears for his love; joy for his 30 fortune; honour for his valour; and death for his ambition. Who is here so base that would be a bondman? If any, speak; for him have I offended. Who is here so rude that would not be a Roman? If any, speak; for him have I offended. Who is here so 35 vile that will not love his country? If any, speak; for him have I offended. I pause for a reply."); @@ -190,7 +190,7 @@ class Antony : public Thespian { } - void doLines() + void doLines() override { //__status__("Villains, you did not so, when your vile daggers Hack'd one another in the sides of Caesar: You show'd your teeth like apes, and fawn'd like hounds, 45 And bow'd like bondmen, kissing Caesar's feet; Whilst damned Casca, like a cur, behind Struck Caesar on the neck. O you flatterers!"); } @@ -207,7 +207,7 @@ class Octavius : public Thespian { } - void doLines() + void doLines() override { //__status__("According to his virtue let us use him, With all respect and rites of burial. Within my tent his bones to-night shall lie, 85 Most like a soldier, order'd honourably. So call the field to rest; and let's away, To part the glories of this happy day."); } diff --git a/externals/coda-oss/modules/c++/mt/tests/ThreadExceptionTest.cpp b/externals/coda-oss/modules/c++/mt/tests/ThreadExceptionTest.cpp index efc5ee9853..381171aa78 100644 --- a/externals/coda-oss/modules/c++/mt/tests/ThreadExceptionTest.cpp +++ b/externals/coda-oss/modules/c++/mt/tests/ThreadExceptionTest.cpp @@ -38,7 +38,7 @@ class PrintChar : public sys::Runnable /*-- std::exception --*/ struct stdExcept: std::exception { - const char* what() const noexcept { return "std::exception in add"; } + const char* what() const noexcept override { return "std::exception in add"; } }; void add(sys::Uint32_T x, sys::Uint32_T y) diff --git a/externals/coda-oss/modules/c++/mt/tests/ThreadGroupAffinityTest.cpp b/externals/coda-oss/modules/c++/mt/tests/ThreadGroupAffinityTest.cpp index 9d47da780b..32d3c63c01 100644 --- a/externals/coda-oss/modules/c++/mt/tests/ThreadGroupAffinityTest.cpp +++ b/externals/coda-oss/modules/c++/mt/tests/ThreadGroupAffinityTest.cpp @@ -43,7 +43,7 @@ class MyRunTask : public Runnable { } - virtual void run() + virtual void run() override { // Print diagnostics from inside the thread while(true) diff --git a/externals/coda-oss/modules/c++/net.ssl/include/net/ssl/SSLConnectionClientFactory.h b/externals/coda-oss/modules/c++/net.ssl/include/net/ssl/SSLConnectionClientFactory.h index eb5bfb72e8..698d14e3ad 100644 --- a/externals/coda-oss/modules/c++/net.ssl/include/net/ssl/SSLConnectionClientFactory.h +++ b/externals/coda-oss/modules/c++/net.ssl/include/net/ssl/SSLConnectionClientFactory.h @@ -100,7 +100,7 @@ class SSLConnectionClientFactory : public NetConnectionClientFactory * \param toServer The socket for the new connection * \return A new SSLConnection */ - virtual NetConnection* newConnection(std::unique_ptr&& toServer); + virtual NetConnection* newConnection(std::unique_ptr&& toServer) override; private: # if defined(USE_OPENSSL) diff --git a/externals/coda-oss/modules/c++/net/include/net/ClientSocketFactory.h b/externals/coda-oss/modules/c++/net/include/net/ClientSocketFactory.h index d4b59ab9ac..237d86c764 100644 --- a/externals/coda-oss/modules/c++/net/include/net/ClientSocketFactory.h +++ b/externals/coda-oss/modules/c++/net/include/net/ClientSocketFactory.h @@ -134,7 +134,7 @@ class UDPClientSocketFactory : public ClientSocketFactory * Sets SO_BROADCAST socket option. * \param s The socket */ - virtual void setOptions(Socket& s) + virtual void setOptions(Socket& s) override { // Make sure we're set up for broadcasting if necessary int on = 1; diff --git a/externals/coda-oss/modules/c++/net/include/net/DaemonUnix.h b/externals/coda-oss/modules/c++/net/include/net/DaemonUnix.h index c866bb3aa2..94039fa9cb 100644 --- a/externals/coda-oss/modules/c++/net/include/net/DaemonUnix.h +++ b/externals/coda-oss/modules/c++/net/include/net/DaemonUnix.h @@ -21,29 +21,29 @@ class DaemonUnix : public DaemonInterface virtual ~DaemonUnix(); //! Start the daemon - void start(); + void start() override; //! Stop the daemon specified in pidfile - void stop(); + void stop() override; //! Stop the daemon specified in pidfile and start a new one - void restart(); + void restart() override; //! Parse and execute command line option (start/stop/restart) - void daemonize(int& argc, char**& argv); + void daemonize(int& argc, char**& argv) override; //! Set pidfile (file for locking application to single occurance). - void setPidfile(const std::string& pidfile); + void setPidfile(const std::string& pidfile) override; //! Get pidfile. - std::string getPidfile() const { return mPidfile; } + std::string getPidfile() const override { return mPidfile; } //! Set tracefile (file to redirect stdout and stderr). - void setTracefile(const std::string& tracefile); + void setTracefile(const std::string& tracefile) override; //! Get tracefile. - std::string getTracefile() const { return mTracefile; } + std::string getTracefile() const override { return mTracefile; } protected: std::string mPidfile; diff --git a/externals/coda-oss/modules/c++/net/include/net/NetConnection.h b/externals/coda-oss/modules/c++/net/include/net/NetConnection.h index bf42a8a8da..3cdf6b535d 100644 --- a/externals/coda-oss/modules/c++/net/include/net/NetConnection.h +++ b/externals/coda-oss/modules/c++/net/include/net/NetConnection.h @@ -116,7 +116,7 @@ class NetConnection : public io::BidirectionalStream * Close a connection. This releases the writers/readers and closes * the handle. */ - void close() + void close() override { mSocket->close(); } @@ -138,7 +138,7 @@ class NetConnection : public io::BidirectionalStream * \param len The length of the byte array to write to the stream * \throw IOException */ - virtual void write(const void* buffer, size_t len); + virtual void write(const void* buffer, size_t len) override; using io::BidirectionalStream::read; using io::BidirectionalStream::write; @@ -151,7 +151,7 @@ class NetConnection : public io::BidirectionalStream * \throw IOException * \return The number of bytes read, or -1 if eof */ - virtual sys::SSize_T readImpl(void* buffer, size_t len); + virtual sys::SSize_T readImpl(void* buffer, size_t len) override; //! The socket std::shared_ptr mSocket; diff --git a/externals/coda-oss/modules/c++/net/include/net/PerRequestThreadAllocStrategy.h b/externals/coda-oss/modules/c++/net/include/net/PerRequestThreadAllocStrategy.h index f555d6e3b8..c02cb530bb 100644 --- a/externals/coda-oss/modules/c++/net/include/net/PerRequestThreadAllocStrategy.h +++ b/externals/coda-oss/modules/c++/net/include/net/PerRequestThreadAllocStrategy.h @@ -68,7 +68,7 @@ class RequestHandlerThread : public sys::Thread * Overloaded run method for handling a connection. * */ - void run() + void run() override { (*mRequestHandler)(mConnection); delete mRequestHandler; @@ -94,7 +94,7 @@ class PerRequestThreadAllocStrategy : public AllocStrategy ~PerRequestThreadAllocStrategy() {} - void initialize() + void initialize() override { } @@ -103,7 +103,7 @@ class PerRequestThreadAllocStrategy : public AllocStrategy * * \param conn The network connection */ - void handleConnection(NetConnection* conn); + void handleConnection(NetConnection* conn) override; }; /* class ThreadPoolAllocStrategy : public AllocStrategy */ diff --git a/externals/coda-oss/modules/c++/net/include/net/RequestHandler.h b/externals/coda-oss/modules/c++/net/include/net/RequestHandler.h index 3ef3795962..8859f5d98a 100644 --- a/externals/coda-oss/modules/c++/net/include/net/RequestHandler.h +++ b/externals/coda-oss/modules/c++/net/include/net/RequestHandler.h @@ -79,7 +79,7 @@ template class DefaultRequestHandlerFactory: public Reque virtual ~DefaultRequestHandlerFactory() { } - net::RequestHandler* create() + net::RequestHandler* create() override { return new ReqHandler_T(); } diff --git a/externals/coda-oss/modules/c++/net/include/net/ServerSocketFactory.h b/externals/coda-oss/modules/c++/net/include/net/ServerSocketFactory.h index 7b6393a0bc..3074d37647 100644 --- a/externals/coda-oss/modules/c++/net/include/net/ServerSocketFactory.h +++ b/externals/coda-oss/modules/c++/net/include/net/ServerSocketFactory.h @@ -127,7 +127,7 @@ class UDPServerSocketFactory : public ServerSocketFactory * * \return The produced socket */ - virtual std::unique_ptr create(const SocketAddress& address) + virtual std::unique_ptr create(const SocketAddress& address) override { std::unique_ptr s(new Socket(mProto)); @@ -185,7 +185,7 @@ class TCPServerSocketFactory : ServerSocketFactory * listen(). * */ - virtual std::unique_ptr create(const SocketAddress& address) + virtual std::unique_ptr create(const SocketAddress& address) override { std::unique_ptr s(new Socket(mProto)); diff --git a/externals/coda-oss/modules/c++/net/include/net/SingleThreadedAllocStrategy.h b/externals/coda-oss/modules/c++/net/include/net/SingleThreadedAllocStrategy.h index ac16fafb75..4a1314f129 100644 --- a/externals/coda-oss/modules/c++/net/include/net/SingleThreadedAllocStrategy.h +++ b/externals/coda-oss/modules/c++/net/include/net/SingleThreadedAllocStrategy.h @@ -58,7 +58,7 @@ class SingleThreadedAllocStrategy: public AllocStrategy * Set the auto ptr. * */ - void initialize() + void initialize() override { mHandler = mRequestHandlerFactory->create(); } @@ -68,7 +68,7 @@ class SingleThreadedAllocStrategy: public AllocStrategy * * \param conn The network connection */ - void handleConnection(net::NetConnection* conn) + void handleConnection(net::NetConnection* conn) override { (*mHandler)(conn); } diff --git a/externals/coda-oss/modules/c++/net/include/net/ThreadPoolAllocStrategy.h b/externals/coda-oss/modules/c++/net/include/net/ThreadPoolAllocStrategy.h index ce7fc740e9..767e024503 100644 --- a/externals/coda-oss/modules/c++/net/include/net/ThreadPoolAllocStrategy.h +++ b/externals/coda-oss/modules/c++/net/include/net/ThreadPoolAllocStrategy.h @@ -44,7 +44,7 @@ class ConnectionThread: public mt::WorkerThread /*! * Do this in a loop forever. */ - void performTask(net::NetConnection*& request) + void performTask(net::NetConnection*& request) override { (*mHandler)(request); } @@ -78,7 +78,7 @@ class ConnectionThreadPool: public mt::AbstractThreadPool delete mFactory; } - mt::WorkerThread* newWorker() + mt::WorkerThread* newWorker() override { return new ConnectionThread(&mRequestQueue, mFactory->create()); } @@ -127,9 +127,9 @@ class ThreadPoolAllocStrategy: public AllocStrategy // AllocStrategy guarantees that mRequestHandlerFactory is initialized // by the time this function is called - void initialize(); + void initialize() override; - void handleConnection(net::NetConnection* conn); + void handleConnection(net::NetConnection* conn) override; }; } diff --git a/externals/coda-oss/modules/c++/net/tests/NetConnectionServerTest.cpp b/externals/coda-oss/modules/c++/net/tests/NetConnectionServerTest.cpp index 545bc10d06..bcbb46ac10 100644 --- a/externals/coda-oss/modules/c++/net/tests/NetConnectionServerTest.cpp +++ b/externals/coda-oss/modules/c++/net/tests/NetConnectionServerTest.cpp @@ -50,7 +50,7 @@ class EchoHandler : public net::RequestHandler ~EchoHandler() { } - void operator()(net::NetConnection* conn) + void operator()(net::NetConnection* conn) override { char buf[MAX_BUF_SIZE]; unsigned int length; diff --git a/externals/coda-oss/modules/c++/plugin/include/plugin/ErrorHandler.h b/externals/coda-oss/modules/c++/plugin/include/plugin/ErrorHandler.h index 727a81584c..be7ca3c8a8 100644 --- a/externals/coda-oss/modules/c++/plugin/include/plugin/ErrorHandler.h +++ b/externals/coda-oss/modules/c++/plugin/include/plugin/ErrorHandler.h @@ -52,15 +52,15 @@ class DefaultErrorHandler : public ErrorHandler public: DefaultErrorHandler(logging::LoggerPtr logger = logging::LoggerPtr()); - void onPluginDirectoryNotFound(const std::string& dir); + void onPluginDirectoryNotFound(const std::string& dir) override; - void onPluginLoadedAlready(const std::string& file); + void onPluginLoadedAlready(const std::string& file) override; - void onPluginLoadFailed(const std::string& file); + void onPluginLoadFailed(const std::string& file) override; - void onPluginVersionUnsupported(const std::string& message); + void onPluginVersionUnsupported(const std::string& message) override; - void onPluginError(except::Context& c); + void onPluginError(except::Context& c) override; protected: logging::LoggerPtr mLogger; diff --git a/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/SioFileReader.h b/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/SioFileReader.h index 8fa5133344..446476dfc7 100644 --- a/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/SioFileReader.h +++ b/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/SioFileReader.h @@ -125,7 +125,7 @@ class FileReader : public StreamReader, public io::Seekable * For simplicity, the final position is reported in the return value relative * to header start (always). This is done by calling tell(). */ - sys::Off_T seek( sys::Off_T offset, Whence whence ); + sys::Off_T seek( sys::Off_T offset, Whence whence ) override; /*! * Overloaded method, only works if this is a FileInputStream. @@ -134,10 +134,10 @@ class FileReader : public StreamReader, public io::Seekable * yield 0 as a return value. * */ - sys::Off_T tell(); + sys::Off_T tell() override; - void killStream(); + void killStream() override; protected: }; } diff --git a/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/StreamReader.h b/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/StreamReader.h index fe0c22b755..982b8900fb 100644 --- a/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/StreamReader.h +++ b/externals/coda-oss/modules/c++/sio.lite/include/sio/lite/StreamReader.h @@ -140,7 +140,7 @@ class StreamReader : public io::InputStream sio::lite::FileHeader* readHeader() { return header; } - sys::Off_T available() + sys::Off_T available() override { return inputStream->available(); } @@ -156,7 +156,7 @@ class StreamReader : public io::InputStream * @param size the Number of bytes to read * @return The number of bytes read */ - virtual sys::SSize_T readImpl(void* buffer, size_t size) + virtual sys::SSize_T readImpl(void* buffer, size_t size) override { return inputStream->read(buffer, size); } diff --git a/externals/coda-oss/modules/c++/str/source/Encoding.cpp b/externals/coda-oss/modules/c++/str/source/Encoding.cpp index bbe3a0a5f6..86a879b0c4 100644 --- a/externals/coda-oss/modules/c++/str/source/Encoding.cpp +++ b/externals/coda-oss/modules/c++/str/source/Encoding.cpp @@ -198,7 +198,7 @@ std::u16string str::to_u16string(str::W1252string::const_pointer p, size_t sz) { auto retval = to_Tstring(p, sz); #if defined(_WIN32) && (!defined(_NDEBUG) || defined(DEBUG)) - const _bstr_t bstr(str::cast(p)); + const _bstr_t bstr(std::string(str::cast(p), sz).c_str()); // no _bstr_t ctor taking sz const std::wstring wstr(static_cast(bstr)); assert(retval == str::cast(wstr.c_str())); #endif diff --git a/externals/coda-oss/modules/c++/str/source/Manip.cpp b/externals/coda-oss/modules/c++/str/source/Manip.cpp index 516f43f354..444c897321 100644 --- a/externals/coda-oss/modules/c++/str/source/Manip.cpp +++ b/externals/coda-oss/modules/c++/str/source/Manip.cpp @@ -146,7 +146,8 @@ size_t replace(std::string& str, if (index != std::string::npos) { - str.replace(index, search.length(), replace); + // ASAN error: str.replace(index, search.length(), replace); + str = str.substr(0, index) + replace + str.substr(index + search.length()); start = index; } else diff --git a/externals/coda-oss/modules/c++/sys/source/OSWin32.cpp b/externals/coda-oss/modules/c++/sys/source/OSWin32.cpp index cfde07d35b..9fe5e7f153 100644 --- a/externals/coda-oss/modules/c++/sys/source/OSWin32.cpp +++ b/externals/coda-oss/modules/c++/sys/source/OSWin32.cpp @@ -148,11 +148,15 @@ bool sys::OSWin32::isFile(const std::string& path) const // 2) Not Directory // 3) Not Archive - we aren't doing that... const DWORD what = GetFileAttributes(path.c_str()); - return (what != INVALID_FILE_ATTRIBUTES && - !(what & FILE_ATTRIBUTE_DIRECTORY)); + if (what == INVALID_FILE_ATTRIBUTES) // "if the function fails, the return value is INVALID_FILE_ATTRIBUTES." + { + //const auto dwError = GetLastError(); + return false; + } + const auto fileAttributeDirectory = (what & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY; + return !fileAttributeDirectory; } - bool sys::OSWin32::isDirectory(const std::string& path) const { const DWORD what = GetFileAttributes(path.c_str()); @@ -183,7 +187,7 @@ bool sys::OSWin32::changeDirectory(const std::string& path) const std::string sys::OSWin32::getTempName(const std::string& path, const std::string& prefix) const { - char buffer[MAX_PATH]; + char buffer[MAX_PATH]{}; if (GetTempFileName(path.c_str(), prefix.c_str(), 0, buffer) == 0) diff --git a/externals/coda-oss/modules/c++/tiff/include/tiff/GenericType.h b/externals/coda-oss/modules/c++/tiff/include/tiff/GenericType.h index 581c06905d..9d5a994ea8 100644 --- a/externals/coda-oss/modules/c++/tiff/include/tiff/GenericType.h +++ b/externals/coda-oss/modules/c++/tiff/include/tiff/GenericType.h @@ -127,7 +127,7 @@ template class Gene * @param output * the output stream to write the member to *****************************************************************/ - virtual void serialize(io::OutputStream& output) + virtual void serialize(io::OutputStream& output) override { output.write((char *)&mData, sizeof(Data_T)); } @@ -139,22 +139,22 @@ template class Gene * @param input * the input stream to read the member from *****************************************************************/ - virtual void deserialize(io::InputStream& input) + virtual void deserialize(io::InputStream& input) override { input.read((char *)&mData, sizeof(Data_T)); } - virtual unsigned char *data() const + virtual unsigned char *data() const override { return (unsigned char *)&mData; } - virtual unsigned short size() const + virtual unsigned short size() const override { return sizeof(mData); } - virtual std::string toString() const + virtual std::string toString() const override { return Strategy_T::toString(mData); } diff --git a/externals/coda-oss/modules/c++/tiff/include/tiff/Header.h b/externals/coda-oss/modules/c++/tiff/include/tiff/Header.h index ee09bc445f..ed9da4f1e9 100644 --- a/externals/coda-oss/modules/c++/tiff/include/tiff/Header.h +++ b/externals/coda-oss/modules/c++/tiff/include/tiff/Header.h @@ -96,7 +96,7 @@ class Header : public io::Serializable * @param output * the stream to write the header to *****************************************************************/ - void serialize(io::OutputStream& output); + void serialize(io::OutputStream& output) override; /** ***************************************************************** @@ -105,7 +105,7 @@ class Header : public io::Serializable * @param input * the stream to read the header from *****************************************************************/ - void deserialize(io::InputStream& input); + void deserialize(io::InputStream& input) override; /** ***************************************************************** diff --git a/externals/coda-oss/modules/c++/tiff/include/tiff/IFD.h b/externals/coda-oss/modules/c++/tiff/include/tiff/IFD.h index bfb8b65556..706309e8f4 100644 --- a/externals/coda-oss/modules/c++/tiff/include/tiff/IFD.h +++ b/externals/coda-oss/modules/c++/tiff/include/tiff/IFD.h @@ -195,7 +195,7 @@ class IFD : public io::Serializable * @param output * the output stream to write the IFD to *****************************************************************/ - void serialize(io::OutputStream& output); + void serialize(io::OutputStream& output) override; /** ***************************************************************** @@ -204,7 +204,7 @@ class IFD : public io::Serializable * @param input * the input stream to read the IFD from *****************************************************************/ - void deserialize(io::InputStream& input); + void deserialize(io::InputStream& input) override; void deserialize(io::InputStream& input, const bool reverseBytes); /** diff --git a/externals/coda-oss/modules/c++/tiff/include/tiff/IFDEntry.h b/externals/coda-oss/modules/c++/tiff/include/tiff/IFDEntry.h index 31ecedddb1..75552676f3 100644 --- a/externals/coda-oss/modules/c++/tiff/include/tiff/IFDEntry.h +++ b/externals/coda-oss/modules/c++/tiff/include/tiff/IFDEntry.h @@ -122,7 +122,7 @@ class IFDEntry : public io::Serializable * @param output * the output stream to write the entry to *****************************************************************/ - void serialize(io::OutputStream& output); + void serialize(io::OutputStream& output) override; /** ***************************************************************** @@ -131,7 +131,7 @@ class IFDEntry : public io::Serializable * @param input * the input stream to read the entry from *****************************************************************/ - void deserialize(io::InputStream& input); + void deserialize(io::InputStream& input) override; void deserialize(io::InputStream& input, const bool reverseBytes); /** diff --git a/externals/coda-oss/modules/c++/xml.lite/CMakeLists.txt b/externals/coda-oss/modules/c++/xml.lite/CMakeLists.txt index ee70ab4070..ad13e57988 100644 --- a/externals/coda-oss/modules/c++/xml.lite/CMakeLists.txt +++ b/externals/coda-oss/modules/c++/xml.lite/CMakeLists.txt @@ -3,6 +3,7 @@ set(MODULE_NAME xml.lite) if(ENABLE_XML) if (UNIX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-zero-as-null-pointer-constant") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-suggest-override") endif() if(CONAN_PACKAGE_NAME) diff --git a/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/UtilitiesXerces.h b/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/UtilitiesXerces.h index c9d78cfa15..ba587a91be 100644 --- a/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/UtilitiesXerces.h +++ b/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/UtilitiesXerces.h @@ -303,12 +303,12 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T XercesContentHandler& operator=(const XercesContentHandler&) = delete; virtual void ignorableWhitespace(const XMLCh* const /*chars*/, - const XercesSize_T /*length*/) + const XercesSize_T /*length*/) override {} virtual void processingInstruction(const XMLCh* const /*target*/, - const XMLCh* const /*data*/) + const XMLCh* const /*data*/) override {} - virtual void setDocumentLocator(const Locator* const /*locator*/) + virtual void setDocumentLocator(const Locator* const /*locator*/) override {} /*! @@ -319,12 +319,12 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T * \param length The length */ virtual void characters(const XMLCh* const chars, - const XercesSize_T length); + const XercesSize_T length) override; /*! * Fire off the end document notification */ - virtual void endDocument(); + virtual void endDocument() override; /*! * Map input string types to output string types @@ -335,13 +335,13 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T */ virtual void endElement(const XMLCh* const uri, const XMLCh* const localName, - const XMLCh* const qname); + const XMLCh* const qname) override; - virtual void skippedEntity (const XMLCh* const /*name*/) + virtual void skippedEntity (const XMLCh* const /*name*/) override {} //! Fire off the start document notification - virtual void startDocument(); + virtual void startDocument() override; /*! * Map input string types to output string types @@ -355,7 +355,7 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T virtual void startElement(const XMLCh* const uri, const XMLCh* const localName, const XMLCh* const qname, - const XercesAttributesInterface_T &attrs); + const XercesAttributesInterface_T &attrs) override; /*! * Begin prefix mapping. Transfer string types @@ -363,7 +363,7 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T * \param uri The corresponding uri */ virtual void startPrefixMapping (const XMLCh* const /*prefix*/, - const XMLCh* const /*uri*/) + const XMLCh* const /*uri*/) override { } @@ -371,7 +371,7 @@ struct XercesContentHandler : public XercesContentHandlerInterface_T * End prefix mapping. Transfer string types * \param prefix The prefix to stop mapping */ - virtual void endPrefixMapping (const XMLCh* const /*prefix*/) + virtual void endPrefixMapping (const XMLCh* const /*prefix*/) override { } diff --git a/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/XMLReaderXerces.h b/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/XMLReaderXerces.h index beca1fa5cd..52b78befbc 100644 --- a/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/XMLReaderXerces.h +++ b/externals/coda-oss/modules/c++/xml.lite/include/xml/lite/XMLReaderXerces.h @@ -82,7 +82,7 @@ class XMLReaderXerces final : public XMLReaderInterface * This method returns a reference to the content handler. * \return content handler */ - xml::lite::ContentHandler *getContentHandler() + xml::lite::ContentHandler *getContentHandler() override { return mDriverContentHandler->retrieveXMLLiteContentHandler(); } @@ -92,7 +92,7 @@ class XMLReaderXerces final : public XMLReaderInterface * It will set this internally. * \param handler The content handler to pass */ - void setContentHandler(xml::lite::ContentHandler* handler) + void setContentHandler(xml::lite::ContentHandler* handler) override { mDriverContentHandler->setXMLLiteContentHandler(handler); } @@ -104,12 +104,12 @@ class XMLReaderXerces final : public XMLReaderInterface int size = io::InputStream::IS_END); //! Method to create an xml reader - void create(); + void create() override; //! Method to destroy an xml reader - void destroy(); + void destroy() override; - std::string getDriverName() const { return "xerces"; } + std::string getDriverName() const override { return "xerces"; } static const void* getWindows1252Encoding(); diff --git a/externals/coda-oss/modules/c++/xml.lite/unittests/test_soapelements.cpp b/externals/coda-oss/modules/c++/xml.lite/unittests/test_soapelements.cpp index 6be98e7d46..55de517a95 100644 --- a/externals/coda-oss/modules/c++/xml.lite/unittests/test_soapelements.cpp +++ b/externals/coda-oss/modules/c++/xml.lite/unittests/test_soapelements.cpp @@ -52,8 +52,8 @@ struct SOAP final : public xml::lite::Document TEST_CASE(test_overrideCreateElement) { SOAP soap_test; - auto a = soap_test.createElement("a","b","Not SOAP Test"); - auto b = dynamic_cast(a); + std::unique_ptr a(soap_test.createElement("a","b","Not SOAP Test")); + auto b = dynamic_cast(a.get()); TEST_ASSERT_NOT_NULL(b); TEST_ASSERT_EQ(a->getCharacterData(), test_text); TEST_ASSERT_EQ(b->getCharacterData(), test_text); diff --git a/externals/coda-oss/modules/c++/zip/include/zip/GZipInputStream.h b/externals/coda-oss/modules/c++/zip/include/zip/GZipInputStream.h index 1994d5467e..783b6241fe 100644 --- a/externals/coda-oss/modules/c++/zip/include/zip/GZipInputStream.h +++ b/externals/coda-oss/modules/c++/zip/include/zip/GZipInputStream.h @@ -58,7 +58,7 @@ class GZipInputStream: public io::InputStream * This is a little tricky since we do not know the * length of the read. */ - virtual sys::SSize_T readImpl(void* buffer, size_t len); + virtual sys::SSize_T readImpl(void* buffer, size_t len) override; }; } diff --git a/externals/coda-oss/modules/c++/zip/include/zip/GZipOutputStream.h b/externals/coda-oss/modules/c++/zip/include/zip/GZipOutputStream.h index a8d471569c..7f137d2cfa 100644 --- a/externals/coda-oss/modules/c++/zip/include/zip/GZipOutputStream.h +++ b/externals/coda-oss/modules/c++/zip/include/zip/GZipOutputStream.h @@ -46,13 +46,13 @@ class GZipOutputStream: public io::OutputStream * the call returns. * */ - virtual void write(const void* buffer, size_t len); + virtual void write(const void* buffer, size_t len) override; /*! * Close the gzip stream. You must call this * afterward (it is not done automatically). */ - virtual void close(); + virtual void close() override; }; } diff --git a/externals/coda-oss/modules/c++/zip/include/zip/ZipOutputStream.h b/externals/coda-oss/modules/c++/zip/include/zip/ZipOutputStream.h index 50ce6a1982..a49c3c4a0b 100644 --- a/externals/coda-oss/modules/c++/zip/include/zip/ZipOutputStream.h +++ b/externals/coda-oss/modules/c++/zip/include/zip/ZipOutputStream.h @@ -76,9 +76,9 @@ class ZipOutputStream: public io::OutputStream void write(const std::string& inputPathname, const std::string& zipPathname); - virtual void write(const void* buffer, size_t len); + virtual void write(const void* buffer, size_t len) override; - virtual void close(); + virtual void close() override; private: zipFile mZip;