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
|
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
|
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
|
eval.o: eval.c debug.c opcodes.c eval.h sexp.h config.h defaults.h Makefile
|
||||||
gcc -c $(CFLAGS) -o $@ $<
|
gcc -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
# main.o: main.c eval.h sexp.h config.h Makefile
|
main.o: main.c eval.c debug.c opcodes.c eval.h sexp.h config.h defaults.h Makefile
|
||||||
# gcc -c $(CFLAGS) -o $@ $<
|
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 $@ $^
|
gcc $(CFLAGS) -o $@ $^
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@ -39,3 +52,17 @@ test: chibi-scheme
|
||||||
fi; \
|
fi; \
|
||||||
done
|
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);
|
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