# HG changeset patch
# User Mychaela Falconia <falcon@freecalypso.org>
# Date 1589508129 0
# Node ID 8123259c7f14e780427526fa484361c617bb1df6
# Parent  14f8a71286c5b83a77ce0a2a96bfc2b1e4472943
helpers/makeline imported from Selenite

diff -r 14f8a71286c5 -r 8123259c7f14 .hgignore
--- /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$
diff -r 14f8a71286c5 -r 8123259c7f14 helpers/Makefile
--- /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}
diff -r 14f8a71286c5 -r 8123259c7f14 helpers/makeline.c
--- /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);
+}