diff options
Diffstat (limited to 'mrbgems/gem_helper.c')
| -rw-r--r-- | mrbgems/gem_helper.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/mrbgems/gem_helper.c b/mrbgems/gem_helper.c new file mode 100644 index 000000000..6b32a916e --- /dev/null +++ b/mrbgems/gem_helper.c @@ -0,0 +1,112 @@ +#include <string.h> +#include <stdio.h> +#include <dirent.h> +#include <sys/stat.h> + +static int +one (const struct dirent *unused) +{ + return 1; +} + +void +dir_list (char before[1024], char after[1024]) +{ + struct dirent **eps; + int n; + char gemname[1024] = ""; + char gemname_path[4096] = ""; + char complete_line[4096] = ""; + struct stat attribut; + + n = scandir("./g", &eps, one, alphasort); + if (n >= 0) { + int cnt; + for (cnt = 0; cnt < n; ++cnt) { + strcpy(gemname, eps[cnt]->d_name); + strcpy(gemname_path, "./g/"); + strcat(gemname_path, gemname); + + if (strcmp(gemname, ".") == 0) + continue; + if (strcmp(gemname, "..") == 0) + continue; + + stat(gemname_path, &attribut); + if (S_ISDIR(attribut.st_mode) == 0) + continue; + + strcat(complete_line, before); + strcat(complete_line, gemname); + strcat(complete_line, after); + strcat(complete_line, "\n"); + } + puts(complete_line); + } + else + perror ("Couldn't open the directory"); +} + +void +make_gem_makefile() +{ + 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(""); + + puts(".PHONY : all"); + puts("all :"); + dir_list("\t@$(MAKE) -C ", " $(MAKE_FLAGS)"); + + puts(".PHONY : clean"); + puts("clean :"); + dir_list("\t@$(MAKE) clean -C ", " $(MAKE_FLAGS)"); +} + +void +make_init_gems() +{ + 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(""); + + dir_list("void mrb_", "_gem_init(mrb_state*);"); + + puts("void"); + puts("mrb_init_mrbgems(mrb_state *mrb)"); + puts("{"); + dir_list(" mrb_", "_gem_init(mrb);"); + puts("}"); +} + +int +main (int argc, char *argv[]) +{ + if (argc == 2) { + if (strcmp(argv[1], "makefile") == 0) + make_gem_makefile(); + else if (strcmp(argv[1], "init_gems") == 0) + make_init_gems(); + else + return 1; + } + else { + puts("Argument missing! Options: 'makefile'"); + return 1; + } + + return 0; +} |
