aba6ec3e52
Motivation: • faster builds (on an Intel Core i9-9900K): ( ../configure --disable-sanitizers && make -j8; ) 19,47s user 2,78s system 395% cpu 5,632 total ( meson .. -Dmans=true -Ddocs=true -Dprefix=/usr && ninja; ) 38,67s user 3,73s system 1095% cpu 3,871 total • more approachable build system configuration in the python-esque meson domain specific language instead of the autotools m4 macro language • built-in language server support thanks to ninja: the required compile_commands.json is built automatically and only needs to be linked from the source dir, e.g.: ln -s build/compile_commands.json . Changes: • the embedded vcs version info format changed from e.g. 4.18-282-gabe46f69 (2020-05-16, branch "next") to: 4.18-282-gabe46f69 I think it’s better to lose a little bit of detail for the gained cleanliness of using meson’s vcs_tag() • Drop unused xcb-event dependency. • We can no longer enable sanitizers and debug options based on whether we are in a release or non-release build, because our new version logic runs at ninja build time, not at meson configure time. The new behavior is probably for the better in terms of what people expect, and we can make the CI use address sanitizer explicitly to ensure it is still exercised. • We lose the AX_EXTEND_SRCDIR behavior, i.e. including the path component of the parent of the source dir in all paths. This was a trick we used for easier debugging, so that stack traces would contain e.g. ../i3-4.18.1/src/main.c, instead of just src/main.c. The other mechanism (_i3_version symbol) that we have for including the version number in the “backtrace full” (but not merely “backtrace”) output of gdb still works. • Release tarballs now use tar.xz. Why not. Migration plan This commit adds the meson build files to the tree, but does not remove autotools yet. For the development phase, we will keep both build systems functional (and built on travis). Then, just before the i3 v4.19 release, we will remove autotools from the tree and the release tarball will require meson to compile. This way, we incentivize maintainers to change, while also offering them an easy way out (if desired) by reverting the most recent commit. In practice, switching a distribution package from autotools to meson should only be a few line change, easier than applying the provided patch :). Take a look at the debian/ changes in this commit for an example. meson is broadly available everywhere that i3 is available: Both xorg-server and systemd gained meson build files in 2017, so we can follow suit: https://anholt.livejournal.com/52574.html https://in.waw.pl/~zbyszek/blog/systemd-meson.html How do I? For producing a coverage report, enable the b_coverage meson base option and run ninja coverage-html: % cd build % meson .. -Db_coverage=true % ninja % ninja test % ninja coverage-html See also https://mesonbuild.com/howtox.html#producing-a-coverage-report For using the address sanitizer, memory sanitizer or undefined behavior sanitizer, use the b_sanitize meson base option: % cd build % meson .. -Db_sanitize=address % ninja See also https://mesonbuild.com/Builtin-options.html#base-options related to #4086
103 lines
2.3 KiB
C
103 lines
2.3 KiB
C
/*
|
|
* vim:ts=4:sw=4:expandtab
|
|
*
|
|
* i3 - an improved dynamic tiling window manager
|
|
* © 2009 Michael Stapelberg and contributors (see also: LICENSE)
|
|
*
|
|
* log.c: Logging functions.
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <config.h>
|
|
|
|
/* We will include libi3.h which define its own version of LOG, ELOG.
|
|
* We want *our* version, so we undef the libi3 one. */
|
|
#if defined(LOG)
|
|
#undef LOG
|
|
#endif
|
|
#if defined(ELOG)
|
|
#undef ELOG
|
|
#endif
|
|
#if defined(DLOG)
|
|
#undef DLOG
|
|
#endif
|
|
/** ##__VA_ARGS__ means: leave out __VA_ARGS__ completely if it is empty, that
|
|
is, delete the preceding comma */
|
|
#define LOG(fmt, ...) verboselog(fmt, ##__VA_ARGS__)
|
|
#define ELOG(fmt, ...) errorlog("ERROR: " fmt, ##__VA_ARGS__)
|
|
#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
|
|
|
extern char *errorfilename;
|
|
extern char *shmlogname;
|
|
extern int shmlog_size;
|
|
|
|
/**
|
|
* Initializes logging by creating an error logfile in /tmp (or
|
|
* XDG_RUNTIME_DIR, see get_process_filename()).
|
|
*
|
|
*/
|
|
void init_logging(void);
|
|
|
|
/**
|
|
* Opens the logbuffer.
|
|
*
|
|
*/
|
|
void open_logbuffer(void);
|
|
|
|
/**
|
|
* Closes the logbuffer.
|
|
*
|
|
*/
|
|
void close_logbuffer(void);
|
|
|
|
/**
|
|
* Checks if debug logging is active.
|
|
*
|
|
*/
|
|
bool get_debug_logging(void);
|
|
|
|
/**
|
|
* Set debug logging.
|
|
*
|
|
*/
|
|
void set_debug_logging(const bool _debug_logging);
|
|
|
|
/**
|
|
* Set verbosity of i3. If verbose is set to true, informative messages will
|
|
* be printed to stdout. If verbose is set to false, only errors will be
|
|
* printed.
|
|
*
|
|
*/
|
|
void set_verbosity(bool _verbose);
|
|
|
|
/**
|
|
* Logs the given message to stdout while prefixing the current time to it,
|
|
* but only if debug logging was activated.
|
|
*
|
|
*/
|
|
void debuglog(char *fmt, ...)
|
|
__attribute__((format(printf, 1, 2)));
|
|
|
|
/**
|
|
* Logs the given message to stdout while prefixing the current time to it.
|
|
*
|
|
*/
|
|
void errorlog(char *fmt, ...)
|
|
__attribute__((format(printf, 1, 2)));
|
|
|
|
/**
|
|
* Logs the given message to stdout while prefixing the current time to it,
|
|
* but only if verbose mode is activated.
|
|
*
|
|
*/
|
|
void verboselog(char *fmt, ...)
|
|
__attribute__((format(printf, 1, 2)));
|
|
|
|
/**
|
|
* Deletes the unused log files. Useful if i3 exits immediately, eg.
|
|
* because --get-socketpath was called. We don't care for syscall
|
|
* failures. This function is invoked automatically when exiting.
|
|
*/
|
|
void purge_zerobyte_logfile(void);
|