FreeCalypso > hg > ffs-editor
changeset 3:8123259c7f14
helpers/makeline imported from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 15 May 2020 02:02:09 +0000 |
parents | 14f8a71286c5 |
children | 7ed24ddc5c2a |
files | .hgignore helpers/Makefile helpers/makeline.c |
diffstat | 3 files changed, 92 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Fri May 15 02:02:09 2020 +0000 @@ -0,0 +1,5 @@ +syntax: regexp + +^build- + +^helpers/makeline$
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpers/Makefile Fri May 15 02:02:09 2020 +0000 @@ -0,0 +1,11 @@ +CC= gcc +CFLAGS= -O2 +PROGS= makeline + +all: ${PROGS} + +makeline: makeline.c + ${CC} ${CFLAGS} -o $@ $@.c + +clean: + rm -f ${PROGS}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpers/makeline.c Fri May 15 02:02:09 2020 +0000 @@ -0,0 +1,76 @@ +/* + * This helper utility for the FreeCalypso Selenite 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); +}