aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/fmt.hh
diff options
context:
space:
mode:
authorJade Lovelace <lix@jade.fyi>2024-08-23 16:57:26 -0700
committerRebecca Turner <rbt@sent.as>2024-08-28 09:55:09 -0700
commita510d1748416ff29b1ed3cab92ac0ad943b6e590 (patch)
tree7aada007847e6e90ae739365daff549f64b47678 /src/libutil/fmt.hh
parent04f8a1483362212f33f97c13472ded4121a18a86 (diff)
build-time: hide boost stacktrace in a .cc file
Saves about 16s of CPU time. Not a lot but not nothing. Feels more like the principle of the thing. Change-Id: I0992d4024317c20d6985a7977d5649edfb9f46bb
Diffstat (limited to 'src/libutil/fmt.hh')
-rw-r--r--src/libutil/fmt.hh12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/libutil/fmt.hh b/src/libutil/fmt.hh
index 7589e51e2..ee3e1e2e7 100644
--- a/src/libutil/fmt.hh
+++ b/src/libutil/fmt.hh
@@ -4,11 +4,6 @@
#include <iostream>
#include <string>
#include <boost/format.hpp>
-// Darwin and FreeBSD stdenv do not define _GNU_SOURCE but do have _Unwind_Backtrace.
-#if __APPLE__ || __FreeBSD__
-#define BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED
-#endif
-#include <boost/stacktrace.hpp>
#include "ansicolor.hh"
// Explicit instantiation in fmt.cc
@@ -16,6 +11,9 @@ extern template class boost::basic_format<char>;
namespace nix {
+/** Prints a C++ stack trace to stderr using boost stacktrace */
+void printStackTrace();
+
/**
* Values wrapped in this struct are printed in magenta.
*
@@ -176,14 +174,14 @@ public:
std::cerr << "HintFmt received incorrect number of format args. Original format string: '";
std::cerr << format << "'; number of arguments: " << sizeof...(args) << "\n";
// And regardless of the coredump give me a damn stacktrace.
- std::cerr << boost::stacktrace::stacktrace() << std::endl;
+ printStackTrace();
abort();
}
} catch (boost::io::format_error & ex) {
// Same thing, but for anything that happens in the member initializers.
std::cerr << "HintFmt received incorrect format string. Original format string: '";
std::cerr << format << "'; number of arguments: " << sizeof...(args) << "\n";
- std::cerr << boost::stacktrace::stacktrace() << std::endl;
+ printStackTrace();
abort();
}