mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
swig stuff from Rob Browning
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@755 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
4c99010389
commit
73dd055854
70
src/swig/Makefile
Normal file
70
src/swig/Makefile
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
SWIG_FILTER := %P.h %/util.h
|
||||||
|
SWIG_HDRS := $(filter-out ${SWIG_FILTER},$(wildcard ../engine/*.h))
|
||||||
|
|
||||||
|
# Because Swig's include mechanism is not too smart.
|
||||||
|
SWIG_BASENAMES := $(notdir ${SWIG_HDRS})
|
||||||
|
|
||||||
|
CFLAGS := -I.. \
|
||||||
|
-I../.. \
|
||||||
|
-I../engine \
|
||||||
|
-I../register \
|
||||||
|
-I./../../include \
|
||||||
|
-I/usr/include/readline \
|
||||||
|
-I/usr/lib/perl5/i386-linux/5.004/CORE
|
||||||
|
|
||||||
|
CFLAGS += -O2 -Wall -Wno-unused
|
||||||
|
|
||||||
|
LIBENG := ../libengine.a
|
||||||
|
|
||||||
|
all: guile perl5
|
||||||
|
|
||||||
|
# This is .PHONY because it has to be re-generated *every* time. Who
|
||||||
|
# knows when headers are added to the engine dir?
|
||||||
|
xacc.i:
|
||||||
|
@echo "%module xacc" > xacc.i
|
||||||
|
@echo "%{" >> xacc.i
|
||||||
|
@($(foreach hdr,${SWIG_BASENAMES},echo "#include <${hdr}>"; )) >> xacc.i
|
||||||
|
@echo "%}" >> xacc.i
|
||||||
|
@($(foreach hdr,${SWIG_BASENAMES},echo %include ${hdr}; )) >> xacc.i
|
||||||
|
.PHONY: xacc.i
|
||||||
|
|
||||||
|
%_wrap.c: xacc.i
|
||||||
|
|
||||||
|
##### Guile
|
||||||
|
|
||||||
|
guile: guile/xacc-guile
|
||||||
|
.PHONY: guile
|
||||||
|
|
||||||
|
##### Guile
|
||||||
|
|
||||||
|
xacc-guile: xacc-guile.o xacc-guile_wrap.o $(LIBENG)
|
||||||
|
|
||||||
|
guile/xacc-guile_wrap.c: xacc.i ${SWIG_HDRS}
|
||||||
|
swig -I../engine -guile -o $@ $<
|
||||||
|
|
||||||
|
guile/xacc-guile: guile/xacc-guile.o guile/xacc-guile_wrap.o $(LIBENG)
|
||||||
|
${CC} $^ ${LIBENG} -lguile -lreadline -lm -o $@
|
||||||
|
CLEANFILES += guile/xacc-guile
|
||||||
|
|
||||||
|
##### Perl5
|
||||||
|
|
||||||
|
perl5: perl5/xacc.so
|
||||||
|
|
||||||
|
perl5/xacc.so: perl5/xacc-perl5_wrap.c $(LIBENG)
|
||||||
|
${CC} ${CFLAGS} -shared $^ -lm -o $@ -Dbool=char -fpic
|
||||||
|
CLEANFILES += perl5/xacc.so
|
||||||
|
|
||||||
|
perl5/xacc-perl5_wrap.c: xacc.i ${SWIG_HDRS}
|
||||||
|
swig -I../engine -perl5 -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o *~ *.bak *.i ${CLEANFILES}
|
||||||
|
(cd guile && rm -f *.o *~ *.bak *_wrap.c *.doc)
|
||||||
|
(cd perl5 && rm -f *.o *~ *.bak *_wrap.c *.doc *.pm)
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# tab-width: 2
|
||||||
|
# End:
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
18
src/swig/README
Normal file
18
src/swig/README
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
This README needs some serious help.
|
||||||
|
|
||||||
|
./examples contains whatever examples we've accumulated to date.
|
||||||
|
|
||||||
|
Each language interface is built in a separate subdirectory. Right
|
||||||
|
now we have guile and perl5. A simple "make" should build everything.
|
||||||
|
|
||||||
|
Building guile will result in guile/xacc-guile, a simple interpreter
|
||||||
|
that will let you execute scheme forms (including xacc commands). We
|
||||||
|
need to add an example of building a dynamically loadable guile module
|
||||||
|
later, but guile/xacc-guile.c shows you how easy it is to embed a
|
||||||
|
guile interpreter in your app, and then load all the xacc functions
|
||||||
|
into the interpreter.
|
||||||
|
|
||||||
|
Building perl5 will result in a perl module. For an example of how to
|
||||||
|
use it, see ../cbb/cbb-to-xacc.
|
||||||
|
|
8
src/swig/examples/scan-acct.scm
Normal file
8
src/swig/examples/scan-acct.scm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
(define (list-accts filename)
|
||||||
|
(let ((db (xaccReadAccountGroup filename)))
|
||||||
|
(do ((total (xaccGetNumAccounts db))
|
||||||
|
(i 0 (+ i 1)))
|
||||||
|
((= i total))
|
||||||
|
(let ((acct (xaccGetAccountFromID db i)))
|
||||||
|
(write (xaccAccountGetName acct))))))
|
27
src/swig/guile/xacc-guile.c
Normal file
27
src/swig/guile/xacc-guile.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <readline.h>
|
||||||
|
#include <history.h>
|
||||||
|
#include <guile/gh.h>
|
||||||
|
#include <FileIO.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
guile_entry_point(int argc, char *argv[]) {
|
||||||
|
char *input;
|
||||||
|
xacc();
|
||||||
|
|
||||||
|
input = readline("xacc> ");
|
||||||
|
while(input) {
|
||||||
|
SCM result = gh_eval_str(input);
|
||||||
|
gh_display(result);
|
||||||
|
gh_newline();
|
||||||
|
add_history(input);
|
||||||
|
free(input);
|
||||||
|
input = readline("xacc> ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[]) {
|
||||||
|
gh_enter(argc, argv, guile_entry_point);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user