void mk()

in BaseTools/Source/C/VfrCompile/Pccts/support/genmk/genmk.c [448:928]


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");
}