| 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 "$(PRERELEASE)" "" set Makever $(Makever) -DPRERELEASE=$(PRERELEASE) |
| 11 | ifneq "$(date)" "" set Makever $(Makever) -DSNAPSHOT=$(date) |
| 12 | set Makeargs VER="$(Makever)" |
| 13 | ifneq "$(XFLAGS)" "" set Makeargs $(Makeargs) XFLAGS="$(XFLAGS)" |
| 14 | ifneq "$(MAKEARGS)" "" set Makeargs $(Makeargs) $(MAKEARGS) |
| 15 | |
| 16 | # Set up the version string for the docs build. |
| 17 | set Docmakeargs VERSION="PuTTY revision $(revision)" |
| 18 | ifneq "$(RELEASE)" "" set Docmakeargs VERSION="PuTTY release $(RELEASE)" |
| 19 | ifneq "$(PRERELEASE)" "" set Docmakeargs VERSION="PuTTY pre-release $(PRERELEASE):r$(revision)" |
| 20 | ifneq "$(date)" "" set Docmakeargs VERSION="PuTTY development snapshot $(date)" |
| 21 | |
| 22 | # Set up the version string for the Unix source archive. |
| 23 | set Unxver r$(revision) |
| 24 | ifneq "$(RELEASE)" "" set Unxver $(RELEASE) |
| 25 | ifneq "$(PRERELEASE)" "" set Unxver $(PRERELEASE)pre $(revision) |
| 26 | ifneq "$(date)" "" set Unxver $(date) |
| 27 | |
| 28 | # Set up the various version strings for the installer. |
| 29 | set Iversion r$(revision) |
| 30 | set Iname PuTTY revision $(revision) |
| 31 | set Ivertext Revision $(revision) |
| 32 | set Irev $(revision) |
| 33 | set Ifilename putty-$(Iversion)-installer.exe |
| 34 | ifneq "$(RELEASE)" "" set Iversion $(RELEASE) |
| 35 | ifneq "$(RELEASE)" "" set Iname PuTTY version $(RELEASE) |
| 36 | ifneq "$(RELEASE)" "" set Ivertext Release $(RELEASE) |
| 37 | ifneq "$(RELEASE)" "" set Irev 0 |
| 38 | ifneq "$(RELEASE)" "" set Ifilename putty-$(RELEASE)-installer.exe |
| 39 | ifneq "$(PRERELEASE)" "" set Iversion $(PRERELEASE):r$(revision) |
| 40 | ifneq "$(PRERELEASE)" "" set Iname PuTTY pre-release $(PRERELEASE):r$(revision) |
| 41 | ifneq "$(PRERELEASE)" "" set Ivertext Pre-release $(PRERELEASE):r$(revision) |
| 42 | ifneq "$(PRERELEASE)" "" set Ifilename putty-$(PRERELEASE)-pre$(revision)-installer.exe |
| 43 | ifneq "$(date)" "" set Iversion $(date):r$(revision) |
| 44 | ifneq "$(date)" "" set Iname PuTTY development snapshot $(date):r$(revision) |
| 45 | ifneq "$(date)" "" set Ivertext Development snapshot $(date):r$(revision) |
| 46 | ifneq "$(date)" "" set Ifilename putty-$(date)-installer.exe |
| 47 | |
| 48 | in putty do ./mksrcarc.sh |
| 49 | in putty do ./mkunxarc.sh $(Unxver) |
| 50 | in putty do perl mkfiles.pl |
| 51 | in putty/doc do make $(Docmakeargs) putty.hlp |
| 52 | in putty/doc do make $(Docmakeargs) chm |
| 53 | |
| 54 | # Munge the installer script locally so that it reports the version |
| 55 | # we're really building. |
| 56 | in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(AppVerName=).*$$/$$1$$a/' '$(Iname)' putty.iss |
| 57 | in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(VersionInfoTextVersion=).*$$/$$1$$a/' '$(Ivertext)' putty.iss |
| 58 | in putty/windows do perl -i~ -pe 'BEGIN{$$a=shift@ARGV;}s/^(AppVersion=).*$$/$$1$$a/' '$(Iversion)' putty.iss |
| 59 | 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 |
| 60 | |
| 61 | # Windowsify LICENCE, since it's going in the Windows installer. |
| 62 | in putty do perl -i~ -pe 'y/\015//d;s/$$/\015/' LICENCE |
| 63 | |
| 64 | delegate windows |
| 65 | # FIXME: Cygwin alternative? |
| 66 | in putty/windows do cmd /c vcvars32 \& nmake -f Makefile.vc $(Makeargs) |
| 67 | # Ignore exit code from hhc, in favour of seeing whether the .chm |
| 68 | # file was created. (Yuck; but hhc appears to return non-zero |
| 69 | # exit codes on whim.) |
| 70 | in putty/doc do hhc putty.hhp; test -f putty.chm |
| 71 | in putty/windows do iscc putty.iss |
| 72 | return putty/windows/*.exe |
| 73 | return putty/windows/*.map |
| 74 | return putty/doc/putty.chm |
| 75 | return putty/windows/Output/setup.exe |
| 76 | enddelegate |
| 77 | in putty/doc do make mostlyclean |
| 78 | in putty/doc do make $(Docmakeargs) |
| 79 | in putty/windows do zip -k -j putty.zip `ls *.exe | grep -v puttytel` ../doc/putty.chm ../doc/putty.hlp ../doc/putty.cnt |
| 80 | in putty/doc do zip puttydoc.zip *.html |
| 81 | |
| 82 | # Deliver the actual PuTTY release directory into a subdir `putty'. |
| 83 | deliver putty/windows/*.exe putty/x86/$@ |
| 84 | deliver putty/windows/putty.zip putty/x86/$@ |
| 85 | deliver putty/windows/Output/setup.exe putty/x86/$(Ifilename) |
| 86 | deliver putty/doc/puttydoc.zip putty/$@ |
| 87 | deliver putty/doc/putty.chm putty/$@ |
| 88 | deliver putty/doc/putty.hlp putty/$@ |
| 89 | deliver putty/doc/putty.cnt putty/$@ |
| 90 | deliver putty/doc/puttydoc.txt putty/$@ |
| 91 | deliver putty/doc/*.html putty/htmldoc/$@ |
| 92 | deliver putty/putty-src.zip putty/$@ |
| 93 | deliver putty/*.tar.gz putty/$@ |
| 94 | |
| 95 | # Deliver the map files alongside the `proper' release deliverables. |
| 96 | deliver putty/windows/*.map maps-x86/$@ |
| 97 | |
| 98 | # Deliver sign.sh, so that whoever has just built PuTTY (the |
| 99 | # snapshot scripts or me, depending) can conveniently sign it with |
| 100 | # whatever key they want. |
| 101 | deliver putty/sign.sh $@ |
| 102 | |
| 103 | # Create files of cryptographic checksums, which will be signed along |
| 104 | # with the files they verify. We've provided MD5 checksums for a |
| 105 | # while, but now MD5 is looking iffy, we're expanding our selection. |
| 106 | # |
| 107 | # Creating these files is most easily done in the destination |
| 108 | # directory, where all the files we're delivering are already in their |
| 109 | # final relative layout. |
| 110 | in-dest putty do a=`\find * -type f -print`; md5sum $$a > md5sums && sha1sum $$a > sha1sums && sha256sum $$a > sha256sums && sha512sum $$a > sha512sums |
| 111 | |
| 112 | # And construct .htaccess files. One in the top-level directory, |
| 113 | # setting the MIME types for Windows help files and providing an |
| 114 | # appropriate link to the source archive: |
| 115 | in-dest putty do echo "AddType application/octet-stream .chm" >> .htaccess |
| 116 | in-dest putty do echo "AddType application/octet-stream .hlp" >> .htaccess |
| 117 | in-dest putty do echo "AddType application/octet-stream .cnt" >> .htaccess |
| 118 | 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 |
| 119 | # And one in the x86 directory, providing a link for the installer. |
| 120 | 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 |