Commit Graph

290 Commits

Author SHA1 Message Date
91ad1c4478 cld2: fix HAVE_CLD2 test
It _is_ defined (as 0) when there is no CLD2.
2026-08-20 15:05:30 -07:00
da2995a768 mu-sexp: improve corner-cases, performance
Some C++20 updates; use the new ascii/ctype functions. Avoid unlimited
recursion. Speed-up conversion to_string

Update unit-tests.
2026-08-20 15:05:30 -07:00
dfdd943817 utils: html-to-text: fix some issues, update tests
Improve handling of some corner-cases, and add more unit-tests for
things that were broken before.
2026-08-20 15:05:30 -07:00
809b9e4f4a utils: read_from_stdin: avoid reading nuls
We should read the actual written size, not the allocated size.
2026-08-20 15:05:30 -07:00
86464cd083 modernization: tweaks for c++20
Update various places for what we can do with C++20:

- ends_with / starts_with
- std::to_array
- using instead of typedef
- designated initializers
- "[[maybe_unused]]" instead of G_GNUC_UNUSED

Also remove some unnecessary 'static'
2026-08-20 15:05:30 -07:00
502c9cd67b lib: use ascii ctype utils
Use the new ascii ctype utils.
2026-08-20 15:05:30 -07:00
f2960a197e utils: add ascii ctype helpers
Add some constexpr ctype helpers that avoid any possible UB (i.e.,
handling casting to unsigned), and explicitly avoid any
locale-specifics.
2026-08-20 15:05:30 -07:00
6715ff418a lib/utils: small cleanups
Fix some static analysis warnings
2026-08-20 15:05:29 -07:00
d8afabcc0f lib: remove unused async-queue 2026-08-20 15:05:29 -07:00
339cf0bd65 mu-utils-file: use std::filesystem::remove_all
Instead of the hacky "rm -rf"
2026-08-20 15:05:28 -07:00
3c4b50e7a2 mu-utils-file: remove some unused code 2026-08-20 15:05:28 -07:00
45b9722040 mu/lib: fix some possible quoting issues 2026-08-20 15:05:28 -07:00
db7bd7a900 mu-utils: replace #define with constexpr for MU_COLOR_ 2026-08-20 15:05:28 -07:00
85f4a4b80a utils: fix typo 2026-08-20 15:05:28 -07:00
ab6017d5a9 utils: rework MU_ENABLE_BITOPS using C++20 code
Instead of macros, we using C++20 concepts to define the helpers to deal with
bitops on enum-class conveniently.

x# Please enter the commit message for your changes. Lines starting
2026-08-20 15:05:28 -07:00
911ade8b73 sexp.hh: silence compiler warnings
Seems they only happen in C++20 mode, not when compiling C++23 mode. So assuming
these are false alarms (old code anyway)
2026-08-20 15:05:28 -07:00
f66b58cd41 utils: rework logging functions
Use a general mu_log which does the formatting, and specific mu_debug, mu_info
etc., to call it.
2026-08-20 15:04:27 -07:00
5f7686a767 test-utils: fix some clang-tidy warnings 2026-08-20 15:04:27 -07:00
ad327d3acb test-utils: use remove_directory 2026-08-20 15:04:27 -07:00
d258c77661 utils/file: rework remove_directory, add test
Make remove_directory not much less ugly, but at least more robust, e.g., when
the "rm" binary is not at /bin/rm

Add unit test
2026-08-20 15:04:27 -07:00
4acf708eb9 logging: don't g_message with --quiet
When `--quiet` is passed (and not --debug), do not log with g_message at
startup.
2026-08-20 15:04:27 -07:00
5c6642c9b9 utils: add utf8_clean helper
To morph text into valid utf8 if it isn't already.
2026-08-20 15:04:27 -07:00
056540b8e8 utils: avoid fmt:gmtime/fmt::localtime
They've been deprecated and give build warnings with new enough libfmt.
2026-08-20 15:04:26 -07:00
543c43f078 Replace "the the " with "the " 2026-08-20 15:04:26 -07:00
5378f321f4 utils: add set_thread_name
With HAVE_PTHREAD_SETNAME_NP
2026-08-20 15:04:25 -07:00
8c706a77db mu-init: automatic export labels with --reinit
When re-initializing the store, automatically write the labels to a file in mu's
cache, so user can later import them.
2025-08-16 16:20:33 +03:00
34d3bf2e28 tests: only build when needed
Build the tests lazily, i.e., not before `meson test`. This helps with
build-times.
2025-08-15 21:01:05 +03:00
8d3b65c5d8 utils: refactor count_nl from mu-cmd-find
And update users.
Please enter the commit message for your changes. Lines starting
2025-07-27 19:39:23 +03:00
33958cd0f7 fmt: prefer system package if found
mu embeds a "vendored" subset of the libfmt package under thirdparty; but it's
better to use the system-package if the user has one.

So, use the system package if found or user -Duse-embedded-fmt=true is
specified.
2025-07-24 19:55:27 +03:00
7f274fe518 mu-test: fix logging verbosity
We were logging _everything since the g_log_set_handler was only set for the
default domain, not "mu". Let's fix this.
2025-06-16 10:57:36 +03:00
eb75141d0a mu_utils: add to_string_char
Like to_string_gchar, but for malloc/free strings.
2025-06-14 13:14:03 +03:00
452969355c mu-test: add valgrind check
Make it a bit easier to skip some tests when running under valgrind.
2025-05-24 19:18:10 +03:00
a2a1838da4 mu-server: cleanup find prop handling
Rework the overly long find-handler.

Improve parsing of options, and return better return properties (for use
in mu4e).
2025-04-12 15:07:28 +07:00
507ea8e18e mu-sexp: don't require > c++17 2025-03-23 20:22:56 +02:00
44ba631a34 mu-find: implement format=json2
Implement a new experimental json2 format for mu-find, which gets rid of
the ":" prefixes for fields, i.e., "subject" instead of ":subject".
Document it as well.
2025-03-23 19:47:09 +02:00
4cda859eb8 mu-sexp: tighten definition of plistp
In a plist, we also require the first of each two element pairs to start
with ':'

Fixes #2830.
2025-03-23 19:47:09 +02:00
c91e4ef515 mu-sexp: fix c++23 warning for suffix operator
Space between operator"" and _xxx is deprecated.
2025-03-23 19:47:09 +02:00
dee7e5951c utils-file: add unit-test for expand_file 2024-12-09 19:41:58 +02:00
0e0d4a0cb6 mu-sexp: add -unix output for json tstamps
The json output (for mu-find etc.) just showed the converted sexp
output, including the clumsy emacs-style tstamps (for changed/date).

Add unix timestamps as well, which are easier to work with outside
emacs.

This handles #2770.
2024-12-07 12:14:55 +02:00
646ad2e840 lib/utils: include fmt/xchar.h
Needed for 'join'
2024-12-06 20:14:11 +02:00
29dc1cea0c Fix typos. 2024-09-22 17:27:18 +00:00
075394b35f lib: use time_t_max for empty datetime
In Mu::parse_date_time, when provided with an empty string, return
time_t_max instead of G_MAXINT64. For systems with a 64-bit time_t, there
is no difference. With a 32-bit time_t it caused a test to fail:

    not ok /utils/date-basic - ERROR:../mu-1.12.4/lib/utils/tests/test-utils.cc:92
    void test_date_basic(): assertion failed
    (parse_date_time(std::get<0>(test), std::get<1>(test)).value_or(-1)
      == std::get<2>(test)): (18446744073709551615 == 2147483647)

This edge case probably only affected the test, as when other parts of
the application call parse_date_time (e.g. mu-server.cc and
mu-query-processor.cc), they check if the input string is empty first.
2024-08-26 14:46:54 +00:00
23941735df logging: rework a bit, maybe support syslog
Seems journal logging fails on NetBSD (no surprise), but has some
unwanted/not-fully-understood side-effects.

In any case, outside Linux there's no use in even trying to use
journald; so we don't do that anymore.

Add conditional support for syslog (requires glib 2.80).
2024-05-07 09:27:50 +03:00
a0d60d23b0 compat: include sys/wait.h where needed
netbsd needs this explicitly, other systems let us get away without it.
2024-04-21 22:08:10 +03:00
29ce96923a test-mu-utils: update parse_date_time tests
We're using ::time_t now.
2024-04-14 11:30:20 +03:00
a6ec43a740 mu-utils: update casting from int64_t -> time_t
Esp. for systems with 32-bit time_t.
2024-04-13 20:06:39 +03:00
4a03a30d04 utils: build test-utils when tests are not disabled
Fixes #2685
2024-04-08 18:29:57 +03:00
5186264852 utils: only build mu-tests-utils when tests are enabled
This fixes a compilation failure.

Fixes #2684.
2024-04-06 10:36:18 +03:00
45b4f60348 mu-utils: Fix build with musl
In musl, `stdout` is a macro that expands to `(stdout)`, and
`::(stdout)` is not valid C++.

../mu-1.12.2/lib/utils/mu-utils.hh:268:32: error: expected
  id-expression before '(' token
 268 |                              ::stdout);
     |                                ^~~~~~

Nothing in the Mu namespace is named stdout, so it is safe to drop
the `::`.

Bug: https://bugs.gentoo.org/928361
2024-04-01 11:23:39 +00:00
9fd0d2be12 clang: fix some compiler warnings
From CI.
2024-03-15 19:47:30 +02:00