Some test case added by CaptainRant on Tue Dec 9 14:01:56 2014
;;; MAKEFILE. all: loader plugins/plugin.so plugins/unit-plugin.so run: all ./loader loader: loader.scm csc -O3 -J $< -o $@ csc -O3 -dynamic loader.import.scm plugins/%.so: %.scm | loader mkdir -p plugins/ csc -O3 -dynamic -unit $(<:%.scm=%) $< -o $@ clean: rm loader loader.import.scm loader.import.so rm -rf plugins/ ;;; MAKEFILE END. ;;; LOADER. (module loader (register-function) (import chicken scheme) (use posix files srfi-69) (define functions (make-hash-table)) (define (register-function name function) (hash-table-set! functions name function)) (for-each (lambda (name) (print ">>> loading '" name "'") (time (load-library (string->symbol (pathname-file name)) (string-append "plugins/" (pathname-file name) ".so")))) (directory "plugins/"))) ;;; LOADER END. ;;; PLUGIN WITH MODULE. (module plugin () (import chicken scheme loader) (define (greet1 name) (print "Hello1 " name)) (register-function "greet1" greet1) (define (greet2 name) (print "Hello2 " name)) (register-function "greet2" greet2) (define (greet3 name) (print "Hello3 " name)) (register-function "greet3" greet3) (define (greet4 name) (print "Hello4 " name)) (register-function "greet4" greet4) (define (greet5 name) (print "Hello5 " name)) (register-function "greet5" greet5) (define (greet6 name) (print "Hello6 " name)) (register-function "greet6" greet6) (define (greet7 name) (print "Hello7 " name)) (register-function "greet7" greet7) (define (greet8 name) (print "Hello8 " name)) (register-function "greet8" greet8) (define (greet9 name) (print "Hello9 " name)) (register-function "greet9" greet9) (define (greet10 name) (print "Hello10 " name)) (register-function "greet10" greet10) (define (greet11 name) (print "Hello11 " name)) (register-function "greet11" greet11) (define (greet12 name) (print "Hello12 " name)) (register-function "greet12" greet12) (define (greet13 name) (print "Hello13 " name)) (register-function "greet13" greet13) (define (greet14 name) (print "Hello14 " name)) (register-function "greet14" greet14) (define (greet15 name) (print "Hello15 " name)) (register-function "greet15" greet15) (define (greet16 name) (print "Hello16 " name)) (register-function "greet16" greet16) (define (greet17 name) (print "Hello17 " name)) (register-function "greet17" greet17) (define (greet18 name) (print "Hello18 " name)) (register-function "greet18" greet18) (define (greet19 name) ;;; PLUGIN WITH MODULE END. ;;; PLUGIN WITHOUT MODULE. (import loader) (let () (define (greet1 name) (print "Hello1 " name)) (register-function "greet1" greet1) (define (greet2 name) (print "Hello2 " name)) (register-function "greet2" greet2) (define (greet3 name) (print "Hello3 " name)) (register-function "greet3" greet3) (define (greet4 name) (print "Hello4 " name)) (register-function "greet4" greet4) (define (greet5 name) (print "Hello5 " name)) (register-function "greet5" greet5) (define (greet6 name) (print "Hello6 " name)) (register-function "greet6" greet6) (define (greet7 name) (print "Hello7 " name)) (register-function "greet7" greet7) (define (greet8 name) (print "Hello8 " name)) (register-function "greet8" greet8) (define (greet9 name) (print "Hello9 " name)) (register-function "greet9" greet9) (define (greet10 name) (print "Hello10 " name)) (register-function "greet10" greet10) (define (greet11 name) (print "Hello11 " name)) (register-function "greet11" greet11) (define (greet12 name) (print "Hello12 " name)) (register-function "greet12" greet12) (define (greet13 name) (print "Hello13 " name)) (register-function "greet13" greet13) (define (greet14 name) (print "Hello14 " name)) (register-function "greet14" greet14) (define (greet15 name) (print "Hello15 " name)) (register-function "greet15" greet15) (define (greet16 name) (print "Hello16 " name)) (register-function "greet16" greet16) (define (greet17 name) (print "Hello17 " name)) (register-function "greet17" greet17) (define (greet18 name) (print "Hello18 " name)) (register-function "greet18" greet18) (define (greet19 name) (print "Hello19 " name)) (register-function "greet19" greet19) (define (greet20 name) (print "Hello20 " name)) (register-function "greet20" greet20)) ;;; PLUGIN WITHOUT MODULE END.