check for timegm() function to avoid slow fallback implementation#705
Merged
lauft merged 1 commit intoAug 27, 2025
Merged
Conversation
…ke.h This fix will cause cmake to detect and define HAVE_TIMEGM in cmake.h if the system libc has a timegm() function, and updates the libshared peg to incorporate cmake.h in the included libshared build. This way, the slow Datetime::timegm() implementation is not used, but rather the fast one in libc. This fast one depends on HAVE_TIMEGM being defined by the function in libshared's Datetime.cpp. Fixes GothenburgBitFactory#703 which was a significant performance regression in 1.9.0 release. Signed-off-by: Scott Mcdermott <scott@smemsh.net>
lauft
approved these changes
Aug 27, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Libshared pulled in a fallback
timegm()implementation in GothenburgBitFactory/libshared#99 that's quite slow and caused an unintentional performance regression in timewarrior, as documented in #703.The fix is to have
cmaketest for systemtimegm()and set the proper define so the code won't build the fallback version, but rather use the system one.This patch brings in the libshared change from GothenburgBitFactory/libshared#105 that reads the cmake header, and then also adds the check+define in CMakeLists.txt so that the generated cmake.h that Datetime will now see (from libshared change) includes the right #define to avoid the slow fallback.
Fixes #703