;;;; allegro.setup -*- Scheme -*- (use posix srfi-13 make matchable) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (pkg-version . lib-names) (match lib-names ((lib-name . rest) (let ((output (call-with-input-pipe (string-append "pkg-config --variable=version " lib-name) read-all))) (if (string-null? output) (apply pkg-version rest) (string-delete (lambda (c) (char=? #\newline c)) output)))) (else #f))) (define (pkg-libs . lib-names) (match lib-names ((lib-name . rest) (let ((output (call-with-input-pipe (string-append "pkg-config --libs " lib-name) read-all))) (if (string-null? output) (apply pkg-libs rest) (string-delete (lambda (c) (char=? #\newline c)) output)))) (else #f))) (define compile-options "-O3 -C -O3") (define link-options "") (define allegro-version (let* ((allegro-version (pkg-version "allegro-5" "allegro-5.0")) (allegro-version (if allegro-version allegro-version "(none found)"))) allegro-version)) (when (or (not (version>=? allegro-version "5.0.9")) (version>=? allegro-version "5.3.0")) (error (string-append "Allegro version " allegro-version " is not supported."))) (define extra-defines (append (if (version>=? (chicken-version) "4.7.0") '(-Dimproved-64-bit-support) '()) (if (version>=? allegro-version "5.2.0") '(-Dallegro-52) '()) (if (version>=? allegro-version "5.0.0") '(-Dallegro-50) '()))) (let ((allegro (pkg-libs "allegro-5" "allegro-5.0"))) (when allegro (set! link-options (string-append link-options " " allegro)))) (let ((primitives (pkg-libs "allegro_primitives-5" "allegro_primitives-5.0"))) (when primitives (set! link-options (string-append link-options " " primitives)) (set! extra-defines (append extra-defines '(-Dhas-allegro-primitives))))) (let ((color (pkg-libs "allegro_color-5" "allegro_color-5.0"))) (when color (set! link-options (string-append link-options " " color)) (set! extra-defines (append extra-defines '(-Dhas-allegro-color))))) (let ((dialog (pkg-libs "allegro_dialog-5" "allegro_dialog-5.0"))) (when dialog (set! link-options (string-append link-options " " dialog)) (set! extra-defines (append extra-defines '(-Dhas-allegro-dialog))))) (let ((main (pkg-libs "allegro_main-5" "allegro_main-5.0"))) (when main (set! link-options (string-append link-options " " main)) (set! extra-defines (append extra-defines '(-Dhas-allegro-main))))) (let ((physfs (pkg-libs "allegro_physfs-5" "allegro_physfs-5.0"))) (when physfs (set! link-options (string-append link-options " " physfs)) (set! extra-defines (append extra-defines '(-Dhas-allegro-physfs))))) (let ((font (pkg-libs "allegro_font-5" "allegro_font-5.0"))) (when font (set! link-options (string-append link-options " " font)) (set! extra-defines (append extra-defines '(-Dhas-allegro-font))))) (let ((ttf (pkg-libs "allegro_ttf-5" "allegro_ttf-5.0"))) (when ttf (set! link-options (string-append link-options " " ttf)) (set! extra-defines (append extra-defines '(-Dhas-allegro-ttf))))) (let ((audio (pkg-libs "allegro_audio-5" "allegro_audio-5.0"))) (when audio (set! link-options (string-append link-options " " audio)) (set! extra-defines (append extra-defines '(-Dhas-allegro-audio))))) (let ((memfile (pkg-libs "allegro_memfile-5" "allegro_memfile-5.0"))) (when memfile (set! link-options (string-append link-options " " memfile)) (set! extra-defines (append extra-defines '(-Dhas-allegro-memfile))))) (let ((acodec (pkg-libs "allegro_acodec-5" "allegro_acodec-5.0"))) (when acodec (set! link-options (string-append link-options " " acodec)) (set! extra-defines (append extra-defines '(-Dhas-allegro-acodec))))) (let ((image (pkg-libs "allegro_image-5" "allegro_image-5.0"))) (when image (set! link-options (string-append link-options " " image)) (set! extra-defines (append extra-defines '(-Dhas-allegro-image))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Compile ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-syntax build (syntax-rules () ((build scm imp) (begin (compile -s -d1 scm -J,link-options ,compile-options ,@extra-defines) (compile -s imp -d0 ,link-options ,compile-options ,@extra-defines))))) (make (("allegro.import.so" ("acodec.scm" "altime.scm" "audio.scm" "allegro.scm" "base.scm" "bitmap_io.scm" "bitmap.scm" "color.scm" "config.scm" "constants.scm" "direct3d.scm" "display.scm" "enums.scm" "error.scm" "events.scm" "file.scm" "fixed.scm" "fmaths.scm" "font.scm" "fshook.scm" "image.scm" "joystick.scm" "keyboard.scm" "memfile.scm" "memory.scm" "mouse.scm" "opengl.scm" "path.scm" "physfs.scm" "primitives.scm" "system.scm" "threads.scm" "timer.scm" "tls.scm" "transformations.scm" "ttf.scm" "types.scm" "utf8.scm" "windows.scm") (build allegro.scm allegro.import.scm)) ("allegro-glext.import.so" ("allegro-glext.scm" "gl_ext_api.scm" "gl_ext_defs.scm") (build allegro-glext.scm allegro-glext.import.scm)) ("allegro-c-util.import.so" ("allegro-c-util.scm") (build allegro-c-util.scm allegro-c-util.import.scm)) ("all" ("allegro.import.so" "allegro-glext.import.so" "allegro-c-util.import.so") (lambda () (display "Building of Allegro completed")))) "all") (install-extension 'allegro '("allegro.so" "allegro.import.so" "allegro-glext.so" "allegro-glext.import.so" "allegro-c-util.so" "allegro-c-util.import.so") '((version 2.5.1)))