windows installer build refinements

this resolves problems of py2exe's modulefinder collection of sources from
.zipped egg files, not by using easy_install to reach the --always-unzip
option, but rather with a small tool which unpacks any zipped egg files found
in misc/dependencies.  this fixes the py2exe build given rollback of the 
easy_install stuff which had broken the unix builds.  misc/hatch-eggs.py
performs the honours.

this also includes a misc/sub-ver.py tool which substitutes elements of the
verion number for the current code base (by importing allmydata.__version__
hence make-version should be run first, and the python path carefully managed)
into template files using python's string interpolation of named args from a
dict as the templating syntax.  i.e. %(major)d %(minor)d %(point)d %(nano)d
each expand to the individual components of the version number as codified
by the pyutil.version_class.Version class.  there is also a %(build)s tag
which expands to the string form of the whole version number.  This tool is
used to interpolate the automatically generated version information into the
innosetup source file in a form consistent with innosetup/windows' restrictions
This commit is contained in:
robk-tahoe 2008-01-14 17:53:54 -07:00
parent 2dd5d2fc63
commit 3cb08209d2
5 changed files with 87 additions and 23 deletions

View File

@ -417,9 +417,18 @@ deb-gutsy-head:
fakeroot debian/rules binary
# These targets provide for windows native builds
INNOSETUP := $(shell cygpath -au "$(PROGRAMFILES)/Inno Setup 5/Compil32.exe")
windows-exe:
PYTHON=$(PYTHON) $(PP) $(MAKE) -C windows
.PHONY: hatch-eggs windows-exe windows-installer
hatch-eggs:
$(PP) $(PYTHON) misc/hatch-eggs.py
windows-exe: hatch-eggs
#PYTHON=$(PYTHON) $(PP) $(MAKE) -C windows
cd windows && $(PP) $(PYTHON) setup.py py2exe
windows-installer: windows-exe
$(MAKE) -C windows installer
$(PP) $(PYTHON) misc/sub-ver.py windows/installer.tmpl >windows/installer.iss
cd windows && "$(INNOSETUP)" /cc installer.iss

41
misc/hatch-eggs.py Normal file
View File

@ -0,0 +1,41 @@
#! /usr/bin/python
import os.path
import sys
import zipfile
path = []
if sys.platform == 'win32':
support_lib = "support/Lib/site-packages"
else:
pyver = "python%d.%d" % (sys.version_info[:2])
support_lib = "support/lib/%s/site-packages" % pyver
if os.path.exists(support_lib):
for fn in os.listdir(support_lib):
if fn.endswith(".egg"):
path.append(os.path.abspath(os.path.join(support_lib, fn)))
# We also need to include .egg's in the CWD, because if there is an .egg there
# then "make build-deps" will take that as satisfying its requirements.
for fn in os.listdir("."):
if fn.endswith(".egg"):
path.append(os.path.abspath(os.path.join(os.getcwd(), fn)))
for eggpath in path:
if os.path.isfile(eggpath):
bak = eggpath + '.bak'
os.rename(eggpath, bak)
os.mkdir(eggpath)
zf = zipfile.ZipFile(bak, 'r')
print bak
for name in zf.namelist():
dirname = os.path.join(eggpath, os.path.dirname(name))
if not os.path.isdir(dirname):
print 'creating', dirname
os.makedirs(dirname)
print name
f = file(os.path.join(eggpath, name), 'wb')
f.write(zf.read(name))
f.close()

26
misc/sub-ver.py Normal file
View File

@ -0,0 +1,26 @@
#! /usr/bin/python
from allmydata import __version__ as v
import sys
if len(sys.argv) == 1:
input = sys.stdin
elif len(sys.argv) == 2:
fname = sys.argv[1]
input = file(fname, 'rb')
else:
raise ValueError('must provide 0 or 1 argument (stdin, or filename)')
vern = {
'major': v.major,
'minor': v.minor,
'point': v.micro,
'micro': v.micro,
'nano' : v.nano,
'build': str(v),
}
for line in input.readlines():
print line % vern,

View File

@ -1,12 +0,0 @@
INNOSETUP := $(shell cygpath -u "$(PROGRAMFILES)/Inno Setup 5/Compile32.exe")
# note that this requires the python path to be set appropriately, and hence this
# should be invoked by calling the windows-exe taget in the top level makefile
windows-exe:
$(PYTHON) setup.py py2exe
installer:
$(INNOSETUP)
#$(INNOSETUP) /cc installer.iss

View File

@ -1,8 +1,8 @@
[Setup]
AppName=Allmydata Tahoe
AppVerName=Allmydata Tahoe 2.9
AppVersion=2.9.0
VersionInfoVersion=2.9.0
AppVerName=Allmydata Tahoe %(major)d.%(minor)d
AppVersion=%(major)d.%(minor)d.%(point)d-%(nano)d
VersionInfoVersion=%(major)d.%(minor)d.%(point)d.%(nano)d
AppPublisher=Allmydata Inc.
AppPublisherURL=http://www.allmydata.com/
AppSupportURL=http://www.allmydata.com/support/
@ -12,13 +12,13 @@ DefaultGroupName=Allmydata
MinVersion=0,4.0
Compression=lzma/max
SolidCompression=yes
OutputDir=installer/Allmydata_Tahoe_Setup_v2_9_0.exe
OutputDir=./installer/
SourceDir=dist
SetupIconFile=installer.ico
UninstallDisplayIcon=installer.ico
SetupIconFile=../installer.ico
UninstallDisplayIcon=../amdicon.ico
; license file needs to be build/all dir
;LicenseFile=../license.txt
OutputBaseFilename=AllmydataSetup-%BUILD%
OutputBaseFilename=Allmydata_Tahoe_Setup_v%(major)d_%(minor)d_%(point)d
[Files]
; contents of 'binaries' dir. (consolidated build target)
@ -44,7 +44,7 @@ Filename: "{app}\Install\confwiz.exe"; Flags: hidewizard
; Performed before the uninstaller runs to undo things
Filename: "{sys}\net.exe"; Parameters: "stop Tahoe"; Flags: runhidden
Filename: "{app}\Install\tahoesvc.exe"; Parameters: "-remove"; Flags: runhidden
;Filename: "http://www.allmydata.com/redirect/uninstallsurvey.php?build=%BUILD%"; Flags: shellexec
;Filename: "http://www.allmydata.com/redirect/uninstallsurvey.php?build=%(build)%"; Flags: shellexec
[Registry]
Root: HKLM; Subkey: "Software\Allmydata"; Flags: uninsdeletekeyifempty