~ chicken-core (chicken-5) /build-version.scm


 1;;;; build-version.scm
 2;
 3; Copyright (c) 2011-2022, The CHICKEN Team
 4; All rights reserved.
 5;
 6; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
 7; conditions are met:
 8;
 9;   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
10;     disclaimer.
11;   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
12;     disclaimer in the documentation and/or other materials provided with the distribution.
13;   Neither the name of the author nor the names of its contributors may be used to endorse or promote
14;     products derived from this software without specific prior written permission.
15;
16; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
17; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18; AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
19; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24; POSSIBILITY OF SUCH DAMAGE.
25
26
27(declare
28 (unit build-version))
29
30;; (read-version filename): Read line from FILENAME and return
31;; as a string; return #f if non-existent file or blank line.
32(define-syntax read-version
33  (er-macro-transformer
34   (lambda (x r c)
35     (let ((fn (cadr x)))
36       (and (##sys#file-exists? fn #t #f #f)
37	    (call-with-input-file (cadr x)
38	     (lambda (p)
39	       (let ((ver ((##sys#slot (##sys#slot p 2) 8) p 256))) ; read-line
40		 (if (or (eof-object? ver) (string=? ver ""))
41		     #f
42		     ver)))))))))
43
44(define ##sys#build-id      (read-version "buildid"))
45(define ##sys#build-branch  (read-version "buildbranch"))
46(define ##sys#build-version (read-version "buildversion"))
Trap