Updated README.md to show how `FEATURE` flags are defined and used now.

Fortune for sink's current commit: Great curse − 大凶
master
Avril 3 years ago
parent eba77a5d85
commit 9a50132e90
Signed by: flanchan
GPG Key ID: 284488987C31F630

@ -19,7 +19,7 @@
# * `STRIP` - Strip command for default output (stripped release) target (`make sink`). set `make STRIP=:` to prevent stripping entirely. (NOTE: When using `make install`, `STRIP=:` will not work, instead, paradoxically, set `STRIP=true`, they have the same effect for all targets)
PROJECT=sink
DESCRIPTION=sink all input and output of a program to /dev/null
VERSION=0.1.0
VERSION=0.2.0
AUTHOR=Avril <avril@cumallover.me>
LICENSE=GPL3+

@ -19,11 +19,15 @@ Run `make && sudo make install` to build with full optimisations and install `si
To build for debugging, run `make debug`.
### Compiler flags
* `-DREPLACE_STDERR` - Add to `CFLAGS` when building a target to re-route the child program's `stderr` stream to the sink as well. By default, it is passed through as default.
* `-DNO_SEARCH_PATH` - Add to `CFLAGS` when building to prevent the program looking up its argument in the `PATH` environment variable.
* `-DNO_ENV` - Add to `CFLAGS` when building to prevent `envp` passthrough to the `execve()`'d program.
* `-DDEBUG_IGNORE_SPLASH` - Do not print project and version info in debug builds on startup.
### Feature flags
Set the following to the environment variable `FEATURES` when invoking `make` to build with the speficied features' behaviour (e.g. `FEATURES=NO_SEARCH_PATH\ NO_ENV make`.)
When a debug-mode splash screen is printed, the features the binary was compiled with are also printed.
* `REPLACE_STDERR` - Re-route the child program's `stderr` stream to the sink as well. By default, it is passed through as default.
* `NO_SEARCH_PATH` - Prevent the program looking up its argument in the `PATH` environment variable.
* `NO_ENV` - Prevent `envp` passthrough to the `execve()`'d program.
* `DEBUG_IGNORE_SPLASH` - Do not print project and version info in debug builds on startup.
### Installation
The program must have been built before installation, and installation and uninstallation must be done as root.

@ -8,7 +8,8 @@
#include "comp_features.h"
static const enum compiled_features compiled_features = FEATURE_FLAGS;
__attribute__((used)) // For loading debug binary symbol
const enum compiled_features sink_compiled_features = FEATURE_FLAGS;
#define r_stdin 0
#define r_stdout 1
@ -153,6 +154,7 @@ static inline size_t count_list(const void*const* p)
while(*p++) n+=1;
return n;
}
#if !FEATURE_HAS_FLAG(DEBUG_IGNORE_SPLASH)
static void print_compiled_features()
{
#define _X "\t%s\n"
@ -176,15 +178,22 @@ static void print_compiled_features()
#undef X
#undef _X
}
#endif
static void print_debug_info(int argc, char* const* argv, char* const* envp)
{
#ifndef RELEASE
fprintf(stderr, "[DEBUG BUILD]\n");
#else
fprintf(stderr, "[RELEASE BUILD]\n");
#endif
#if ! FEATURE_HAS_FLAG(DEBUG_IGNORE_SPLASH)
fprintf(stderr, _PROJECT " v" _VERSION ": " _DESCRIPTION "\n");
fprintf(stderr, " :: written by " _AUTHOR " with <3 (License " _LICENSE ")\n---\n");
#endif
fprintf(stderr, "> features:\n");
fprintf(stderr, " :: written by " _AUTHOR " with <3 (License " _LICENSE ")\n");
fprintf(stderr, "Built with features:\n");
print_compiled_features();
fprintf(stderr, "---\n");
#endif
fprintf(stderr, "> program: %s (path lookup: "
#if FEATURE_HAS_FLAG(NO_SEARCH_PATH)

Loading…
Cancel
Save