mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-06 20:56:38 +02:00
updating make rules
This commit is contained in:
parent
4736dcaa6d
commit
72886b897f
3 changed files with 118 additions and 89 deletions
35
Makefile
35
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
|
||||
|
|
85
eval.c
85
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;
|
||||
}
|
||||
|
||||
|
|
87
main.c
Normal file
87
main.c
Normal file
|
@ -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;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue