FreeCalypso > hg > fc-magnetite
diff helpers/makeline.c @ 9:05945a9b9dda
makeline helper written
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 20:53:13 +0000 |
parents | |
children | 352f80da6813 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpers/makeline.c Mon Sep 26 20:53:13 2016 +0000 @@ -0,0 +1,75 @@ +/* + * 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'); +}