From b4c4fce03fb21105874f0e37ec091d8bbcd8c81f Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Sun, 23 Sep 2012 22:59:37 +0800 Subject: Modify generator for using printf --- mrbgems/generator.c | 172 +++++++++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 84 deletions(-) diff --git a/mrbgems/generator.c b/mrbgems/generator.c index f33a43944..ddcc6ab3a 100644 --- a/mrbgems/generator.c +++ b/mrbgems/generator.c @@ -5,6 +5,7 @@ #include #include #include +#include static int one (const struct dirent *unused) @@ -45,8 +46,8 @@ directory_exists(char path[4096]) { * FALSE => template for all GEMs * */ -static char -*for_each_gem (char before[1024], char after[1024], +static char* +for_each_gem (char before[1024], char after[1024], char start[1024], char end[1024], char dir_to_skip[1024]) { @@ -54,10 +55,12 @@ static char int n; char gemname[1024] = ""; char gemname_path[4096] = ""; - char complete_line[4096] = ""; char src_path[4096] = ""; struct stat attribut; + // return value + char* complete_line = malloc(4096 + sizeof(char)); + strcat(complete_line, start); n = scandir("./g", &eps, one, alphasort); @@ -114,102 +117,100 @@ make_gem_makefile() int gem_c_empty; int gem_ruby_empty; - puts("CFLAGS := -I. -I../../include -I../../src"); - puts(""); - puts("ifeq ($(OS),Windows_NT)"); - puts("MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'"); - puts("else"); - puts("MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'"); - puts("endif"); - puts(""); + printf("CFLAGS := -I. -I../../include -I../../src\n\n" + "ifeq ($(OS),Windows_NT)\n" + "MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'\n" + "else\n" + "MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'\n" + "endif\n\n"); + /* is there any GEM available? */ gem_check = for_each_gem("", "", "", "", ""); if (strcmp(gem_check, "") == 0) gem_empty = TRUE; else gem_empty = FALSE; + /* is there a C extension available? */ gem_check = for_each_gem("", "", "", "", "src"); if (strcmp(gem_check, "") == 0) gem_c_empty = TRUE; - else + else gem_c_empty = FALSE; + /* is there a Ruby extension available */ gem_check = for_each_gem("", "", "", "", "mrblib"); if (strcmp(gem_check, "") == 0) gem_ruby_empty = TRUE; - else + else gem_ruby_empty = FALSE; - puts(".PHONY : all"); + printf(".PHONY : all\n"); if (gem_empty) { - puts("all :"); - puts(""); + printf("all :\n\n"); } else { if (gem_c_empty) { - puts("all : mrblib_gem.o"); - puts("\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o"); + printf("all : mrblib_gem.o\n" + "\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o\n"); } else if (gem_ruby_empty) { - puts("all : all_gems"); + printf("all : all_gems\n"); } else { - puts("all : all_gems mrblib_gem.o"); - puts("\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o"); + printf("all : all_gems mrblib_gem.o\n" + "\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o\n"); } - puts(""); + printf("\n"); // Rule for building all C extensions of each Gem if (!gem_c_empty) { - puts("all_gems :"); - puts(for_each_gem("\t@$(MAKE) -C ", " $(MAKE_FLAGS)\n", "", "", "")); - puts(""); + printf("all_gems :\n%s", + for_each_gem("\t@$(MAKE) -C ", " $(MAKE_FLAGS)\n", "", "", "") + ); } // Rule for building all Ruby Extension of each Gem if (!gem_ruby_empty) { - puts("mrblib_gem.o : mrblib_gem.c"); - puts(""); + printf("mrblib_gem.o : mrblib_gem.c\n\n" - puts("mrblib_gem.c : mrblib_gem.ctmp"); - puts("\tcat $< > $@"); - puts(""); + "mrblib_gem.c : mrblib_gem.ctmp\n" + "\tcat $< > $@\n\n" - puts("mrblib_gem.ctmp : mrblib_gem.rbtmp"); - puts("\t../../bin/mrbc -Bmrblib_gem_irep -o$@ $<"); - puts(""); + "mrblib_gem.ctmp : mrblib_gem.rbtmp\n" + "\t../../bin/mrbc -Bmrblib_gem_irep -o$@ $<\n\n" - puts("mrblib_gem.rbtmp :"); - puts(for_each_gem(" ", "/mrblib/*.rb", "\tcat", "> mrblib_gem.rbtmp", "mrblib")); - puts(""); + "mrblib_gem.rbtmp :\n%s", + for_each_gem(" ", "/mrblib/*.rb", "\tcat", "> mrblib_gem.rbtmp", "mrblib") + ); } } - puts(".PHONY : prepare-test"); - puts("prepare-test : mrbgemtest.ctmp"); - puts(""); + printf(".PHONY : prepare-test\n" + "prepare-test : mrbgemtest.ctmp\n\n" - puts("mrbgemtest.ctmp : mrbgemtest.rbtmp"); - puts("\t../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp"); - puts(""); + "mrbgemtest.ctmp : mrbgemtest.rbtmp\n" + "\t../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp\n\n" - puts("mrbgemtest.rbtmp :"); + "mrbgemtest.rbtmp :\n" + ); if (!gem_empty) - puts(for_each_gem(" ", "/test/*.rb ", "\tcat", " > mrbgemtest.rbtmp", "")); + printf("%s", + for_each_gem(" ", "/test/*.rb ", "\tcat", " > mrbgemtest.rbtmp", "") + ); else - puts("\t../generator rbtmp > mrbgemtest.rbtmp"); + printf("\t../generator rbtmp > mrbgemtest.rbtmp\n"); - puts(""); - - puts(".PHONY : clean"); - puts("clean :"); - puts("\t$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest"); + printf("\n.PHONY : clean\n" + "clean :\n" + "\t$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest\n"); if (!gem_empty) - puts(for_each_gem("\t@$(MAKE) clean -C ", " $(MAKE_FLAGS)\n", "", "", "")); + printf("%s", + for_each_gem("\t@$(MAKE) clean -C ", " $(MAKE_FLAGS)\n", "", "", "") + ); } /* @@ -224,72 +225,75 @@ make_init_gems() int gem_c_empty; int gem_ruby_empty; + /* is there any GEM available? */ gem_check = for_each_gem("", "", "", "", ""); if (strcmp(gem_check, "") == 0) gem_empty = TRUE; else gem_empty = FALSE; + /* is there a C extension available? */ gem_check = for_each_gem("", "", "", "", "src"); if (strcmp(gem_check, "") == 0) gem_c_empty = TRUE; else gem_c_empty = FALSE; + /* is there a Ruby extension available */ gem_check = for_each_gem("", "", "", "", "mrblib"); if (strcmp(gem_check, "") == 0) gem_ruby_empty = TRUE; else gem_ruby_empty = FALSE; - puts("/*"); - puts(" * This file contains a list of all"); - puts(" * initializing methods which are"); - puts(" * necessary to bootstrap all gems."); - puts(" *"); - puts(" * IMPORTANT:"); - puts(" * This file was generated!"); - puts(" * All manual changes will get lost."); - puts(" */"); - - puts(""); - puts("#include \"mruby.h\""); - puts("#include \"mruby/irep.h\""); - puts("#include \"mruby/dump.h\""); - puts("#include \"mruby/string.h\""); - puts("#include \"mruby/proc.h\""); - puts(""); + printf("/*\n" + " * This file contains a list of all\n" + " * initializing methods which are\n" + " * necessary to bootstrap all gems.\n" + " *\n" + " * IMPORTANT:\n" + " * This file was generated!\n" + " * All manual changes will get lost.\n" + " */\n\n" + "#include \"mruby.h\"\n" + "#include \"mruby/irep.h\"\n" + "#include \"mruby/dump.h\"\n" + "#include \"mruby/string.h\"\n" + "#include \"mruby/proc.h\"\n" + ""); if (!gem_c_empty) - puts(for_each_gem("void mrb_", "_gem_init(mrb_state*);\n", "", "", "src")); + printf("%s", + for_each_gem("void mrb_", "_gem_init(mrb_state*);\n", "", "", "src") + ); if (!gem_ruby_empty) - puts("extern const char mrblib_gem_irep[];"); - - puts(""); + printf("extern const char mrblib_gem_irep[];\n"); - puts("void"); - puts("mrb_init_mrbgems(mrb_state *mrb) {"); + printf("\nvoid\n" + "mrb_init_mrbgems(mrb_state *mrb) {"); if (!gem_c_empty) - puts(for_each_gem(" mrb_", "_gem_init(mrb);\n", "", "", "src")); + printf("%s", + for_each_gem(" mrb_", "_gem_init(mrb);\n", "", "", "src") + ); if (!gem_ruby_empty) { - puts(" int n = mrb_read_irep(mrb, mrblib_gem_irep);"); - puts(" mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));"); - puts(" if (mrb->exc) {"); - puts(" mrb_p(mrb, mrb_obj_value(mrb->exc));"); - puts(" exit(0);"); - puts(" }"); + printf(" int n = mrb_read_irep(mrb, mrblib_gem_irep);\n" + " mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));\n" + " if (mrb->exc) {\n" + " mrb_p(mrb, mrb_obj_value(mrb->exc));\n" + " exit(0);\n" + " }"); } - puts("}"); + printf("}"); } void make_rbtmp() { - puts(""); + printf("\n"); } int @@ -306,7 +310,7 @@ main (int argc, char *argv[]) return 1; } else { - puts("Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'"); + printf("Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'"); return 1; } -- cgit v1.2.3