# HG changeset patch # User Mychaela Falconia # Date 1474923193 0 # Node ID 05945a9b9ddaea746a13369f876ba9eefee5bdfa # Parent 82ae0ab1ff42609ad10b0df10fa1d7464077a058 makeline helper written diff -r 82ae0ab1ff42 -r 05945a9b9dda .hgignore --- a/.hgignore Mon Sep 26 03:34:51 2016 +0000 +++ b/.hgignore Mon Sep 26 20:53:13 2016 +0000 @@ -1,3 +1,4 @@ syntax: regexp ^build- +^helpers/makeline$ diff -r 82ae0ab1ff42 -r 05945a9b9dda helpers/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpers/Makefile Mon Sep 26 20:53:13 2016 +0000 @@ -0,0 +1,11 @@ +CC= gcc +CFLAGS= -O2 +PROGS= makeline + +all: ${PROGS} + +makeline: makeline.c + ${CC} ${CFLAGS} -o $@ $@.c + +clean: + rm -f ${PROGS} diff -r 82ae0ab1ff42 -r 05945a9b9dda helpers/makeline.c --- /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 +#include +#include +#include + +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'); +}