You could try to put everything you're doing with read-string / read /
open-input-file inside syntax. For example:

~/tmp> cat ./compile-time-io.scm
(define file-contents
         (lambda (x r t)
           (import chicken.io chicken.port)

(write file-contents)

~/tmp> csc compile-time-io.scm && ./compile-time-io
( "Processor\t: AArch64 Processor rev 14 (aarch64)"
  "processor\t: 0"
  "BogoMIPS\t: 38.40" ... )

~/tmp> grep BogoMIPS ./compile-time-io
grep: ./compile-time-io: binary file matches


On Tue, Dec 26, 2023, 21:07 Al <frm...@mailgw.com> wrote:

> Hi, suppose I need to reference data from "file.txt" in my Scheme
> program. I could use read-char / read / open-input-file etc (or other
> (chicken io) procedures) to read the the contents of the file into a
> variable.
> However, such deserialization happens at run-time. If I compile my
> program into an executable, it will try to open "file.txt" at run-time.
> How can I arrange for "file.txt" to be read at compile-time, and inlined
> into the executable, so that the executable doesn't require access to
> the original file?
> The only way I can think of is to convert "file.txt" to a scheme string
> definition in a separate file:
> ; file.scm
> (define file-contents " ... ")
> and include it via (include "file.scm"). Then the definition would occur
> at compile-time.
> But of course this requires encoding (possibly binary) files as scheme
> strings, and probably an extra Makefile step to convert file.txt into
> file.scm. This is not attractive -- are there other options?

Reply via email to