Commit Graph

936 Commits

Author SHA1 Message Date
Martchus 15fddad46d Log error when "srcdirref" cannot be opened 2021-08-03 14:05:33 +02:00
Martchus 8961cf3a32 Add `META_TIDY_EXCLUDE_REGEX` to exclude files from tidy target
This can be useful to exclude 3rd party files.
2021-08-02 16:49:37 +02:00
Martchus 2de07d4cd0 Consider `*.cc` and `*.hh` files formatable 2021-08-02 16:48:35 +02:00
Martchus b16fff4b0a Test splitString*() with an empty input 2021-07-24 23:38:44 +02:00
Martchus 203679bf32 Document that delimiter for splitString*() must not be empty 2021-07-24 23:38:12 +02:00
Martchus 2bb04c64ea Use std::string_view::value_type in BufferSearch 2021-07-16 15:58:40 +02:00
Martchus 77b2c3281f Add overload to BufferSearch required by arch-repo-manager 2021-07-16 15:56:28 +02:00
Martchus 6558ff487a Add BufferSearch (from arch-repo-manager) to use it in syncthingtray as well 2021-07-15 02:24:28 +02:00
Martchus db87472be9 Unify and improve code for finding OpenSSL
* Unify code for use_openssl and use_crypto
* Make missing OpenSSL targets a fatal error if OpenSSL is required
* Add note that possibly the devel package is missing
    * Under Tumbleweed with missing devel package I've got `OpenSSL_FOUND`
      but no imported targets because the symlink from the devel package
      was missing. This might be due to stale values within the CMake
      cache.
2021-07-07 20:51:57 +02:00
Martchus eace9b44ec Fix linking statically against OpenSSL
`set(… PARENT_SCOPE)` leaves the current scope unaffected so appending the
static dependencies removed the OpenSSL libs themselves again.
2021-07-06 20:02:49 +02:00
Martchus 5291c746df Show warning when OpenSSL can be found but imported targets are not present 2021-07-06 19:48:21 +02:00
Martchus b3ebe5ce38 Fix typos found via `codespell --skip .git -w` 2021-07-03 19:07:49 +02:00
Martchus 6d1f242edc Fix typo 2021-06-27 18:51:27 +02:00
Martchus 2d50799cff Set C++ standard within `use_standard_filesystem()` in a generic way
It is important that `cmake_policy(SET CMP0067 NEW)` is set before
`include(CheckCXXSourceCompiles)`.
2021-06-22 16:14:59 +02:00
Martchus e961eb9726 Extend compile test for standard filesystem
Apparently the current compile check is not sufficient:

```
[   54s] -- The C compiler identification is GNU 8.2.1
[   54s] -- The CXX compiler identification is GNU 8.2.1
[   54s] -- Check for working C compiler: /usr/bin/gcc-8
[   54s] -- Check for working C compiler: /usr/bin/gcc-8 - works
[   54s] -- Detecting C compiler ABI info
[   54s] -- Detecting C compiler ABI info - done
[   54s] -- Detecting C compile features
[   54s] -- Detecting C compile features - done
[   54s] -- Check for working CXX compiler: /usr/bin/g++-8
[   55s] -- Check for working CXX compiler: /usr/bin/g++-8 - works
…
[   55s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   55s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Success
[   55s] -- Linking tageditor against special library for std::filesystem support is not required.
…
[  109s] FAILED: tageditor
[  109s] : && /usr/bin/g++-8  -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -DNDEBUG -O2 -g -DNDEBUG  -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now    -rdynamic CMakeFiles/tageditor.dir/tageditor_autogen/mocs_compilation.cpp.o CMakeFiles/tageditor.dir/application/main.cpp.o CMakeFiles/tageditor.dir/cli/attachmentinfo.cpp.o CMakeFiles/tageditor.dir/cli/fieldmapping.cpp.o CMakeFiles/tageditor.dir/cli/helper.cpp.o CMakeFiles/tageditor.dir/cli/mainfeatures.cpp.o CMakeFiles/tageditor.dir/application/knownfieldmodel.cpp.o CMakeFiles/tageditor.dir/application/targetlevelmodel.cpp.o CMakeFiles/tageditor.dir/application/settings.cpp.o CMakeFiles/tageditor.dir/gui/fileinfomodel.cpp.o CMakeFiles/tageditor.dir/misc/htmlinfo.cpp.o CMakeFiles/tageditor.dir/misc/utility.cpp.o CMakeFiles/tageditor.dir/gui/attachmentsedit.cpp.o CMakeFiles/tageditor.dir/gui/attachmentsmodel.cpp.o CMakeFiles/tageditor.dir/gui/codeedit.cpp.o CMakeFiles/tageditor.dir/gui/entertargetdialog.cpp.o CMakeFiles/tageditor.dir/gui/mainwindow.cpp.o CMakeFiles/tageditor.dir/gui/minimumemptyspinbox.cpp.o CMakeFiles/tageditor.dir/gui/notificationlabel.cpp.o CMakeFiles/tageditor.dir/gui/notificationmodel.cpp.o CMakeFiles/tageditor.dir/gui/pathlineedit.cpp.o CMakeFiles/tageditor.dir/gui/picturepreviewselection.cpp.o CMakeFiles/tageditor.dir/gui/filefilterproxymodel.cpp.o CMakeFiles/tageditor.dir/gui/initiate.cpp.o CMakeFiles/tageditor.dir/gui/javascripthighlighter.cpp.o CMakeFiles/tageditor.dir/gui/renamefilesdialog.cpp.o CMakeFiles/tageditor.dir/gui/settingsdialog.cpp.o CMakeFiles/tageditor.dir/gui/tagedit.cpp.o CMakeFiles/tageditor.dir/gui/tagfieldedit.cpp.o CMakeFiles/tageditor.dir/gui/tageditorwidget.cpp.o CMakeFiles/tageditor.dir/dbquery/dbquery.cpp.o CMakeFiles/tageditor.dir/dbquery/musicbrainz.cpp.o CMakeFiles/tageditor.dir/dbquery/makeitpersonal.cpp.o CMakeFiles/tageditor.dir/dbquery/lyricswikia.cpp.o CMakeFiles/tageditor.dir/gui/dbquerywidget.cpp.o CMakeFiles/tageditor.dir/misc/networkaccessmanager.cpp.o CMakeFiles/tageditor.dir/renamingutility/filesystemitem.cpp.o CMakeFiles/tageditor.dir/renamingutility/filesystemitemmodel.cpp.o CMakeFiles/tageditor.dir/renamingutility/filteredfilesystemitemmodel.cpp.o CMakeFiles/tageditor.dir/renamingutility/renamingengine.cpp.o CMakeFiles/tageditor.dir/renamingutility/tageditorobject.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/3YJK5W5UP7/qrc_icons.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/3YJK5W5UP7/qrc_scripts.cpp.o CMakeFiles/tageditor.dir/tageditor_autogen/JU62CA5L7X/qrc_tageditor_translations.cpp.o  -o tageditor  /usr/lib64/libqtutilities.so.6.4.1  /usr/lib64/libtagparser.so.10.0.0  /usr/lib64/libQt5Concurrent.so.5.12.7  /usr/lib64/libQt5WebEngineWidgets.so.5.15.3  /usr/lib64/libc++utilities.so.5.10.4  /usr/lib64/libQt5WebEngineCore.so.5.15.3  /usr/lib64/libQt5WebChannel.so.5.12.7  /usr/lib64/libQt5Positioning.so.5.12.7  /usr/lib64/libQt5Quick.so.5.12.7  /usr/lib64/libQt5Qml.so.5.12.7  /usr/lib64/libQt5Network.so.5.12.7  /usr/lib64/libQt5PrintSupport.so.5.12.7  /usr/lib64/libQt5Widgets.so.5.12.7  /usr/lib64/libQt5Gui.so.5.12.7  /usr/lib64/libQt5Core.so.5.12.7 && :
[  109s] /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/tageditor.dir/cli/mainfeatures.cpp.o: in function `Cli::setTagInfo(Cli::SetTagInfoArgs const&)':
[  109s] /home/abuild/rpmbuild/BUILD/tageditor-3.4.0/build/../cli/mainfeatures.cpp:889: undefined reference to `std::filesystem::last_write_time(std::filesystem::__cxx11::path const&, std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >, std::error_code&)'
[  109s] collect2: error: ld returned 1 exit status
```

For `c++utilities` itself it doesn't seem to matter:

```
[   33s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   35s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Success
[   35s] -- Linking c++utilities against special library for std::filesystem support is not required.
…
[   43s] [22/22] /usr/bin/cmake -E cmake_symlink_library libc++utilities.so.5.10.4  libc++utilities.so.5 libc++utilities.so && :
[   43s] + RPM_EC=0
```

For some reason the AppImage build doesn't have the problem:

```
[   77s] -- The C compiler identification is GNU 8.2.1
[   77s] -- The CXX compiler identification is GNU 8.2.1
[   77s] -- Check for working C compiler: /usr/bin/gcc-8
[   77s] -- Check for working C compiler: /usr/bin/gcc-8 -- works
[   77s] -- Detecting C compiler ABI info
[   78s] -- Detecting C compiler ABI info - done
[   78s] -- Detecting C compile features
[   78s] -- Detecting C compile features - done
[   78s] -- Check for working CXX compiler: /usr/bin/g++-8
[   78s] -- Check for working CXX compiler: /usr/bin/g++-8 -- works
[   78s] -- Detecting CXX compiler ABI info
[   78s] -- Detecting CXX compiler ABI info - done
[   78s] -- Detecting CXX compile features
[   79s] -- Detecting CXX compile features - done
[   79s] -- Looking for iconv
[   79s] -- Looking for iconv - found
[   79s] -- Using iconv from the standard library for target c++utilities.
[   79s] -- Using std::fstream for NativeFileStream
[   79s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0
[   80s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_0 - Failed
[   80s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_1
[   81s] -- Performing Test COULD_COMPILE_TEST_PROGRAM_1 - Success
[   81s] -- Linking c++utilities against library "-lstdc++fs" for std::filesystem support.
```
2021-06-17 16:40:05 +02:00
Martchus 8bda5ce146 Bump patch version 2021-06-17 16:05:43 +02:00
Martchus 95202d059a Fix typo 2021-06-04 16:04:26 +02:00
Martchus 5e1ff7ccb0 Update README
* Mention how to disable `NativeFileStream`
* Update platform-specific notes
2021-05-31 19:56:49 +02:00
Martchus 1ac1104535 Add workaround for Windows-specific console problems
* Allow disabling the hack for creating a console for
  a GUI application via `ENABLE_CONSOLE=0` to workaround
  downsides of this hack (pipes not working, possibly
  spawns an additional console)
* Set the console's character set to UTF-8 by default
  because this actually seems to work now and
  non-ASCII characters are displayed correctly. There
  is still an opt-out via `ENABLE_CP_UTF8=0`.
* Note that with mintty it just works anyways so using
  that terminal emulator is still the best workaround.
2021-05-28 19:15:09 +02:00
Martchus e6e7a63d6a Make DateTime::fromString() cope with 'T' separator 2021-05-24 21:27:47 +02:00
Martchus a116c9e790 Avoid possibility of overflow in DateTime parsing functions
* This is strictly undefined behavior so let's avoid it
* As a side-effect it is now possible to omit the separators in
  DateTime::fromIsoString()
2021-05-24 21:27:18 +02:00
Martchus 2e93882882 Reduce redundant code in stringconversion.h 2021-05-24 19:51:49 +02:00
Martchus 3afed30760 Detect overflow in functions to convert strings to numbers
Otherwise these functions can strictly run into undefined behavior which
should be prevented.
2021-05-24 19:51:49 +02:00
Martchus d5e35e460c Fix a few details in string conversion functions 2021-05-23 19:20:45 +02:00
Martchus 546b1fecb7 Fix parsing ISO timestamp with negative timezone offset and no seconds fraction
See https://github.com/Martchus/syncthingtray/issues/93
2021-05-21 19:40:37 +02:00
Martchus 63955ffcc5 Avoid including ranges header under reflective-rapidjson's generator
This works around errors which Clang 11.1.0 has when parsing this header
from GCC 11.1.0. (Yes, at this point the GCC and Clang versions which are
currently in Arch Linux testing are identical.)
2021-05-16 19:21:58 +02:00
Martchus 7cea979261 Remove obsolete comment about ios_base::failure and new ABI 2021-05-13 16:23:10 +02:00
Martchus 6d5045c2b1 Port away from deprecated WriteCompilerDetectionHeader module 2021-05-13 15:49:53 +02:00
Martchus b22a600e77 Fix broken code in ArgumentParser::printBashCompletion() leading to crashes
See https://github.com/Martchus/cpp-utilities/issues/19#issuecomment-839758443
2021-05-12 17:52:36 +02:00
Martchus f549285fde Fix splitString()/splitStringSimple() for case of empty trailing part 2021-05-11 16:42:28 +02:00
Martchus 0fb533ffc5 Format attempted test file/dir lookups more nicely in the error case 2021-04-06 17:46:15 +02:00
Martchus f30947cc75 Fix plural of parameter 2021-03-30 20:48:05 +02:00
Martchus e2a7d807a3 Disable warnings about unused const variables
as these are usually just used in another compile unit
2021-03-22 13:45:16 +01:00
Martchus b43de126b9 Retain source compatibility of numberToString()/stringToNumber()
IntegralType and BaseType need to be kept different types, otherwise one
runs into deduction errors if both arguments have different types (which is
quite likely in practise). Since the base is always a small positive
integer the cast should always be safe.
2021-03-22 13:45:16 +01:00
Martchus a30ba0c147 Ensure still the right stringToNumber() overload is called for char arrays 2021-03-22 12:13:20 +01:00
Martchus 42132719e5 Remove comments about std::expected (which didn't even make it into C++20) 2021-03-22 12:12:11 +01:00
Martchus 9c532cbdd9 Ignore unknown warning options 2021-03-20 21:57:09 +01:00
Martchus 8c033ca243 Fix warnings 2021-03-20 21:56:45 +01:00
Martchus d38a9bb776 Disable/weaken a few warnings again which don't seem to be very usefull after all 2021-03-20 20:58:28 +01:00
Martchus f5aeeb77aa Add CMake variable to enable defaults useful for development 2021-03-18 00:39:04 +01:00
Martchus 5b8520d50c Add CMake variables to conveniently enable warnings and treat them as errors 2021-03-18 00:25:00 +01:00
Martchus cd43879390 Remove uses of USES_TERMINAL without COMMAND again as it is not possible 2021-03-17 21:27:21 +01:00
Martchus 3c8eb5a333 Apply clang-format 2021-03-05 23:14:54 +01:00
Martchus 4fc415ed5a Allow following test output live when building with ninja 2021-03-05 23:03:59 +01:00
Martchus cc63c8c250 Improve parameter-passing in some string conversion functions
* Allow using a range as input of joinStrings()
* Use `std::string_view` instead of `const std::string &` to pass read-only
  parameters to joinStrings() and splitString*() to avoid constructing an
  `std::string` from `const char *` parameters
* Use auto for return types of toMultiline() and toArrayOfLines()
* Does not affect BC because those are template functions
* Should not affect source compatibility; at least uses in my main projects
  seem to be unaffected
2021-03-05 23:01:30 +01:00
Martchus 6968716d5c Avoid using substr in splitString()/splitStringSimple() 2021-02-23 20:54:04 +01:00
Martchus 27e9761f63 Adjust conditions for C++20 for g++ 2021-02-09 00:22:20 +01:00
Martchus c61a1784ec Allow using splitStringSimple() with `std::unordered_set` in C++20
* So one could use e.g. `std::unordered_set<std::string_view>` as target
  container when splitting an `std::string_view`.
* Still an experimental feature
2021-02-09 00:21:53 +01:00
Martchus d1e3a28277 Apply cmake-format 2021-01-08 00:51:49 +01:00
Martchus cabcc11d3e Incorporate extra target suffix used when targeting MinGW in pkg-config file 2021-01-08 00:43:51 +01:00