-ifneq "$(RELEASE)" "" set Iname PuTTY version $(RELEASE)
-ifneq "$(RELEASE)" "" set Ivertext Release $(RELEASE)
-ifneq "$(RELEASE)" "" set Irev 0
-ifneq "$(RELEASE)" "" set Ifilename putty-$(RELEASE)-installer.exe
-ifneq "$(PRERELEASE)" "" set Iversion $(PRERELEASE):r$(revision)
-ifneq "$(PRERELEASE)" "" set Iname PuTTY pre-release $(PRERELEASE):r$(revision)
-ifneq "$(PRERELEASE)" "" set Ivertext Pre-release $(PRERELEASE):r$(revision)
-ifneq "$(PRERELEASE)" "" set Ifilename putty-$(PRERELEASE)-pre$(revision)-installer.exe
-ifneq "$(date)" "" set Iversion $(date):r$(revision)
-ifneq "$(date)" "" set Iname PuTTY development snapshot $(date):r$(revision)
-ifneq "$(date)" "" set Ivertext Development snapshot $(date):r$(revision)
-ifneq "$(date)" "" set Ifilename putty-$(date)-installer.exe
+ifneq "$(PRERELEASE)" "" set Iversion $(PRERELEASE)-pre$(Ndate).$(vcsid)
+ifneq "$(SNAPSHOT)" "" set Iversion $(Date).$(vcsid)
+ifeq "$(RELEASE)$(PRERELEASE)$(SNAPSHOT)" "" set Iversion Custom-$(Date).$(vcsid)
+
+# Set up the Windows version resource info, for both the installer and
+# the individual programs. This must be a sequence of four 16-bit
+# integers compared lexicographically, and we define it as follows:
+#
+# For release X.YY: X.YY.0.0
+# For a prerelease before the X.YY release: (X.YY-1).(DDDDD + 0x8000).0
+# For a devel snapshot after the X.YY release: X.YY.DDDDD.0
+# For a custom build: X.YY.DDDDD.1
+#
+# where DDDDD is a representation of the build date, in the form of a
+# number of days since an epoch date. The epoch is reset at every
+# release (which, with 15 bits, gives us a comfortable 80-odd years
+# before it becomes vital to make another release to reset the count
+# :-).
+
+ifneq "$(RELEASE)" "" in . do echo $(RELEASE).0.0 > winver
+ifneq "$(PRERELEASE)" "" in . do perl -e 'printf "%s.%d.0", $$ARGV[0], 0x8000+$$ARGV[1]' $(Lastver) $(Days) > winver
+ifneq "$(SNAPSHOT)" "" in . do perl -e 'printf "%s.%d.0", $$ARGV[0], $$ARGV[1]' $(Lastver) $(Days) > winver
+ifeq "$(RELEASE)$(PRERELEASE)$(SNAPSHOT)" "" in . do perl -e 'printf "%s.%d.1", $$ARGV[0], $$ARGV[1]' $(Lastver) $(Days) > winver
+in . do perl -pe 'y!.!,!' winver > winvercommas
+read Winver winver
+read Winvercommas winvercommas
+
+# Write out a version.h that contains the real version number.
+in putty do echo '/* Generated by automated build script */' > version.h
+ifneq "$(RELEASE)" "" in putty do echo '$#define RELEASE $(RELEASE)' >> version.h
+ifneq "$(PRERELEASE)" "" in putty do echo '$#define PRERELEASE $(PRERELEASE)' >> version.h
+ifneq "$(SNAPSHOT)" "" in putty do echo '$#define SNAPSHOT' >> version.h
+in putty do echo '$#define TEXTVER "$(Textver)"' >> version.h
+in putty do echo '$#define SSHVER "$(Sshver)"' >> version.h
+in putty do echo '$#define BINARY_VERSION $(Winvercommas)' >> version.h
+
+# Set up the extra arguments for the main Windows nmake command. The
+# user can define XFLAGS and MAKEARGS on the bob command line, to pass
+# in extra compile and make options respectively (e.g. to do a
+# debugging or Minefield build).
+set Makeargs
+ifneq "$(XFLAGS)" "" set Makeargs $(Makeargs) XFLAGS="$(XFLAGS)"
+ifneq "$(MAKEARGS)" "" set Makeargs $(Makeargs) $(MAKEARGS)