LICENCE in the installer should have CP/M line endings.
[u/mdw/putty] / Buildscr
1 # -*- sh -*-
2 # Build script to construct a full distribution directory of PuTTY.
3
4 module putty
5
6 # Set up the arguments for the main make command.
7 set Makever -DSVN_REV=$(revision)
8 ifneq "$(!numeric $(revision))" "yes" set Makever $(Makever) -DMODIFIED
9 ifneq "$(RELEASE)" "" set Makever $(Makever) -DRELEASE=$(RELEASE)
10 ifneq "$(date)" "" set Makever $(Makever) -DSNAPSHOT=$(date)
11 set Makeargs VER="$(Makever)"
12 ifneq "$(XFLAGS)" "" set Makeargs $(makeargs) XFLAGS="$(XFLAGS)"
13 ifneq "$(MAKEARGS)" "" set Makeargs $(makeargs) $(MAKEARGS)
14
15 # Set up the version string for the docs build.
16 set Docmakeargs VERSION="PuTTY revision $(revision)"
17 ifneq "$(RELEASE)" "" set Docmakeargs VERSION="PuTTY release $(RELEASE)"
18 ifneq "$(date)" "" set Docmakeargs VERSION="PuTTY development snapshot $(date)"
19
20 # Set up the version string for the Unix source archive.
21 set Unxver r$(revision)
22 ifneq "$(RELEASE)" "" set Unxver $(RELEASE)
23 ifneq "$(date)" "" set Unxver $(date)
24
25 # Set up the various version strings for the installer.
26 set Iversion r$(revision)
27 set Iname PuTTY revision $(revision)
28 set Ivertext Revision $(revision)
29 set Irev $(revision)
30 set Ifilename putty-$(Iversion)-installer.exe
31 ifneq "$(RELEASE)" "" set Iversion $(RELEASE)
32 ifneq "$(RELEASE)" "" set Iname PuTTY version $(RELEASE)
33 ifneq "$(RELEASE)" "" set Ivertext Release $(RELEASE)
34 ifneq "$(RELEASE)" "" set Irev 0
35 ifneq "$(RELEASE)" "" set Ifilename putty-$(RELEASE)-installer.exe
36 ifneq "$(date)" "" set Iversion $(date):r$(revision)
37 ifneq "$(date)" "" set Iname PuTTY development snapshot $(date):r$(revision)
38 ifneq "$(date)" "" set Ivertext Development snapshot $(date):r$(revision)
39 ifneq "$(date)" "" set Ifilename putty-$(date)-installer.exe
40
41 # Set up the version string for the installer.
42 set Iversion r$(revision)
43 ifneq "$(RELEASE)" "" set Iversion $(RELEASE)
44 ifneq "$(date)" "" set Iversion $(date):r$(revision)
45
46 in putty do ./mksrcarc.sh
47 in putty do ./mkunxarc.sh $(Unxver)
48 in putty do perl mkfiles.pl
49 in putty/doc do make $(Docmakeargs) putty.hlp
50 in putty/doc do make $(Docmakeargs) chm
51
52 # Munge the installer script locally so that it reports the version
53 # we're really building.
54 in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(AppVerName=).*$$/$$1$$a/' '$(Iname)' putty.iss
55 in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(VersionInfoTextVersion=).*$$/$$1$$a/' '$(Ivertext)' putty.iss
56 in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(AppVersion=).*$$/$$1$$a/' '$(Iversion)' putty.iss
57 in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;$$a=~s/M//;}s/^(VersionInfoVersion=\d+\.\d+\.)\d+(\.\d+)\r?$$/$$1$$a$$2/' '$(Irev)' putty.iss
58
59 # Windowsify LICENCE, since it's going in the Windows installer.
60 in putty do perl -i~ -pe 'y/\015//d;s/$$/\015/' LICENCE
61
62 delegate windows
63 # FIXME: Cygwin alternative?
64 in putty/windows do cmd /c vcvars32 \& nmake -f Makefile.vc $(Makeargs)
65 # Ignore exit code from hhc, in favour of seeing whether the .chm
66 # file was created. (Yuck; but hhc appears to return non-zero
67 # exit codes on whim.)
68 in putty/doc do hhc putty.hhp; test -f putty.chm
69 in putty/windows do iscc putty.iss
70 return putty/windows/*.exe
71 return putty/windows/*.map
72 return putty/doc/putty.chm
73 return putty/windows/Output/setup.exe
74 enddelegate
75 in putty/doc do make mostlyclean
76 in putty/doc do make $(Docmakeargs)
77 in putty/windows do zip -k -j putty.zip `ls *.exe | grep -v puttytel` ../doc/putty.chm ../doc/putty.hlp ../doc/putty.cnt
78 in putty/doc do zip puttydoc.zip *.html
79
80 # Deliver the actual PuTTY release directory into a subdir `putty'.
81 deliver putty/windows/*.exe putty/x86/$@
82 deliver putty/windows/putty.zip putty/x86/$@
83 deliver putty/windows/Output/setup.exe putty/x86/$(Ifilename)
84 deliver putty/doc/puttydoc.zip putty/$@
85 deliver putty/doc/putty.chm putty/$@
86 deliver putty/doc/putty.hlp putty/$@
87 deliver putty/doc/putty.cnt putty/$@
88 deliver putty/doc/puttydoc.txt putty/$@
89 deliver putty/doc/*.html putty/htmldoc/$@
90 deliver putty/putty-src.zip putty/$@
91 deliver putty/*.tar.gz putty/$@
92
93 # Deliver the map files alongside the `proper' release deliverables.
94 deliver putty/windows/*.map maps-x86/$@
95
96 # Deliver sign.sh, so that whoever has just built PuTTY (the
97 # snapshot scripts or me, depending) can conveniently sign it with
98 # whatever key they want.
99 deliver putty/sign.sh $@
100
101 # Building the md5sums file is most easily done in the destination
102 # directory.
103 in-dest putty do md5sum `\find * -type f -print` > md5sums
104
105 # And construct .htaccess files. One in the top-level directory,
106 # setting the MIME types for Windows help files and providing an
107 # appropriate link to the source archive:
108 in-dest putty do echo "AddType application/octet-stream .chm" >> .htaccess
109 in-dest putty do echo "AddType application/octet-stream .hlp" >> .htaccess
110 in-dest putty do echo "AddType application/octet-stream .cnt" >> .htaccess
111 in-dest putty do set -- putty*.tar.gz; for k in '' .DSA .RSA; do echo RedirectMatch temp '(.*/)'putty.tar.gz$$k\$$ '$$1'"$$1$$k" >> .htaccess; done
112 # And one in the x86 directory, providing a link for the installer.
113 in-dest putty/x86 do set -- putty*installer.exe; for k in '' .DSA .RSA; do echo RedirectMatch temp '(.*/)'putty-installer.exe$$k\$$ '$$1'"$$1$$k" >> .htaccess; done