diff --git a/.gitignore b/.gitignore index 3551c36..16aac0a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /pmake* *.o /src/compiler/*.c +/src/action/*.c /src/js/*.c diff --git a/GNUmakefile b/GNUmakefile index 925b30c..769031d 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -30,16 +30,18 @@ CFLAGS += -Iexternal/duktape -Iexternal/stb OBJS = src/main.o src/js.o OBJS += external/duktape/duktape.o external/stb/stb_ds.o +NAME = rev | cut -d/ -f1 | rev | cut -d. -f1 + .PHONY: all clean mk maint .SUFFIXES: .c .o all: pmake$(EXE) -include mk/compiler.mk +include mk/js.mk -mk/compiler.mk: - find src/js src/compiler -name "*.js" | while read js; do \ - name="`echo $$js | cut -d/ -f2`_`echo $$js | rev | cut -d/ -f1 | rev | cut -d. -f1`" ; \ +mk/js.mk: + find src/js src/action src/compiler -name "*.js" | while read js; do \ + name="`echo $$js | cut -d/ -f2`_`echo $$js | $(NAME)`" ; \ c="`echo $$js | sed 's/\.js$$/.c/'`" ; \ o="`echo $$js | sed 's/\.js$$/.o/'`" ; \ echo "OBJS += $$o" ; \ @@ -48,7 +50,7 @@ mk/compiler.mk: echo "" ; \ done > $@ -mk: mk/compiler.mk +mk: mk/js.mk maint: rm -f mk/*.mk @@ -62,9 +64,18 @@ src/config.h: echo "" >> $@ echo "#define COMPILERS \\" >> $@ find src/compiler -name "*.js" | while read js; do \ - echo " X(`echo $$js | rev | cut -d/ -f1 | rev | cut -d. -f1`) \\" ; \ + echo " X(`echo $$js | $(NAME)`) \\" ; \ done >> $@ echo "" >> $@ + echo "#define ACTIONS \\" >> $@ + find src/action -name "*.js" | while read js; do \ + echo " X(`echo $$js | $(NAME)`) \\" ; \ + done >> $@ + echo "" >> $@ + echo "#define JS \\" >> $@ + echo " COMPILERS \\" >> $@ + echo " ACTIONS" >> $@ + echo "" >> $@ echo "#endif" >> $@ pmake$(EXE): $(OBJS) diff --git a/mk/compiler.mk b/mk/js.mk similarity index 79% rename from mk/compiler.mk rename to mk/js.mk index 85d3ed2..14dea5f 100644 --- a/mk/compiler.mk +++ b/mk/js.mk @@ -6,6 +6,10 @@ OBJS += src/js/cmdline.o src/js/cmdline.c: src/js/cmdline.js xxd -njs_cmdline -i src/js/cmdline.js > src/js/cmdline.c +OBJS += src/action/gmake.o +src/action/gmake.c: src/action/gmake.js + xxd -naction_gmake -i src/action/gmake.js > src/action/gmake.c + OBJS += src/compiler/watcom.o src/compiler/watcom.c: src/compiler/watcom.js xxd -ncompiler_watcom -i src/compiler/watcom.js > src/compiler/watcom.c diff --git a/src/action/gmake.js b/src/action/gmake.js new file mode 100644 index 0000000..e69de29 diff --git a/src/config.h b/src/config.h index 5f31d7f..0afd2a4 100644 --- a/src/config.h +++ b/src/config.h @@ -5,4 +5,11 @@ X(watcom) \ X(gcc) \ +#define ACTIONS \ + X(gmake) \ + +#define JS \ + COMPILERS \ + ACTIONS + #endif diff --git a/src/js/cmdline.js b/src/js/cmdline.js index 5a4aa04..49fd118 100644 --- a/src/js/cmdline.js +++ b/src/js/cmdline.js @@ -9,5 +9,11 @@ for(var i = 1; i < ARGV.length; i++){ console.log(""); console.log("Usage: " + ARGV[0] + " [options] action [arguments]"); process.exit(0); + }else if(ARGV[i].startsWith("--")){ + console.log("Error: invalid option '" + ARGV[i].substr(2) + "'"); + process.exit(1); + }else{ + console.log("Error: no such action '" + ARGV[i] + "'"); + process.exit(1); } } diff --git a/src/pmake.h b/src/pmake.h index 78e5347..7448d18 100644 --- a/src/pmake.h +++ b/src/pmake.h @@ -15,7 +15,7 @@ extern unsigned int name ## _len; #define X(name) LOAD(compiler_ ## name) -COMPILERS; +JS; #undef X /* js.c */