From cc165f4be9a6ea8f77ff4533786bcddde1d13fdf Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 29 Jan 2019 17:20:00 -0800 Subject: [PATCH] maketab: support build systems with read-only source. If your generated files are considered outputs that live elsewhere, you need a way to tell maketab where ytab.h actually is. Specifically, I'm trying to avoid checking in generated files in Android's AOSP tree's copy of one-true-awk. --- makefile | 2 +- maketab.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/makefile b/makefile index 3f3c3c2..a4f1b8a 100644 --- a/makefile +++ b/makefile @@ -67,7 +67,7 @@ y%.c y%.h: awk.h proto.h awkgram.y ytab.h: ytab.c proctab.c: maketab - ./maketab >proctab.c + ./maketab ytab.h >proctab.c maketab: ytab.h maketab.c $(CC) $(CFLAGS) maketab.c -o maketab diff --git a/maketab.c b/maketab.c index bb8e317..dbe3d24 100644 --- a/maketab.c +++ b/maketab.c @@ -125,8 +125,12 @@ int main(int argc, char *argv[]) for (i = SIZE; --i >= 0; ) names[i] = ""; - if ((fp = fopen("ytab.h", "r")) == NULL) { - fprintf(stderr, "maketab can't open ytab.h!\n"); + if (argc != 2) { + fprintf(stderr, "usage: maketab YTAB_H\n"); + exit(1); + } + if ((fp = fopen(argv[1], "r")) == NULL) { + fprintf(stderr, "maketab can't open %s!\n", argv[1]); exit(1); } printf("static char *printname[%d] = {\n", SIZE);