From 3cb08209d2f937186b9997e0320e7ae1a9c28fa5 Mon Sep 17 00:00:00 2001 From: robk-tahoe Date: Mon, 14 Jan 2008 17:53:54 -0700 Subject: [PATCH] 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 --- Makefile | 15 +++++++-- misc/hatch-eggs.py | 41 +++++++++++++++++++++++ misc/sub-ver.py | 26 ++++++++++++++ windows/Makefile | 12 ------- windows/{installer.iss => installer.tmpl} | 16 ++++----- 5 files changed, 87 insertions(+), 23 deletions(-) create mode 100644 misc/hatch-eggs.py create mode 100644 misc/sub-ver.py delete mode 100644 windows/Makefile rename windows/{installer.iss => installer.tmpl} (84%) diff --git a/Makefile b/Makefile index ee84b9d53..04cd201a5 100644 --- a/Makefile +++ b/Makefile @@ -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 + diff --git a/misc/hatch-eggs.py b/misc/hatch-eggs.py new file mode 100644 index 000000000..6793328dc --- /dev/null +++ b/misc/hatch-eggs.py @@ -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() + diff --git a/misc/sub-ver.py b/misc/sub-ver.py new file mode 100644 index 000000000..c5e0e83fc --- /dev/null +++ b/misc/sub-ver.py @@ -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, + diff --git a/windows/Makefile b/windows/Makefile deleted file mode 100644 index fc06a02c0..000000000 --- a/windows/Makefile +++ /dev/null @@ -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 diff --git a/windows/installer.iss b/windows/installer.tmpl similarity index 84% rename from windows/installer.iss rename to windows/installer.tmpl index 3e6bfe80c..2d07f8b99 100644 --- a/windows/installer.iss +++ b/windows/installer.tmpl @@ -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