FreeCalypso > hg > fc-tourmaline
diff helpers/makeline.c @ 9:1fb47f5b597a
helpers: import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 07:01:13 +0000 |
parents | |
children | 775dba605f33 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpers/makeline.c Fri Oct 16 07:01:13 2020 +0000 @@ -0,0 +1,76 @@ +/* + * This helper utility for the FreeCalypso Magnetite build system + * emits potentially long generated Makefile lines, breaking them into + * multiple lines with backslashes. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> + +int is_cmd, equ_or_colon, extra_indent; +int linelen; + +main(argc, argv) + char **argv; +{ + char **ap; + + if (argc < 4) { + fprintf(stderr, "error: too few arguments\n", argv[0]); + exit(1); + } + if (!strcmp(argv[1], "def")) { + is_cmd = 0; + equ_or_colon = '='; + extra_indent = 0; + } else if (!strcmp(argv[1], "dep")) { + is_cmd = 0; + equ_or_colon = ':'; + extra_indent = 1; + } else if (!strcmp(argv[1], "cmd")) { + is_cmd = 1; + extra_indent = 1; + } else { + fprintf(stderr, "error: line type \"%s\" not known\n", argv[1]); + exit(1); + } + if (is_cmd) { + putchar('\t'); + linelen = 8; + } else + linelen = 0; + fputs(argv[2], stdout); + linelen += strlen(argv[2]); + if (is_cmd) { + putchar(' '); + linelen++; + } else { + putchar(equ_or_colon); + linelen++; + putchar('\t'); + do + linelen++; + while (linelen & 7); + } + fputs(argv[3], stdout); + linelen += strlen(argv[3]); + for (ap = argv + 4; *ap; ap++) { + if (linelen + 1 + strlen(*ap) <= 78) { + putchar(' '); + linelen++; + } else { + fputs(" \\\n\t", stdout); + linelen = 8; + if (extra_indent) { + fputs(" ", stdout); + linelen += 4; + } + } + fputs(*ap, stdout); + linelen += strlen(*ap); + } + putchar('\n'); + exit(0); +}