;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; git.setup - git egg installation script ;;; ;;; Verifies the CHICKEN and libgit2 library version before installation. ;;; ;;; Copyright (c) 2013-2015, Evan Hanson ;;; See LICENSE for details. ;;; (define *required-chicken* "4.8.0") (define *required-libgit2* "0.22.0") ;; ;; Verify the CHICKEN version. ;; (unless (version>=? (chicken-version) *required-chicken*) (fprintf (current-error-port) "\n git: This extension requires Chicken version ~a or later." *required-chicken*) (exit 1)) ;; ;; 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) ;; Split version strings into major, minor & patch components. (let ((version-parts (string-split version-string ".")) (required-parts (string-split *required-libgit2* "."))) ;; Check that major and minor versions are `=`, patch is `>=`. (and (equal? (take version-parts 2) (take required-parts 2)) (string>=? (last version-parts) (last required-parts))))) ;; 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))) (unless (or (string-null? pkg-config-version) (libgit2-version-ok? pkg-config-version)) (fprintf (current-error-port) "\n git: This extension requires libgit2 version ~a." *required-libgit2*) (exit 1)) ;; Shared libraries. (compile -sJ -O3 -d0 -specialize libgit2.scm -lgit2) (compile -sJ -O3 -d0 -specialize git.scm) ;; Static libraries. (compile -no-module-registration -cJ -O3 -d0 -specialize -unit libgit2 libgit2.scm -o libgit2.o) (compile -no-module-registration -cJ -O3 -d0 -specialize -uses libgit2 -unit git git.scm -o git.o -emit-type-file git.types) (run (ar -rc git.a git.o libgit2.o)) ;; 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)))) (fprintf (current-error-port) "\n git: This extension requires libgit2 ~a." *required-libgit2*) (exit 1))) (install-extension 'git '("libgit2.so" "libgit2.import.so" "git.so" "git.import.so" "git.types" "git.a" "git.o" "libgit2.o") '((version "0.0.31")))