mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Modify generator for using printf
This commit is contained in:
+88
-84
@@ -5,6 +5,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <mrbconf.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
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[];");
|
||||
printf("extern const char mrblib_gem_irep[];\n");
|
||||
|
||||
puts("");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user