gauche-devel Mailing List for Gauche
R7RS Scheme scripting engine
Status: Beta
Brought to you by:
shirok
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(12) |
Jun
(21) |
Jul
(11) |
Aug
(1) |
Sep
(3) |
Oct
(1) |
Nov
(2) |
Dec
(8) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(7) |
Feb
(5) |
Mar
(1) |
Apr
(2) |
May
(2) |
Jun
(2) |
Jul
(6) |
Aug
(19) |
Sep
(28) |
Oct
(29) |
Nov
(112) |
Dec
(72) |
2003 |
Jan
(38) |
Feb
(53) |
Mar
(19) |
Apr
(22) |
May
(16) |
Jun
(40) |
Jul
(18) |
Aug
(33) |
Sep
(24) |
Oct
(72) |
Nov
(35) |
Dec
(38) |
2004 |
Jan
(26) |
Feb
(39) |
Mar
(39) |
Apr
(55) |
May
(13) |
Jun
(10) |
Jul
(33) |
Aug
(27) |
Sep
(8) |
Oct
(4) |
Nov
(10) |
Dec
(12) |
2005 |
Jan
|
Feb
(2) |
Mar
(6) |
Apr
(29) |
May
(31) |
Jun
(44) |
Jul
(22) |
Aug
(30) |
Sep
(7) |
Oct
(18) |
Nov
(12) |
Dec
(15) |
2006 |
Jan
(28) |
Feb
(7) |
Mar
(41) |
Apr
(33) |
May
(35) |
Jun
(7) |
Jul
(7) |
Aug
(31) |
Sep
(15) |
Oct
(10) |
Nov
(21) |
Dec
(11) |
2007 |
Jan
(9) |
Feb
|
Mar
(35) |
Apr
(23) |
May
(25) |
Jun
(6) |
Jul
(11) |
Aug
(6) |
Sep
|
Oct
(12) |
Nov
(5) |
Dec
(4) |
2008 |
Jan
(3) |
Feb
(4) |
Mar
(8) |
Apr
(6) |
May
(3) |
Jun
(5) |
Jul
(19) |
Aug
(5) |
Sep
(3) |
Oct
(5) |
Nov
|
Dec
(3) |
2009 |
Jan
(4) |
Feb
(42) |
Mar
(26) |
Apr
(3) |
May
(3) |
Jun
(22) |
Jul
(14) |
Aug
(8) |
Sep
|
Oct
(17) |
Nov
(23) |
Dec
(9) |
2010 |
Jan
(27) |
Feb
(18) |
Mar
(17) |
Apr
(48) |
May
(1) |
Jun
(17) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
(19) |
2011 |
Jan
(8) |
Feb
(19) |
Mar
(8) |
Apr
|
May
(4) |
Jun
(4) |
Jul
(5) |
Aug
(1) |
Sep
(5) |
Oct
|
Nov
(4) |
Dec
(7) |
2012 |
Jan
(20) |
Feb
(3) |
Mar
|
Apr
|
May
(27) |
Jun
(16) |
Jul
(2) |
Aug
|
Sep
(10) |
Oct
(16) |
Nov
(37) |
Dec
(5) |
2013 |
Jan
(5) |
Feb
(6) |
Mar
(4) |
Apr
(4) |
May
(10) |
Jun
(3) |
Jul
(22) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
(6) |
Apr
(2) |
May
(6) |
Jun
(36) |
Jul
(7) |
Aug
|
Sep
(3) |
Oct
|
Nov
(11) |
Dec
(5) |
2015 |
Jan
|
Feb
(6) |
Mar
(4) |
Apr
(40) |
May
(31) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(8) |
Nov
(13) |
Dec
|
2016 |
Jan
|
Feb
(1) |
Mar
(3) |
Apr
(15) |
May
(1) |
Jun
(38) |
Jul
(8) |
Aug
(15) |
Sep
|
Oct
(26) |
Nov
|
Dec
|
2017 |
Jan
(3) |
Feb
|
Mar
(11) |
Apr
(2) |
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(15) |
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(7) |
Aug
(4) |
Sep
(1) |
Oct
(2) |
Nov
|
Dec
(2) |
2019 |
Jan
|
Feb
|
Mar
|
Apr
(25) |
May
(10) |
Jun
(9) |
Jul
(5) |
Aug
(1) |
Sep
|
Oct
(4) |
Nov
(9) |
Dec
(5) |
2020 |
Jan
|
Feb
(1) |
Mar
(2) |
Apr
(9) |
May
(7) |
Jun
|
Jul
|
Aug
|
Sep
(6) |
Oct
|
Nov
(45) |
Dec
(18) |
2021 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(8) |
Nov
|
Dec
(35) |
2022 |
Jan
|
Feb
(12) |
Mar
(4) |
Apr
|
May
(1) |
Jun
(2) |
Jul
|
Aug
(5) |
Sep
|
Oct
(4) |
Nov
(9) |
Dec
|
2023 |
Jan
(2) |
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
(9) |
Nov
|
Dec
(6) |
2024 |
Jan
(2) |
Feb
|
Mar
(7) |
Apr
(25) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: Shiro K. <shi...@gm...> - 2024-09-03 17:57:01
|
I experimentally started to provide bleeding-edge tarballs automatically created from HEAD. As you know, you need the latest Gauche already installed to build from git repo. It poses a problem if the latest release has issues to build on your platform. The issue may be addressed in the git repo, but you can't pull and build it by yourself. You need a specially built tarball, in which the files that require working Gauche are all pre-generated. Previously, if the issue is grave enough, I created "snapshot" tarballs with a special version number, as "0.9.15-p1". That is a manual process, and it has its own version number and is installed separately. We don't want too many of them. The bleeding-edge tarball has a unique tarball name but has the same version number as the latest snapshot. It is specifically for those who need to install HEAD without having preinstalled Gauche. The easiest way to install a bleeding-edge tarball is to use get-gauche. The --version argument now accepts 'bleeding'. https://github.com/practical-scheme/get-gauche You can also download tarball from here: https://practical-scheme.net/gauche/releases --shiro |
From: Jens T. <ka...@ka...> - 2024-04-30 12:14:11
|
Jens Thiele <ka...@ka...> writes: > now I only don't know how to stop the linker from doing this > optimization looks like one has to pass -no-as-needed to the linker: (bookworm-amd64-sbuild)karme@amalthea:/tmp$ cwcompile -v --ldflags="-Wl,-no-as-needed -L. -lhello" test-libhello.scm gauche-package compile --verbose --cflags= --cppflags= --ldflags=-Wl,-no-as-needed -L. -lhello --libs= -L. -lhello libgauche-hello libgauche-hello.stub gcc -c '-I/usr/local/lib/gauche-0.98/0.9.15/include' -fPIC -o 'libgauche-hello.o' 'libgauche-hello.c' gcc -Wl,-no-as-needed -L. -lhello '-L/usr/local/lib/gauche-0.98/0.9.15/x86_64-pc-linux-gnu' '-L/usr/local/lib/gauche-0.98/site/x86_64-pc-linux-gnu' -shared -o libgauche-hello.so 'libgauche-hello.o' -lgauche-0.98 -lmbedtls -lcrypt -lrt -lm -lpthread -L. -lhello (bookworm-amd64-sbuild)karme@amalthea:/tmp$ LD_LIBRARY_PATH=. ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) dlsym(add) => 0x7f5e587ac0f9 #?- 42 |
From: Jens T. <ka...@ka...> - 2024-04-30 12:01:19
|
Shiro Kawai <shi...@gm...> writes: > What's the output of `nm libhello.so`? (bookworm-amd64-sbuild)karme@amalthea:/tmp$ nm libhello.so 0000000000003e78 d _DYNAMIC 0000000000003fe8 d _GLOBAL_OFFSET_TABLE_ w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable 00000000000020a0 r __FRAME_END__ 0000000000002000 r __GNU_EH_FRAME_HDR 0000000000004008 d __TMC_END__ w __cxa_finalize 00000000000010b0 t __do_global_dtors_aux 0000000000003e70 d __do_global_dtors_aux_fini_array_entry 0000000000004000 d __dso_handle 0000000000003e68 d __frame_dummy_init_array_entry w __gmon_start__ 0000000000001110 t _fini 0000000000001000 t _init 00000000000010f9 T add 0000000000004008 b completed.0 0000000000001040 t deregister_tm_clones 00000000000010f0 t frame_dummy 0000000000001070 t register_tm_clones > Could you also try the following patch to src/c-ffi.c? My take is that > the error is raised because dlsym returns NULL here, but I want to make > sure. > > ``` > *** c-ffi.c.orig Sun Apr 28 22:32:10 2024 > --- c-ffi.c Mon Apr 29 21:14:27 2024 > *************** > *** 624,630 **** > > static void *lookup_symbol(const char *sym) > { > ! return dlsym(RTLD_DEFAULT, sym); > } > > #endif > --- 624,632 ---- > > static void *lookup_symbol(const char *sym) > { > ! void *r = dlsym(RTLD_DEFAULT, sym); > ! fprintf(stderr, "dlsym(%s) => %p\n", sym, r); > ! return r; > } > > #endif > ``` (bookworm-amd64-sbuild)karme@amalthea:/tmp$ LD_LIBRARY_PATH=. ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) dlsym(add) => (nil) *** ERROR: function add is not found. Stack Trace: _______________________________________ 0 (report-error e) 1 (add 10 32) at "././test-libhello.scm":13 2 (main args) jens |
From: Jens T. <ka...@ka...> - 2024-04-30 08:09:14
|
Jens Thiele <ka...@ka...> writes: > i think i found the problem > > (bookworm-amd64-sbuild)karme@amalthea:/tmp$ cwcompile -v test-libhello.scm > gauche-package compile --verbose --cflags= --cppflags= --ldflags= --libs= -L. -lhello libgauche-hello libgauche-hello.stub > gcc -c '-I/usr/local/lib/gauche-0.98/0.9.15/include' -fPIC -o 'libgauche-hello.o' 'libgauche-hello.c' > gcc '-L/usr/local/lib/gauche-0.98/0.9.15/x86_64-pc-linux-gnu' > '-L/usr/local/lib/gauche-0.98/site/x86_64-pc-linux-gnu' -shared -o > libgauche-hello.so 'libgauche-hello.o' -lgauche-0.98 -lmbedtls -lcrypt > -lrt -lm -lpthread -L. -lhello > > but: > > (bookworm-amd64-sbuild)karme@amalthea:/tmp$ ldd ./libgauche-hello.so > linux-vdso.so.1 (0x00007ffd9b3f9000) > libgauche-0.98.so.0.15 => /usr/local/lib/libgauche-0.98.so.0.15 (0x00007f9f5a3a0000) > libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f5a1bf000) > libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f9f5a183000) > libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9f5a0a4000) > /lib64/ld-linux-x86-64.so.2 (0x00007f9f5afb9000) > > => the dependency on libhello.so somehow got optimized away? if i manually add something like this to the stub file: "extern int bar() { return add(0,10);}" the dependency isn't optimized away and it works (bookworm-amd64-sbuild)karme@amalthea:/tmp$ LD_LIBRARY_PATH=. ldd libgauche-hello.so linux-vdso.so.1 (0x00007ffd2758e000) libgauche-0.98.so.0.15 => /usr/local/lib/libgauche-0.98.so.0.15 (0x00007f39282a9000) libhello.so => ./libhello.so (0x00007f39282a4000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f39280c3000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f3928087000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3927fa8000) /lib64/ld-linux-x86-64.so.2 (0x00007f3928ec2000) now I only don't know how to stop the linker from doing this optimization jens |
From: Jens T. <ka...@ka...> - 2024-04-30 07:27:28
|
Jens Thiele <ka...@ka...> writes: > Jens Thiele <ka...@ka...> writes: > >> will have to dig further > > i repeated the test in a debian/bookworm chroot using official gauche > 0.9.15 and for me it still fails with: > > ERROR: function add is not found. i think i found the problem (bookworm-amd64-sbuild)karme@amalthea:/tmp$ cwcompile -v test-libhello.scm gauche-package compile --verbose --cflags= --cppflags= --ldflags= --libs= -L. -lhello libgauche-hello libgauche-hello.stub gcc -c '-I/usr/local/lib/gauche-0.98/0.9.15/include' -fPIC -o 'libgauche-hello.o' 'libgauche-hello.c' gcc '-L/usr/local/lib/gauche-0.98/0.9.15/x86_64-pc-linux-gnu' '-L/usr/local/lib/gauche-0.98/site/x86_64-pc-linux-gnu' -shared -o libgauche-hello.so 'libgauche-hello.o' -lgauche-0.98 -lmbedtls -lcrypt -lrt -lm -lpthread -L. -lhello but: (bookworm-amd64-sbuild)karme@amalthea:/tmp$ ldd ./libgauche-hello.so linux-vdso.so.1 (0x00007ffd9b3f9000) libgauche-0.98.so.0.15 => /usr/local/lib/libgauche-0.98.so.0.15 (0x00007f9f5a3a0000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f5a1bf000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f9f5a183000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9f5a0a4000) /lib64/ld-linux-x86-64.so.2 (0x00007f9f5afb9000) => the dependency on libhello.so somehow got optimized away? on the working system I have: karme@jupiter:~/cwcompile$ LD_LIBRARY_PATH=. ldd ./libgauche-hello.so linux-vdso.so.1 (0x00007ffe90da6000) libgauche-0.9.so.0 => /usr/lib/libgauche-0.9.so.0 (0x00007efe7ccd7000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efe7ccd2000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007efe7cc98000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efe7cc8e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efe7cb0b000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efe7caea000) libhello.so => ./libhello.so (0x00007efe7cae3000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efe7c923000) /lib64/ld-linux-x86-64.so.2 (0x00007efe7d2e5000) jens |
From: Shiro K. <shi...@gm...> - 2024-04-30 07:16:54
|
What's the output of `nm libhello.so`? Could you also try the following patch to src/c-ffi.c? My take is that the error is raised because dlsym returns NULL here, but I want to make sure. ``` *** c-ffi.c.orig Sun Apr 28 22:32:10 2024 --- c-ffi.c Mon Apr 29 21:14:27 2024 *************** *** 624,630 **** static void *lookup_symbol(const char *sym) { ! return dlsym(RTLD_DEFAULT, sym); } #endif --- 624,632 ---- static void *lookup_symbol(const char *sym) { ! void *r = dlsym(RTLD_DEFAULT, sym); ! fprintf(stderr, "dlsym(%s) => %p\n", sym, r); ! return r; } #endif ``` On Mon, Apr 29, 2024 at 8:52 PM Jens Thiele <ka...@ka...> wrote: > Jens Thiele <ka...@ka...> writes: > > > will have to dig further > > i repeated the test in a debian/bookworm chroot using official gauche > 0.9.15 and for me it still fails with: > > ERROR: function add is not found. > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-30 06:52:15
|
Jens Thiele <ka...@ka...> writes: > will have to dig further i repeated the test in a debian/bookworm chroot using official gauche 0.9.15 and for me it still fails with: ERROR: function add is not found. |
From: Jens T. <ka...@ka...> - 2024-04-29 19:23:26
|
Shiro Kawai <shi...@gm...> writes: > Ok, I tried to reproduce it. wow - thanks! > I started from Debian source (original tarball and patches in > https://packages.debian.org/buster/gauche-c-wrapper ), needed to fix a > few places to compile recent Gauche. Ah, I should have mentioned that I added some patches from Fabian Brosda for arch linux to my local debian/bookworm packages. s.a.: https://aur.archlinux.org/packages/gauche-c-wrapper https://www.karme.de/debian/pool/main/g/gauche-c-wrapper/ > But once it compiles, it seems to work with your example. strange > The error message you got is mysterious, for it is an error when > dlsym() fails to find the symbol. i will try to inspect this further > Here's the changes I made. The change of Scm_ReadStringLiteral() is > to avoid conflict with Gauche API with the same name. > > ===== > diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-ffi.c b/gauche-c-wrapper-0.6.1.updated/src/c-ffi.c > index 5f99d6b..8b7834b 100644 > --- a/gauche-c-wrapper-0.6.1.orig/src/c-ffi.c > +++ b/gauche-c-wrapper-0.6.1.updated/src/c-ffi.c > @@ -347,7 +347,7 @@ static ffi_type *ffi_type_of(ScmObj ctype) > } > sa = SCM_SLOT_ACCESSOR(SCM_CDR(p)); > if (0 <= sa->slotNumber) { > - return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber)); > + return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber, SCM_UNDEFINED)); > } else { > Scm_Error("wrong slot number: %d", sa->slotNumber); > } this is interesting as I have: return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber, NULL)); from: https://aur.archlinux.org/cgit/aur.git/tree/16_gauche_0_9_11_compat.patch?h=gauche-c-wrapper but changing it to SCM_UNDEFINED didn't help > diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lex.c b/gauche-c-wrapper-0.6.1.updated/src/c-lex.c > index 546a469..bab0a08 100644 > --- a/gauche-c-wrapper-0.6.1.orig/src/c-lex.c > +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lex.c > @@ -992,7 +992,7 @@ static ScmObj read_character_constant() > SCM_RETURN(Scm_MakeInteger(v)); > } > > -ScmObj Scm_ReadStringLiteral() > +ScmObj Scm_ReadCStringLiteral() > { > SCM_RETURN(read_string_literal()); > } > diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lex.h b/gauche-c-wrapper-0.6.1.updated/src/c-lex.h > index 47b3f15..3ce93fc 100644 > --- a/gauche-c-wrapper-0.6.1.orig/src/c-lex.h > +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lex.h > @@ -78,7 +78,7 @@ extern ScmObj Scm_IsForceIdentifierRef(); > extern ScmObj Scm_IsForceIdentifierSet(ScmObj v); > extern ScmObj Scm_ReadIdentifier(ScmObj l); > extern ScmObj Scm_ReadOperator(ScmObj c); > -extern ScmObj Scm_ReadStringLiteral(); > +extern ScmObj Scm_ReadCStringLiteral(); > extern ScmObj Scm_ReadCharacterConstant(); > extern ScmObj Scm_ReadOctalOrFlonum(ScmObj l); > extern ScmObj Scm_ReadDecimal(ScmObj l); this is basically identical to https://aur.archlinux.org/cgit/aur.git/tree/17_gauche_0_9_13_compat.patch?h=gauche-c-wrapper > diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lexlib.stub b/gauche-c-wrapper-0.6.1.updated/src/c-lexlib.stub > index 4138274..c70d7ed 100644 > --- a/gauche-c-wrapper-0.6.1.orig/src/c-lexlib.stub > +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lexlib.stub > @@ -40,7 +40,7 @@ > "if (nptr == endptr) {" > " SCM_RETURN(SCM_FALSE);" > "} else {" > - " SCM_RETURN(Scm_MakeInteger64((ScmInt64) v));" > + " SCM_RETURN(Scm_MakeInteger64((int64_t) v));" > "}")) > > (define-cproc strtod (nptr::<const-cstring>) > @@ -137,7 +137,7 @@ > (call "Scm_ReadOperator")) > > (define-cproc read-string-literal () > - (call "Scm_ReadStringLiteral")) > + (call "Scm_ReadCStringLiteral")) > > (define-cproc read-character-constant () > (call "Scm_ReadCharacterConstant")) > diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-parser.c b/gauche-c-wrapper-0.6.1.updated/src/c-parser.c > index 08c39dd..d221d30 100644 > --- a/gauche-c-wrapper-0.6.1.orig/src/c-parser.c > +++ b/gauche-c-wrapper-0.6.1.updated/src/c-parser.c > @@ -1691,7 +1691,7 @@ ScmObj Scm_ParseMacroCode(ScmObj in, ScmObj macro_list) > /* skip lines starting with "# [0-9]+ <stdin>" and join with following line */ > while (!SCM_EOFP(next_line_str) > && (SCM_STRING_LENGTH(next_line_str) > 2) > - && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(skip_regex), SCM_STRING(next_line_str)))) { > + && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(skip_regex), SCM_STRING(next_line_str), SCM_UNDEFINED, > SCM_UNDEFINED))) { > next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); > if (!SCM_EOFP(next_line_str)) { > line_str = Scm_StringAppend2(SCM_STRING(line_str), SCM_STRING(next_line_str)); this is like https://aur.archlinux.org/cgit/aur.git/tree/15_fix_scm_reg_exec.patch?h=gauche-c-wrapper hmm $ gosh ./test-libhello.scm works only $ gosh -I. ./test-libhello.scm doesn't but this is caused by the first version not finding the libgauche-hello.so and then falling back to normal operation (without cwcompiled library) will have to dig further jens |
From: Shiro K. <shi...@gm...> - 2024-04-29 17:09:31
|
Ok, I tried to reproduce it. I started from Debian source (original tarball and patches in https://packages.debian.org/buster/gauche-c-wrapper ), needed to fix a few places to compile recent Gauche. But once it compiles, it seems to work with your example. The error message you got is mysterious, for it is an error when dlsym() fails to find the symbol. Here's the changes I made. The change of Scm_ReadStringLiteral() is to avoid conflict with Gauche API with the same name. ===== diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-ffi.c b/gauche-c-wrapper-0.6.1.updated/src/c-ffi.c index 5f99d6b..8b7834b 100644 --- a/gauche-c-wrapper-0.6.1.orig/src/c-ffi.c +++ b/gauche-c-wrapper-0.6.1.updated/src/c-ffi.c @@ -347,7 +347,7 @@ static ffi_type *ffi_type_of(ScmObj ctype) } sa = SCM_SLOT_ACCESSOR(SCM_CDR(p)); if (0 <= sa->slotNumber) { - return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber)); + return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber, SCM_UNDEFINED)); } else { Scm_Error("wrong slot number: %d", sa->slotNumber); } diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lex.c b/gauche-c-wrapper-0.6.1.updated/src/c-lex.c index 546a469..bab0a08 100644 --- a/gauche-c-wrapper-0.6.1.orig/src/c-lex.c +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lex.c @@ -992,7 +992,7 @@ static ScmObj read_character_constant() SCM_RETURN(Scm_MakeInteger(v)); } -ScmObj Scm_ReadStringLiteral() +ScmObj Scm_ReadCStringLiteral() { SCM_RETURN(read_string_literal()); } diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lex.h b/gauche-c-wrapper-0.6.1.updated/src/c-lex.h index 47b3f15..3ce93fc 100644 --- a/gauche-c-wrapper-0.6.1.orig/src/c-lex.h +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lex.h @@ -78,7 +78,7 @@ extern ScmObj Scm_IsForceIdentifierRef(); extern ScmObj Scm_IsForceIdentifierSet(ScmObj v); extern ScmObj Scm_ReadIdentifier(ScmObj l); extern ScmObj Scm_ReadOperator(ScmObj c); -extern ScmObj Scm_ReadStringLiteral(); +extern ScmObj Scm_ReadCStringLiteral(); extern ScmObj Scm_ReadCharacterConstant(); extern ScmObj Scm_ReadOctalOrFlonum(ScmObj l); extern ScmObj Scm_ReadDecimal(ScmObj l); diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-lexlib.stub b/gauche-c-wrapper-0.6.1.updated/src/c-lexlib.stub index 4138274..c70d7ed 100644 --- a/gauche-c-wrapper-0.6.1.orig/src/c-lexlib.stub +++ b/gauche-c-wrapper-0.6.1.updated/src/c-lexlib.stub @@ -40,7 +40,7 @@ "if (nptr == endptr) {" " SCM_RETURN(SCM_FALSE);" "} else {" - " SCM_RETURN(Scm_MakeInteger64((ScmInt64) v));" + " SCM_RETURN(Scm_MakeInteger64((int64_t) v));" "}")) (define-cproc strtod (nptr::<const-cstring>) @@ -137,7 +137,7 @@ (call "Scm_ReadOperator")) (define-cproc read-string-literal () - (call "Scm_ReadStringLiteral")) + (call "Scm_ReadCStringLiteral")) (define-cproc read-character-constant () (call "Scm_ReadCharacterConstant")) diff --git a/gauche-c-wrapper-0.6.1.orig/src/c-parser.c b/gauche-c-wrapper-0.6.1.updated/src/c-parser.c index 08c39dd..d221d30 100644 --- a/gauche-c-wrapper-0.6.1.orig/src/c-parser.c +++ b/gauche-c-wrapper-0.6.1.updated/src/c-parser.c @@ -1691,7 +1691,7 @@ ScmObj Scm_ParseMacroCode(ScmObj in, ScmObj macro_list) /* skip lines starting with "# [0-9]+ <stdin>" and join with following line */ while (!SCM_EOFP(next_line_str) && (SCM_STRING_LENGTH(next_line_str) > 2) - && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(skip_regex), SCM_STRING(next_line_str)))) { + && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(skip_regex), SCM_STRING(next_line_str), SCM_UNDEFINED, SCM_UNDEFINED))) { next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); if (!SCM_EOFP(next_line_str)) { line_str = Scm_StringAppend2(SCM_STRING(line_str), SCM_STRING(next_line_str)); On Sun, Apr 28, 2024 at 7:07 AM Jens Thiele <ka...@ka...> wrote: > Hi, > > likely nobody can help (I think I am the only remaining user of gauche > c-wrapper?) but anyway here we go: > > gauche-c-wrapper's cwcompile stopped working with newer gauche versions > and so far I have no idea what's the problem. Maybe the stub file? > > A simple test script to create a simple shared library with an add > function that should be used via gauche c-wrapper: > > #!/bin/bash -xe > cat <<EOF > libhello.h > int add(int i, int j); > EOF > cat <<EOF > libhello.c > #include "libhello.h" > int add(int i, int j) { > return i+j; > } > EOF > gcc -shared -o libhello.so -fPIC libhello.c > cat <<'EOF' > test-libhello.scm > #!/bin/sh > #| -*- mode: scheme; coding: utf-8; -*- > exec gosh -I. -- $0 "$@" > |# > (use c-wrapper) > (c-load "libhello.h" > :libs "-L. -lhello" > :import '(add) > :compiled-lib "libgauche-hello.so" > ) > > (define (main args) > #?=(add 10 32) > 0) > EOF > chmod +x ./test-libhello.scm > rm -vf libgauche-hello.so > gosh -V > dpkg -l gauche > dpkg -l gauche-c-wrapper > ./test-libhello.scm > cwcompile -v test-libhello.scm > cat libgauche-hello.stub > LD_LIBRARY_PATH=. ./test-libhello.scm > > output on a old system with gauche 0.9.6 where it still works: > > $ ./test.sh > + cat > + cat > + gcc -shared -o libhello.so -fPIC libhello.c > + cat > + chmod +x ./test-libhello.scm > + rm -vf libgauche-hello.so > + gosh -V > Gauche scheme shell, version 0.9.6 [utf-8,pthreads], x86_64-pc-linux-gnu > + dpkg -l gauche > Desired=Unknown/Install/Remove/Purge/Hold > | > Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend > |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) > ||/ Name Version Architecture Description > > +++-==============-============-============-================================= > ii gauche 0.9.6-10 amd64 Scheme script engine > + dpkg -l gauche-c-wrapper > Desired=Unknown/Install/Remove/Purge/Hold > | > Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend > |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) > ||/ Name Version Architecture Description > > +++-================-============-============-==================================================== > ii gauche-c-wrapper 0.6.1-11 amd64 Foreign function interface > for Gauche to C libraries > + ./test-libhello.scm > #?="././test-libhello.scm":13:(add 10 32) > #?- 42 > + cwcompile -v test-libhello.scm > gauche-package compile --verbose --cflags= --cppflags= --ldflags= > --libs= -L. -lhello libgauche-hello libgauche-hello.stub > gcc -c '-I/usr/lib/gauche-0.9/0.9.6/include' > '-I/usr/lib/gauche-0.9/site/include' -fPIC -o 'libgauche-hello.o' > 'libgauche-hello.c' > gcc '-L/usr/lib/gauche-0.9/0.9.6/x86_64-pc-linux-gnu' > '-L/usr/lib/gauche-0.9/site/x86_64-pc-linux-gnu' -shared -o > libgauche-hello.so 'libgauche-hello.o' -lgauche-0.9 -ldl -lcrypt -lrt -lm > -lpthread -L. -lhello > + cat libgauche-hello.stub > ;;; > ;;; libgauche-hello.stub > ;;; > "#include \"stdlib.h\"" > "#include \"gauche.h\"" > "#include \"gauche/extend.h\"" > "#include \"gauche/uvector.h\"" > "#include \"libhello.h\"" > "/* Hack for initialization stub */" > "static void internal_init(ScmModule*);" > "static ScmObj __c_wrapper_mod;" > "static ScmObj __sandbox_mod;" > "void Scm_Init_libgauche_hello(void)" > "{" > " SCM_INIT_EXTENSION(libgauche_hello);" > " __c_wrapper_mod = > Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", > FALSE), SCM_SYMBOL(SCM_INTERN(\"ffi-sandbox-module\")), FALSE));" > " __sandbox_mod = > Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper\", FALSE), > SCM_SYMBOL(SCM_INTERN(\"sandbox-module\")), FALSE));" > " internal_init(SCM_MODULE(__c_wrapper_mod));" > "}" > "#define Scm_Init_libgauche_hello internal_init" > "#define INIT_SYMVAL(var, sym) if (!var) { var = > Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(SCM_INTERN(sym)), FALSE); }" > "static ScmObj cw_boxvar(ScmObj klass, void *varptr)" > "{" > " static ScmObj make_proc = NULL;" > " static ScmObj csizeof_proc = NULL;" > " ScmObj obj;" > " ScmObj buf;" > " size_t size;" > " INIT_SYMVAL(make_proc, \"make\");" > " INIT_SYMVAL(csizeof_proc, \"c-sizeof\");" > " size = Scm_GetIntegerU(Scm_ApplyRec1(csizeof_proc, klass));" > " buf = Scm_MakeU8VectorFromArrayShared(size, varptr);" > " obj = Scm_ApplyRec3(make_proc, klass, SCM_MAKE_KEYWORD(\"buffer\"), > buf);" > " SCM_RETURN(obj);" > "}" > "static void cw_unbox(void *dest, ScmObj obj, size_t size)" > "{" > " static ScmObj bufferof_proc = NULL;" > " ScmObj buf;" > " if (!bufferof_proc) {" > " bufferof_proc = > Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), > SCM_SYMBOL(SCM_INTERN(\"buffer-of\")), FALSE);" > " }" > " buf = Scm_ApplyRec1(bufferof_proc, obj);" > " memcpy(dest, SCM_UVECTOR_ELEMENTS(buf), size);" > "}" > "static ScmObj __c_wrapper_979; /* add */" > (define-symbol make-c-func "__c_wrapper_974") > (define-symbol quote "__c_wrapper_975") > (define-symbol add "__c_wrapper_976") > (define-symbol <c-int> "__c_wrapper_977") > (define-symbol list "__c_wrapper_978") > (initcode "__c_wrapper_979 = Scm_EvalRec(SCM_LIST4(__c_wrapper_974, > SCM_LIST2(__c_wrapper_975, __c_wrapper_976), __c_wrapper_977, > SCM_LIST3(__c_wrapper_978, __c_wrapper_977, __c_wrapper_977)), > SCM_OBJ(__c_wrapper_mod));") > (initcode "Scm_Define(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(__c_wrapper_976), __c_wrapper_979);") > (initcode "Scm_Define(SCM_MODULE(__sandbox_mod), > SCM_SYMBOL(__c_wrapper_976), > Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(__c_wrapper_976), 0));") > ;; Local variables: > ;; mode: scheme > ;; end: > + LD_LIBRARY_PATH=. > + ./test-libhello.scm > #?="././test-libhello.scm":13:(add 10 32) > #?- 42 > > output on a newer system (gauche 0.9.14) where it doesn't work: > > $ ./test-libhello.sh > + cat > + cat > + gcc -shared -o libhello.so -fPIC libhello.c > + cat > + chmod +x ./test-libhello.scm > + rm -vf libgauche-hello.so > 'libgauche-hello.so' wurde entfernt > + gosh -V > Gauche scheme shell, version 0.9.14 [utf-8,pthreads], x86_64-pc-linux-gnu > (version "0.9.14") > (command "gosh") > (scheme.id gauche) > (languages scheme r5rs r7rs) > (encodings utf-8) > (website "https://practical-scheme.net/gauche") > (build.platform "x86_64-pc-linux-gnu") > (build.configure) > (scheme.path "/usr/share/gauche-0.98/site/lib" > "/usr/share/gauche-0.98/0.9.14/lib") > (threads pthreads) > (gauche.net.tls mbedtls) > + dpkg -l gauche > > Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten > | Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/ > Halb installiert/Trigger erWartet/Trigger anhängig > |/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: > GROSS=schlecht) > ||/ Name Version Architektur Beschreibung > > +++-==============-==================-============-================================= > ii gauche 0.9.14-5~bookworm3 amd64 Scheme script engine > + dpkg -l gauche-c-wrapper > > Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten > | Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/ > Halb installiert/Trigger erWartet/Trigger anhängig > |/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: > GROSS=schlecht) > ||/ Name Version Architektur Beschreibung > > +++-================-==================-============-==================================================== > ii gauche-c-wrapper 0.6.1-16~bookworm1 amd64 Foreign function > interface for Gauche to C libraries > + ./test-libhello.scm > #?="././test-libhello.scm":13:(add 10 32) > #?- 42 > + cwcompile -v test-libhello.scm > gauche-package compile --verbose --cflags= --cppflags= --ldflags= > --libs= -L. -lhello libgauche-hello libgauche-hello.stub > gcc -c '-I/usr/lib/gauche-0.98/0.9.14/include' > '-I/usr/lib/gauche-0.98/site/include' -fPIC -o 'libgauche-hello.o' > 'libgauche-hello.c' > gcc '-L/usr/lib/gauche-0.98/0.9.14/x86_64-pc-linux-gnu' > '-L/usr/lib/gauche-0.98/site/x86_64-pc-linux-gnu' -shared -o > libgauche-hello.so 'libgauche-hello.o' -lgauche-0.98 -lmbedtls -lcrypt -lrt > -lm -lpthread -L. -lhello > + cat libgauche-hello.stub > ;;; > ;;; libgauche-hello.stub > ;;; > "#include \"stdlib.h\"" > "#include \"gauche.h\"" > "#include \"gauche/extend.h\"" > "#include \"gauche/uvector.h\"" > "#include \"libhello.h\"" > "/* Hack for initialization stub */" > "static void internal_init(ScmModule*);" > "static ScmObj __c_wrapper_mod;" > "static ScmObj __sandbox_mod;" > "void Scm_Init_libgauche_hello(void)" > "{" > " SCM_INIT_EXTENSION(libgauche_hello);" > " __c_wrapper_mod = > Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", > FALSE), SCM_SYMBOL(SCM_INTERN(\"ffi-sandbox-module\")), FALSE));" > " __sandbox_mod = > Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper\", FALSE), > SCM_SYMBOL(SCM_INTERN(\"sandbox-module\")), FALSE));" > " internal_init(SCM_MODULE(__c_wrapper_mod));" > "}" > "#define Scm_Init_libgauche_hello internal_init" > "#define INIT_SYMVAL(var, sym) if (!var) { var = > Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(SCM_INTERN(sym)), FALSE); }" > "static ScmObj cw_boxvar(ScmObj klass, void *varptr)" > "{" > " static ScmObj make_proc = NULL;" > " static ScmObj csizeof_proc = NULL;" > " ScmObj obj;" > " ScmObj buf;" > " size_t size;" > " INIT_SYMVAL(make_proc, \"make\");" > " INIT_SYMVAL(csizeof_proc, \"c-sizeof\");" > " size = Scm_GetIntegerU(Scm_ApplyRec1(csizeof_proc, klass));" > " buf = Scm_MakeU8VectorFromArrayShared(size, varptr);" > " obj = Scm_ApplyRec3(make_proc, klass, SCM_MAKE_KEYWORD(\"buffer\"), > buf);" > " SCM_RETURN(obj);" > "}" > "static void cw_unbox(void *dest, ScmObj obj, size_t size)" > "{" > " static ScmObj bufferof_proc = NULL;" > " ScmObj buf;" > " if (!bufferof_proc) {" > " bufferof_proc = > Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), > SCM_SYMBOL(SCM_INTERN(\"buffer-of\")), FALSE);" > " }" > " buf = Scm_ApplyRec1(bufferof_proc, obj);" > " memcpy(dest, SCM_UVECTOR_ELEMENTS(buf), size);" > "}" > "static ScmObj __c_wrapper_894; /* add */" > (define-symbol make-c-func "__c_wrapper_889") > (define-symbol quote "__c_wrapper_890") > (define-symbol add "__c_wrapper_891") > (define-symbol <c-int> "__c_wrapper_892") > (define-symbol list "__c_wrapper_893") > (initcode "__c_wrapper_894 = Scm_EvalRec(SCM_LIST4(__c_wrapper_889, > SCM_LIST2(__c_wrapper_890, __c_wrapper_891), __c_wrapper_892, > SCM_LIST3(__c_wrapper_893, __c_wrapper_892, __c_wrapper_892)), > SCM_OBJ(__c_wrapper_mod));") > (initcode "Scm_Define(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(__c_wrapper_891), __c_wrapper_894);") > (initcode "Scm_Define(SCM_MODULE(__sandbox_mod), > SCM_SYMBOL(__c_wrapper_891), > Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), > SCM_SYMBOL(__c_wrapper_891), 0));") > ;; Local variables: > ;; mode: scheme > ;; end: > + LD_LIBRARY_PATH=. > + ./test-libhello.scm > #?="././test-libhello.scm":13:(add 10 32) > *** ERROR: function add is not found. > Stack Trace: > _______________________________________ > 0 (report-error e) > 1 (add 10 32) > at "././test-libhello.scm":13 > 2 (main args) > > greetings > Jens > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-28 17:07:25
|
Hi, likely nobody can help (I think I am the only remaining user of gauche c-wrapper?) but anyway here we go: gauche-c-wrapper's cwcompile stopped working with newer gauche versions and so far I have no idea what's the problem. Maybe the stub file? A simple test script to create a simple shared library with an add function that should be used via gauche c-wrapper: #!/bin/bash -xe cat <<EOF > libhello.h int add(int i, int j); EOF cat <<EOF > libhello.c #include "libhello.h" int add(int i, int j) { return i+j; } EOF gcc -shared -o libhello.so -fPIC libhello.c cat <<'EOF' > test-libhello.scm #!/bin/sh #| -*- mode: scheme; coding: utf-8; -*- exec gosh -I. -- $0 "$@" |# (use c-wrapper) (c-load "libhello.h" :libs "-L. -lhello" :import '(add) :compiled-lib "libgauche-hello.so" ) (define (main args) #?=(add 10 32) 0) EOF chmod +x ./test-libhello.scm rm -vf libgauche-hello.so gosh -V dpkg -l gauche dpkg -l gauche-c-wrapper ./test-libhello.scm cwcompile -v test-libhello.scm cat libgauche-hello.stub LD_LIBRARY_PATH=. ./test-libhello.scm output on a old system with gauche 0.9.6 where it still works: $ ./test.sh + cat + cat + gcc -shared -o libhello.so -fPIC libhello.c + cat + chmod +x ./test-libhello.scm + rm -vf libgauche-hello.so + gosh -V Gauche scheme shell, version 0.9.6 [utf-8,pthreads], x86_64-pc-linux-gnu + dpkg -l gauche Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-============-============-================================= ii gauche 0.9.6-10 amd64 Scheme script engine + dpkg -l gauche-c-wrapper Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================-============-============-==================================================== ii gauche-c-wrapper 0.6.1-11 amd64 Foreign function interface for Gauche to C libraries + ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) #?- 42 + cwcompile -v test-libhello.scm gauche-package compile --verbose --cflags= --cppflags= --ldflags= --libs= -L. -lhello libgauche-hello libgauche-hello.stub gcc -c '-I/usr/lib/gauche-0.9/0.9.6/include' '-I/usr/lib/gauche-0.9/site/include' -fPIC -o 'libgauche-hello.o' 'libgauche-hello.c' gcc '-L/usr/lib/gauche-0.9/0.9.6/x86_64-pc-linux-gnu' '-L/usr/lib/gauche-0.9/site/x86_64-pc-linux-gnu' -shared -o libgauche-hello.so 'libgauche-hello.o' -lgauche-0.9 -ldl -lcrypt -lrt -lm -lpthread -L. -lhello + cat libgauche-hello.stub ;;; ;;; libgauche-hello.stub ;;; "#include \"stdlib.h\"" "#include \"gauche.h\"" "#include \"gauche/extend.h\"" "#include \"gauche/uvector.h\"" "#include \"libhello.h\"" "/* Hack for initialization stub */" "static void internal_init(ScmModule*);" "static ScmObj __c_wrapper_mod;" "static ScmObj __sandbox_mod;" "void Scm_Init_libgauche_hello(void)" "{" " SCM_INIT_EXTENSION(libgauche_hello);" " __c_wrapper_mod = Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), SCM_SYMBOL(SCM_INTERN(\"ffi-sandbox-module\")), FALSE));" " __sandbox_mod = Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper\", FALSE), SCM_SYMBOL(SCM_INTERN(\"sandbox-module\")), FALSE));" " internal_init(SCM_MODULE(__c_wrapper_mod));" "}" "#define Scm_Init_libgauche_hello internal_init" "#define INIT_SYMVAL(var, sym) if (!var) { var = Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(SCM_INTERN(sym)), FALSE); }" "static ScmObj cw_boxvar(ScmObj klass, void *varptr)" "{" " static ScmObj make_proc = NULL;" " static ScmObj csizeof_proc = NULL;" " ScmObj obj;" " ScmObj buf;" " size_t size;" " INIT_SYMVAL(make_proc, \"make\");" " INIT_SYMVAL(csizeof_proc, \"c-sizeof\");" " size = Scm_GetIntegerU(Scm_ApplyRec1(csizeof_proc, klass));" " buf = Scm_MakeU8VectorFromArrayShared(size, varptr);" " obj = Scm_ApplyRec3(make_proc, klass, SCM_MAKE_KEYWORD(\"buffer\"), buf);" " SCM_RETURN(obj);" "}" "static void cw_unbox(void *dest, ScmObj obj, size_t size)" "{" " static ScmObj bufferof_proc = NULL;" " ScmObj buf;" " if (!bufferof_proc) {" " bufferof_proc = Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), SCM_SYMBOL(SCM_INTERN(\"buffer-of\")), FALSE);" " }" " buf = Scm_ApplyRec1(bufferof_proc, obj);" " memcpy(dest, SCM_UVECTOR_ELEMENTS(buf), size);" "}" "static ScmObj __c_wrapper_979; /* add */" (define-symbol make-c-func "__c_wrapper_974") (define-symbol quote "__c_wrapper_975") (define-symbol add "__c_wrapper_976") (define-symbol <c-int> "__c_wrapper_977") (define-symbol list "__c_wrapper_978") (initcode "__c_wrapper_979 = Scm_EvalRec(SCM_LIST4(__c_wrapper_974, SCM_LIST2(__c_wrapper_975, __c_wrapper_976), __c_wrapper_977, SCM_LIST3(__c_wrapper_978, __c_wrapper_977, __c_wrapper_977)), SCM_OBJ(__c_wrapper_mod));") (initcode "Scm_Define(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(__c_wrapper_976), __c_wrapper_979);") (initcode "Scm_Define(SCM_MODULE(__sandbox_mod), SCM_SYMBOL(__c_wrapper_976), Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(__c_wrapper_976), 0));") ;; Local variables: ;; mode: scheme ;; end: + LD_LIBRARY_PATH=. + ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) #?- 42 output on a newer system (gauche 0.9.14) where it doesn't work: $ ./test-libhello.sh + cat + cat + gcc -shared -o libhello.so -fPIC libhello.c + cat + chmod +x ./test-libhello.scm + rm -vf libgauche-hello.so 'libgauche-hello.so' wurde entfernt + gosh -V Gauche scheme shell, version 0.9.14 [utf-8,pthreads], x86_64-pc-linux-gnu (version "0.9.14") (command "gosh") (scheme.id gauche) (languages scheme r5rs r7rs) (encodings utf-8) (website "https://practical-scheme.net/gauche") (build.platform "x86_64-pc-linux-gnu") (build.configure) (scheme.path "/usr/share/gauche-0.98/site/lib" "/usr/share/gauche-0.98/0.9.14/lib") (threads pthreads) (gauche.net.tls mbedtls) + dpkg -l gauche Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten | Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/ Halb installiert/Trigger erWartet/Trigger anhängig |/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht) ||/ Name Version Architektur Beschreibung +++-==============-==================-============-================================= ii gauche 0.9.14-5~bookworm3 amd64 Scheme script engine + dpkg -l gauche-c-wrapper Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten | Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/ Halb installiert/Trigger erWartet/Trigger anhängig |/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht) ||/ Name Version Architektur Beschreibung +++-================-==================-============-==================================================== ii gauche-c-wrapper 0.6.1-16~bookworm1 amd64 Foreign function interface for Gauche to C libraries + ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) #?- 42 + cwcompile -v test-libhello.scm gauche-package compile --verbose --cflags= --cppflags= --ldflags= --libs= -L. -lhello libgauche-hello libgauche-hello.stub gcc -c '-I/usr/lib/gauche-0.98/0.9.14/include' '-I/usr/lib/gauche-0.98/site/include' -fPIC -o 'libgauche-hello.o' 'libgauche-hello.c' gcc '-L/usr/lib/gauche-0.98/0.9.14/x86_64-pc-linux-gnu' '-L/usr/lib/gauche-0.98/site/x86_64-pc-linux-gnu' -shared -o libgauche-hello.so 'libgauche-hello.o' -lgauche-0.98 -lmbedtls -lcrypt -lrt -lm -lpthread -L. -lhello + cat libgauche-hello.stub ;;; ;;; libgauche-hello.stub ;;; "#include \"stdlib.h\"" "#include \"gauche.h\"" "#include \"gauche/extend.h\"" "#include \"gauche/uvector.h\"" "#include \"libhello.h\"" "/* Hack for initialization stub */" "static void internal_init(ScmModule*);" "static ScmObj __c_wrapper_mod;" "static ScmObj __sandbox_mod;" "void Scm_Init_libgauche_hello(void)" "{" " SCM_INIT_EXTENSION(libgauche_hello);" " __c_wrapper_mod = Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), SCM_SYMBOL(SCM_INTERN(\"ffi-sandbox-module\")), FALSE));" " __sandbox_mod = Scm_ApplyRec0(Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper\", FALSE), SCM_SYMBOL(SCM_INTERN(\"sandbox-module\")), FALSE));" " internal_init(SCM_MODULE(__c_wrapper_mod));" "}" "#define Scm_Init_libgauche_hello internal_init" "#define INIT_SYMVAL(var, sym) if (!var) { var = Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(SCM_INTERN(sym)), FALSE); }" "static ScmObj cw_boxvar(ScmObj klass, void *varptr)" "{" " static ScmObj make_proc = NULL;" " static ScmObj csizeof_proc = NULL;" " ScmObj obj;" " ScmObj buf;" " size_t size;" " INIT_SYMVAL(make_proc, \"make\");" " INIT_SYMVAL(csizeof_proc, \"c-sizeof\");" " size = Scm_GetIntegerU(Scm_ApplyRec1(csizeof_proc, klass));" " buf = Scm_MakeU8VectorFromArrayShared(size, varptr);" " obj = Scm_ApplyRec3(make_proc, klass, SCM_MAKE_KEYWORD(\"buffer\"), buf);" " SCM_RETURN(obj);" "}" "static void cw_unbox(void *dest, ScmObj obj, size_t size)" "{" " static ScmObj bufferof_proc = NULL;" " ScmObj buf;" " if (!bufferof_proc) {" " bufferof_proc = Scm_GlobalVariableRef(SCM_FIND_MODULE(\"c-wrapper.c-ffi\", FALSE), SCM_SYMBOL(SCM_INTERN(\"buffer-of\")), FALSE);" " }" " buf = Scm_ApplyRec1(bufferof_proc, obj);" " memcpy(dest, SCM_UVECTOR_ELEMENTS(buf), size);" "}" "static ScmObj __c_wrapper_894; /* add */" (define-symbol make-c-func "__c_wrapper_889") (define-symbol quote "__c_wrapper_890") (define-symbol add "__c_wrapper_891") (define-symbol <c-int> "__c_wrapper_892") (define-symbol list "__c_wrapper_893") (initcode "__c_wrapper_894 = Scm_EvalRec(SCM_LIST4(__c_wrapper_889, SCM_LIST2(__c_wrapper_890, __c_wrapper_891), __c_wrapper_892, SCM_LIST3(__c_wrapper_893, __c_wrapper_892, __c_wrapper_892)), SCM_OBJ(__c_wrapper_mod));") (initcode "Scm_Define(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(__c_wrapper_891), __c_wrapper_894);") (initcode "Scm_Define(SCM_MODULE(__sandbox_mod), SCM_SYMBOL(__c_wrapper_891), Scm_GlobalVariableRef(SCM_MODULE(__c_wrapper_mod), SCM_SYMBOL(__c_wrapper_891), 0));") ;; Local variables: ;; mode: scheme ;; end: + LD_LIBRARY_PATH=. + ./test-libhello.scm #?="././test-libhello.scm":13:(add 10 32) *** ERROR: function add is not found. Stack Trace: _______________________________________ 0 (report-error e) 1 (add 10 32) at "././test-libhello.scm":13 2 (main args) greetings Jens |
From: Shiro K. <shi...@gm...> - 2024-04-24 01:52:07
|
Release 0.9.15 is out - Security fix on Windows when you run .bat or .cmd files - Stand-alone binary build was broken in 0.9.14 - Newer MbedTLS adoption - Fix O(n) in size-of method - New srfis: 215, 238, 247 - Improved extension building (switch from genstub to precomp) etc. Release notes for the details: https://practical-scheme.net/gauche/gmemo/?Release%200.9.15 Files: https://github.com/shirok/Gauche/releases/tag/release0_9_15 |
From: Shiro K. <shi...@gm...> - 2024-04-23 07:41:35
|
Thanks! On Mon, Apr 22, 2024 at 8:39 PM Jens Thiele <ka...@ka...> wrote: > Shiro Kawai <shi...@gm...> writes: > > > As mentioned before, we'll release 0.9.15. Here's release candidate 1 > for > > testing. > > > > It does fix a security vulnerability, but it only concerns the Windows > > platform and certain conditions to be met. If you're not using Gauche on > > Windows, you don't need to update. Though, it contains a few useful > fixes > > as well. > > > > Draft release note. > > https://practical-scheme.net/gauche/gmemo/?Release%200.9.15 > > > > Tarballs and Windows installers: > > > > https://practical-scheme.net/vault/Gauche-0.9.15_rc1.tgz > > make check on debian/sid x86_64 aka amd64 > > Total: 39739 tests, 39739 passed, 0 failed, 0 aborted. > > Greetings, > Jens > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-23 06:39:05
|
Shiro Kawai <shi...@gm...> writes: > As mentioned before, we'll release 0.9.15. Here's release candidate 1 for > testing. > > It does fix a security vulnerability, but it only concerns the Windows > platform and certain conditions to be met. If you're not using Gauche on > Windows, you don't need to update. Though, it contains a few useful fixes > as well. > > Draft release note. > https://practical-scheme.net/gauche/gmemo/?Release%200.9.15 > > Tarballs and Windows installers: > > https://practical-scheme.net/vault/Gauche-0.9.15_rc1.tgz make check on debian/sid x86_64 aka amd64 Total: 39739 tests, 39739 passed, 0 failed, 0 aborted. Greetings, Jens |
From: Shiro K. <shi...@gm...> - 2024-04-21 09:06:45
|
As mentioned before, we'll release 0.9.15. Here's release candidate 1 for testing. It does fix a security vulnerability, but it only concerns the Windows platform and certain conditions to be met. If you're not using Gauche on Windows, you don't need to update. Though, it contains a few useful fixes as well. Draft release note. https://practical-scheme.net/gauche/gmemo/?Release%200.9.15 Tarballs and Windows installers: https://practical-scheme.net/vault/Gauche-0.9.15_rc1.tgz https://practical-scheme.net/vault/Gauche-mingw-0.9.15_rc1-64bit.msi https://practical-scheme.net/vault/Gauche-mingw-0.9.15_rc1-32bit.msi |
From: Shiro K. <shi...@gm...> - 2024-04-18 08:40:20
|
Okay, there have been a few notable fixes since the last release and one of them is a security fix, so it's time for another pre-1.0 release! (I got a feeling that I should've named the version as 0.9.99, 0.9.999, 0.9.9999 etc.) The security fix is about the command-line argument processing of Windows cmd.exe. Gauche is affected if you run .bat or .cmd file via sys-exec (or do-process, run-process etc.) It is easier to avoid in Gauche, for you need to give .bat or .cmd extensions explicitly to run those files (we don't rely on CreateProcess()'s feature to search with additional extensions). Nevertheless, it is a security vulnerability so it's better to have it plugged. https://kb.cert.org/vuls/id/123335 A couple of potential show-stopper bugs: - build-standalone has been broken. - TLS didn't work with newer MbedTLS. Quite a few other bug fixes and a few new srfis will also be included. --shiro |
From: Shiro K. <shi...@gm...> - 2024-04-18 07:48:09
|
R7RS has a pretty comprehensive table of all corner cases, but (atan 0 0) is said to be undefined (when both arguments are exact zeros). I decided to return NaN to prevent people from accidentally relying on any specific value. On Wed, Apr 17, 2024 at 9:23 PM Jens Thiele <ka...@ka...> wrote: > Shiro Kawai <shi...@gm...> writes: > > > Fix pushed. Also realized that (atan 0.0 0) and (atan -0.0 0) need a > > special treatment (the second arg is exact). > > Thanks! > > Total: 39739 tests, 39739 passed, 0 failed, 0 aborted. > > gosh$ (gauche-version) > "0.9.14-p1" > gosh$ (radians->degrees (atan 0 -1)) > 180.0 > > Greetings > Jens > > PS: at the moment I don't really want to follow into the (atan ±0 ±0) > rabbit hole but: > > gosh$ (atan 0 0) > +nan.0 > > scheme@(guile-user)> (atan 0 0) > $16 = 0.0 > > emacs > (atan 0 0) > 0.0 > > sbcl > * (atan 0 0) > 0.0 > > chicken > #;1> (atan 0 0) > 0.0 > > C > atan2(0,0) > 0.0 > > maxima: > (%i1) atan2(0,0); > > atan2: atan2(0,0) is undefined. > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-18 07:23:07
|
Shiro Kawai <shi...@gm...> writes: > Fix pushed. Also realized that (atan 0.0 0) and (atan -0.0 0) need a > special treatment (the second arg is exact). Thanks! Total: 39739 tests, 39739 passed, 0 failed, 0 aborted. gosh$ (gauche-version) "0.9.14-p1" gosh$ (radians->degrees (atan 0 -1)) 180.0 Greetings Jens PS: at the moment I don't really want to follow into the (atan ±0 ±0) rabbit hole but: gosh$ (atan 0 0) +nan.0 scheme@(guile-user)> (atan 0 0) $16 = 0.0 emacs (atan 0 0) 0.0 sbcl * (atan 0 0) 0.0 chicken #;1> (atan 0 0) 0.0 C atan2(0,0) 0.0 maxima: (%i1) atan2(0,0); atan2: atan2(0,0) is undefined. |
From: Shiro K. <shi...@gm...> - 2024-04-17 20:26:28
|
Fix pushed. Also realized that (atan 0.0 0) and (atan -0.0 0) need a special treatment (the second arg is exact). On Wed, Apr 17, 2024 at 9:04 AM Shiro Kawai <shi...@gm...> wrote: > Good catch. It looks like I thought exact zero needed to be returned for > exact zero. I don't remember why. > > On Wed, Apr 17, 2024 at 4:13 AM Jens Thiele <ka...@ka...> wrote: > >> Hi, >> >> gosh> (gauche-version) >> "0.9.14" >> gosh> (radians->degrees (real-atan 0 -1)) >> 180.0 >> gosh> (radians->degrees (angle (make-rectangular -1 0))) >> 180.0 >> gosh> (radians->degrees (atan 0.0 -1)) >> 180.0 >> ;; oops >> gosh> (radians->degrees (atan 0 -1)) >> 0.0 >> >> Greetings, >> Jens >> >> >> _______________________________________________ >> Gauche-devel mailing list >> Gau...@li... >> https://lists.sourceforge.net/lists/listinfo/gauche-devel >> > |
From: Shiro K. <shi...@gm...> - 2024-04-17 19:05:00
|
Good catch. It looks like I thought exact zero needed to be returned for exact zero. I don't remember why. On Wed, Apr 17, 2024 at 4:13 AM Jens Thiele <ka...@ka...> wrote: > Hi, > > gosh> (gauche-version) > "0.9.14" > gosh> (radians->degrees (real-atan 0 -1)) > 180.0 > gosh> (radians->degrees (angle (make-rectangular -1 0))) > 180.0 > gosh> (radians->degrees (atan 0.0 -1)) > 180.0 > ;; oops > gosh> (radians->degrees (atan 0 -1)) > 0.0 > > Greetings, > Jens > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-17 14:12:40
|
Hi, gosh> (gauche-version) "0.9.14" gosh> (radians->degrees (real-atan 0 -1)) 180.0 gosh> (radians->degrees (angle (make-rectangular -1 0))) 180.0 gosh> (radians->degrees (atan 0.0 -1)) 180.0 ;; oops gosh> (radians->degrees (atan 0 -1)) 0.0 Greetings, Jens |
From: Shiro K. <shi...@gm...> - 2024-04-05 07:03:22
|
Hmm, alignas() seems to be applied to variable definition but not in a part of typedef, so it can't be easily used with the current SCM_ALIGN8 macro, which is expanded into __attribute__((aligned(8))) if __GNUC__. We'll track this issue in https://github.com/shirok/Gauche/issues/1011 On Thu, Apr 4, 2024 at 4:34 PM Shiro Kawai <shi...@gm...> wrote: > Thanks, I realized we already checked the existence of stdalign.h, so we > can assume availability of _Alignas if the header exists. > > > > On Thu, Apr 4, 2024 at 3:08 PM NIIBE Yutaka <gn...@fs...> wrote: > >> Hello, again, >> >> Shiro Kawai <shi...@gm...> wrote: >> > I applied the fixes and pushed the commits. >> >> Thank you for your quick work. >> >> >> After I submitted the patches, I leaned that C11 supports "_Alignas" in >> the declaration syntax. Similarly, C23 has "alignas". >> >> https://en.cppreference.com/w/c/language/_Alignas >> >> So, if/when needed for some newer compilers other than GCC, use of >> "_Alignas" or "alignas" would be good. >> >> I checked autoconf and autoconf-archive for checking the feature, but I >> haven't found any existing macro for that. >> >> >> And I found that signed integer overflow is specifically addressed in >> the GNU C Reference Manual: >> >> https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Overflow >> >> I learned that it's from the Autoconf manual. >> >> >> It's fun to see there are still things to learn in the language (or any >> languages). Well, it's a season to start something in Japan. I just >> bought the textbook of NHK radio program for Chinese language. >> -- >> > |
From: Shiro K. <shi...@gm...> - 2024-04-05 02:35:17
|
Thanks, I realized we already checked the existence of stdalign.h, so we can assume availability of _Alignas if the header exists. On Thu, Apr 4, 2024 at 3:08 PM NIIBE Yutaka <gn...@fs...> wrote: > Hello, again, > > Shiro Kawai <shi...@gm...> wrote: > > I applied the fixes and pushed the commits. > > Thank you for your quick work. > > > After I submitted the patches, I leaned that C11 supports "_Alignas" in > the declaration syntax. Similarly, C23 has "alignas". > > https://en.cppreference.com/w/c/language/_Alignas > > So, if/when needed for some newer compilers other than GCC, use of > "_Alignas" or "alignas" would be good. > > I checked autoconf and autoconf-archive for checking the feature, but I > haven't found any existing macro for that. > > > And I found that signed integer overflow is specifically addressed in > the GNU C Reference Manual: > > https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Overflow > > I learned that it's from the Autoconf manual. > > > It's fun to see there are still things to learn in the language (or any > languages). Well, it's a season to start something in Japan. I just > bought the textbook of NHK radio program for Chinese language. > -- > |
From: NIIBE Y. <gn...@fs...> - 2024-04-05 01:08:53
|
Hello, again, Shiro Kawai <shi...@gm...> wrote: > I applied the fixes and pushed the commits. Thank you for your quick work. After I submitted the patches, I leaned that C11 supports "_Alignas" in the declaration syntax. Similarly, C23 has "alignas". https://en.cppreference.com/w/c/language/_Alignas So, if/when needed for some newer compilers other than GCC, use of "_Alignas" or "alignas" would be good. I checked autoconf and autoconf-archive for checking the feature, but I haven't found any existing macro for that. And I found that signed integer overflow is specifically addressed in the GNU C Reference Manual: https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Overflow I learned that it's from the Autoconf manual. It's fun to see there are still things to learn in the language (or any languages). Well, it's a season to start something in Japan. I just bought the textbook of NHK radio program for Chinese language. -- |
From: Shiro K. <shi...@gm...> - 2024-04-04 11:14:02
|
Mahalo, NIIBE-san and Jens, I applied the fixes and pushed the commits. --shiro On Wed, Apr 3, 2024 at 9:38 PM Jens Thiele <ka...@ka...> wrote: > NIIBE Yutaka <gn...@fs...> writes: > > > Hello, > > > > Thanks to Jens Thiele, Gauche is now again available in Debian > > (0.9.14-5). > > nah :-) - as always you did the real work! > Thanks! > > > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel > |
From: Jens T. <ka...@ka...> - 2024-04-04 07:37:41
|
NIIBE Yutaka <gn...@fs...> writes: > Hello, > > Thanks to Jens Thiele, Gauche is now again available in Debian > (0.9.14-5). nah :-) - as always you did the real work! Thanks! |