Project pies


1.7  —  2022-01-02
* Changes in configuration preprocessing

** Each included file is preprocessed separately.

The built-in preprocessor is removed.  The #include and #include_once
statements are now regular configuration statements.  Any files
included as a result of #include or #include_once are preprocessed
separately.  This differs from prior versions, were all includes were
expanded first, the obtained material passed to the m4 and the
resulting output was then parsed.

This means that:

1. The mess with two preprocessors (built-in and external) is now

2. Macros defined in a source file don't pollute the namespace of
another sources.

3. Error locations can be accurately determined.

4. Preprocessor can emit forceful diagnostics (see below) to properly
identify erroneous or otherwise suspicious constructs.

** The `pp-setup' file is gone.

By default, the preprocessor is started as `m4 -s -P' with additional
set of -I options and eventual -D or -U options if these are used in
the command line of pies.  Apart from this, no additional set up is

** The precedence of -I options is fixed

The -I options are placed in the m4 command line before the options
that configure the default search path.

* New forceful diagnostics statements

** #warning "TEXT"

Emits warning.

** #error "TEXT"

Emits error message.  Further parsing continues, but will end with

** #abend "TEXT"

Emits error message and stops further processing immediately.

If `#error' or `#abend' is encountered, the effect is the same
as if syntax error has been detected.  If it occurs at pies
startup, the program will terminate abnormally.  If it occurs as
part of the reload sequence in a running instance of pies, the
configuration file will be rejected and old configuration will remain
in effect.

GNU pies (pronounced p-yes) is a program invocation and execution supervisor. This utility allows to execute usual foreground-mode applications in detached mode, as if they were daemons. It combines the fucntionality of init and inetd programs. It can be used to control complex multi-component software.