impload pasted by mario-goulart on Tue Jun 17 21:36:21 2014

(use files)

(define-syntax impload
  (ir-macro-transformer
   (lambda (expr inject compare)
     (let ((file-path (cadr expr)))
       `(begin
          (import ,(string->symbol (pathname-file file-path)))
          (load ,file-path))))))

(impload "src/mod.scm")

impload use case added by mario-goulart on Tue Jun 17 21:54:24 2014

$ ls -l
total 12
-rw-r--r-- 1 mario mario 240 Jun 17 16:49 impload.scm
drwxr-xr-x 2 mario mario 128 Jun 17 15:41 src
-rwxr-xr-x 1 mario mario  44 Jun 17 16:50 test-impload.scm
-rwxr-xr-x 1 mario mario  10 Jun 17 16:50 test-use.scm

$ cat src/mod.scm 
(module mod (foo)
(import chicken scheme)
(define (foo) (print "hi"))
)

$ cd src/ && csc -J -s mod.scm && cd ..

$ ls -l src/
total 20
-rw-r--r-- 1 mario mario   193 Jun 17 15:40 mod.import.scm
-rw-r--r-- 1 mario mario    75 Jun 17 15:40 mod.scm
-rwxr-xr-x 1 mario mario 11633 Jun 17 16:51 mod.so

$ cat test-use.scm 
(use mod)
(foo)

$ cat test-impload.scm 
(include "impload")
(impload "src/mod.scm")
(foo)

$ csi -s test-use.scm 

Error: (import) during expansion of (import ...) - cannot import from undefined module: mod
...

$ CHICKEN_INCLUDE_PATH=src csi -s test-use.scm 

Error: (require) cannot load extension: mod
...

$ CHICKEN_INCLUDE_PATH=src csi -s test-impload.scm 
hi