build: remove ccdv, use kernel quiet/verbose mechanism

Use the quiet/verbose mechanism found in kernel tools, without
relying on the special tool "ccdv"

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
diff --git a/Makefile b/Makefile
index 53fa81a..9d538a9 100644
--- a/Makefile
+++ b/Makefile
@@ -170,11 +170,11 @@
 endif
 
 ifeq ($(strip $(V)),false)
-	QUIET=@$(PWD)/build/ccdv
-	HOST_PROGS=build/ccdv
+	QUIET=@
+	ECHO=@echo
 else
 	QUIET=
-	HOST_PROGS=
+	ECHO= @\#
 endif
 
 # if DEBUG is enabled, then we do not strip or optimize
@@ -219,48 +219,57 @@
 UDEV_RULES += udev/rules-end
 
 
-all: ccdv $(PCCARDCTL) $(PCMCIA_CHECK_BROKEN_CIS) $(PCMCIA_SOCKET_STARTUP_BUILD) udevrules
+all: $(PCCARDCTL) $(PCMCIA_CHECK_BROKEN_CIS) $(PCMCIA_SOCKET_STARTUP_BUILD) $(UDEV_RULES_FILE)
 
-ccdv: build/ccdv
-build/ccdv: build/ccdv.c
-	@echo "Building ccdv"
-	@$(HOSTCC) -O1 $< -o $@
-
-%.o : %.c ccdv
-	$(QUIET) $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
+%.o : %.c
+	$(ECHO) "  CC      " $@
+	$(QUIET) $(CC) -c $(CFLAGS) $< -o $@
 
 %.c %.h : %.y
-	$(YACC) $(YFLAGS) $<
-	mv y.tab.c $*.c
-	mv y.tab.h $*.h
+	$(ECHO) "  YACC    " $@
+	$(QUIET) $(YACC) $(YFLAGS) $<
+	$(QUIET) mv y.tab.c $*.c
+	$(QUIET) mv y.tab.h $*.h
 
 $(PCCARDCTL): $(LIBC) src/$(PCCARDCTL).o src/$(PCCARDCTL).c $(OBJS) $(HEADERS)
+	$(ECHO) "  LD      " $@
 	$(QUIET) $(LD) $(LDFLAGS) -o $@ $(CRT0) src/$(PCCARDCTL).o $(LIB_OBJS) $(ARCH_LIB_OBJS)
+	$(ECHO) "  STRIP   " $@
 	$(QUIET) $(STRIPCMD) $@
 
 $(PCMCIA_CHECK_BROKEN_CIS): $(LIBC) src/$(PCMCIA_CHECK_BROKEN_CIS).o src/read-cis.o $(OBJS) $(HEADERS)
+	$(ECHO) "  LD      " $@
 	$(QUIET) $(LD) $(LDFLAGS) -o $@ $(CRT0) src/$(PCMCIA_CHECK_BROKEN_CIS).o src/read-cis.o $(LIB_PLAIN_OBJS) $(ARCH_LIB_OBJS)
+	$(ECHO) "  STRIP   " $@
 	$(QUIET) $(STRIPCMD) $@
 
 $(PCMCIA_SOCKET_STARTUP): $(LIBC) src/startup.o src/yacc_config.o src/lex_config.o $(OBJS) $(HEADERS)
+	$(ECHO) "  LD      " $@
 	$(QUIET) $(LD) $(LDFLAGS) -o $@ $(CRT0) src/startup.o src/yacc_config.o src/lex_config.o $(LIB_OBJS) $(ARCH_LIB_OBJS)
+	$(ECHO) "  STRIP   " $@
 	$(QUIET) $(STRIPCMD) $@
 
 yacc_config.o lex_config.o: %.o: %.c
-	$(CC) -c -MD -O -pipe $(CPPFLAGS) $<
+	$(ECHO) "  CC      " $@
+	$(QUIET) $(CC) -c -MD -O -pipe $(CFLAGS) $<
 
-debugtools: ccdv $(CBDUMP) $(CISDUMP)
+debugtools: $(CBDUMP) $(CISDUMP)
 
 $(CBDUMP): $(LIBC) debug/cbdump.o
+	$(ECHO) "  LD      " $@
 	$(QUIET) $(LD) $(LDFLAGS) -o $@ $(CRT0) debug/$(CBDUMP).o $(LIB_PCI_OBJS) $(ARCH_LIB_OBJS)
+	$(ECHO) "  STRIP   " $@
 	$(QUIET) $(STRIPCMD) $@
 
 $(CISDUMP): $(LIBC) src/read-cis.o debug/parse_cis.o debug/dump_cis.o
+	$(ECHO) "  LD      " $@
 	$(QUIET) $(LD) $(LDFLAGS) -o $@ $(CRT0) debug/$(CISDUMP).o src/read-cis.o debug/parse_cis.o $(LIB_OBJS) $(ARCH_LIB_OBJS)
+	$(ECHO) "  STRIP   " $@
 	$(QUIET) $(STRIPCMD) $@
 
-udevrules:
-	cat $(UDEV_RULES) | sed -e "s#__UDEVHELPERDIR__#${udevhelperdir}#g" > $(UDEV_RULES_FILE)
+$(UDEV_RULES_FILE): $(UDEV_RULES)
+	$(ECHO) "  SED     " $@
+	@cat $(UDEV_RULES) | sed -e "s#__UDEVHELPERDIR__#${udevhelperdir}#g" > $@
 
 clean:
 	-find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print \
@@ -269,7 +278,6 @@
 	-rm -f $(CBDUMP) $(CISDUMP)
 	-rm -f src/yacc_config.c src/yacc_config.d src/lex_config.c src/lex_config.d src/yacc_config.h
 	-rm -f udev/60-pcmcia.rules
-	-rm -f build/ccdv
 
 install-hotplug:
 	$(INSTALL) -d $(DESTDIR)$(hotplugdir)
diff --git a/build/ccdv.c b/build/ccdv.c
deleted file mode 100644
index e3ae9da..0000000
--- a/build/ccdv.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/* ccdv.c
- *
- * Copyright (C) 2002-2003, by Mike Gleason, NcFTP Software.
- * All Rights Reserved.
- *
- * Licensed under the GNU Public License.
- */
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#define SETCOLOR_SUCCESS	(gANSIEscapes ? "\033\1331;32m" : "")
-#define SETCOLOR_FAILURE	(gANSIEscapes ? "\033\1331;31m" : "")
-#define SETCOLOR_WARNING	(gANSIEscapes ? "\033\1331;33m" : "")
-#define SETCOLOR_NORMAL		(gANSIEscapes ? "\033\1330;39m" : "")
-
-#define TEXT_BLOCK_SIZE 8192
-#define INDENT 2
-
-#define TERMS "vt100:vt102:vt220:vt320:xterm:xterm-color:ansi:linux:scoterm:scoansi:dtterm:cons25:cygwin"
-
-size_t gNBufUsed = 0, gNBufAllocated = 0;
-char *gBuf = NULL;
-int gCCPID;
-char gAction[200] = "";
-char gTarget[200] = "";
-char gAr[32] = "";
-char gArLibraryTarget[64] = "";
-int gDumpCmdArgs = 0;
-char gArgsStr[1000];
-int gColumns = 80;
-int gANSIEscapes = 0;
-int gExitStatus = 95;
-
-static void DumpFormattedOutput(void)
-{
-	char *cp;
-	char spaces[8 + 1] = "        ";
-	char *saved;
-	int curcol;
-	int i;
-
-	curcol = 0;
-	saved = NULL;
-	for (cp = gBuf + ((gDumpCmdArgs == 0) ? strlen(gArgsStr) : 0); ; cp++) {
-		if (*cp == '\0') {
-			if (saved != NULL) {
-				cp = saved;
-				saved = NULL;
-			} else break;
-		}
-		if (*cp == '\r')
-			continue;
-		if (*cp == '\t') {
-			saved = cp + 1;
-			cp = spaces + 8 - (8 - ((curcol - INDENT - 1) % 8));
-		}
-		if (curcol == 0) {
-			for (i = INDENT; --i >= 0; )
-				putchar(' ');
-			curcol = INDENT;
-		}
-		putchar(*cp);
-		if (++curcol == (gColumns - 1)) {
-			putchar('\n');
-			curcol = 0;
-		} else if (*cp == '\n')
-			curcol = 0;
-	}
-	free(gBuf);
-}	/* DumpFormattedOutput */
-
-
-
-/* Difftime(), only for timeval structures.  */
-static void TimeValSubtract(struct timeval *tdiff, struct timeval *t1, struct timeval *t0)
-{
-	tdiff->tv_sec = t1->tv_sec - t0->tv_sec;
-	tdiff->tv_usec = t1->tv_usec - t0->tv_usec;
-	if (tdiff->tv_usec < 0) {
-		tdiff->tv_sec--;
-		tdiff->tv_usec += 1000000;
-	}
-}	/* TimeValSubtract */
-
-
-
-static void Wait(void)
-{
-	int pid2, status;
-
-	do {
-		status = 0;
-		pid2 = (int) waitpid(gCCPID, &status, 0);
-	} while (((pid2 >= 0) && (! WIFEXITED(status))) || ((pid2 < 0) && (errno == EINTR)));
-	if (WIFEXITED(status))
-		gExitStatus = WEXITSTATUS(status);
-}	/* Wait */
-
-
-
-static int SlurpProgress(int fd)
-{
-	char s1[71];
-	char *newbuf;
-	int nready;
-	size_t ntoread;
-	ssize_t nread;
-	struct timeval now, tnext, tleft;
-	fd_set ss;
-	fd_set ss2;
-	const char *trail = "/-\\|", *trailcp;
-
-	trailcp = trail;
-	snprintf(s1, sizeof(s1), "%s%s%s... ", gAction, gTarget[0] ? " " : "", gTarget);
-	printf("\r%-70s%-9s", s1, "");
-	fflush(stdout);
-
-	gettimeofday(&now, NULL);
-	tnext = now;
-	tnext.tv_sec++;
-	tleft.tv_sec = 1;
-	tleft.tv_usec = 0;
-	FD_ZERO(&ss2);
-	FD_SET(fd, &ss2);
-	for(;;) {
-		if (gNBufUsed == (gNBufAllocated - 1)) {
-			if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) {
-				perror("ccdv: realloc");
-				return (-1);
-			}
-			gNBufAllocated += TEXT_BLOCK_SIZE;
-			gBuf = newbuf;
-		}
-		for (;;) {
-			ss = ss2;
-			nready = select(fd + 1, &ss, NULL, NULL, &tleft);
-			if (nready == 1)
-				break;
-			if (nready < 0) {
-				if (errno != EINTR) {
-					perror("ccdv: select");
-					return (-1);
-				}
-				continue;
-			}
-			gettimeofday(&now, NULL);
-			if ((now.tv_sec > tnext.tv_sec) || ((now.tv_sec == tnext.tv_sec) && (now.tv_usec >= tnext.tv_usec))) {
-				tnext = now;
-				tnext.tv_sec++;
-				tleft.tv_sec = 1;
-				tleft.tv_usec = 0;
-				printf("\r%-71s%c%-7s", s1, *trailcp, "");
-				fflush(stdout);
-				if (*++trailcp == '\0')
-					trailcp = trail;
-			} else {
-				TimeValSubtract(&tleft, &tnext, &now);
-			}
-		}
-		ntoread = (gNBufAllocated - gNBufUsed - 1);
-		nread = read(fd, gBuf + gNBufUsed, ntoread);
-		if (nread < 0) {
-			if (errno == EINTR)
-				continue;
-			perror("ccdv: read");
-			return (-1);
-		} else if (nread == 0) {
-			break;
-		}
-		gNBufUsed += nread;
-		gBuf[gNBufUsed] = '\0';
-	}
-	snprintf(s1, sizeof(s1), "%s%s%s: ", gAction, gTarget[0] ? " " : "", gTarget);
-	Wait();
-	if (gExitStatus == 0) {
-		printf("\r%-70s", s1);
-		printf("[%s%s%s]", ((gNBufUsed - strlen(gArgsStr)) < 4) ? SETCOLOR_SUCCESS : SETCOLOR_WARNING, "OK", SETCOLOR_NORMAL);
-		printf("%-5s\n", " ");
-	} else {
-		printf("\r%-70s", s1);
-		printf("[%s%s%s]", SETCOLOR_FAILURE, "ERROR", SETCOLOR_NORMAL);
-		printf("%-2s\n", " ");
-		gDumpCmdArgs = 1;	/* print cmd when there are errors */
-	}
-	fflush(stdout);
-	return (0);
-}	/* SlurpProgress */
-
-
-
-static int SlurpAll(int fd)
-{
-	char *newbuf;
-	size_t ntoread;
-	ssize_t nread;
-
-	printf("%s%s%s.\n", gAction, gTarget[0] ? " " : "", gTarget);
-	fflush(stdout);
-
-	for(;;) {
-		if (gNBufUsed == (gNBufAllocated - 1)) {
-			if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) {
-				perror("ccdv: realloc");
-				return (-1);
-			}
-			gNBufAllocated += TEXT_BLOCK_SIZE;
-			gBuf = newbuf;
-		}
-		ntoread = (gNBufAllocated - gNBufUsed - 1);
-		nread = read(fd, gBuf + gNBufUsed, ntoread);
-		if (nread < 0) {
-			if (errno == EINTR)
-				continue;
-			perror("ccdv: read");
-			return (-1);
-		} else if (nread == 0) {
-			break;
-		}
-		gNBufUsed += nread;
-		gBuf[gNBufUsed] = '\0';
-	}
-	Wait();
-	gDumpCmdArgs = (gExitStatus != 0);	/* print cmd when there are errors */
-	return (0);
-}	/* SlurpAll */
-
-
-
-static const char *Basename(const char *path)
-{
-	const char *cp;
-	cp = strrchr(path, '/');
-	if (cp == NULL)
-		return (path);
-	return (cp + 1);
-}	/* Basename */
-
-
-
-static const char * Extension(const char *path)
-{
-	const char *cp = path;
-	cp = strrchr(path, '.');
-	if (cp == NULL)
-		return ("");
-	// printf("Extension='%s'\n", cp);
-	return (cp);
-}	/* Extension */
-
-
-
-static void Usage(void)
-{
-	fprintf(stderr, "Usage: ccdv /path/to/cc CFLAGS...\n\n");
-	fprintf(stderr, "I wrote this to reduce the deluge Make output to make finding actual problems\n");
-	fprintf(stderr, "easier.  It is intended to be invoked from Makefiles, like this.  Instead of:\n\n");
-	fprintf(stderr, "\t.c.o:\n");
-	fprintf(stderr, "\t\t$(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n");
-	fprintf(stderr, "\nRewrite your rule so it looks like:\n\n");
-	fprintf(stderr, "\t.c.o:\n");
-	fprintf(stderr, "\t\t@ccdv $(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n\n");
-	fprintf(stderr, "ccdv 1.1.0 is Free under the GNU Public License.  Enjoy!\n");
-	fprintf(stderr, "  -- Mike Gleason, NcFTP Software <http://www.ncftp.com>\n");
-	exit(96);
-}	/* Usage */
-
-
-
-int main(int argc, char **argv)
-{
-	int pipe1[2];
-	int devnull;
-	char emerg[256];
-	int fd;
-	int nread;
-	int i;
-	int cc = 0, pch = 0;
-	const char *quote;
-
-	if (argc < 2)
-		Usage();
-
-	snprintf(gAction, sizeof(gAction), "Running %s", Basename(argv[1]));
-	memset(gArgsStr, 0, sizeof(gArgsStr));
-	for (i = 1; i < argc; i++) {
-		// printf("argv[%d]='%s'\n", i, argv[i]);
-		quote = (strchr(argv[i], ' ') != NULL) ? "\"" : "";
-		snprintf(gArgsStr + strlen(gArgsStr), sizeof(gArgsStr) - strlen(gArgsStr), "%s%s%s%s%s", (i == 1) ? "" : " ", quote, argv[i], quote, (i == (argc - 1)) ? "\n" : "");
-		if ((strcmp(argv[i], "-o") == 0) && ((i + 1) < argc)) {
-			if (strcasecmp(Extension(argv[i + 1]), ".o") != 0) {
-				strcpy(gAction, "Linking");
-				snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i + 1]));
-			}
-		} else if (strchr("-+", (int) argv[i][0]) != NULL) {
-			continue;
-		} else if (strncasecmp(Extension(argv[i]), ".c", 2) == 0) {
-			cc++;
-			snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i]));
-			// printf("gTarget='%s'\n", gTarget);
-		} else if ((strncasecmp(Extension(argv[i]), ".h", 2) == 0) && (cc == 0)) {
-			pch++;
-			snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i]));
-		} else if ((i == 1) && (strcmp(Basename(argv[i]), "ar") == 0)) {
-			snprintf(gAr, sizeof(gAr), "%s", Basename(argv[i]));
-		} else if ((gArLibraryTarget[0] == '\0') && (strcasecmp(Extension(argv[i]), ".a") == 0)) {
-			snprintf(gArLibraryTarget, sizeof(gArLibraryTarget), "%s", Basename(argv[i]));
-		}
-	}
-	if ((gAr[0] != '\0') && (gArLibraryTarget[0] != '\0')) {
-		strcpy(gAction, "Creating library");
-		snprintf(gTarget, sizeof(gTarget), "%s", gArLibraryTarget);
-	} else if (pch > 0) {
-		strcpy(gAction, "Precompiling");
-	} else if (cc > 0) {
-		strcpy(gAction, "Compiling");
-	}
-
-	if (pipe(pipe1) < 0) {
-		perror("ccdv: pipe");
-		exit(97);
-	}
-
-	(void) close(0);
-	devnull = open("/dev/null", O_RDWR, 00666);
-	if ((devnull != 0) && (dup2(devnull, 0) == 0))
-		close(devnull);
-
-	gCCPID = (int) fork();
-	if (gCCPID < 0) {
-		(void) close(pipe1[0]);
-		(void) close(pipe1[1]);
-		perror("ccdv: fork");
-		exit(98);
-	} else if (gCCPID == 0) {
-		/* Child */
-		(void) close(pipe1[0]);		/* close read end */
-		if (pipe1[1] != 1) {		/* use write end on stdout */
-			(void) dup2(pipe1[1], 1);
-			(void) close(pipe1[1]);
-		}
-		(void) dup2(1, 2);		/* use write end on stderr */
-		execvp(argv[1], argv + 1);
-		perror(argv[1]);
-		exit(99);
-	}
-
-	/* parent */
-	(void) close(pipe1[1]);		/* close write end */
-	fd = pipe1[0];			/* use read end */
-
-	gColumns = (getenv("COLUMNS") != NULL) ? atoi(getenv("COLUMNS")) : 80;
-	gANSIEscapes = (getenv("TERM") != NULL) && (strstr(TERMS, getenv("TERM")) != NULL);
-	gBuf = (char *) malloc(TEXT_BLOCK_SIZE);
-	if (gBuf == NULL) 
-		goto panic;
-	gNBufUsed = 0;
-	gNBufAllocated = TEXT_BLOCK_SIZE;
-	if (strlen(gArgsStr) < (gNBufAllocated - 1)) {
-		strcpy(gBuf, gArgsStr);
-		gNBufUsed = strlen(gArgsStr);
-	}
-
-	if (isatty(1)) {
-		if (SlurpProgress(fd) < 0)
-			goto panic;
-	} else {
-		if (SlurpAll(fd) < 0)
-			goto panic;
-	}
-	DumpFormattedOutput();
-	exit(gExitStatus);
-
-panic:
-	gDumpCmdArgs = 1;	/* print cmd when there are errors */
-	DumpFormattedOutput();
-	while ((nread = read(fd, emerg, (size_t) sizeof(emerg))) > 0)
-		(void) write(2, emerg, (size_t) nread);
-	Wait();
-	exit(gExitStatus);
-}	/* main */