chiark / gitweb /
secnet.git
4 years agoconffile: find_cl_if: fix fail_if_invalid==False
Ian Jackson [Sun, 6 Oct 2019 22:34:33 +0000 (23:34 +0100)]
conffile: find_cl_if: fix fail_if_invalid==False

If the key was not found, this would segfault, so passing False didn't
work properly.  Currently nothing does, so this bug is latent.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agomake-secnet-sites: Tainted: Fix a lot of bad return values
Ian Jackson [Fri, 8 Nov 2019 21:18:05 +0000 (21:18 +0000)]
make-secnet-sites: Tainted: Fix a lot of bad return values

This code had remnants of a previously intended calling convention,
where object return chaining would be used.

Unfortunately in the currently used calling style, we expect to get a
boolean back everywhere, where true meas `ok'.  Returning `self' is
always treated as `ok' because it's trueish.

Luckily this doesn't cause actual security bugs because we always
return from all of the top-level entrypoints via ._rtn[val] which
checks the ._ok setting, which does properly track problems.  So we
fail an assertion rather than printing a nice message.  This is not
pretty but it is not a vulnerability.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Drop a redundant test
Ian Jackson [Tue, 3 Dec 2019 22:10:08 +0000 (22:10 +0000)]
stest: Drop a redundant test

We were going to use this for key rollover tests etc.  But in fact
we (much later in this series) will introduce new tests for the new
key loading arrangements.  Actual key rollover will come *much* later
and there is little point having this placeholder in the meantime.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoautogen.sh: Write a comment about need for autoheader
Ian Jackson [Fri, 6 Dec 2019 13:42:50 +0000 (13:42 +0000)]
autogen.sh: Write a comment about need for autoheader

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoconfigure.ac: Do not check for lack of standard headers
Ian Jackson [Fri, 6 Dec 2019 13:27:18 +0000 (13:27 +0000)]
configure.ac: Do not check for lack of standard headers

This makes configure rather faster.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoconfigure.ac: Drop AC_STDC_HEADERS
Ian Jackson [Fri, 6 Dec 2019 13:37:23 +0000 (13:37 +0000)]
configure.ac: Drop AC_STDC_HEADERS

This is obsolete, as the docs say:

 AC_STDC_HEADERS
     Replaced by 'AC_HEADER_STDC'

 AC_HEADER_STDC
     This macro is obsolescent, as current systems have conforming
     header files.  New programs need not use this macro.

Unfortunately dropping it is not properly effective because it's
implied by some other stuff.  We are going to deal with that in a
moment.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoconfigure.ac: Drop checks for systems lacking stdint.h
Ian Jackson [Fri, 6 Dec 2019 13:03:46 +0000 (13:03 +0000)]
configure.ac: Drop checks for systems lacking stdint.h

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Check that received packet is as expected
Ian Jackson [Sun, 24 Nov 2019 00:59:39 +0000 (00:59 +0000)]
stest: Check that received packet is as expected

It turns out that if secnet decides the link to the peer is too
broken, it loops outbound packets back to its host.  Normally this is
not obvious, because the host naturally drops such packets.

But in stest we weren't actually looking at the incoming packets at
all, so we would treat this as success!

So, instead, match the start of the packet, including the source and
destination addresses and the icmp type.  (This crude match will fail
if the reply contains any IP options, but the ping comes from the peer
secnet so it won't have.)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Decode the slip packets that come via fake netlink
Ian Jackson [Sun, 24 Nov 2019 00:59:31 +0000 (00:59 +0000)]
stest: Decode the slip packets that come via fake netlink

This will allow us to do something more sophisticated with the packet
contents.

The only functional change right now is to ignore empty `packets'.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: If one of our secnets dies, call the test a failure
Ian Jackson [Mon, 25 Nov 2019 00:01:34 +0000 (00:01 +0000)]
stest: If one of our secnets dies, call the test a failure

This involves use of TclX's `signal' facility.  In my tests it was
easy to make Tcl deadlock by doing too much work in the signal
handler.  In particular reaping children is a bad idea.  Also signals
are not blocked during the signal handler so it would have to be
reentrant.

Instead, use `after idle'.  That is quite soon enough for the reap to
run, and in my tests with TclX 8.4 it all works properly.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Use `finish' for success exits
Ian Jackson [Sun, 24 Nov 2019 22:20:51 +0000 (22:20 +0000)]
stest: Use `finish' for success exits

vwait is a bit funny.  This is better, and it also kills our child
secnets.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Kill our child secnets when we call finish
Ian Jackson [Mon, 25 Nov 2019 00:01:01 +0000 (00:01 +0000)]
stest: Kill our child secnets when we call finish

This stops them hanging around and, often, printing more stuff after
the test has actually failed.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Record the pids of of the secnets we spawn
Ian Jackson [Mon, 25 Nov 2019 00:00:30 +0000 (00:00 +0000)]
stest: Record the pids of of the secnets we spawn

Nothing uses this yet.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Replace the call to `exit 1' with a new proc `finish'
Ian Jackson [Sun, 24 Nov 2019 13:59:29 +0000 (13:59 +0000)]
stest: Replace the call to `exit 1' with a new proc `finish'

This is going to be used for success exits too, in a moment.
This will let us do more work when we are exiting.

The only change for now is some extra stderr output.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Support not running secnet ourselves
Ian Jackson [Sat, 23 Nov 2019 00:38:01 +0000 (00:38 +0000)]
stest: Support not running secnet ourselves

Now the user can set SECNET_STEST_DIVERT_inside=1 (say) and instead of
actually running secnet, we print the rune we would run and ask the
user when they have started it.

A freshly started secnet (with this config, at least) just sits there
waiting for its first packet to deal with.  So if the user does this
for the 2nd secnet, that's fine - the first one will happily wait
until the test actually gets going.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Don't prefix ./ with another ./, in socktmp
Ian Jackson [Sat, 23 Nov 2019 00:37:35 +0000 (00:37 +0000)]
stest: Don't prefix ./ with another ./, in socktmp

Makes things slightly prettier.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Print the special env vars we pass to secnet
Ian Jackson [Sat, 23 Nov 2019 00:19:11 +0000 (00:19 +0000)]
stest: Print the special env vars we pass to secnet

We don't dump the whole environment, just selected bits.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Print the secnet runes we run
Ian Jackson [Sat, 23 Nov 2019 00:03:58 +0000 (00:03 +0000)]
stest: Print the secnet runes we run

We can't use prexec here because we aren't using exec at all.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests, mtest: Provide and use `prexec' for helping with debugging
Ian Jackson [Fri, 22 Nov 2019 23:59:32 +0000 (23:59 +0000)]
tests, mtest: Provide and use `prexec' for helping with debugging

This prints the make-secnet-sites runes we are about to run.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agodir-locals: Provide python-indent-offset too
Ian Jackson [Fri, 29 Nov 2019 23:37:01 +0000 (23:37 +0000)]
dir-locals: Provide python-indent-offset too

python-indent is obsolete since Emacs 24.3.  It has been made into an
alias for python-indent-offset, but the alias is not marked safe as a
file variable.  Specifying python-indent-offset should make this work
on all relevant versions of Emacs (at least in the default
configuration).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Add debug logs
Ian Jackson [Sat, 23 Nov 2019 19:13:46 +0000 (19:13 +0000)]
stest: Add debug logs

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Use new `prefix' option.
Ian Jackson [Sat, 23 Nov 2019 17:57:56 +0000 (17:57 +0000)]
stest: Use new `prefix' option.

This lets us distinguish output from our two secnets.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agostest: Use stderr, not tty, for logging
Ian Jackson [Sat, 23 Nov 2019 17:50:46 +0000 (17:50 +0000)]
stest: Use stderr, not tty, for logging

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agologfile: New `prefix' option.
Ian Jackson [Sat, 23 Nov 2019 17:57:46 +0000 (17:57 +0000)]
logfile: New `prefix' option.

This allows the config file to add a fixed string to log messages.
This will be useful in our test suite, which mixes up output from
two instances of secnet.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agologfile: Do not log differently with --nodetach
Ian Jackson [Sat, 23 Nov 2019 17:52:31 +0000 (17:52 +0000)]
logfile: Do not log differently with --nodetach

This is actually quite anoying.  There is no good reason for leaving
off the timestamps in tests, or manual debugging, etc.

If at some point we want to support running under some kind of
log-capturing daemon supervisor which timestamps everything, we can
easily make this conditional again.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agologfile: Remove redundant check for st->f
Ian Jackson [Sat, 23 Nov 2019 17:51:04 +0000 (17:51 +0000)]
logfile: Remove redundant check for st->f

st->f is now always non-null.  If no filename is specified, it is
stderr.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agologfile: Log to stderr by default (`filename' key now optional)
Ian Jackson [Sat, 23 Nov 2019 17:50:28 +0000 (17:50 +0000)]
logfile: Log to stderr by default (`filename' key now optional)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosecnet: Make stderr line buffered
Ian Jackson [Sun, 24 Nov 2019 01:00:20 +0000 (01:00 +0000)]
secnet: Make stderr line buffered

This helps not interleave output in tests.  We write output in lines,
so this is fine.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMerge subdirmk 0.3
Ian Jackson [Mon, 30 Dec 2019 13:14:45 +0000 (13:14 +0000)]
Merge subdirmk 0.3

4 years agotests: Provide make-release script
Ian Jackson [Mon, 30 Dec 2019 12:59:57 +0000 (12:59 +0000)]
tests: Provide make-release script

Not really `tests' but I don't want to add a whole new directory just
for this.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests: Provide advance-tested script
Ian Jackson [Mon, 30 Dec 2019 12:50:30 +0000 (12:50 +0000)]
tests: Provide advance-tested script

Useful for our own testing.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosubdirmk: Merge new version and fix everything
Ian Jackson [Mon, 30 Dec 2019 12:06:47 +0000 (12:06 +0000)]
subdirmk: Merge new version and fix everything

git subtree pull, but many incompatible changes - so also fixed up the
secnet code to match.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMerge subdirmk
Ian Jackson [Mon, 30 Dec 2019 12:06:12 +0000 (12:06 +0000)]
Merge subdirmk

4 years agoMerge subdirmk
Ian Jackson [Sun, 29 Dec 2019 14:23:00 +0000 (14:23 +0000)]
Merge subdirmk

4 years agoLegal: Update tests/filter/ inputs and outputs
Ian Jackson [Mon, 30 Dec 2019 11:58:11 +0000 (11:58 +0000)]
Legal: Update tests/filter/ inputs and outputs

We judiciously use # vs. &# for the legal comment so that each
expected output file contains one notice.

The following files, which are wholly constructed by running
generate and reviewing the diffs, do not have a legal notice:
  tests/filter/main.mk.expected
  tests/filter/stderr.expected
  tests/filter/sub/Dir.mk.expected
This is OK I think.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoLegal: Add copyright, licence and warranty notice to many files
Ian Jackson [Mon, 30 Dec 2019 11:17:17 +0000 (11:17 +0000)]
Legal: Add copyright, licence and warranty notice to many files

The .sd.mk and .expected files in tests/filter/ are more complicated.
We'll do those in a moment.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoLegal: Add NO WARRANTY everywhere
Ian Jackson [Mon, 30 Dec 2019 11:09:36 +0000 (11:09 +0000)]
Legal: Add NO WARRANTY everywhere

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Avoid $err_file undefined warning during startup
Ian Jackson [Mon, 30 Dec 2019 11:02:59 +0000 (11:02 +0000)]
generate: Avoid $err_file undefined warning during startup

If, for example, one of the input files implied by the command line
arguments is missing, err is called with $err_file not yet set.

Handle this case.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Mention suppressions when warning re VAR vs &VAR
Ian Jackson [Sun, 29 Dec 2019 15:56:44 +0000 (15:56 +0000)]
generate: Mention suppressions when warning re VAR vs &VAR

When we are actually printing the warning, report all the locations,
including the suppressed ones.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoSyntax: Support &:local+global !...
Ian Jackson [Sun, 29 Dec 2019 15:50:28 +0000 (15:50 +0000)]
Syntax: Support &:local+global !...

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests/filter: Test &:local+global & vs non-&
Ian Jackson [Sun, 29 Dec 2019 15:46:54 +0000 (15:46 +0000)]
tests/filter: Test &:local+global & vs non-&

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoSyntax: Rescope effect of &:local+global
Ian Jackson [Sun, 29 Dec 2019 15:18:39 +0000 (15:18 +0000)]
Syntax: Rescope effect of &:local+global

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosubdirmk: Fix a Subdir left over in README
Ian Jackson [Sun, 29 Dec 2019 14:32:49 +0000 (14:32 +0000)]
subdirmk: Fix a Subdir left over in README

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoSyntax: Expand &$( and &$NN to use ${ } rather than $( )
Ian Jackson [Sun, 29 Dec 2019 14:17:00 +0000 (14:17 +0000)]
Syntax: Expand &$( and &$NN to use ${ } rather than $( )

And now document the use of $&+ for recipes.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agodoctests: Allow parenthetical comments as an expansion RHS
Ian Jackson [Sun, 29 Dec 2019 14:18:49 +0000 (14:18 +0000)]
doctests: Allow parenthetical comments as an expansion RHS

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Swap order of &$( and &$NN
Ian Jackson [Sun, 29 Dec 2019 14:15:15 +0000 (14:15 +0000)]
README: Swap order of &$( and &$NN

We are going to add a note to &$( which applies to &$NN too, and this
makes it nicer.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoSyntax: Use ${top_srcdir} rather than $(top_srcdir)
Ian Jackson [Sun, 29 Dec 2019 14:13:52 +0000 (14:13 +0000)]
Syntax: Use ${top_srcdir} rather than $(top_srcdir)

Again, this makes it possible to use in $-doubled shell runes as well
as in make syntax.  (Assuming you have made top_srcdir be a shell
variable as well as a make variable.)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoSyntax: expand &$... to ${....} rather than $(....)
Ian Jackson [Sun, 29 Dec 2019 14:03:28 +0000 (14:03 +0000)]
Syntax: expand &$... to ${....} rather than $(....)

This makes it possible to use in $-doubled shell runes as well as in
make syntax.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Introduce new `broken-var-ref' warning
Ian Jackson [Sun, 29 Dec 2019 14:01:22 +0000 (14:01 +0000)]
Warnings: Introduce new `broken-var-ref' warning

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests/filter: Print all the diffs, not just the first
Ian Jackson [Sun, 29 Dec 2019 14:00:58 +0000 (14:00 +0000)]
tests/filter: Print all the diffs, not just the first

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Refer to example/
Ian Jackson [Sat, 28 Dec 2019 19:07:17 +0000 (19:07 +0000)]
README: Refer to example/

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Move the "how to use" up
Ian Jackson [Sat, 28 Dec 2019 19:06:17 +0000 (19:06 +0000)]
README: Move the "how to use" up

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Add another layer of structure
Ian Jackson [Sat, 28 Dec 2019 19:04:26 +0000 (19:04 +0000)]
README: Add another layer of structure

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Move the Warnings section up into what is going to be spec
Ian Jackson [Sat, 28 Dec 2019 19:04:10 +0000 (19:04 +0000)]
README: Move the Warnings section up into what is going to be spec

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: deinent the macro explaation
Ian Jackson [Sat, 28 Dec 2019 18:55:45 +0000 (18:55 +0000)]
README: deinent the macro explaation

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Further miscellaneous fixes and clarifications
Ian Jackson [Sat, 28 Dec 2019 18:55:25 +0000 (18:55 +0000)]
README: Further miscellaneous fixes and clarifications

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Document that local+global is not 100% accurate
Ian Jackson [Sat, 28 Dec 2019 18:46:58 +0000 (18:46 +0000)]
README: Document that local+global is not 100% accurate

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: More syntax further up
Ian Jackson [Sat, 28 Dec 2019 18:43:18 +0000 (18:43 +0000)]
README: More syntax further up

This is primary.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarning reporting: Report each warning only once
Ian Jackson [Sat, 28 Dec 2019 18:36:31 +0000 (18:36 +0000)]
Warning reporting: Report each warning only once

In particular, Prefix and Suffix, or conventional &:include's can
generate a lot of repeated warnings.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarning reporting: Provide &:local+global directive
Ian Jackson [Sat, 28 Dec 2019 18:26:09 +0000 (18:26 +0000)]
Warning reporting: Provide &:local+global directive

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarning reporting: Add a test of the warning suppression system
Ian Jackson [Sat, 28 Dec 2019 13:55:59 +0000 (13:55 +0000)]
Warning reporting: Add a test of the warning suppression system

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarning reporting: Warning suppression system
Ian Jackson [Sat, 28 Dec 2019 13:55:12 +0000 (13:55 +0000)]
Warning reporting: Warning suppression system

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotest/filter; Cause some warnings, to check they appear
Ian Jackson [Sat, 28 Dec 2019 12:58:03 +0000 (12:58 +0000)]
test/filter; Cause some warnings, to check they appear

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Sort occurrences properly in local+global warnings
Ian Jackson [Sat, 28 Dec 2019 12:52:01 +0000 (12:52 +0000)]
Warnings: Sort occurrences properly in local+global warnings

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Warn for confusing single-char $ expansions
Ian Jackson [Sat, 28 Dec 2019 14:05:19 +0000 (14:05 +0000)]
Warnings: Warn for confusing single-char $ expansions

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Track variable references in &-expansions
Ian Jackson [Sat, 28 Dec 2019 12:31:40 +0000 (12:31 +0000)]
Warnings: Track variable references in &-expansions

For &-escapes which match the whole variable name, we can conveniently
track variable expansions as part of the processing.  (We don't change
any of the matching regexps.)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Track basic $-references
Ian Jackson [Sat, 28 Dec 2019 12:31:49 +0000 (12:31 +0000)]
Warnings: Track basic $-references

We must always stop at $'s in the input now.

Having stopped at $, we normally just output it and carry on.  Ie, we
only stop so we can do some inspection: as before, we do this variable
tracking as inspection before processing, rather entangled with
processing.

We can deal reasonably properly with ${ } and $( ).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Track settings of variables
Ian Jackson [Sat, 28 Dec 2019 12:27:40 +0000 (12:27 +0000)]
Warnings: Track settings of variables

Where the variable tracking does not involve &-escapes, or only
involves &-escapes which work like a prefix so the processor does not
have the whole variable name, we do this separately from processing.

This is simpler because we can look ahead more.  It also avoids
disturbing the processing logic (which needs to be precisely accurate,
unlike this variable tracking).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: Infrastructure for tracking and warning about variables
Ian Jackson [Sat, 28 Dec 2019 12:59:11 +0000 (12:59 +0000)]
Warnings: Infrastructure for tracking and warning about variables

We are going to track when we see FOO or &FOO.  If we see both, we
issue a warning, as that might mean the programmer forgot a &.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoWarnings: generate: Basic `wrn' function
Ian Jackson [Sat, 28 Dec 2019 12:58:46 +0000 (12:58 +0000)]
Warnings: generate: Basic `wrn' function

This is sufficient to add warnning calls to the code.  We'll soup it
up later.  No callers yet.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests/filter/check: Capture generate's stderr
Ian Jackson [Sat, 28 Dec 2019 12:55:17 +0000 (12:55 +0000)]
tests/filter/check: Capture generate's stderr

We are going to cause `generate' to emit warnings, which we want to
check are working.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotest/filter: Test &${ ... } rather better
Ian Jackson [Sat, 28 Dec 2019 23:07:01 +0000 (23:07 +0000)]
test/filter: Test &${ ... } rather better

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Fix &${ } end condition
Ian Jackson [Sat, 28 Dec 2019 23:01:49 +0000 (23:01 +0000)]
generate: Fix &${ } end condition

It is quite wrong to use $ddbl, which might be adjusted by &$- &$+.
We must maintain a separate counter.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Fix { } in &${ to actually output the { }
Ian Jackson [Sat, 28 Dec 2019 12:17:14 +0000 (12:17 +0000)]
generate: Fix { } in &${ to actually output the { }

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests/filter: Rename `doctest' -> `doctests' everywhere
Ian Jackson [Sat, 28 Dec 2019 11:34:56 +0000 (11:34 +0000)]
tests/filter: Rename `doctest' -> `doctests' everywhere

This is more uniform.  A lot of churn, though.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Move &:changequote further down
Ian Jackson [Sat, 28 Dec 2019 18:19:17 +0000 (18:19 +0000)]
README: Move &:changequote further down

This is a bit of a minority interest.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Explain a wrinkle in &:include filename semantics
Ian Jackson [Sat, 28 Dec 2019 00:24:15 +0000 (00:24 +0000)]
README: Explain a wrinkle in &:include filename semantics

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: use oraw in a few more places
Ian Jackson [Thu, 26 Dec 2019 02:10:03 +0000 (02:10 +0000)]
generate: use oraw in a few more places

This gets rid of some open-coded `print O'.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Miscellaneous fixes and clarifications
Ian Jackson [Thu, 26 Dec 2019 01:49:49 +0000 (01:49 +0000)]
README: Miscellaneous fixes and clarifications

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Document restriction on $-doubling and lack of -quadrupling
Ian Jackson [Thu, 26 Dec 2019 02:03:07 +0000 (02:03 +0000)]
README: Document restriction on $-doubling and lack of -quadrupling

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoREADME: Move `Tables of file reference syntaxes' down
Ian Jackson [Thu, 26 Dec 2019 01:48:38 +0000 (01:48 +0000)]
README: Move `Tables of file reference syntaxes' down

This is more of an appendix or addendum.  It should come after the
complete description of the substitution syntax.

Pure motion.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoBig incompatible change: Rename `Subdir' to `Dir'
Ian Jackson [Thu, 26 Dec 2019 01:40:09 +0000 (01:40 +0000)]
Big incompatible change: Rename `Subdir' to `Dir'

We want completion to be easy, and we have Suffix now.  `Dir' is as
good as `Subdir' I think (and a bit shorter).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Fix messages resulting from bad directive arguments
Ian Jackson [Thu, 26 Dec 2019 01:32:43 +0000 (01:32 +0000)]
Error handling: Fix messages resulting from bad directive arguments

"Unknown directive" is not necessarily accurate; another possibility
is that the directive is known but didn't match the parsing regexp
because of problems with the arguments.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Nested scope: Change `Eval' to `eval'
Ian Jackson [Thu, 26 Dec 2019 01:33:01 +0000 (01:33 +0000)]
generate: Nested scope: Change `Eval' to `eval'

This is the nesting kind name.  But it also appears in error messages
where it ought not to be capitalised.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Nested scope: Change `Macro' to `macro'
Ian Jackson [Thu, 26 Dec 2019 01:32:36 +0000 (01:32 +0000)]
generate: Nested scope: Change `Macro' to `macro'

This is the nesting kind name.  But it also appears in error messages
where it ought not to be capitalised.

We'll change `Eval' in a moment.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Trim the `bad escape' message.e
Ian Jackson [Sat, 28 Dec 2019 00:28:03 +0000 (00:28 +0000)]
Error handling: Trim the `bad escape' message.e

Do not print the whole line, only the next 5 chars (say) - and, also,
not any newlines.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Better reporting of nest-related errors
Ian Jackson [Sat, 28 Dec 2019 01:04:43 +0000 (01:04 +0000)]
Error handling: Better reporting of nest-related errors

Track `$what' which is a kind of example for the error message.
Use it in error messages.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Often say `subdirmk' rather than `$0'
Ian Jackson [Sat, 28 Dec 2019 00:27:58 +0000 (00:27 +0000)]
Error handling: Often say `subdirmk' rather than `$0'

The latter is generally a path (`.../generate') and may be confusing.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Replace or update many calls to `die'
Ian Jackson [Sat, 28 Dec 2019 00:27:13 +0000 (00:27 +0000)]
Error handling: Replace or update many calls to `die'

To conform to new approach.

The `ending wrong kind of nest' error will be dealt with in a moment.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoError handling: Provide err and ddbl_only, and an internal spec
Ian Jackson [Sat, 28 Dec 2019 00:26:16 +0000 (00:26 +0000)]
Error handling: Provide err and ddbl_only, and an internal spec

No callers of these yet.  The spec is honoured in the breach.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Make @nest always be nonempty
Ian Jackson [Thu, 26 Dec 2019 01:04:58 +0000 (01:04 +0000)]
generate: Make @nest always be nonempty

No outward functional change, but makes the error handling
etc. slightly simpler.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Do not tolerate unclosed nested scopes at EOF
Ian Jackson [Sat, 28 Dec 2019 00:51:43 +0000 (00:51 +0000)]
generate: Do not tolerate unclosed nested scopes at EOF

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMacro assistance part 2 - syntax for $(eval $(call...))
Ian Jackson [Tue, 24 Dec 2019 23:04:58 +0000 (23:04 +0000)]
Macro assistance part 2 - syntax for $(eval $(call...))

This can be used to call a macro defined with &:macro.  In combination
these provide a more reasonable macro facility than make's.

Specifically:

* Document the new facility.
* Motivate it in the README.
* Provide the new @nest kind for &${  }, which uses $ddbl as
  a counter to count { and }.
* Implement the {}-counting and nesting end in the main parsing
  loop.  (We must now search for things besides $esc.)
* In extract-doctest, provide a slightly adhoc special case for
  understanding ${eval ...} as an expansion text in the README.
  And do not attempt to test &${ } when already $-doubling.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMacro assistance part 1 - macro directive
Ian Jackson [Sat, 28 Dec 2019 00:36:50 +0000 (00:36 +0000)]
Macro assistance part 1 - macro directive

Define the &:macro directive, which is a dollar-doubled version of
make's own `define'.

We must introuce a new concept of `nesting', for when "the content of
the construct is $-doubled" in the words of the README.  The
implementation is in the main process_input_mk function: it is a
multi-line scope of some kind with an ad-hoc ending condition, and its
own dollar-doubling setting.

We will also want a convenient syntax for $(eval $(call...)), which
we're going to introduce in a moment.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agodoctests: Rename `desc' etc. in extract-doctest from `rubric'
Ian Jackson [Fri, 27 Dec 2019 18:26:11 +0000 (18:26 +0000)]
doctests: Rename `desc' etc. in extract-doctest from `rubric'

This isn't a rubric, it is a description of a particular test entry.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agodoctests: Improve entry description filter
Ian Jackson [Tue, 24 Dec 2019 16:05:49 +0000 (16:05 +0000)]
doctests: Improve entry description filter

This makes the decriptive text more aposite in some situations.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoDollar doubling feature
Ian Jackson [Wed, 25 Dec 2019 23:29:40 +0000 (23:29 +0000)]
Dollar doubling feature

This makes it easier to write certain rules commands, and macros
involving eval.  Further enhancements will follow, but for now:

* Document the new facility, including the &-escapes to turn it on and
  off, its effect, and the three within-doubling don't-double escapes.

* Implementation.  Specifically:
   - Rename od to oud (`undoubled').
   - Provide od which does double things if $ddbl (a global) is set.
   - Implement the escapes, and add some error checks.
   - Change `od' to `oud' in `&\$', so that that always produces an
     undoubled $.

* Enhance extract-doctest:
   - Set $e->{DD} to say if it's in `while dollar doubling'.
   - Filter out such entries from the `normal' test - they are not
     legal outside dollar-doubling.
   - Add a dollar-doubling test which includes versions of all
     the normal tests as well as the dollar-doubling ones, and
     which dollar-doubles the outputs when appropriate.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agotests/filter/.gitignore: Ignore all .tmp
Ian Jackson [Thu, 26 Dec 2019 00:26:55 +0000 (00:26 +0000)]
tests/filter/.gitignore: Ignore all .tmp

Rather than trying to list them all.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Introduce oraw
Ian Jackson [Wed, 25 Dec 2019 23:45:32 +0000 (23:45 +0000)]
generate: Introduce oraw

Replace all other calls to `o' with `oraw'.  This ensures we
have no stray calls.

It elminates an anomaly, namely that calls outside process_input_mk
would rely on the $buffering_output variable which is set only there.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agogenerate: Introduce od
Ian Jackson [Wed, 25 Dec 2019 23:31:13 +0000 (23:31 +0000)]
generate: Introduce od

Replace every call to `o' in process_input_mk (the main filtering
routine) with a call to `od', which is going to be the dollar-doubled
output variant when we add the dollar doubling feature.

For now it just does the same as `o'.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>