diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk')
3 files changed, 1854 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk.c b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk.c new file mode 100644 index 00000000..800a1121 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk.c @@ -0,0 +1,1063 @@ +/* + * genmk -- a program to make makefiles for PCCTS + * + * ANTLR 1.33MR23 + * Terence John Parr 1989 - 2000 + * Purdue University + * U of MN + */ + +#include <stdio.h> +#include <string.h> +#include "pcctscfg.h" /* be sensitive to what ANTLR/DLG call the files */ + +#ifdef VAXC +#define DIE return 0; +#define DONE return 1; +#else +#define DIE return 1; +#define DONE return 0; +#endif + +#ifndef require +#define require(expr, err) {if ( !(expr) ) fatal(err);} +#endif + +#define MAX_FILES 50 +#define MAX_CFILES 1600 +#define MAX_SFILES 50 +#define MAX_SORS 50 +#define MAX_CLASSES 50 + +char *RENAME_OBJ_FLAG="-o", + *RENAME_EXE_FLAG="-o"; + +char *dlg = "parser.dlg"; +char *err = "err.c"; +char *hdr = "stdpccts.h"; +char *tok = "tokens.h"; +char *mode = "mode.h"; +char *scan = "scan"; + +char ATOKENBUFFER_O[100]; +char APARSER_O[100]; +char ASTBASE_O[100]; +char PCCTSAST_O[100]; +char LIST_O[100]; +char DLEXERBASE_O[100]; + +/* Option flags */ +static char *project="t", *files[MAX_FILES], *classes[MAX_CLASSES]; +static char *cfiles[MAX_CFILES]; +static char *sfiles[MAX_SORS][MAX_SFILES],*sclasses[MAX_SORS]; +static int num_sfiles[MAX_SORS]; /*sorcerer files in group */ +static int num_sors = 0; /*sorcerer groups */ +static int num_files = 0; /* grammar files */ +static int num_cfiles = 0; /* additional C/C++ files */ +static int num_classes = 0; /* ANTLR classes */ +static int user_lexer = 0; +static char *user_token_types = NULL; +static int gen_CPP = 0; +static char *outdir="."; +static char *dlg_class = "DLGLexer"; +static int gen_trees = 0; +static int gen_hoist = 0; +static int nondef_comp = 0; /* 1=compiler is non default */ +static char *compilerCCC="CC"; +static char *compilerCC="cc"; +static char *pccts_path="/usr/local/pccts"; + +#ifdef __STDC__ +void help(void); +void mk(char *project, char **files, int n, int argc, char **argv); +void pfiles(char **files, int n, char *suffix); +void fatal(char *msg); +void warn(char *msg); +#else +void help(); +void mk(); +void pfiles(); +void fatal(); +void warn(); +#endif + +typedef struct _Opt { + char *option; + int arg; +#ifdef __cplusplus + void (*process)(...); +#else + void (*process)(); +#endif + char *descr; + } Opt; + +#ifdef __STDC__ +static void ProcessArgs(int, char **, Opt *); +#else +static void ProcessArgs(); +#endif + +static void +#ifdef __STDC__ +pProj(char *s, char *t ) +#else +pProj( s, t ) +char *s; +char *t; +#endif +{ + project = t; +} + +static void +#ifdef __STDC__ +pUL( char *s ) +#else +pUL( s ) +char *s; +#endif +{ + user_lexer = 1; +} + +static void +#ifdef __STDC__ +pCPP( char *s ) +#else +pCPP( s ) +char *s; +#endif +{ + gen_CPP = 1; +} + +static void +#ifdef __STDC__ +pUT( char *s, char *t ) +#else +pUT( s, t ) +char *s; +char *t; +#endif +{ + user_token_types = t; +} + +static void +#ifdef __STDC__ +pTrees( char *s ) +#else +pTrees( s ) +char *s; +#endif +{ + gen_trees = 1; +} + +static void +#ifdef __STDC__ +pHoist( char *s ) +#else +pHoist( s ) +char *s; +#endif +{ + gen_hoist = 1; +} + +static void +#ifdef __STDC__ +pSor( char *s ) +#else +pSor( s ) +char *s; +#endif +{ + require(num_sors<MAX_SORS, "exceeded max # of sorcerer groups"); + num_sors++; + pTrees(NULL); /* silently turn on tree generation */ +} + +static void +#ifdef __STDC__ +pSFiles( char *s, char *t ) +#else +pSFiles( s, t ) +char *s; +char *t; +#endif +{ + if (num_sors==0) + { + pSor(NULL); + warn("sorcerer input file before any '-sor' option"); + } + + require(num_sfiles[num_sors-1]<MAX_SFILES, + "exceeded max # of sorcerer input files"); + sfiles[num_sors-1][num_sfiles[num_sors-1]++] = t; +} + +static void +#ifdef __STDC__ +pCFiles( char *s, char *t ) +#else +pCFiles( s, t ) +char *s; +char *t; +#endif +{ + require(num_cfiles<MAX_CFILES, "exceeded max # of C/C++ input files"); + cfiles[num_cfiles++] = t; +} + +int +#ifdef __STDC__ +isKnownSuffix( char *s ) +#else +isKnownSuffix( s ) + char *s; +#endif +{ + if(s==NULL) return 0; + if (strcasecmp(s,".c")==0) return 1; + if (strcasecmp(s,".cc")==0) return 1; + if (strcasecmp(s,".cpp")==0) return 1; + if (strcasecmp(s,".cxx")==0) return 1; + if (strcasecmp(s,CPP_FILE_SUFFIX)==0) return 1; + if (strcasecmp(s,".sor")==0) return 2; + return 0; +} + +static void +#ifdef __STDC__ +pFile( char *s ) +#else +pFile( s ) +char *s; +#endif +{ + if ( *s=='-' ) + { + fprintf(stderr, "invalid option: '%s'; ignored...",s); + return; + } + switch(isKnownSuffix(strrchr(s,'.'))) + { + case 1: /* c/c++ */ + pCFiles("-cfiles",s); + return; + case 2: /* sorcerer */ + pSFiles("",s); + return; + default: /* grammar (ANTLR) */ + break; + } + require(num_files<MAX_FILES, "exceeded max # of input files"); + files[num_files++] = s; +} + +static void +#ifdef __STDC__ +pClass( char *s, char *t ) +#else +pClass( s, t ) +char *s; +char *t; +#endif +{ + if (num_sors==0) + { + require(num_classes<MAX_CLASSES, "exceeded max # of grammar classes"); + classes[num_classes++] = t; + } else + { + sclasses[num_sors-1] = t; /* one class per sorcerer group (last valid) */ + } +} + +static void +#ifdef __STDC__ +pDLGClass( char *s, char *t ) +#else +pDLGClass( s, t ) +char *s; +char *t; +#endif +{ + if ( !gen_CPP ) { + fprintf(stderr, "-dlg-class makes no sense without C++ mode; ignored..."); + } + else dlg_class = t; +} + +static void +#ifdef __STDC__ +pOdir( char *s, char *t ) +#else +pOdir( s, t ) +char *s; +char *t; +#endif +{ + outdir = t; +} + +static void +#ifdef __STDC__ +pHdr( char *s, char *t ) +#else +pHdr( s, t ) +char *s; +char *t; +#endif +{ + hdr = t; +} + +static void +#ifdef __STDC__ +pCompiler( char *s, char *t ) +#else +pCompiler( s, t ) +char *s; +char *t; +#endif +{ + compilerCCC = t; + compilerCC = t; + nondef_comp = 1; +} + +static void +#ifdef __STDC__ +ppccts_path( char *s, char *t ) +#else +ppccts_path( s, t ) +char *s; +char *t; +#endif +{ + pccts_path = t; +} + +Opt options[] = { + { "-CC", 0, pCPP, "Generate C++ output"}, + { "-class", 1, pClass, "Name of a grammar class defined in grammar (if C++)"}, + { "-dlg-class", 1,pDLGClass,"Name of DLG lexer class (default=DLGLexer) (if C++)"}, + { "-header", 1,pHdr, "Name of ANTLR standard header info (default=no file)"}, + { "-o", 1, pOdir, "Directory where output files should go (default=\".\")"}, + { "-project", 1, pProj, "Name of executable to create (default=t)"}, + { "-token-types", 1, pUT, "Token types are in this file (don't use tokens.h)"}, + { "-trees", 0, pTrees, "Generate ASTs"}, + { "-user-lexer", 0, pUL, "Do not create a DLG-based scanner"}, + { "-mrhoist",0,pHoist, "Maintenance release style hoisting"}, + { "-cfiles",1,pCFiles, "Additional files in C or C++ to compile"}, + { "-sor",0,pSor, "Start of sorcerer group"}, + { "-pccts_path",1,ppccts_path, + "Path for $PCCTS directory (default is /usr/local/pccts)"}, + { "-compiler",1,pCompiler, + "Default compiler (default is CC/cc)"}, + { "*", 0,pFile, "" }, /* anything else is a file */ + { NULL, 0, NULL, NULL } +}; + +#ifdef __STDC__ +extern char *DIR(void); +#else +extern char *DIR(); +#endif + +#ifdef __STDC__ +int main(int argc, char **argv) +#else +int main(argc, argv) +int argc; +char **argv; +#endif +{ + int i; + + if ( argc == 1 ) { help(); DIE; } + for(i=0;i<MAX_SORS;i++) num_sfiles[i]=0; + + ProcessArgs(argc-1, &(argv[1]), options); + + strcpy(ATOKENBUFFER_O, ATOKENBUFFER_C); + ATOKENBUFFER_O[strlen(ATOKENBUFFER_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(ATOKENBUFFER_O, OBJ_FILE_SUFFIX); + strcpy(APARSER_O, APARSER_C); + APARSER_O[strlen(APARSER_O)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(APARSER_O, OBJ_FILE_SUFFIX); + + strcpy(ASTBASE_O, ASTBASE_C); + ASTBASE_O[strlen(ASTBASE_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(ASTBASE_O, OBJ_FILE_SUFFIX); + + strcpy(PCCTSAST_O, PCCTSAST_C); + PCCTSAST_O[strlen(PCCTSAST_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(PCCTSAST_O, OBJ_FILE_SUFFIX); + + strcpy(LIST_O, LIST_C); + LIST_O[strlen(LIST_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(LIST_O, OBJ_FILE_SUFFIX); + + strcpy(DLEXERBASE_O, DLEXERBASE_C); + DLEXERBASE_O[strlen(DLEXERBASE_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(DLEXERBASE_O, OBJ_FILE_SUFFIX); + + if ( num_files == 0 ) fatal("no grammar files specified; exiting..."); + if ( !gen_CPP && num_classes>0 ) { + warn("can't define classes w/o C++ mode; turning on C++ mode...\n"); + gen_CPP=1; + } + if (!gen_CPP && num_sors) { + warn("can't define sorcerer group in C mode (yet); turning on C++ mode...\n"); + gen_CPP=1; + } + if ( gen_CPP && num_classes==0 ) { + fatal("must define classes >0 grammar classes in C++ mode\n"); + } + + mk(project, files, num_files, argc, argv); + DONE; +} + +#ifdef __STDC__ +void help(void) +#else +void help() +#endif +{ + Opt *p = options; + static char buf[1000+1]; + + fprintf(stderr, "genmk [options] f1.g ... fn.g\n"); + while ( p->option!=NULL && *(p->option) != '*' ) + { + buf[0]='\0'; + if ( p->arg ) sprintf(buf, "%s ___", p->option); + else strcpy(buf, p->option); + fprintf(stderr, "\t%-16s %s\n", buf, p->descr); + p++; + } +} + +#ifdef __STDC__ +void mk(char *project, char **files, int n, int argc, char **argv) +#else +void mk(project, files, n, argc, argv) +char *project; +char **files; +int n; +int argc; +char **argv; +#endif +{ + int i,j; + + printf("#\n"); + printf("# PCCTS makefile for: "); + pfiles(files, n, NULL); + printf("\n"); + printf("#\n"); + printf("# Created from:"); + for (i=0; i<argc; i++) printf(" %s", argv[i]); + printf("\n"); + printf("#\n"); + printf("# PCCTS release 1.33MR23\n"); + printf("# Project: %s\n", project); + if ( gen_CPP ) printf("# C++ output\n"); + else printf("# C output\n"); + if ( user_lexer ) printf("# User-defined scanner\n"); + else printf("# DLG scanner\n"); + if ( user_token_types!=NULL ) printf("# User-defined token types in '%s'\n", user_token_types); + else printf("# ANTLR-defined token types\n"); + printf("#\n"); +/*********** + printf(".SUFFIXES:\n.SUFFIXES:\t.o .cpp .c .h .g .i .dlg .sor\n"); + ***********/ + if ( user_token_types!=NULL ) { + printf("# Make sure #tokdefs directive in ANTLR grammar lists this file:\n"); + printf("TOKENS = %s", user_token_types); + } + else printf("TOKENS = %stokens.h", DIR()); + printf("\n"); + printf("#\n"); + printf("# The following filenames must be consistent with ANTLR/DLG flags\n"); + printf("DLG_FILE = %s%s\n", DIR(), dlg); + printf("ERR = %serr\n", DIR()); + if ( strcmp(hdr,"stdpccts.h")!=0 ) printf("HDR_FILE = %s%s\n", DIR(), hdr); + else printf("HDR_FILE =\n"); + if ( !gen_CPP ) printf("MOD_FILE = %s%s\n", DIR(), mode); + if ( !gen_CPP ) printf("SCAN = %s\n", scan); + else printf("SCAN = %s%s\n", DIR(), dlg_class); + + printf("PCCTS = %s\n",pccts_path); + printf("ANTLR_H = $(PCCTS)%sh\n", DirectorySymbol); + if (num_sors>0) { + printf("SOR_H = $(PCCTS)%ssorcerer%sh\n", DirectorySymbol, DirectorySymbol); + printf("SOR_LIB = $(PCCTS)%ssorcerer%slib\n", + DirectorySymbol, DirectorySymbol); + } + printf("BIN = $(PCCTS)%sbin\n", DirectorySymbol); + printf("ANTLR = $(BIN)%santlr\n", DirectorySymbol); + printf("DLG = $(BIN)%sdlg\n", DirectorySymbol); + if (num_sors>0) printf("SOR = $(BIN)%ssor\n", DirectorySymbol); + printf("CFLAGS = -I. -I$(ANTLR_H)"); + if (num_sors>0) printf(" -I$(SOR_H)"); + if ( strcmp(outdir, ".")!=0 ) printf(" -I%s", outdir); + printf(" $(COTHER)"); + printf("\n"); + printf("AFLAGS ="); + if ( strcmp(outdir,".")!=0 ) printf(" -o %s", outdir); + if ( user_lexer ) printf(" -gx"); + if ( gen_CPP ) printf(" -CC"); + if ( strcmp(hdr,"stdpccts.h")!=0 ) printf(" -gh %s", hdr); + if ( gen_trees ) printf(" -gt"); + if ( gen_hoist ) { + printf(" -mrhoist on") ; + } else { + printf(" -mrhoist off"); + }; + printf(" $(AOTHER)"); + printf("\n"); + printf("DFLAGS = -C2 -i"); + if ( gen_CPP ) printf(" -CC"); + if ( strcmp(dlg_class,"DLGLexer")!=0 ) printf(" -cl %s", dlg_class); + if ( strcmp(outdir,".")!=0 ) printf(" -o %s", outdir); + printf(" $(DOTHER)"); + printf("\n"); + if (num_sors>0) + { + printf("SFLAGS = -CPP"); + if ( strcmp(outdir,".")!=0 ) printf(" -out-dir %s", outdir); + printf(" $(SOTHER)\n"); + } + printf("GRM = "); + pfiles(files, n, NULL); + printf("\n"); + printf("SRC = "); + if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(files, n, "c"); + if ( gen_CPP ) { + printf(" \\\n\t"); + pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); + printf(" \\\n\t"); + printf("$(ANTLR_H)%s%s", DirectorySymbol, APARSER_C); + if ( !user_lexer ) printf(" $(ANTLR_H)%s%s", DirectorySymbol, DLEXERBASE_C); + if ( gen_trees ) { + printf(" \\\n\t"); + printf("$(ANTLR_H)%s%s", DirectorySymbol, ASTBASE_C); + printf(" $(ANTLR_H)%s%s", DirectorySymbol, PCCTSAST_C); +/* printf(" $(ANTLR_H)%s%s", DirectorySymbol, LIST_C); */ + printf(" \\\n\t"); + } + printf(" $(ANTLR_H)%s%s", DirectorySymbol, ATOKENBUFFER_C); + } + if ( !user_lexer ) { + if ( gen_CPP ) printf(" $(SCAN)%s", CPP_FILE_SUFFIX); + else printf(" %s$(SCAN).c", DIR()); + } + if ( !gen_CPP ) printf(" $(ERR).c"); + for (i=0;i<num_sors;i++) + { + printf(" \\\n\t"); + pclasses(&sclasses[i],1,CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pfiles(&sfiles[i][0],num_sfiles[i],CPP_FILE_SUFFIX_NO_DOT); + } + if(num_sors>0) + printf(" \\\n\t$(SOR_LIB)%sSTreeParser.cpp", DirectorySymbol); + if (num_cfiles>0) + { + printf(" \\\n\t"); + pfiles(cfiles,num_cfiles,NULL); + } + printf("\n\n"); + printf("OBJ = "); + pfiles(files, n, "o"); + if ( gen_CPP ) { + printf(" \\\n\t"); + pclasses(classes, num_classes, "o"); + printf(" \\\n\t"); + printf("%s%s", DIR(), APARSER_O); + if ( !user_lexer ) { + printf(" %s%s", DIR(), DLEXERBASE_O); + } + if ( gen_trees ) { + printf(" \\\n\t"); + printf("%s%s", DIR(), ASTBASE_O); + printf(" %s%s", DIR(), PCCTSAST_O); +/* printf(" %s%s", DIR(), LIST_O); */ + printf(" \\\n\t"); + } + printf(" %s%s", DIR(), ATOKENBUFFER_O); + } + if ( !user_lexer ) { + if ( gen_CPP ) printf(" $(SCAN)%s", OBJ_FILE_SUFFIX); + else printf(" %s$(SCAN)%s", DIR(), OBJ_FILE_SUFFIX); + } + if ( !gen_CPP ) printf(" $(ERR)%s", OBJ_FILE_SUFFIX); + for (i=0;i<num_sors;i++) + { + printf(" \\\n\t"); + pclasses(&sclasses[i],1,"o"); + printf(" "); + pfiles(&sfiles[i][0],num_sfiles[i],"o"); + } + if(num_sors>0) printf(" \\\n\tSTreeParser.o"); + if (num_cfiles>0) + { + printf(" \\\n\t"); + pfiles(cfiles,num_cfiles,"o"); + } + printf("\n\n"); + + printf("ANTLR_SPAWN = "); + if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(files, n, "c"); + if ( gen_CPP ) { + printf(" "); + pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); + printf(" \\\n\t\t"); + pclasses(classes, num_classes, "h"); + if ( strcmp(hdr,"stdpccts.h")!=0 ) { + printf(" \\\n\t\t"); + printf("$(HDR_FILE) stdpccts.h"); + } + } + if ( user_lexer ) { + if ( !user_token_types ) printf(" $(TOKENS)"); + } + else { + printf(" $(DLG_FILE)"); + if ( !user_token_types ) printf(" $(TOKENS)"); + } + if ( !gen_CPP ) printf(" $(ERR).c"); + printf("\n"); + + if ( !user_lexer ) { + if ( gen_CPP ) printf("DLG_SPAWN = $(SCAN)%s", CPP_FILE_SUFFIX); + else printf("DLG_SPAWN = %s$(SCAN).c", DIR()); + if ( gen_CPP ) printf(" $(SCAN).h"); + if ( !gen_CPP ) printf(" $(MOD_FILE)"); + printf("\n"); + } + + if ( gen_CPP ) { + if ( !nondef_comp ) + printf("ifdef CXX\nCCC = $(CXX)\nendif\n\nifndef CCC\n"); + printf("CCC = %s\n",compilerCCC); + if ( !nondef_comp ) printf("endif\n\n"); + } + else + { + if ( !nondef_comp ) printf("ifndef CC\n"); + printf("CC = %s\n",compilerCC); + if ( !nondef_comp ) printf("endif\n\n"); + } + + /* set up dependencies */ + printf("\n%s : $(SRC) $(OBJ)\n", project); + printf("\t%s %s %s $(CFLAGS) $(OBJ)\n", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_EXE_FLAG, + project); + printf("\n"); + + /* implicit rules */ + +/* if(gen_CPP) + printf("%%.o : %%.cpp\n\t$(CCC) -c $(CFLAGS) $<\n\n"); + + printf("%%.o : %%.c\n\t%s -c $(CFLAGS) $<\n\n", + gen_CPP?"$(CCC)":"$(CC)"); +*/ + /* how to compile parser files */ + + for (i=0; i<num_files; i++) + { + pfiles(&files[i], 1, "o"); + if ( user_lexer ) { + printf(" : $(TOKENS)"); + } + else { + if ( gen_CPP ) printf(" : $(TOKENS) $(SCAN).h"); + else printf(" : $(MOD_FILE) $(TOKENS)"); + } + printf(" "); + if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&files[i], 1, "c"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + pfiles(&files[i], 1, "o"); + printf(" "); + if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&files[i], 1, "c"); + printf("\n\n"); + } + + for (i=0; i<num_cfiles; i++) + { + pfiles(&cfiles[i], 1, "o"); + printf(" : "); + pfiles(&cfiles[i], 1, NULL); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); +/*** printf(" "); ***/ +/*** pfiles(&cfiles[i], 1, "h"); ***/ + printf("\n"); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + pfiles(&cfiles[i], 1, "o"); + printf(" "); + pfiles(&cfiles[i], 1, NULL); + printf("\n\n"); + +/* + * pfiles(&cfiles[i], 1, "h"); + * printf(" :\ntouch "); + * pfiles(&cfiles[i], 1, "h"); + * printf("\n\n"); + */ + } + + /* how to compile err.c */ + if ( !gen_CPP ) { + printf("$(ERR)%s : $(ERR).c", OBJ_FILE_SUFFIX); + if ( !user_lexer ) printf(" $(TOKENS)"); + printf("\n"); + printf("\t%s -c $(CFLAGS) %s $(ERR)%s $(ERR).c", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG, + OBJ_FILE_SUFFIX); + printf("\n\n"); + } + + /* how to compile Class.c */ + for (i=0; i<num_classes; i++) + { + pclasses(&classes[i], 1, "o"); + if ( user_lexer ) { + printf(" : $(TOKENS)"); + } + else { + printf(" : $(TOKENS) $(SCAN).h"); + } + printf(" "); + pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pclasses(&classes[i], 1, "h"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + pclasses(&classes[i], 1, "o"); + printf(" "); + pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf("\n\n"); + } + + /* how to compile scan.c */ + if ( !user_lexer ) { + if ( gen_CPP ) printf("$(SCAN)%s : $(SCAN)%s", OBJ_FILE_SUFFIX, CPP_FILE_SUFFIX); + else printf("%s$(SCAN)%s : %s$(SCAN).c", DIR(), OBJ_FILE_SUFFIX, DIR()); + if ( !user_lexer ) printf(" $(TOKENS)"); + printf("\n"); + if ( gen_CPP ) printf("\t$(CCC) -c $(CFLAGS) %s $(SCAN)%s $(SCAN)%s", + RENAME_OBJ_FLAG, + OBJ_FILE_SUFFIX, + CPP_FILE_SUFFIX); + else printf("\t$(CC) -c $(CFLAGS) %s %s$(SCAN)%s %s$(SCAN).c", + RENAME_OBJ_FLAG, + DIR(), + OBJ_FILE_SUFFIX, + DIR()); + printf("\n\n"); + } +/* how to compile sorcerer classes */ + for (i=0;i<num_sors;i++) + { + pclasses(&sclasses[i], 1, "o"); + printf(" : "); + pclasses(&sclasses[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pclasses(&sclasses[i], 1, "h"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + pclasses(&sclasses[i], 1, "o"); + printf(" "); + pclasses(&sclasses[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf("\n\n"); +/* how to compile i-th sorcerer's files*/ + for (j=0; j<num_sfiles[i]; j++) + { + pfiles(&sfiles[i][j], 1, "o"); + printf(" : "); + if ( gen_CPP ) pfiles(&sfiles[i][j], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&sfiles[i][j], 1, "c"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + pfiles(&sfiles[i][j], 1, "o"); + printf(" "); + if ( gen_CPP ) pfiles(&sfiles[i][j], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&sfiles[i][j], 1, "c"); + printf("\n\n"); + } + if ( gen_CPP ) pfiles(&sfiles[i][0], num_sfiles[i], CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&sfiles[i][0], num_sfiles[i], "c"); + if ( gen_CPP ) + { + printf(" "); + pclasses(&sclasses[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pclasses(&sclasses[i], 1, "h"); + if ( strcmp(hdr,"stdpccts.h")!=0 ) + { + printf(" "); + printf("$(HDR_FILE) stdpccts.h"); + } + } + printf(" : "); + pfiles(&sfiles[i][0],num_sfiles[i],NULL); + printf("\n\t$(SOR) $(SFLAGS) "); + pfiles(&sfiles[i][0],num_sfiles[i],NULL); + printf("\n\n"); + } + if(num_sors>0) + { + printf("STreeParser%s : $(SOR_LIB)%sSTreeParser.cpp\n", + OBJ_FILE_SUFFIX,DirectorySymbol); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + printf("STreeParser%s ",OBJ_FILE_SUFFIX); + printf("$(SOR_LIB)%sSTreeParser.cpp\n\n",DirectorySymbol); + } + + printf("$(ANTLR_SPAWN) : $(GRM)\n"); + printf("\t$(ANTLR) $(AFLAGS) $(GRM)\n"); + + if ( !user_lexer ) + { + printf("\n"); + printf("$(DLG_SPAWN) : $(DLG_FILE)\n"); + if ( gen_CPP ) printf("\t$(DLG) $(DFLAGS) $(DLG_FILE)\n"); + else printf("\t$(DLG) $(DFLAGS) $(DLG_FILE) $(SCAN).c\n"); + } + + /* do the makes for ANTLR/DLG support */ + if ( gen_CPP ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); + if ( !user_lexer ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); + } + if ( gen_trees ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, PCCTSAST_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, PCCTSAST_C); + printf("\n"); +/* + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); + printf("\t%s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); +*/ + } + } + + /* clean and scrub targets */ + + printf("\nclean:\n"); + printf("\trm -f *%s core %s", OBJ_FILE_SUFFIX, project); + if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); + printf("\n"); + + printf("\nscrub: clean\n"); +/* printf("\trm -f *%s core %s", OBJ_FILE_SUFFIX, project); */ +/* if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); */ + printf("\trm -f $(ANTLR_SPAWN)"); + if ( !user_lexer ) printf(" $(DLG_SPAWN)"); + for (i=0;i<num_sors;i++) + { + printf(" "); + if ( gen_CPP ) pfiles(&sfiles[i][0], num_sfiles[i], CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&sfiles[i][0], num_sfiles[i], "c"); + if ( gen_CPP ) + { + printf(" "); + pclasses(&sclasses[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pclasses(&sclasses[i], 1, "h"); + } + } + printf("\n\n"); +} + +#ifdef __STDC__ +void pfiles(char **files, int n, char *suffix) +#else +void pfiles(files, n, suffix) +char **files; +int n; +char *suffix; +#endif +{ + int first=1; + + while ( n>0 ) + { + char *p = &(*files)[strlen(*files)-1]; + if ( !first ) putchar(' '); + first=0; + while ( p > *files && *p != '.' ) --p; + if ( p == *files ) + { + fprintf(stderr, + "genmk: filenames must be file.suffix format: %s\n", + *files); + exit(-1); + } + if ( suffix == NULL ) printf("%s", *files); + else + { + *p = '\0'; + printf("%s", DIR()); + if ( strcmp(suffix, "o")==0 ) printf("%s%s", *files, OBJ_FILE_SUFFIX); + else printf("%s.%s", *files, suffix); + *p = '.'; + } + files++; + --n; + } +} + +#ifdef __STDC__ +pclasses(char **classes, int n, char *suffix) +#else +pclasses(classes, n, suffix) +char **classes; +int n; +char *suffix; +#endif +{ + int first=1; + + while ( n>0 ) + { + if ( !first ) putchar(' '); + first=0; + if ( suffix == NULL ) printf("%s", *classes); + else { + printf("%s", DIR()); + if ( strcmp(suffix, "o")==0 ) printf("%s%s", *classes, OBJ_FILE_SUFFIX); + else printf("%s.%s", *classes, suffix); + } + classes++; + --n; + } +} + +static void +#ifdef __STDC__ +ProcessArgs( int argc, char **argv, Opt *options ) +#else +ProcessArgs( argc, argv, options ) +int argc; +char **argv; +Opt *options; +#endif +{ + Opt *p; + require(argv!=NULL, "ProcessArgs: command line NULL"); + + while ( argc-- > 0 ) + { + p = options; + while ( p->option != NULL ) + { + if ( strcmp(p->option, "*") == 0 || + strcmp(p->option, *argv) == 0 ) + { + if ( p->arg ) + { + (*p->process)( *argv, *(argv+1) ); + argv++; + argc--; + } + else + (*p->process)( *argv ); + break; + } + p++; + } + argv++; + } +} + +#ifdef __STDC__ +void fatal( char *err_) +#else +void fatal( err_) +char *err_; +#endif +{ + fprintf(stderr, "genmk: %s\n", err_); + exit(1); +} + +#ifdef __STDC__ +void warn( char *err_) +#else +void warn( err_) +char *err_; +#endif +{ + fprintf(stderr, "genmk: %s\n", err_); +} + +#ifdef __STDC__ +char *DIR(void) +#else +char *DIR() +#endif +{ + static char buf[200+1]; + + if ( strcmp(outdir,TopDirectory)==0 ) return ""; + sprintf(buf, "%s%s", outdir, DirectorySymbol); + return buf; +} diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk_old.c b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk_old.c new file mode 100644 index 00000000..19858cb6 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk_old.c @@ -0,0 +1,762 @@ +/* + * genmk -- a program to make makefiles for PCCTS + * + * ANTLR 1.33MR10 + * Terence John Parr 1989 - 1998 + * Purdue University + * U of MN + */ + +#include <stdio.h> +#include "pcctscfg.h" /* be sensitive to what ANTLR/DLG call the files */ + +#ifdef VAXC +#define DIE return 0; +#define DONE return 1; +#else +#define DIE return 1; +#define DONE return 0; +#endif + +#ifndef require +#define require(expr, err) {if ( !(expr) ) fatal(err);} +#endif + +#define MAX_FILES 50 +#define MAX_CLASSES 50 + +char *RENAME_OBJ_FLAG="-o", + *RENAME_EXE_FLAG="-o"; + +char *dlg = "parser.dlg"; +char *err = "err.c"; +char *hdr = "stdpccts.h"; +char *tok = "tokens.h"; +char *mode = "mode.h"; +char *scan = "scan"; + +char ATOKENBUFFER_O[100]; +char APARSER_O[100]; +char ASTBASE_O[100]; +char PCCTSAST_O[100]; +char LIST_O[100]; +char DLEXERBASE_O[100]; + +/* Option flags */ +static char *project="t", *files[MAX_FILES], *classes[MAX_CLASSES]; +static int num_files = 0; +static int num_classes = 0; +static int user_lexer = 0; +static char *user_token_types = NULL; +static int gen_CPP = 0; +static char *outdir="."; +static char *dlg_class = "DLGLexer"; +static int gen_trees = 0; +static int gen_hoist = 0; +static char cfiles[1600]=""; +static char *compilerCCC="CC"; +static char *compilerCC="cc"; +static char *pccts_path="/usr/local/pccts"; + +void help(); +void mk(); +void pfiles(); +void pclasses(); +void fatal(); +void warn(); + +typedef struct _Opt { + char *option; + int arg; +#ifdef __cplusplus + void (*process)(...); +#else + void (*process)(); +#endif + char *descr; + } Opt; + +#ifdef __STDC__ +static void ProcessArgs(int, char **, Opt *); +#else +static void ProcessArgs(); +#endif + +static void +pProj( s, t ) +char *s; +char *t; +{ + project = t; +} + +static void +pUL( s ) +char *s; +{ + user_lexer = 1; +} + +static void +pCPP( s ) +char *s; +{ + gen_CPP = 1; +} + +static void +pUT( s, t ) +char *s; +char *t; +{ + user_token_types = t; +} + +static void +pTrees( s ) +char *s; +{ + gen_trees = 1; +} + +static void +pHoist( s ) +char *s; +{ + gen_hoist = 1; +} + +static void +#ifdef __STDC__ +pFile( char *s ) +#else +pFile( s ) +char *s; +#endif +{ + if ( *s=='-' ) + { + fprintf(stderr, "invalid option: '%s'; ignored...",s); + return; + } + + require(num_files<MAX_FILES, "exceeded max # of input files"); + files[num_files++] = s; +} + +static void +#ifdef __STDC__ +pClass( char *s, char *t ) +#else +pClass( s, t ) +char *s; +char *t; +#endif +{ + require(num_classes<MAX_CLASSES, "exceeded max # of grammar classes"); + classes[num_classes++] = t; +} + +static void +#ifdef __STDC__ +pDLGClass( char *s, char *t ) +#else +pDLGClass( s, t ) +char *s; +char *t; +#endif +{ + if ( !gen_CPP ) { + fprintf(stderr, "-dlg-class makes no sense without C++ mode; ignored..."); + } + else dlg_class = t; +} + +static void +#ifdef __STDC__ +pOdir( char *s, char *t ) +#else +pOdir( s, t ) +char *s; +char *t; +#endif +{ + outdir = t; +} + +static void +#ifdef __STDC__ +pHdr( char *s, char *t ) +#else +pHdr( s, t ) +char *s; +char *t; +#endif +{ + hdr = t; +} + +static void +#ifdef __STDC__ +pCFiles( char *s, char *t ) +#else +pCFiles( s, t ) +char *s; +char *t; +#endif +{ + strcat(strcat(cfiles," "), t); +} + +static void +#ifdef __STDC__ +pCompiler( char *s, char *t ) +#else +pCompiler( s, t ) +char *s; +char *t; +#endif +{ + compilerCCC = t; + compilerCC = t; +} + +static void +#ifdef __STDC__ +ppccts_path( char *s, char *t ) +#else +ppccts_path( s, t ) +char *s; +char *t; +#endif +{ + pccts_path = t; +} + +Opt options[] = { + { "-CC", 0, pCPP, "Generate C++ output"}, + { "-class", 1, pClass, "Name of a grammar class defined in grammar (if C++)"}, + { "-dlg-class", 1,pDLGClass,"Name of DLG lexer class (default=DLGLexer) (if C++)"}, + { "-header", 1,pHdr, "Name of ANTLR standard header info (default=no file)"}, + { "-o", 1, pOdir, "Directory where output files should go (default=\".\")"}, + { "-project", 1, pProj, "Name of executable to create (default=t)"}, + { "-token-types", 1, pUT, "Token types are in this file (don't use tokens.h)"}, + { "-trees", 0, pTrees, "Generate ASTs"}, + { "-user-lexer", 0, pUL, "Do not create a DLG-based scanner"}, + { "-mrhoist",0,pHoist, "Maintenance release style hoisting"}, + { "-cfiles",1,pCFiles, "Additional files in C or C++ to compile"}, + { "-pccts_path",1,ppccts_path, + "Path for $PCCTS directory (default is /usr/local/pccts)"}, + { "-compiler",1,pCompiler, + "Default compiler (default is CC/cc)"}, + { "*", 0,pFile, "" }, /* anything else is a file */ + { NULL, 0, NULL, NULL } +}; + +extern char *DIR(); + +int main(argc, argv) +int argc; +char **argv; +{ + if ( argc == 1 ) { help(); DIE; } + ProcessArgs(argc-1, &(argv[1]), options); + + strcpy(ATOKENBUFFER_O, ATOKENBUFFER_C); + ATOKENBUFFER_O[strlen(ATOKENBUFFER_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(ATOKENBUFFER_O, OBJ_FILE_SUFFIX); + strcpy(APARSER_O, APARSER_C); + APARSER_O[strlen(APARSER_O)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(APARSER_O, OBJ_FILE_SUFFIX); + + strcpy(ASTBASE_O, ASTBASE_C); + ASTBASE_O[strlen(ASTBASE_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(ASTBASE_O, OBJ_FILE_SUFFIX); + + strcpy(PCCTSAST_O, PCCTSAST_C); + PCCTSAST_O[strlen(PCCTSAST_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(PCCTSAST_O, OBJ_FILE_SUFFIX); + + strcpy(LIST_O, LIST_C); + LIST_O[strlen(LIST_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(LIST_O, OBJ_FILE_SUFFIX); + + strcpy(DLEXERBASE_O, DLEXERBASE_C); + DLEXERBASE_O[strlen(DLEXERBASE_C)-strlen(CPP_FILE_SUFFIX)] = '\0'; + strcat(DLEXERBASE_O, OBJ_FILE_SUFFIX); + + if ( num_files == 0 ) fatal("no grammar files specified; exiting..."); + if ( !gen_CPP && num_classes>0 ) { + warn("can't define classes w/o C++ mode; turning on C++ mode...\n"); + gen_CPP=1; + } + if ( gen_CPP && num_classes==0 ) { + fatal("must define classes >0 grammar classes in C++ mode\n"); + } + + mk(project, files, num_files, argc, argv); + DONE; +} + +void help() +{ + Opt *p = options; + static char buf[1000+1]; + + fprintf(stderr, "genmk [options] f1.g ... fn.g\n"); + while ( p->option!=NULL && *(p->option) != '*' ) + { + buf[0]='\0'; + if ( p->arg ) sprintf(buf, "%s ___", p->option); + else strcpy(buf, p->option); + fprintf(stderr, "\t%-16s %s\n", buf, p->descr); + p++; + } +} + +void mk(project, files, n, argc, argv) +char *project; +char **files; +int n; +int argc; +char **argv; +{ + int i; + + printf("#\n"); + printf("# PCCTS makefile for: "); + pfiles(files, n, NULL); + printf("\n"); + printf("#\n"); + printf("# Created from:"); + for (i=0; i<argc; i++) printf(" %s", argv[i]); + printf("\n"); + printf("#\n"); + printf("# PCCTS release 1.33MR21\n"); + printf("# Project: %s\n", project); + if ( gen_CPP ) printf("# C++ output\n"); + else printf("# C output\n"); + if ( user_lexer ) printf("# User-defined scanner\n"); + else printf("# DLG scanner\n"); + if ( user_token_types!=NULL ) printf("# User-defined token types in '%s'\n", user_token_types); + else printf("# ANTLR-defined token types\n"); + printf("#\n"); + printf(".SUFFIXES:\n.SUFFIXES: .o .cpp .c .h .g .i .dlg\n"); + if ( user_token_types!=NULL ) { + printf("# Make sure #tokdefs directive in ANTLR grammar lists this file:\n"); + printf("TOKENS = %s", user_token_types); + } + else printf("TOKENS = %stokens.h", DIR()); + printf("\n"); + printf("#\n"); + printf("# The following filenames must be consistent with ANTLR/DLG flags\n"); + printf("DLG_FILE = %s%s\n", DIR(), dlg); + printf("ERR = %serr\n", DIR()); + if ( strcmp(hdr,"stdpccts.h")!=0 ) printf("HDR_FILE = %s%s\n", DIR(), hdr); + else printf("HDR_FILE =\n"); + if ( !gen_CPP ) printf("MOD_FILE = %s%s\n", DIR(), mode); + if ( !gen_CPP ) printf("SCAN = %s\n", scan); + else printf("SCAN = %s%s\n", DIR(), dlg_class); + + printf("PCCTS = %s\n",pccts_path); + printf("ANTLR_H = $(PCCTS)%sh\n", DirectorySymbol); + printf("BIN = $(PCCTS)%sbin\n", DirectorySymbol); + printf("ANTLR = $(BIN)%santlr\n", DirectorySymbol); + printf("DLG = $(BIN)%sdlg\n", DirectorySymbol); + printf("CFLAGS = -I. -I$(ANTLR_H)"); + if ( strcmp(outdir, ".")!=0 ) printf(" -I%s", outdir); + printf(" $(COTHER)"); + printf("\n"); + printf("AFLAGS ="); + if ( strcmp(outdir,".")!=0 ) printf(" -o %s", outdir); + if ( user_lexer ) printf(" -gx"); + if ( gen_CPP ) printf(" -CC"); + if ( strcmp(hdr,"stdpccts.h")!=0 ) printf(" -gh %s", hdr); + if ( gen_trees ) printf(" -gt"); + if ( gen_hoist ) { + printf(" -mrhoist on") ; + } else { + printf(" -mrhoist off"); + }; + printf(" $(AOTHER)"); + printf("\n"); + printf("DFLAGS = -C2 -i"); + if ( gen_CPP ) printf(" -CC"); + if ( strcmp(dlg_class,"DLGLexer")!=0 ) printf(" -cl %s", dlg_class); + if ( strcmp(outdir,".")!=0 ) printf(" -o %s", outdir); + printf(" $(DOTHER)"); + printf("\n"); + printf("GRM = "); + pfiles(files, n, NULL); + printf("\n"); + printf("MYFILES = %s\n",cfiles); + printf("SRC = "); + if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(files, n, "c"); + if ( gen_CPP ) { + printf(" \\\n "); + printf(" "); + pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); + printf(" \\\n "); + printf("$(ANTLR_H)%s%s", DirectorySymbol, APARSER_C); + if ( !user_lexer ) printf(" $(ANTLR_H)%s%s", DirectorySymbol, DLEXERBASE_C); + if ( gen_trees ) { + printf(" \\\n "); + printf("$(ANTLR_H)%s%s", DirectorySymbol, ASTBASE_C); + printf(" $(ANTLR_H)%s%s", DirectorySymbol, PCCTSAST_C); +/* printf(" $(ANTLR_H)%s%s", DirectorySymbol, LIST_C); */ + printf(" \\\n "); + } + printf(" $(ANTLR_H)%s%s", DirectorySymbol, ATOKENBUFFER_C); + } + if ( !user_lexer ) { + if ( gen_CPP ) printf(" $(SCAN)%s", CPP_FILE_SUFFIX); + else printf(" %s$(SCAN).c", DIR()); + } + if ( !gen_CPP ) printf(" $(ERR).c"); + printf("\\\n $(MYFILES)\n"); + printf("OBJ = "); + pfiles(files, n, "o"); + if ( gen_CPP ) { + printf(" \\\n "); + printf(" "); + pclasses(classes, num_classes, "o"); + printf(" \\\n "); + printf(" %s%s", DIR(), APARSER_O); + if ( !user_lexer ) { + printf(" %s%s", DIR(), DLEXERBASE_O); + } + if ( gen_trees ) { + printf(" \\\n "); + printf("%s%s", DIR(), ASTBASE_O); + printf(" %s%s", DIR(), PCCTSAST_O); +/* printf(" %s%s", DIR(), LIST_O); */ + printf(" \\\n "); + } + printf(" %s%s", DIR(), ATOKENBUFFER_O); + } + if ( !user_lexer ) { + if ( gen_CPP ) printf(" $(SCAN)%s", OBJ_FILE_SUFFIX); + else printf(" %s$(SCAN)%s", DIR(), OBJ_FILE_SUFFIX); + } + if ( !gen_CPP ) printf(" $(ERR)%s", OBJ_FILE_SUFFIX); + printf("\\\n $(MYFILES:.cpp=.o)\n"); + + printf("ANTLR_SPAWN = "); + if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(files, n, "c"); + if ( gen_CPP ) { + printf(" "); + pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); + printf(" \\\n "); + pclasses(classes, num_classes, "h"); + if ( strcmp(hdr,"stdpccts.h")!=0 ) { + printf(" \\\n "); + printf("$(HDR_FILE) stdpccts.h"); + } + } + if ( user_lexer ) { + if ( !user_token_types ) printf(" $(TOKENS)"); + } + else { + printf(" $(DLG_FILE)"); + if ( !user_token_types ) printf(" $(TOKENS)"); + } + if ( !gen_CPP ) printf(" $(ERR).c"); + printf("\n"); + + if ( !user_lexer ) { + if ( gen_CPP ) printf("DLG_SPAWN = $(SCAN)%s", CPP_FILE_SUFFIX); + else printf("DLG_SPAWN = %s$(SCAN).c", DIR()); + if ( gen_CPP ) printf(" $(SCAN).h"); + if ( !gen_CPP ) printf(" $(MOD_FILE)"); + printf("\n"); + } + + if ( gen_CPP ) { + printf("CCC = %s\n",compilerCCC); + } + else printf("CC = %s\n",compilerCC); + + /* set up dependencies */ + printf("\n%s : $(OBJ) $(SRC)\n", project); + printf(" %s %s %s $(CFLAGS) $(OBJ)\n", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_EXE_FLAG, + project); + printf("\n"); + + /* implicit rules */ + + if(gen_CPP) + printf("%%.o : %%.cpp\n\t$(CCC) -c $(CFLAGS) $<\n\n"); + + printf("%%.o : %%.c\n\t%s -c $(CFLAGS) $<\n\n", + gen_CPP?"$(CCC)":"$(CC)"); + + /* how to compile parser files */ + + for (i=0; i<num_files; i++) + { + pfiles(&files[i], 1, "o"); + if ( user_lexer ) { + printf(" : $(TOKENS)"); + } + else { + if ( gen_CPP ) printf(" : $(TOKENS) $(SCAN).h"); + else printf(" : $(MOD_FILE) $(TOKENS)"); + } + printf(" "); + if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&files[i], 1, "c"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + pfiles(&files[i], 1, "o"); + printf(" "); + if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); + else pfiles(&files[i], 1, "c"); + printf("\n\n"); + } + + /* how to compile err.c */ + if ( !gen_CPP ) { + printf("$(ERR)%s : $(ERR).c", OBJ_FILE_SUFFIX); + if ( !user_lexer ) printf(" $(TOKENS)"); + printf("\n"); + printf(" %s -c $(CFLAGS) %s $(ERR)%s $(ERR).c", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG, + OBJ_FILE_SUFFIX); + printf("\n\n"); + } + + /* how to compile Class.c */ + for (i=0; i<num_classes; i++) + { + pclasses(&classes[i], 1, "o"); + if ( user_lexer ) { + printf(" : $(TOKENS)"); + } + else { + printf(" : $(TOKENS) $(SCAN).h"); + } + printf(" "); + pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf(" "); + pclasses(&classes[i], 1, "h"); + if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(" $(HDR_FILE)"); + printf("\n"); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + pclasses(&classes[i], 1, "o"); + printf(" "); + pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); + printf("\n\n"); + } + + /* how to compile scan.c */ + if ( !user_lexer ) { + if ( gen_CPP ) printf("$(SCAN)%s : $(SCAN)%s", OBJ_FILE_SUFFIX, CPP_FILE_SUFFIX); + else printf("%s$(SCAN)%s : %s$(SCAN).c", DIR(), OBJ_FILE_SUFFIX, DIR()); + if ( !user_lexer ) printf(" $(TOKENS)"); + printf("\n"); + if ( gen_CPP ) printf(" $(CCC) -c $(CFLAGS) %s $(SCAN)%s $(SCAN)%s", + RENAME_OBJ_FLAG, + OBJ_FILE_SUFFIX, + CPP_FILE_SUFFIX); + else printf(" $(CC) -c $(CFLAGS) %s %s$(SCAN)%s %s$(SCAN).c", + RENAME_OBJ_FLAG, + DIR(), + OBJ_FILE_SUFFIX, + DIR()); + printf("\n\n"); + } + + printf("$(ANTLR_SPAWN) : $(GRM)\n"); + printf(" $(ANTLR) $(AFLAGS) $(GRM)\n"); + + if ( !user_lexer ) + { + printf("\n"); + printf("$(DLG_SPAWN) : $(DLG_FILE)\n"); + if ( gen_CPP ) printf(" $(DLG) $(DFLAGS) $(DLG_FILE)\n"); + else printf(" $(DLG) $(DFLAGS) $(DLG_FILE) $(SCAN).c\n"); + } + + /* do the makes for ANTLR/DLG support */ + if ( gen_CPP ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); + if ( !user_lexer ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); + } + if ( gen_trees ) { + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); + printf("\n"); + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, PCCTSAST_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)", + RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, PCCTSAST_C); + printf("\n"); +/* + printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); + printf(" %s -c $(CFLAGS) %s ", + gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); + printf("%s%s $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); +*/ + } + } + + /* clean and scrub targets */ + + printf("\nclean:\n"); + printf(" rm -f *%s core %s", OBJ_FILE_SUFFIX, project); + if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); + printf("\n"); + + printf("\nscrub:\n"); + printf(" rm -f *%s core %s", OBJ_FILE_SUFFIX, project); + if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); + printf(" $(ANTLR_SPAWN)"); + if ( !user_lexer ) printf(" $(DLG_SPAWN)"); + printf("\n"); +} + +void pfiles(files, n, suffix) +char **files; +int n; +char *suffix; +{ + int first=1; + + while ( n>0 ) + { + char *p = &(*files)[strlen(*files)-1]; + if ( !first ) putchar(' '); + first=0; + while ( p > *files && *p != '.' ) --p; + if ( p == *files ) + { + fprintf(stderr, + "genmk: filenames must be file.suffix format: %s\n", + *files); + exit(-1); + } + if ( suffix == NULL ) printf("%s", *files); + else + { + *p = '\0'; + printf("%s", DIR()); + if ( strcmp(suffix, "o")==0 ) printf("%s%s", *files, OBJ_FILE_SUFFIX); + else printf("%s.%s", *files, suffix); + *p = '.'; + } + files++; + --n; + } +} + +void pclasses(classes, n, suffix) +char **classes; +int n; +char *suffix; +{ + int first=1; + + while ( n>0 ) + { + if ( !first ) putchar(' '); + first=0; + if ( suffix == NULL ) printf("%s", *classes); + else { + printf("%s", DIR()); + if ( strcmp(suffix, "o")==0 ) printf("%s%s", *classes, OBJ_FILE_SUFFIX); + else printf("%s.%s", *classes, suffix); + } + classes++; + --n; + } +} + +static void +#ifdef __STDC__ +ProcessArgs( int argc, char **argv, Opt *options ) +#else +ProcessArgs( argc, argv, options ) +int argc; +char **argv; +Opt *options; +#endif +{ + Opt *p; + require(argv!=NULL, "ProcessArgs: command line NULL"); + + while ( argc-- > 0 ) + { + p = options; + while ( p->option != NULL ) + { + if ( strcmp(p->option, "*") == 0 || + strcmp(p->option, *argv) == 0 ) + { + if ( p->arg ) + { + (*p->process)( *argv, *(argv+1) ); + argv++; + argc--; + } + else + (*p->process)( *argv ); + break; + } + p++; + } + argv++; + } +} + +void fatal( err_) +char *err_; +{ + fprintf(stderr, "genmk: %s\n", err_); + exit(1); +} + +void warn( err_) +char *err_; +{ + fprintf(stderr, "genmk: %s\n", err_); +} + +char *DIR() +{ + static char buf[200+1]; + + if ( strcmp(outdir,TopDirectory)==0 ) return ""; + sprintf(buf, "%s%s", outdir, DirectorySymbol); + return buf; +} diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/makefile b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/makefile new file mode 100644 index 00000000..1631f74a --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/support/genmk/makefile @@ -0,0 +1,29 @@ +## +## 7-Apr-97 +## added support/genmk/makefile to pccts 1.33MR1 distribution kit +## (support/genmk/makefile" omitted from 1.33 distribution kit) +## +SRC=genmk.c +OBJ=genmk.o +# Define PC if you use a PC OS (changes directory symbol and object file extension) +# see pccts/h/pcctscfg.h +CC=cc +COPT=-O +#CFLAGS=-I../../h -DPC +CFLAGS=$(COPT) -I../../h +BAG=../../bin/bag + +genmk: $(OBJ) $(SRC) ../../h/pcctscfg.h + $(CC) -o genmk $(OBJ) + +clean: + rm -rf core *.o + +scrub: + rm -rf genmk core *.o + +shar: + shar genmk.c makefile > genmk.shar + +archive: + $(BAG) genmk.c makefile > genmk.bag |