From d9c8ef964cfe54f8b5a36f1b3f12ed8d5c628117 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 22 May 2019 15:42:01 -0600 Subject: [PATCH] generate version string from individual numbers Thanks to @sorawee for pointing me to https://stackoverflow.com/a/5459929/718349 --- racket/src/cs/rumble/version.ss | 40 +++++++++++++++++++++----------- racket/src/racket/src/schvers.h | 18 ++++++++++---- racket/src/racket/version.mak | 13 ++++++++++- racket/src/worksp/mzcom/mzcom.rc | 8 ++----- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/racket/src/cs/rumble/version.ss b/racket/src/cs/rumble/version.ss index 1935a8ec5c..d7722a9dd1 100644 --- a/racket/src/cs/rumble/version.ss +++ b/racket/src/cs/rumble/version.ss @@ -1,25 +1,37 @@ (define-syntax (extract-version-string stx) - (chez:call-with-input-file + (#%call-with-input-file "../racket/src/schvers.h" (lambda (i) - (let ([to-find "#define MZSCHEME_VERSION \""]) - (let loop ([pos 0]) + (let ([to-find "#define MZSCHEME_VERSION_"]) + (let numbers-loop ([numbers '()]) (cond - [(= pos (string-length to-find)) - (list->string - (let loop () - (let ([ch (chez:read-char i)]) - (if (char=? ch #\") - '() - (cons ch (loop))))))] + [(= 4 (length numbers)) + (cond + [(not (zero? (car numbers))) + (#%apply #%format "~a.~a.~a.~a" (reverse numbers))] + [(not (zero? (cadr numbers))) + (#%apply #%format "~a.~a.~a" (reverse (cdr numbers)))] + [else + (#%apply #%format "~a.~a" (reverse (cddr numbers)))])] [else - (let ([ch (chez:read-char i)]) + (let loop ([pos 0]) (cond - [(char=? ch (string-ref to-find pos)) - (loop (add1 pos))] + [(= pos (string-length to-find)) + (#%read-char i) ; discard "X", "Y", "Z", or "W" + (#%read-char i) ; discard space + (let digit-loop ([n 0]) + (let ([ch (#%read-char i)]) + (if (char-numeric? ch) + (digit-loop (+ (* n 10) (- (char->integer ch) (char->integer #\0)))) + (numbers-loop (cons n numbers)))))] [else - (loop 0)]))])))))) + (let ([ch (#%read-char i)]) + (cond + [(char=? ch (string-ref to-find pos)) + (loop (add1 pos))] + [else + (loop 0)]))]))])))))) (define (version) (extract-version-string)) (define (banner) (string-append "Welcome to Racket v" (version) " [cs].\n")) diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 70b8c2ab99..1e7ff2495c 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -9,17 +9,27 @@ {X+1}.0; Z>=900 means working towards X.{Y+1}, and X.Y.Z as an alpha release. - (The string and the separate X/Y/Z/W numbers must be updated - consistently.) + Note that the version number in the "base" package's "info.rkt" + needs to be updated separately. */ -#define MZSCHEME_VERSION "7.3.0.4" - #define MZSCHEME_VERSION_X 7 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 #define MZSCHEME_VERSION_W 4 +/* A level of indirection makes `#` work as needed: */ +#define AS_a_STR_HELPER(x) #x +#define AS_a_STR(x) AS_a_STR_HELPER(x) + +#if MZSCHEME_VERSION_W != 0 +# define MZSCHEME_VERSION AS_a_STR(MZSCHEME_VERSION_X) "." AS_a_STR(MZSCHEME_VERSION_Y) "." AS_a_STR(MZSCHEME_VERSION_Z) "." AS_a_STR(MZSCHEME_VERSION_W) +#elif MZSCHEME_VERSION_Z != 0 +# define MZSCHEME_VERSION AS_a_STR(MZSCHEME_VERSION_X) "." AS_a_STR(MZSCHEME_VERSION_Y) "." AS_a_STR(MZSCHEME_VERSION_Z) +#else +# define MZSCHEME_VERSION AS_a_STR(MZSCHEME_VERSION_X) "." AS_a_STR(MZSCHEME_VERSION_Y) +#endif + #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/racket/src/racket/version.mak b/racket/src/racket/version.mak index bae736facc..a3c53c6594 100644 --- a/racket/src/racket/version.mak +++ b/racket/src/racket/version.mak @@ -1,2 +1,13 @@ -FWVERSION = $(shell grep ' MZSCHEME_VERSION ' $(mainsrcdir)/racket/src/schvers.h | cut -d '"' -f 2) +FWVERSION_X = $(shell grep 'define MZSCHEME_VERSION_X ' $(mainsrcdir)/racket/src/schvers.h | cut -d ' ' -f 3) +FWVERSION_Y = $(shell grep 'define MZSCHEME_VERSION_Y ' $(mainsrcdir)/racket/src/schvers.h | cut -d ' ' -f 3) +FWVERSION_Z = $(shell grep 'define MZSCHEME_VERSION_Z ' $(mainsrcdir)/racket/src/schvers.h | cut -d ' ' -f 3) +FWVERSION_W = $(shell grep 'define MZSCHEME_VERSION_W ' $(mainsrcdir)/racket/src/schvers.h | cut -d ' ' -f 3) + +ifneq ($(FWVERSION_W),0) +FWVERSION = $(FWVERSION_X).$(FWVERSION_Y).$(FWVERSION_Z).$(FWVERSION_W) +else ifneq ($(FWVERSION_Z),0) +FWVERSION = $(FWVERSION_X).$(FWVERSION_Y).$(FWVERSION_Z) +else +FWVERSION = $(FWVERSION_X).$(FWVERSION_Y) +endif diff --git a/racket/src/worksp/mzcom/mzcom.rc b/racket/src/worksp/mzcom/mzcom.rc index 1185daf17d..8a22631b88 100644 --- a/racket/src/worksp/mzcom/mzcom.rc +++ b/racket/src/worksp/mzcom/mzcom.rc @@ -85,12 +85,8 @@ CAPTION "MzCOM" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "OK",IDOK,76,69,50,14,BS_CENTER - CTEXT "MzCOM v"MZSCHEME_VERSION,mzIDC_STATIC,71,8,61,8 - CTEXT "Copyright (c) 2000-2018 PLT Design Inc.",mzIDC_STATIC, - 41,20,146,9 - CTEXT "Racket v"MZSCHEME_VERSION,mzIDC_STATIC,64,35,75,8 - CTEXT "Copyright (c) 1995-2018 PLT Design Inc.",mzIDC_STATIC, - 30,47,143,8 + CTEXT "MzCOM",mzIDC_STATIC,71,8,61,8 + CTEXT "Racket",mzIDC_STATIC,64,35,75,8 ICON MZICON,mzIDC_STATIC,11,16,20,20 END