# HG changeset patch # User Michael FIG <[EMAIL PROTECTED]> # Date 1205294739 21600 # Node ID be2e135a45e9246acd6f80c176722cc953c5296c # Parent f09caecc1e52c145b8a7e25e5aad841c0e367458 Get libjolt working again.
diff -r f09caecc1e52 -r be2e135a45e9 function/examples/libjolt/Makefile --- a/function/examples/libjolt/Makefile Wed Feb 27 00:03:54 2008 -0600 +++ b/function/examples/libjolt/Makefile Tue Mar 11 22:05:39 2008 -0600 @@ -1,4 +1,4 @@ IDC = idc -k # -O -IDC = idc -k # -O +IDC = ../idc -k # -O OBJECTS = ../../objects MPINT = ../../objects/mpint JOLT = ../../jolt-burg @@ -9,8 +9,10 @@ OBJEXT_O = .o OBJEXT_O = .o OBJEXT_SO = .so +CFLAGS = $(shell $(IDC) -C CFLAGS) LDFLAGS = $(shell $(IDC) -C LDFLAGS) LDLIBS = $(shell $(IDC) -C LDLIBS) +CPPFLAGS = $(shell $(IDC) -C CPPFLAGS) JOLT_OBJ_FILES = $(filter-out $(JOLT)/readline.o, $(wildcard $(JOLT)/*.o)) JOLT_BOOT_FILES = boot.k quasiquote.k syntax.k number.k object.k @@ -50,7 +52,7 @@ test : jest$(OBJEXT) .FORCE # boot.h : $(JOLT_BOOT_FILES) cat $(JOLT_BOOT_FILES) | \ - awk 'BEGIN {RS = "\(define herald.*contents\]\)\)\)\)"} {print $$0}' | \ + awk 'BEGIN {RS = "\\(define herald.*contents\\]\\)\\)\\)\\)"} {print $$0}' | \ grep -Ev '^(;|$$)' | \ sed -e 's/";/"/g' -e 's/;.*$$//' -e 's/\\/\\\\/g' -e 's/"/\\"/g' | \ awk '{print "\"", $$0, "\""}' | \ @@ -61,8 +63,8 @@ libjolt.o : boot.h libjolt.o : boot.h libjolt.a : libjolt.o - ld -r libjolt.o $(OBJECTS)/*.o $(MPINT)/*.o $(JOLT_OBJ_FILES) $(OBJ)/gc.a \ - $(OBJ)/libid.o -o [EMAIL PROTECTED] + ld -r libjolt.o $(OBJECTS)/*.o $(MPINT)/*.o $(JOLT_OBJ_FILES) \ + $(OBJ)/libid.o $(OBJ)/gc.a -o [EMAIL PROTECTED] ar rsc [EMAIL PROTECTED] [EMAIL PROTECTED] rm [EMAIL PROTECTED] mv [EMAIL PROTECTED] $@ @@ -73,11 +75,10 @@ install: libjolt.a cp jolt.h /usr/include test-libjolt : libjolt.a .FORCE - gcc -o $@ [EMAIL PROTECTED] $(LDFLAGS) libjolt.a $(LDLIBS) - ./$@ + gcc $(CFLAGS) $(CPPFLAGS) -o $@ [EMAIL PROTECTED] $(LDFLAGS) libjolt.a $(LDLIBS) jest : jest.c libjolt.a jolt.h - gcc -o $@ [EMAIL PROTECTED] $(LDFLAGS) libjolt.a $(LDLIBS) + gcc $(CFLAGS) $(CPPFLAGS) -o $@ [EMAIL PROTECTED] $(LDFLAGS) libjolt.a $(LDLIBS) tidy : .FORCE -rm -f *.o *.d *~ .gdb* *.stackdump *.o.c boot.h diff -r f09caecc1e52 -r be2e135a45e9 function/examples/libjolt/jolt.h --- a/function/examples/libjolt/jolt.h Wed Feb 27 00:03:54 2008 -0600 +++ b/function/examples/libjolt/jolt.h Tue Mar 11 22:05:39 2008 -0600 @@ -48,69 +48,63 @@ typedef struct t__object *oop; -typedef oop (*_imp_t)(oop _thunk, oop receiver, ...); +struct __send; +typedef oop (*_imp_t)(oop v_send, oop v_stateful_self, oop v_self, ...); -struct __closure -{ - _imp_t method; - oop data; -}; +#include <id/id.h> -static oop (*_local_intern )(const char *string)= 0; -static oop (*_local_import )(const char *name)= 0; -static struct __closure *(*_local_bind )(oop selector, oop receiver)= 0; -static oop _local_object= 0; +static struct __libid *_libid= 0; +static oop _send_vtable= 0; -#define _send(MSG, RCV, ARG...) ({ \ - register oop _r= (RCV); \ - struct __closure *_c= (struct __closure *)_local_bind((MSG), _r); \ - (_c->method)((oop)_c, _r, _r, ##ARG); \ +#define _sendv(MSG, N, RCV, ARG...) ({ \ + struct { oop _vtable; struct __send send; } _s = \ + { _send_vtable, { (MSG), (N), (RCV) } }; \ + ((_imp_t)(_libid->bindv(&_s.send))) \ + ((oop)&_s.send, _s.send.state, _s.send.receiver, ##ARG); \ }) -#define _super(TYP, MSG, RCV, ARG...) ({ \ - register oop _r= (RCV); \ - struct __closure *_c= (struct __closure *)_local_bind((MSG), (TYP)); \ - (_c->method)((oop)_c, _r, _r, ##ARG); \ +#define _superv(TYP, MSG, N, RCV, ARG...) ({ \ + struct { oop _vtable; struct __send send; } _s = \ + { _send_vtable, { (MSG), (N), (TYP) } }; \ + _imp_t _imp= _libid->bindv(&_s.send); \ + _s.send.receiver= (RCV); \ + _imp((oop)&_s.send, _s.send.state, _s.send.receiver, ##ARG);\ }) -static oop s__5fimport_= 0; -static oop s_initialise= 0; -static oop s_size_5f_value_5f_= 0; +/* Drag in the object files stored in libjolt.a */ +extern oop __id__init__libjolt(void); +static void *__libjolt_ref __attribute__((unused))= __id__init__libjolt; -static oop v_String= 0; -static oop v_Jolt= 0; +oop __id__init__(struct __libid *__libid) +{ + if (!_libid) { + if (!(_libid= __libid)) { fprintf(stderr, "init _libid %p\n", __libid); abort(); } -extern oop __id__init__libjolt(void); -static void *__libjolt_ref= __id__init__libjolt; + _send_vtable= ((oop *)_libid->import("_send"))[-1]; + _sendv(_libid->intern("_import:"), + 3, + _libid->_object, + "libjolt", + "__id__init__libjolt"); + } -oop __id__init__(void) -{ - if (_local_object) return; - { - dlhandle_t global= dlopen(0, RTLD_LAZY); - _local_object= *(oop *)dlsym(global, "_libid_object"); - _local_intern= dlsym(global, "_libid_intern"); - _local_import= dlsym(global, "_libid_import"); - _local_bind= dlsym(global, "_libid_bind"); - dlclose(global); - } - s__5fimport_ = _local_intern("_import:"); - s_initialise = _local_intern("initialise"); - s_size_5f_value_5f_ = _local_intern("size_:value_:"); - _send(s__5fimport_, _local_object, "libjolt", "__id__init__libjolt"); - v_String= _local_import("String"); - v_Jolt= _local_import("Jolt"); - return _send(s_initialise, v_Jolt); + return _sendv(_libid->intern("initialise"), + 1, _libid->import("Jolt")); } oop libjolt_init(int *argcp, char ***argvp, char ***envpp) { + struct __libid* libid; + oop entry= 0; + dlhandle_t global= dlopen(0, RTLD_LAZY); - void *_local_init= dlsym(global, "_libid_init"); - oop entry= 0; + struct __libid *(*_local_init)(int *, char ***, char ***)= + dlsym(global, "_libid_init"); if (!_local_init) { fprintf(stderr, "id runtime not found\n"); abort(); } - ((void (*)(int *, char ***, char ***))_local_init)(argcp, argvp, envpp); - entry= __id__init__(); + + libid = _local_init(argcp, argvp, envpp); + entry= __id__init__(libid); dlclose(global); + return entry; } diff -r f09caecc1e52 -r be2e135a45e9 function/objects/sigalrm.h --- a/function/objects/sigalrm.h Wed Feb 27 00:03:54 2008 -0600 +++ b/function/objects/sigalrm.h Tue Mar 11 22:05:39 2008 -0600 @@ -1,3 +1,5 @@ static oop sigalrmReceiver= 0; +#include <signal.h> + static oop sigalrmReceiver= 0; static oop sigalrmSelector= 0; diff -r f09caecc1e52 -r be2e135a45e9 object/idc/idc.in --- a/object/idc/idc.in Wed Feb 27 00:03:54 2008 -0600 +++ b/object/idc/idc.in Tue Mar 11 22:05:39 2008 -0600 @@ -131,6 +131,8 @@ while [ $# -gt 0 ]; do shift; done +CPPFLAGS="-I$prefix/include" + case "$config" in "arch") echo "@SYSARCH@"; exit;; "os") echo "@SYSOS@"; exit;; @@ -144,6 +146,7 @@ case "$config" in "CCFLAGS") echo "@CCFLAGS@"; exit;; "CCFLAGS_O") echo "@CCFLAGS_O@"; exit;; "CCFLAGS_SO") echo "@CCFLAGS_SO@"; exit;; + "CPPFLAGS") echo "$CPPFLAGS"; exit;; "LDFLAGS") echo "@LDFLAGS@"; exit;; "LDFLAGS_O") echo "@LDFLAGS_O@"; exit;; "LDFLAGS_SO") echo "@LDFLAGS_SO@"; exit;; @@ -240,9 +243,9 @@ if [ ! -z "$infile" ]; then if [ ! -z "$infile" ]; then $verbose $run ${prefix}idc1 -I$prefix $idopts $idflags $infile -o $ccfile && - $run $cc -I$prefix/include $ccflags $ccopts $ccfile -o $outfile $ldflags $ldobjs $idlibs $ldlibs && + $run $cc $CPPFLAGS $ccflags $ccopts $ccfile -o $outfile $ldflags $ldobjs $idlibs $ldlibs && $run $cckill $ccfile else $verbose - $run $cc -I$prefix/include $ccflags $ccopts -o $outfile $ldflags $ldobjs $idlibs $ldlibs -fi + $run $cc $CPPFLAGS $ccflags $ccopts -o $outfile $ldflags $ldobjs $idlibs $ldlibs +fi _______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc