~ chicken-core (chicken-5) /scripts/setversion
Trap1#!/bin/sh2#| setversion - Bump version-number -*- Scheme -*-3exec csi -s "$0" "$@"4|#56(import (chicken file)7 (chicken format)8 (chicken io)9 (chicken irregex)10 (chicken platform)11 (chicken process)12 (chicken process-context)13 (chicken string))1415(define buildversion (with-input-from-file "buildversion" read-line))1617(define files '("README" "manual/The User's Manual"))1819(define (patch which rx subst)20 (cond ((and (list? which) (= 2 (length which)))21 (let ((from (car which))22 (to (cadr which)))23 (print "patching " from " ...")24 (with-output-to-file to25 (lambda ()26 (with-input-from-file from27 (lambda ()28 (let loop ()29 (let ((ln (read-line)))30 (unless (eof-object? ln)31 (write-line (irregex-replace/all rx ln subst))32 (loop) ) ) ) )33 #:binary) )34 #:binary)))35 (else36 (let ((tmp (create-temporary-file)))37 (patch (list which tmp) rx subst)38 (system* (format "mv ~S ~S" tmp which))))))3940(define (parse-version v)41 (let ((m (irregex-match "(\\d+)\\.(\\d+)\\.(\\d+)(.*)" v)))42 (list (irregex-match-substring m 0)43 (irregex-match-substring m 1)44 (irregex-match-substring m 2)45 (irregex-match-substring m 3)46 (irregex-match-substring m 4))))4748(define (main args)49 (let* ((version (parse-version (chicken-version)))50 (major (cadr version))51 (minor (caddr version)))52 (cond ((member "-set" args) =>53 (lambda (a)54 (set! buildversion (cadr a))55 (let ((b (parse-version buildversion)))56 (set! major (cadr b))57 (set! minor (caddr b)))))58 ((not (member "-noinc" args))59 (let* ((v (parse-version buildversion))60 (maj (cadr v))61 (min (caddr v))62 (pl (cadddr v))63 (huh (car (cddddr v))))64 (set! major maj)65 (set! minor min)66 (set! buildversion67 (conc maj "." min "." (add1 (string->number pl)) huh)) ) ) )68 (with-output-to-file "buildversion" (cut print buildversion) binary:)69 (system* "cat buildversion")70 (let ([vstr (sprintf "version ~A" buildversion)])71 (for-each (cut patch <> (irregex "version [0-9][-.0-9a-zA-Z]+") vstr) files) )72 (patch73 "chicken.h"74 (irregex "C_MAJOR_VERSION[ \\t]+[0-9]+")75 (sprintf "C_MAJOR_VERSION ~a" major))76 (patch77 "chicken.h"78 (irregex "C_MINOR_VERSION[ \\t]+[0-9]+")79 (sprintf "C_MINOR_VERSION ~a" minor))80 0))8182(main (command-line-arguments))