From 72886b897f6d54021917c11d99c2a232c4b85db2 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Fri, 3 Apr 2009 00:24:17 +0900 Subject: [PATCH] updating make rules --- Makefile | 35 ++++++++++++++++++++--- eval.c | 85 ------------------------------------------------------ main.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 89 deletions(-) create mode 100644 main.c diff --git a/Makefile b/Makefile index c40baa06..5b7b6247 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,14 @@ all: chibi-scheme -CFLAGS=-Wall -g -fno-inline -save-temps #-Os +PREFIX=/usr/local +BINDIR=$(PREFIX)/bin +LIBDIR=$(PREFIX)/lib +INCDIR=$(PREFIX)/include/chibi-scheme +MODDIR=$(PREFIX)/share/chibi-scheme + +SO=.dylib +CFLAGS=-Wall -g -fno-inline -save-temps -Os GC_OBJ=./gc/gc.a @@ -16,10 +23,16 @@ sexp.o: sexp.c sexp.h config.h defaults.h Makefile eval.o: eval.c debug.c opcodes.c eval.h sexp.h config.h defaults.h Makefile gcc -c $(CFLAGS) -o $@ $< -# main.o: main.c eval.h sexp.h config.h Makefile -# gcc -c $(CFLAGS) -o $@ $< +main.o: main.c eval.c debug.c opcodes.c eval.h sexp.h config.h defaults.h Makefile + gcc -c $(CFLAGS) -o $@ $< -chibi-scheme: eval.o sexp.o $(GC_OBJ) +libchibisexp.$(SO): sexp.o $(GC_OBJ) + gcc $(LDFLAGS) -shared -dynamiclib -o $@ $^ + +libchibischeme.$(SO): eval.o $(GC_OBJ) + gcc $(LDFLAGS) -shared -dynamiclib -o $@ $^ -lchibisexp + +chibi-scheme: main.o sexp.o $(GC_OBJ) gcc $(CFLAGS) -o $@ $^ clean: @@ -39,3 +52,17 @@ test: chibi-scheme fi; \ done +install: chibi-scheme + cp chibi-scheme $(BINDIR)/ + mkdir -p $(MODDIR) + cp init.scm $(MODDIR)/ + mkdir -p $(INCDIR) + cp *.h $(INCDIR)/ + cp *.$(SO) $(LIBDIR)/ + +uninstall: + rm -f $(BINDIR)/chibi-scheme + rm -f $(LIBDIR)/libchibischeme.$(SO) + rm -f $(LIBDIR)/libchibisexp.$(SO) + rm -f $(INCDIR)/*.h + rm -f $(MODDIR)/*.scm diff --git a/eval.c b/eval.c index 87fc7e91..a94ddcde 100644 --- a/eval.c +++ b/eval.c @@ -1745,88 +1745,3 @@ void scheme_init () { final_resumer = finalize_bytecode(context); } } - -void repl (sexp context) { - sexp obj, res, env, in, out, err; - env = sexp_context_env(context); - in = env_global_ref(env, the_cur_in_symbol, SEXP_FALSE); - out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE); - err = env_global_ref(env, the_cur_err_symbol, SEXP_FALSE); - while (1) { - sexp_write_string("> ", out); - sexp_flush(out); - obj = sexp_read(in); - if (obj == SEXP_EOF) - break; - if (sexp_exceptionp(obj)) { - sexp_print_exception(obj, err); - } else { - res = eval_in_context(obj, context); - if (res != SEXP_UNDEF) { - sexp_write(res, out); - sexp_write_char('\n', out); - } - } - } -} - -void run_main (int argc, char **argv) { - sexp env, obj, out=NULL, res, context, err_handler; - sexp_uint_t i, quit=0, init_loaded=0; - - env = sexp_make_standard_env(sexp_make_integer(5)); - context = sexp_make_context(NULL, env); - sexp_context_tailp(context) = 0; - emit_push(SEXP_UNDEF, context); - emit(OP_DONE, context); - err_handler = sexp_make_procedure(sexp_make_integer(0), - sexp_make_integer(0), - finalize_bytecode(context), - sexp_make_vector(0, SEXP_UNDEF)); - env_define(env, the_err_handler_symbol, err_handler); - - /* parse options */ - for (i=1; i < argc && argv[i][0] == '-'; i++) { - switch (argv[i][1]) { - case 'e': - case 'p': - if (! init_loaded) { - sexp_load(sexp_c_string(sexp_init_file), env); - init_loaded = 1; - } - obj = sexp_read_from_string(argv[i+1]); - res = eval_in_context(obj, context); - if (argv[i][1] == 'p') { - if (! out) - out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE); - sexp_write(res, out); - sexp_write_char('\n', out); - } - quit=1; - i++; - break; - case 'q': - init_loaded = 1; - break; - default: - errx(1, "unknown option: %s", argv[i]); - } - } - - if (! quit) { - if (! init_loaded) - sexp_load(sexp_c_string(sexp_init_file), env); - if (i < argc) - for ( ; i < argc; i++) - sexp_load(sexp_c_string(argv[i]), env); - else - repl(context); - } -} - -int main (int argc, char **argv) { - scheme_init(); - run_main(argc, argv); - return 0; -} - diff --git a/main.c b/main.c new file mode 100644 index 00000000..0f6d830a --- /dev/null +++ b/main.c @@ -0,0 +1,87 @@ + +#include "eval.c" + +void repl (sexp context) { + sexp obj, res, env, in, out, err; + env = sexp_context_env(context); + in = env_global_ref(env, the_cur_in_symbol, SEXP_FALSE); + out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE); + err = env_global_ref(env, the_cur_err_symbol, SEXP_FALSE); + while (1) { + sexp_write_string("> ", out); + sexp_flush(out); + obj = sexp_read(in); + if (obj == SEXP_EOF) + break; + if (sexp_exceptionp(obj)) { + sexp_print_exception(obj, err); + } else { + res = eval_in_context(obj, context); + if (res != SEXP_UNDEF) { + sexp_write(res, out); + sexp_write_char('\n', out); + } + } + } +} + +void run_main (int argc, char **argv) { + sexp env, obj, out=NULL, res, context, err_handler; + sexp_uint_t i, quit=0, init_loaded=0; + + env = sexp_make_standard_env(sexp_make_integer(5)); + context = sexp_make_context(NULL, env); + sexp_context_tailp(context) = 0; + emit_push(SEXP_UNDEF, context); + emit(OP_DONE, context); + err_handler = sexp_make_procedure(sexp_make_integer(0), + sexp_make_integer(0), + finalize_bytecode(context), + sexp_make_vector(0, SEXP_UNDEF)); + env_define(env, the_err_handler_symbol, err_handler); + + /* parse options */ + for (i=1; i < argc && argv[i][0] == '-'; i++) { + switch (argv[i][1]) { + case 'e': + case 'p': + if (! init_loaded) { + sexp_load(sexp_c_string(sexp_init_file), env); + init_loaded = 1; + } + obj = sexp_read_from_string(argv[i+1]); + res = eval_in_context(obj, context); + if (argv[i][1] == 'p') { + if (! out) + out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE); + sexp_write(res, out); + sexp_write_char('\n', out); + } + quit=1; + i++; + break; + case 'q': + init_loaded = 1; + break; + default: + errx(1, "unknown option: %s", argv[i]); + } + } + + if (! quit) { + if (! init_loaded) + sexp_load(sexp_c_string(sexp_init_file), env); + if (i < argc) + for ( ; i < argc; i++) + sexp_load(sexp_c_string(argv[i]), env); + else + repl(context); + } +} + +int main (int argc, char **argv) { + scheme_init(); + run_main(argc, argv); + return 0; +} +