~ chicken-core (chicken-5) /scripts/setversion


 1#!/bin/sh
 2#| setversion - Bump version-number -*- Scheme -*-
 3exec csi -s "$0" "$@"
 4|#
 5
 6(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))
14
15(define buildversion (with-input-from-file "buildversion" read-line))
16
17(define files '("README" "manual/The User's Manual"))
18
19(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 to
25	     (lambda ()
26	       (with-input-from-file from
27		 (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	(else
36	 (let ((tmp (create-temporary-file)))
37	   (patch (list which tmp) rx subst)
38	   (system* (format "mv ~S ~S" tmp which))))))
39
40(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))))
47
48(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! buildversion
67	       (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    (patch 
73     "chicken.h"
74     (irregex "C_MAJOR_VERSION[ \\t]+[0-9]+")
75     (sprintf "C_MAJOR_VERSION   ~a" major))
76    (patch 
77     "chicken.h"
78     (irregex "C_MINOR_VERSION[ \\t]+[0-9]+")
79     (sprintf "C_MINOR_VERSION   ~a" minor))
80    0))
81
82(main (command-line-arguments))
Trap