;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; git.setup - git egg installation script ;;; ;;; Verifies the CHICKEN and libgit2 library version before installation. ;;; ;;; Copyright (c) 2013-2016, Evan Hanson ;;; See LICENSE for details. ;;; (define *required-chicken* "4.8.0") (define *required-libgit2* "0.23.0") ;; ;; Verify the CHICKEN version. ;; (unless (version>=? (chicken-version) *required-chicken*) (error "git: This extension requires CHICKEN version" *required-chicken*)) ;; ;; Verify the libgit2 version. ;; ;; Due to API instability, the library's major and minor versions must ;; match the required version precisely, while its patch version may be ;; equal to or greater than required. ;; (define (libgit2-version-ok? version-string) (version>=? version-string *required-libgit2*)) ;; If pkg-config is available, consult it first. (define pkg-config-version (string-trim-both (with-input-from-pipe "pkg-config --modversion libgit2" read-string))) ;; Assign a libgit2 version feature identifier. (define libgit2-version (cond ((string-null? pkg-config-version) (warning "git: Unable to detect libgit2 version, guessing" *required-libgit2*) (fprintf (current-error-port) "\n") (string-append "libgit2-" *required-libgit2*)) ((libgit2-version-ok? pkg-config-version) (string-append "libgit2-" pkg-config-version)) (else (error "git: This extension requires libgit2 version" *required-libgit2*)))) ;; Shared libraries. (compile -sJ -O3 -d0 -specialize libgit2.scm -lgit2 -D ,libgit2-version) (compile -sJ -O3 -d0 -specialize git.scm -D ,libgit2-version) ;; Static libraries. (compile -no-module-registration -cJ -O3 -d0 -specialize -unit libgit2 libgit2.scm -o libgit2.o -D ,libgit2-version) (compile -no-module-registration -cJ -O3 -d0 -specialize -uses libgit2 -unit git git.scm -o git.o -emit-type-file git.types -D ,libgit2-version) ;; Import libraries. (compile -s -O3 -d0 libgit2.import.scm) (compile -s -O3 -d0 git.import.scm) ;; If we couldn't detect libgit2's version via pkg-config, check it ;; directly now. (when (string-null? pkg-config-version) (load "./libgit2.so") (load "./libgit2.import.so") (import (only libgit2 libgit2-version)) ;; `libgit2-version` returns a vector `#( )`; ;; format it as an "X.X.X" version string against which to compare. (unless (libgit2-version-ok? (apply format "~a.~a.~a" (vector->list (libgit2-version)))) (error "git: This extension requires libgit2" *required-libgit2*))) (install-extension 'git '("libgit2.so" "libgit2.import.so" "git.so" "git.import.so" "git.types" "git.o" "libgit2.o") '((version "0.0.36")))