Commit 06e3b28b authored by Mark Hammond's avatar Mark Hammond

Update to latest WinBuilders, as per http://www.zope.org/Collectors/Zope/1782

parent fa7b6004
......@@ -4,68 +4,71 @@ The installers have only been tested under Windows 2K, but should work
without incident on XP. It "almost works" on Win98SE (see bottom of
file for discussion).
Setup Environment
------------------
Install Cygwin from cygwin.org (the default installation should give
you everything you need).
Install Microsoft Visual C++ 6.0.
Install InnoSetup 4.0 from www.jrsofware.org (into its default location).
4.0.4-beta seems to work, while 4.0.7 does not. Symptom: type error
on compilation. 4.0.11 appears to work.
Unpack this package into a directory.
Launch a Cygwin bash shell. If necessary, run the VCVARS.bat to set up
the VC++ environment. This shouldn't be necessary on Win2K, provided
you've brought up the GUI at least once (MSDev doesn't finish writing
all the registry keys it should until the GUI is first launched). See
below for Win98SE.
If you're building Zope against Python 2.3.X, you may need to add some
registry entries due to a bug in the distutils msvccompiler.py:
[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories]
"path dirs"="c:\\windows\\system32;c:\\Program Files\\Microsoft Visual Studio\\Common\\Tools\\WinNT; c:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin;c:\\Program Files\\Microsoft Visual Studio\\Common\\Tools;c:\\Program Files\\Microsoft Visual Studio\\VC98\\bin"
"library dirs"="C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\lib;C:\\Program Files\\Microsoft Visual Studio\\VC98\\lib"
"include dirs"="C:\\Program Files\\Microsoft Visual Studio\\VC98\\atl\\include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\include"
Install Microsoft Visual C++ 6.0 (or MSVC 7 once we get to Python 2.4)
This is unecessary if building against Python 2.2.X. [Tim didn't find
this necessary building against Python 2.3.3 and Christian against 2.3.4 either.]
Install InnoSetup 4.2 from www.jrsofware.org (into its default location).
Versions earlier than 4.0.11 are known to not work; any 4.2.x release
or later should be fine. Inno 5.x versions do *not* work (it appears the
Inno "custom dialog" mechanism has changed in an incompatible way)
From the parent directory of the package, make a "tmp" directory.
From the parent directory of the package, make a "tmp" directory. Place
the necessary pre-requisites in this directory. At the time of this writing,
this includes:
Get necessary source packages and place them in the tmp directory. At the time
of this writing, this includes:
- Python-2.3.4.tgz
- Python-2.3.4.exe (used for binary modules)
- win32all-163.exe
- Python-2.3.5.tgz
- Python-2.3.5.exe (used for binary modules)
- pywin32-204.win32-py2.3.exe (extracts binaries and sources)
- Zope.tgz
As time marches on, these version numbers will obviously change.
As time marches on, these version numbers will obviously change. See
mk/python.mk for the exact versions required.
If you see any make errors with references to one of these files, it's because
you've not downloaded them or you've not placed them in 'tmp'.
Building
--------
Launch a Cygwin bash shell, and from the parent directory, type:
WinBuilders/buildout <type>
where type is one of "python", "zope", or "zeo". Alternatively, you can
avoid the bash shell completely, and from a Windows command prompt type:
bash WinBuilders/buildout <type>
From the parent directory of the package, type WinBuilders/buildout <type>
where type is one of "python", "zope", or "zeo".
Everything should work!
* For python, the buildout populates the "build" directory with a Python
laid out for Zope and/or ZEO.
For python, the buildout populates the "build" directory with a Python
laid out for Zope and/or ZEO.
* For 'zope', the buildout populates the "build" directory with a Windows
executable installer (read the Makefile.zope for special instructions).
For 'zope', the buildout populates the "build" directory with a Windows
executable installer (read the Makfile.zope for special instructions).
* For 'zeo', the buildout populates the "build" directory with a Windows
executable installer (read the Makefile.zeo for special instructions).
For 'zeo', the buildout populates the "build" directory with a Windows
executable installer (read the Makefile.zeo for special instructions).
If the build fails:
If the Windows drive you are working on is not C: (or Inno isn't installed
there!), try executing the following:
WinBuilders/buildout <type> CYGROOT=/cygdrive/{your_drive_letter}
If you see errors relating to MSVC not being installed, or the build process
failing to find MSVC, it may be necessary to bring up the MSVC gui
at least once (MSDev doesn't finish writing
all the registry keys it should until the GUI is first launched). If may
also be necessary to run VCVARS.bat to set up the VC++ environment (but
generally is not.) See below for Win98SE.
Win98SE notes
-------------
- You have to run vcvars32.bat to set up envars for MSVC 6. Running that
from a bash shell doesn't have any effect on the Cygwin PATH.
This works:
If you see any make errors with references to any of the files required
in tmp/ (see 'Setup Environment' above), it's because a later version is
now required, or the files you've downloaded are not in 'tmp'.
All platform notes
------------------
- Depending on your MSVC installation options, you have to run vcvars32.bat
to set up envars for MSVC. Running that from a bash shell doesn't have any
effect on the Cygwin PATH. This works:
+ Open a native DOS box.
+ Run vcvars32.bat.
......@@ -74,6 +77,8 @@ Win98SE notes
desktop shortcut resolves to, so you can get the exact path by looking
at the icon's Properties).
Win98SE notes
-------------
- Every time a makefile runs xcopy, there's a segfault in kernel32.dll,
which hangs the bash shell with an endless succession of error boxes.
The only way I found to break out of this was to bring up the debugger,
......
......@@ -10,6 +10,7 @@ DefaultGroupName=Zope <<VERSION>>
OutputBaseFilename=Zope-<<VERSION>>-win32
WizardImageFile=<<MAKEFILEDIR>>\etc\zlogo_left.bmp
WizardSmallImageFile=<<MAKEFILEDIR>>\etc\zlogo_top.bmp
SolidCompression=yes
SourceDir=.
OutputDir=.
......@@ -30,8 +31,9 @@ Source:"import\*.*"; DestDir: "{app}\import"; Flags: ignoreversion recursesubdir
Source:"lib\*.*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs
Source:"skel\*.*"; DestDir: "{app}\skel"; Flags: ignoreversion recursesubdirs
; these are required to be put into the bin directory for proper function of NT services
Source:"bin\Lib\site-packages\PythonService.exe"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\PyWinTypes23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\win32\PythonService.exe"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\pywin32_system32\PyWinTypes23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\pywin32_system32\PythonCOM23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion
; This is a helper module for manging registry entries at uninstall time
Source: "<<MAKEFILEDIR>>\bin\fixreg.py"; DestDir: "{app}\bin"; Flags: ignoreversion
......@@ -49,7 +51,7 @@ Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeserv
Filename: "{code:GetDataDir}\bin\runzope.bat"; Description: "Launch Zope"; Flags: nowait postinstall skipifsilent; Check: DontDoService
[UninstallRun]
Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" stop"; Check: DoService
Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" --wait=30 stop"; Check: DoService
Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" remove"; Check: DoService
Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\decompilezpy.py"" ""{app}"""
Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\fixreg.py"" ""<<VERSION>>"""
......@@ -105,7 +107,7 @@ begin
{ Ask for a dir until the user has approved one or clicked Back or Cancel }
Next:= InputDir(DataDirValues[0], DataDir);
Next:= InputDir(False, DataDirValues[0], DataDir);
if Next and FileOrDirExists(DataDir) then DirOk := False;
......@@ -117,7 +119,7 @@ begin
if FileOrDirExists(DataDir) then begin
DirOk := MsgBox('Directory Exists' #13#13 'The directory ' + DataDir + ' already exists. Would you like to create instance files in that directory anyway?', mbConfirmation, MB_YESNO) = idYes;
end;
if not DirOk then Next := InputDir(DataDirValues[0], DataDir);
if not DirOk then Next := InputDir(False, DataDirValues[0], DataDir);
end;
Result:=Next;
......@@ -128,7 +130,7 @@ function CollectPassword(): Boolean;
var
Next: Boolean;
begin
ScriptDlgPageSetSubCaption1('Specify adminisrator password');
ScriptDlgPageSetSubCaption1('Specify administrator password');
ScriptDlgPageSetSubCaption2('The login name for your Zope administrator account is "admin". When you first connect to the Zope management interface, you will need to login using the "admin" username and the password you specify below.');
Next := InputQueryArrayEx(PasswordPrompts, PasswordChars, PasswordValues);
......
......@@ -30,6 +30,8 @@ CSCRIPT=cscript
ECHO=echo
ISS_DIR=$(CYGROOT)/Progra~1/Inno Setup 4
ISS_COMPILER=$(ISS_DIR)/Compil32.exe
# We need a version that understands cygwin paths, so /bin/
UNZIP=/bin/unzip
$(REQUIRED_FILES):
if [ -z "$(BASE_DIR)/$@" ]; then echo. &echo. & echo \
......
# The Python and win32all versions. For Python, both the source tarball
# and the Windows installer must be in tmp/. For win32all, the Windows
# installer must be in tmp/. Nothing beyond those is required to
# build Python, and you don't even need a compiler for this part.
PYVERSION=2.3.5
W32ALLVERSION=163
# The Python and pywin32 versions. For Python, both the source tarball
# and the Windows installer must be in tmp/. For pywin32 (previously known
# as win32all), the Windows installer must be in tmp/. Nothing beyond those
# is required to build Python, and you don't even need a compiler.
PYVERSION_MAJOR=2
PYVERSION_MINOR=3
PYVERSION_PATCH=5
PYVERSION=$(PYVERSION_MAJOR).$(PYVERSION_MINOR).$(PYVERSION_PATCH)
W32ALLVERSION=204
# CAUTION: Extracting files from Wise installers doesn't really do what
# you expect. While a Wise installer is a zip file, the zip file
......@@ -21,16 +24,18 @@ W32ALLVERSION=163
# use the Python source tarball to get all the non-executable parts we
# need.
#
# For win32all, I'm not sure what all the consequences are. Zope has
# gotten away with it so far. Favoring it, Zope makes little use of
# win32all. Against it, there's (as of the time of this writing) little
# field experience with Windows Zope after Python 2.1. Python and
# win32all have both gotten hairier since then, and win32all has
# significant package structure with many instances of files with the
# same name in different subtrees. For now it's poke-and-hope.
# pywin32 doesn't have this problem as it now uses
# a standard distutils 'bdist_wininst' installation .exe. These executables are
# valid .zip files with a "PLATLIB" directory being the complete directory
# structure as installed into "site-packages". These recent pywin32 builds have
# no dependencies on registry settings etc so will work directly as copied out of
# the .exe. The only concerns are the pywintypes/pythoncom dlls, which is
# handled by the Inno installer
PYDIRNAME=Python-$(PYVERSION)
W32ALLDIRNAME=win32all-$(W32ALLVERSION)
# Standard bdist_wininst name - eg: pywin32-203.win32-py2.3[.exe]
W32ALLDIRNAME=pywin32-$(W32ALLVERSION).win32-py$(PYVERSION_MAJOR).$(PYVERSION_MINOR)
W32EXCLUDE=*.chm
# The Python tarball is extracted to PYSRCDIR.
# The contents of the Python installer get extracted to PYEXTRACTDIR.
......@@ -51,7 +56,7 @@ PYTHON_REQUIRED_FILES=tmp/$(W32ALLDIRNAME).exe \
# targets to force them to get unpacked.
ARB_PYSRCDIR=$(PYSRCDIR)/PCbuild/pcbuild.dsw
ARB_PYEXTRACTDIR=$(PYEXTRACTDIR)/zlib.pyd
ARB_W32EXTRACTDIR=$(W32EXTRACTDIR)/readme.txt
ARB_W32EXTRACTDIR=$(W32EXTRACTDIR)/PLATLIB
# Building Python just consists of extracting files.
build_python: $(ARB_PYSRCDIR) $(ARB_PYEXTRACTDIR) $(ARB_W32EXTRACTDIR)
......@@ -77,9 +82,11 @@ $(ARB_PYEXTRACTDIR): tmp/$(PYDIRNAME).exe
"tmp/$(PYDIRNAME).exe" /S /X "$(WIN_PYEXTRACTDIR)"
$(TOUCH) "$(ARB_PYEXTRACTDIR)"
# unzip warns about .exe not being exactly a .zip, then succeeds in
# extracting the files, then returns with exit != 0 - ignore exit code
$(ARB_W32EXTRACTDIR): tmp/$(W32ALLDIRNAME).exe
$(MKDIR) "$(W32EXTRACTDIR)"
"tmp/$(W32ALLDIRNAME).exe" /S /X "$(WIN_W32EXTRACTDIR)"
-$(UNZIP) -o "-d$(W32EXTRACTDIR)" "tmp/$(W32ALLDIRNAME).exe"
cd "$(WIN_W32EXTRACTDIR)\PLATLIB" ; $(RMRF) $(W32EXCLUDE)
$(TOUCH) "$(ARB_W32EXTRACTDIR)"
$(BUILD_DIR)/bin/python.exe:
......@@ -89,8 +96,6 @@ $(BUILD_DIR)/bin/python.exe:
$(CP) "$(MAKEFILEDIR)/doc/ZC_PY_DIST_README.txt" "$(BUILD_DIR)/doc"
$(CP) "$(PYSRCDIR)/LICENSE" "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt"
unix2dos "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt"
$(CP) "$(SRC_DIR)/$(W32ALLDIRNAME)/License.txt" \
"$(BUILD_DIR)/doc/WIN32ALL_LICENSE.txt"
$(MKDIR) "$(BUILD_DIR)/bin/DLLs"
$(XCOPY) "$(WIN_PYEXTRACTDIR)\*.pyd" "$(WIN_BUILD_DIR)\bin\DLLs"
......@@ -100,13 +105,7 @@ $(BUILD_DIR)/bin/python.exe:
$(MKDIR) "$(BUILD_DIR)/bin/Lib/site-packages"
$(CP) "$(PYSRCDIR)/Lib/site-packages/README" \
"$(BUILD_DIR)/bin/Lib/site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.pyd" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.dll" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.exe" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.py" \
$(XCOPY) "$(WIN_W32EXTRACTDIR)\PLATLIB" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(CP) "$(MAKEFILEDIR)/etc/sitecustomize.py" \
......
......@@ -16,7 +16,8 @@ test_zope:
clean_zope:
$(RMRF) src/$(ZOPEDIRNAME)
install_zope: src/$(ZOPEDIRNAME)/inst/configure.py install_python \
install_zope: src/$(ZOPEDIRNAME)/inst/configure.py \
$(BUILD_DIR)/lib/python/version.txt install_python \
$(BUILD_DIR)/Zope-$(ZOPEVERSION)-win32.exe
ESCAPED=$(shell sh $(MAKEFILEDIR)/bin/escape.sh '$(WIN_MAKEFILEDIR)')
......
......@@ -95,16 +95,29 @@ PYTHONSERVICE_EXE=r'%s\bin\PythonService.exe' % ZEO_HOME
sys.path.insert(0, SOFTWARE_HOME)
# Setup the environment, so sub-processes see these variables
os.environ["PYTHONPATH"] = os.environ.get("PYTHONPATH", "") + ";" + SOFTWARE_HOME
os.environ["INSTANCE_HOME"] = INSTANCE_HOME
from nt_svcutils import service
servicename = 'ZEO_%s' % str(hash(INSTANCE_HOME))
servicename = 'ZEO_%s' % str(hash(INSTANCE_HOME.lower()))
class InstanceService(service.Service):
start_cmd = '"%s" "%s" -C "%s"' % (PYTHON, ZEO_RUN, CONFIG_FILE)
_svc_name_ = servicename
_svc_display_name_ = 'ZEO instance at %s' % INSTANCE_HOME
# If the exe we expect is not there, let the service framework search
# for it. This will be true for people running from source builds and
# relying on pre-installed pythonservice.exe.
# Note this is only used at install time, not runtime.
if os.path.isfile(PYTHONSERVICE_EXE):
_exe_name_ = PYTHONSERVICE_EXE
process_runner = PYTHON
process_args = '"%s" -C "%s"' % (ZOPE_RUN, CONFIG_FILE)
evtlog_name = 'ZEO'
if __name__ == '__main__':
import win32serviceutil
win32serviceutil.HandleCommandLine(InstanceService)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment