You can write compile-time code to query the current date, and get the
version number from an environment variable:
#lang racket
(require (for-syntax racket/date))
(define-syntax (embed-version stx)
(syntax-case stx ()
[_ #`(format "~a - ~a"
#,(date->seconds (current-date))
#,(getenv "VERSION"))]))
(displayln (embed-version))
$ VERSION=3 racket test-date.rkt
1483670494 - 3
$ VERSION=3 raco make test-date.rkt
$ racket test-date.rkt
1483670499 - 3
$ racket test-date.rkt
1483670499 - 3
Note: the reason I'm using environment variables is that command-line
arguments are harder to pass through raco make. Probably doable, though.
Vincent
On Thu, 05 Jan 2017 20:08:57 -0600,
Alex Harsanyi wrote:
>
> I would like to embed versioning and build date information in my application
> executable, and I'm not sure how to do that. To clarify, in C or C++, I would
> write the following:
>
> #include <stdio.h>
>
> #ifndef APPVER
> #define APPVER "no version"
> #endif
>
> void main()
> {
> printf("%s\n", APPVER);
> }
>
> I can than compile the code by passing "-D APPVER=1.0" to the compiler command
> line and have it print the correct version.
>
> How can this be done in Racket?
>
> I don't really want to check-in a file with the version number in it, and
> besides, I would like to add my GIT commit ID and build date as well in the
> same way.
>
> My idea is that the build script would write a file like this at build time:
>
> #lang racket/base
> (define (app-version) "1.0")
> (define (app-commit-id) "abcdefg")
> (define (app-build-date) "06-01-2017T09:10:12")
> (provide app-version app-commit-id app-build-date)
>
> I would than require this file from other places, but only if it exists,
> something like this:
>
> (if (file-exists? "app-version.rkt")
> (require "app-version.rkt")
> (begin
> (define (app-version) "dev build")
> (define (app-commit-id) "unknown")
> (define (app-build-date) "no build")))
>
> Unfortunately, the code above does not work because require needs to be
> defined at top level.
>
> Does anyone have any suggestions?
>
> Thanks,
> Alex.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.