view helpers/makeline.c @ 112:fdecfb3bd860

.../drv_app/r2d/r2d_*.c: LCD include case fixes from Magnetite R2D is not used in Selenite, but we strive to keep the two source trees in sync as much as possible to reduce the diffs.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 13 Oct 2018 16:56:22 +0000
parents e825175be40d
children
line wrap: on
line source

/*
 * 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);
}