Commit b4c4fce0 authored by Daniel Bovensiepen's avatar Daniel Bovensiepen

Modify generator for using printf

parent 62b652c2
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <mrbconf.h> #include <mrbconf.h>
#include <stdlib.h>
static int static int
one (const struct dirent *unused) one (const struct dirent *unused)
...@@ -45,8 +46,8 @@ directory_exists(char path[4096]) { ...@@ -45,8 +46,8 @@ directory_exists(char path[4096]) {
* FALSE => template for all GEMs * FALSE => template for all GEMs
* *
*/ */
static char static char*
*for_each_gem (char before[1024], char after[1024], for_each_gem (char before[1024], char after[1024],
char start[1024], char end[1024], char start[1024], char end[1024],
char dir_to_skip[1024]) char dir_to_skip[1024])
{ {
...@@ -54,10 +55,12 @@ static char ...@@ -54,10 +55,12 @@ static char
int n; int n;
char gemname[1024] = ""; char gemname[1024] = "";
char gemname_path[4096] = ""; char gemname_path[4096] = "";
char complete_line[4096] = "";
char src_path[4096] = ""; char src_path[4096] = "";
struct stat attribut; struct stat attribut;
// return value
char* complete_line = malloc(4096 + sizeof(char));
strcat(complete_line, start); strcat(complete_line, start);
n = scandir("./g", &eps, one, alphasort); n = scandir("./g", &eps, one, alphasort);
...@@ -114,102 +117,100 @@ make_gem_makefile() ...@@ -114,102 +117,100 @@ make_gem_makefile()
int gem_c_empty; int gem_c_empty;
int gem_ruby_empty; int gem_ruby_empty;
puts("CFLAGS := -I. -I../../include -I../../src"); printf("CFLAGS := -I. -I../../include -I../../src\n\n"
puts(""); "ifeq ($(OS),Windows_NT)\n"
puts("ifeq ($(OS),Windows_NT)"); "MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'\n"
puts("MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'"); "else\n"
puts("else"); "MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'\n"
puts("MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'"); "endif\n\n");
puts("endif");
puts("");
/* is there any GEM available? */
gem_check = for_each_gem("", "", "", "", ""); gem_check = for_each_gem("", "", "", "", "");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_empty = TRUE; gem_empty = TRUE;
else else
gem_empty = FALSE; gem_empty = FALSE;
/* is there a C extension available? */
gem_check = for_each_gem("", "", "", "", "src"); gem_check = for_each_gem("", "", "", "", "src");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_c_empty = TRUE; gem_c_empty = TRUE;
else else
gem_c_empty = FALSE; gem_c_empty = FALSE;
/* is there a Ruby extension available */
gem_check = for_each_gem("", "", "", "", "mrblib"); gem_check = for_each_gem("", "", "", "", "mrblib");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_ruby_empty = TRUE; gem_ruby_empty = TRUE;
else else
gem_ruby_empty = FALSE; gem_ruby_empty = FALSE;
puts(".PHONY : all"); printf(".PHONY : all\n");
if (gem_empty) { if (gem_empty) {
puts("all :"); printf("all :\n\n");
puts("");
} }
else { else {
if (gem_c_empty) { if (gem_c_empty) {
puts("all : mrblib_gem.o"); printf("all : mrblib_gem.o\n"
puts("\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o"); "\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o\n");
} }
else if (gem_ruby_empty) { else if (gem_ruby_empty) {
puts("all : all_gems"); printf("all : all_gems\n");
} }
else { else {
puts("all : all_gems mrblib_gem.o"); printf("all : all_gems mrblib_gem.o\n"
puts("\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o"); "\t$(AR) rs ../../lib/libmruby.a mrblib_gem.o\n");
} }
puts(""); printf("\n");
// Rule for building all C extensions of each Gem // Rule for building all C extensions of each Gem
if (!gem_c_empty) { if (!gem_c_empty) {
puts("all_gems :"); printf("all_gems :\n%s",
puts(for_each_gem("\t@$(MAKE) -C ", " $(MAKE_FLAGS)\n", "", "", "")); for_each_gem("\t@$(MAKE) -C ", " $(MAKE_FLAGS)\n", "", "", "")
puts(""); );
} }
// Rule for building all Ruby Extension of each Gem // Rule for building all Ruby Extension of each Gem
if (!gem_ruby_empty) { if (!gem_ruby_empty) {
puts("mrblib_gem.o : mrblib_gem.c"); printf("mrblib_gem.o : mrblib_gem.c\n\n"
puts("");
puts("mrblib_gem.c : mrblib_gem.ctmp"); "mrblib_gem.c : mrblib_gem.ctmp\n"
puts("\tcat $< > $@"); "\tcat $< > $@\n\n"
puts("");
puts("mrblib_gem.ctmp : mrblib_gem.rbtmp"); "mrblib_gem.ctmp : mrblib_gem.rbtmp\n"
puts("\t../../bin/mrbc -Bmrblib_gem_irep -o$@ $<"); "\t../../bin/mrbc -Bmrblib_gem_irep -o$@ $<\n\n"
puts("");
puts("mrblib_gem.rbtmp :"); "mrblib_gem.rbtmp :\n%s",
puts(for_each_gem(" ", "/mrblib/*.rb", "\tcat", "> mrblib_gem.rbtmp", "mrblib")); for_each_gem(" ", "/mrblib/*.rb", "\tcat", "> mrblib_gem.rbtmp", "mrblib")
puts(""); );
} }
} }
puts(".PHONY : prepare-test"); printf(".PHONY : prepare-test\n"
puts("prepare-test : mrbgemtest.ctmp"); "prepare-test : mrbgemtest.ctmp\n\n"
puts("");
puts("mrbgemtest.ctmp : mrbgemtest.rbtmp"); "mrbgemtest.ctmp : mrbgemtest.rbtmp\n"
puts("\t../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp"); "\t../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp\n\n"
puts("");
puts("mrbgemtest.rbtmp :"); "mrbgemtest.rbtmp :\n"
);
if (!gem_empty) if (!gem_empty)
puts(for_each_gem(" ", "/test/*.rb ", "\tcat", " > mrbgemtest.rbtmp", "")); printf("%s",
for_each_gem(" ", "/test/*.rb ", "\tcat", " > mrbgemtest.rbtmp", "")
);
else else
puts("\t../generator rbtmp > mrbgemtest.rbtmp"); printf("\t../generator rbtmp > mrbgemtest.rbtmp\n");
puts("");
puts(".PHONY : clean"); printf("\n.PHONY : clean\n"
puts("clean :"); "clean :\n"
puts("\t$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest"); "\t$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest\n");
if (!gem_empty) 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() ...@@ -224,72 +225,75 @@ make_init_gems()
int gem_c_empty; int gem_c_empty;
int gem_ruby_empty; int gem_ruby_empty;
/* is there any GEM available? */
gem_check = for_each_gem("", "", "", "", ""); gem_check = for_each_gem("", "", "", "", "");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_empty = TRUE; gem_empty = TRUE;
else else
gem_empty = FALSE; gem_empty = FALSE;
/* is there a C extension available? */
gem_check = for_each_gem("", "", "", "", "src"); gem_check = for_each_gem("", "", "", "", "src");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_c_empty = TRUE; gem_c_empty = TRUE;
else else
gem_c_empty = FALSE; gem_c_empty = FALSE;
/* is there a Ruby extension available */
gem_check = for_each_gem("", "", "", "", "mrblib"); gem_check = for_each_gem("", "", "", "", "mrblib");
if (strcmp(gem_check, "") == 0) if (strcmp(gem_check, "") == 0)
gem_ruby_empty = TRUE; gem_ruby_empty = TRUE;
else else
gem_ruby_empty = FALSE; gem_ruby_empty = FALSE;
puts("/*"); printf("/*\n"
puts(" * This file contains a list of all"); " * This file contains a list of all\n"
puts(" * initializing methods which are"); " * initializing methods which are\n"
puts(" * necessary to bootstrap all gems."); " * necessary to bootstrap all gems.\n"
puts(" *"); " *\n"
puts(" * IMPORTANT:"); " * IMPORTANT:\n"
puts(" * This file was generated!"); " * This file was generated!\n"
puts(" * All manual changes will get lost."); " * All manual changes will get lost.\n"
puts(" */"); " */\n\n"
"#include \"mruby.h\"\n"
puts(""); "#include \"mruby/irep.h\"\n"
puts("#include \"mruby.h\""); "#include \"mruby/dump.h\"\n"
puts("#include \"mruby/irep.h\""); "#include \"mruby/string.h\"\n"
puts("#include \"mruby/dump.h\""); "#include \"mruby/proc.h\"\n"
puts("#include \"mruby/string.h\""); "");
puts("#include \"mruby/proc.h\"");
puts("");
if (!gem_c_empty) 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) if (!gem_ruby_empty)
puts("extern const char mrblib_gem_irep[];"); printf("extern const char mrblib_gem_irep[];\n");
puts("");
puts("void"); printf("\nvoid\n"
puts("mrb_init_mrbgems(mrb_state *mrb) {"); "mrb_init_mrbgems(mrb_state *mrb) {");
if (!gem_c_empty) 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) { if (!gem_ruby_empty) {
puts(" int n = mrb_read_irep(mrb, mrblib_gem_irep);"); printf(" int n = mrb_read_irep(mrb, mrblib_gem_irep);\n"
puts(" mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));"); " mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));\n"
puts(" if (mrb->exc) {"); " if (mrb->exc) {\n"
puts(" mrb_p(mrb, mrb_obj_value(mrb->exc));"); " mrb_p(mrb, mrb_obj_value(mrb->exc));\n"
puts(" exit(0);"); " exit(0);\n"
puts(" }"); " }");
} }
puts("}"); printf("}");
} }
void void
make_rbtmp() make_rbtmp()
{ {
puts(""); printf("\n");
} }
int int
...@@ -306,7 +310,7 @@ main (int argc, char *argv[]) ...@@ -306,7 +310,7 @@ main (int argc, char *argv[])
return 1; return 1;
} }
else { else {
puts("Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'"); printf("Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'");
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment