Commit Graph
16 Commits
Author SHA1 Message Date
sneeker 9537254533 feat(configh): generate a guarded C header from probe results
Emits the project name and the HAVE_ and SIZEOF_ defines from what the probes
actually found, behind an include guard derived from the output path.
2022-06-05 22:51:52 +00:00
sneeker 3e7afc520e feat(probe): detect headers, functions, symbols, sizeof and pkg-config
Compiles and links throwaway programs to answer each check, and shells out to
pkg-config for cflags and libs. Results are memoised on the toolchain.
2022-06-03 09:35:23 +00:00
sneeker 78adab8c49 feat(exec): spawn subprocesses and capture stdout and status
Argv-vector execution with no shell in the path, so arguments containing
spaces or quotes need no escaping.
2022-06-01 08:37:55 +00:00
sneeker 38759f5e61 feat(parse): parse the grammar with recursive descent
Turns tokens into the AST, and consults suggest at each failure point so an
unknown declaration or field offers the nearest valid name.
2022-05-30 01:11:45 +00:00
sneeker a629b2a967 feat(ast): model statements, blocks and nested conditionals
Keeps written order, so a later branch can observe the result of a check that
appeared earlier in the file.
2022-05-29 08:59:55 +00:00
sneeker 4d26b548ba feat(lexer): tokenise build files with a span on every token
Words, strings, braces and comments, each carrying its source range, so an
error points at the offending token rather than the whole line.
2022-05-27 13:59:46 +00:00
sneeker 53ac3ffb4c feat(types): define resolved project, target and rule records
Targets carry sources, includes, flags and uses; rule instances carry resolved
inputs and outputs. This is the shape every later stage consumes.
2022-05-26 00:17:18 +00:00
sneeker c490488423 feat(suggest): rank near-miss names by edit distance
Levenshtein with a cutoff, returning the closest valid name at a position, or
nothing when no candidate is close enough.
2022-05-25 15:17:54 +00:00
sneeker b48cd708a4 feat(json): emit JSON with correct control-character escaping
So generated output survives paths containing spaces, quotes or backslashes.
2022-05-23 21:14:56 +00:00
sneeker 598ccfd4c0 feat(glob): expand source patterns without shelling out
Matches *, ? and ** against directory entries directly, so src/**/*.c
resolves identically regardless of the shell.
2022-05-21 21:37:43 +00:00
sneeker dfa033fea4 feat(fs): add recursive mkdir, whole-file IO and mtime reads
Path joining, read, write, is_dir and mtime, used by every later stage that
touches disk.
2022-05-21 12:14:44 +00:00
sneeker 79ed836641 feat(ident): normalise names into C macro identifiers
Uppercases, replaces non-alphanumerics with underscores, and derives the
HAVE_X and SIZEOF_X forms the generated header uses.
2022-05-20 03:45:44 +00:00
sneeker c42ff512d1 feat(diag): render errors with a caret and the offending line
Formats file:line:col, re-reads the source to print the line, underlines the
span and leaves a slot for a suggestion.
2022-05-18 08:54:32 +00:00
sneeker 71a8aaa436 feat(style): gate ANSI colour on tty detection
One wrapper per colour plus a padding helper, all no-ops when stdout is not a
terminal, so piped output and CI logs stay readable.
2022-05-17 19:36:28 +00:00
sneeker 58f5aa0f98 feat(span): track byte ranges so errors can point into source
Span.t carries file, offset and length, with join to merge two spans and a
none sentinel for synthesised nodes. Every token and node gets one.
2022-05-17 08:50:46 +00:00
sneeker d407f9eb45 build: add dune project skeleton and library stanza
The meow library against unix, plus ignore rules for _build, generated
sources and the meowc symlink.
2022-05-16 09:42:00 +00:00