bug when combining include-library-declarations with cond-expand

Peter McGoron via Chicken-users <[email protected]>
Newsgroups gmane.lisp.scheme.chicken
Message-ID <[email protected]>
I am getting an error when trying to load a file with R7RS library 
declarations that includes cond-expand clauses.

Here is an example: two files

test.scm:

     (cond-expand
       (chicken (begin (define is-chicken? #t)))
       (else (begin (define is-chicken #f))))

test.sld:

     (import r7rs)

     (define-library (test)
       (import (scheme base))
       (include-library-declarations "test.scm")
       (export is-chicken?))

Trying to load it with `csi test.sld` gives

> Error: (define-library) during expansion of (define-library ...) - invalid library declaration: ((##core#begin (##core#begin (define is-chicken? #t))))
> 
> 	Call history:
> 
> 	<syntax>	 (##core#quote #f)
> 	<eval>	 (chicken.load#load-unit (##core#quote library) (##core#quote #f) (##core#quote #f))
> 	<eval>	 (chicken.load#load-unit (##core#quote library) (##core#quote #f) (##core#quote #f))
> 	<eval>	 (chicken.load#load-unit (##core#quote expand) (##core#quote #f) (##core#quote #f))
> 	<syntax>	 (import-syntax chicken.base chicken.fixnum chicken.platform chicken.flonum (except scheme string-cop...
> 	<syntax>	 (##core#undefined)
> 	<syntax>	 (##core#undefined)
> 	<syntax>	 (##core#undefined)
> 	test.sld:1	 (##core#begin (##core#require r7rs r7rs))
> 	test.sld:1	 (##core#require r7rs r7rs)
> 	<syntax>	 (chicken.load#load-extension (##core#quote r7rs) (##core#quote #t) (##core#quote #f))
> 	<syntax>	 (##core#quote r7rs)
> 	<syntax>	 (##core#quote #t)
> 	<syntax>	 (##core#quote #f)
> 	<eval>	 (chicken.load#load-extension (##core#quote r7rs) (##core#quote #t) (##core#quote #f))
> 	test.sld:3	 (define-library (test) (import (scheme base)) (include-library-declarations "test.scm") (export is-c...	<--

The following, which should be equivalent, works:

test2.sld:

     (import r7rs)

     (define-library (test)
       (import (scheme base))
       (cond-expand
         (chicken (begin (define is-chicken? #t)))
         (else (begin (define is-chicken #f))))
       (export is-chicken?))

csi test2.sld:

     (import (test))
     is-chicken? ; => #t

----------------------------------------------------------

Chicken Version: 5.4.0 (compiled from release tarball)
OS: Alpine Linux x86_64
CC: GCC Alpine 13.2.1_git20240309 (using musl libc)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.