Extend build_ssl to Win64, using VSExtComp.

This commit is contained in:
Martin v. Löwis 2006-07-14 09:58:55 +00:00
parent eda87127a8
commit d73168d954
5 changed files with 78 additions and 45 deletions

View File

@ -170,6 +170,8 @@ Extension Modules
Build
-----
- Automate Windows build process for the Win64 SSL module.
- 'configure' now detects the zlib library the same way as distutils.
Previously, the slight difference could cause compilation errors of the
'zlib' module on systems with more than one version of zlib.

View File

@ -21,8 +21,8 @@
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCNMakeTool"
BuildCommandLine="python build_ssl.py"
ReBuildCommandLine="python build_ssl.py -a"
BuildCommandLine="build_ssl.bat $(ConfigurationName)"
ReBuildCommandLine="build_ssl.bat -a $(ConfigurationName)"
CleanCommandLine="echo Nothing to do"
Output="_ssl.pyd"/>
</Configuration>
@ -35,8 +35,8 @@
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCNMakeTool"
BuildCommandLine="python_d -u build_ssl.py -d"
ReBuildCommandLine="python_d -u build_ssl.py -d -a"
BuildCommandLine="build_ssl.bat $(ConfigurationName)"
ReBuildCommandLine="build_ssl.bat -a $(ConfigurationName)"
CleanCommandLine="echo Nothing to do"
Output="_ssl_d.pyd"/>
</Configuration>
@ -49,8 +49,9 @@
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCNMakeTool"
BuildCommandLine="python build_ssl.py"
ReBuildCommandLine="python build_ssl.py -a"
BuildCommandLine="build_ssl.bat $(ConfigurationName)"
ReBuildCommandLine="build_ssl.bat -a $(ConfigurationName)"
CleanCommandLine="echo Nothing to do"
Output="_ssl.pyd"/>
</Configuration>
<Configuration
@ -62,8 +63,9 @@
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCNMakeTool"
BuildCommandLine="python build_ssl.py"
ReBuildCommandLine="python build_ssl.py -a"
BuildCommandLine="build_ssl.bat $(ConfigurationName)"
ReBuildCommandLine="build_ssl.bat -a $(ConfigurationName)"
CleanCommandLine="echo Nothing to do"
Output="_ssl.pyd"/>
</Configuration>
</Configurations>

4
PCbuild/build_ssl.bat Normal file
View File

@ -0,0 +1,4 @@
@echo off
if not defined HOST_PYTHON set HOST_PYTHON=python
%HOST_PYTHON% build_ssl.py %1 %2

View File

@ -84,9 +84,59 @@ def find_best_ssl_dir(sources):
print "Could not find an SSL directory in '%s'" % (sources,)
return best_name
def run_32all_py():
# ms\32all.bat will reconfigure OpenSSL and then try to build
# all outputs (debug/nondebug/dll/lib). So we filter the file
# to exclude any "nmake" commands and then execute.
tempname = "ms\\32all_py.bat"
in_bat = open("ms\\32all.bat")
temp_bat = open(tempname,"w")
while 1:
cmd = in_bat.readline()
print 'cmd', repr(cmd)
if not cmd: break
if cmd.strip()[:5].lower() == "nmake":
continue
temp_bat.write(cmd)
in_bat.close()
temp_bat.close()
os.system(tempname)
try:
os.remove(tempname)
except:
pass
def run_configure(configure, do_script):
os.system("perl Configure "+configure)
os.system(do_script)
def main():
debug = "-d" in sys.argv
build_all = "-a" in sys.argv
if sys.argv[-1] == "Release":
arch = "x86"
debug = False
configure = "VC-WIN32"
makefile = "32.mak"
elif sys.argv[-1] == "Debug":
arch = "x86"
debug = True
configure = "VC-WIN32"
makefile="d32.mak"
elif sys.argv[-1] == "ReleaseItanium":
arch = "ia64"
debug = False
configure = "VC-WIN64I"
do_script = "ms\\do_win64i"
makefile = "ms\\nt.mak"
os.environ["VSEXTCOMP_USECL"] = "MS_ITANIUM"
elif sys.argv[-1] == "ReleaseAMD64":
arch="amd64"
debug=False
configure = "VC-WIN64A"
do_script = "ms\\do_win64a"
makefile = "ms\\nt.mak"
os.environ["VSEXTCOMP_USECL"] = "MS_OPTERON"
make_flags = ""
if build_all:
make_flags = "-a"
@ -107,49 +157,24 @@ def main():
try:
os.chdir(ssl_dir)
# If the ssl makefiles do not exist, we invoke Perl to generate them.
if not os.path.isfile(os.path.join(ssl_dir, "32.mak")) or \
not os.path.isfile(os.path.join(ssl_dir, "d32.mak")):
if not os.path.isfile(makefile):
print "Creating the makefiles..."
# Put our working Perl at the front of our path
os.environ["PATH"] = os.path.split(perl)[0] + \
os.pathsep + \
os.environ["PATH"]
# ms\32all.bat will reconfigure OpenSSL and then try to build
# all outputs (debug/nondebug/dll/lib). So we filter the file
# to exclude any "nmake" commands and then execute.
tempname = "ms\\32all_py.bat"
in_bat = open("ms\\32all.bat")
temp_bat = open(tempname,"w")
while 1:
cmd = in_bat.readline()
print 'cmd', repr(cmd)
if not cmd: break
if cmd.strip()[:5].lower() == "nmake":
continue
temp_bat.write(cmd)
in_bat.close()
temp_bat.close()
os.system(tempname)
try:
os.remove(tempname)
except:
pass
if arch=="x86":
run_32all_py()
else:
run_configure(configure, do_script)
# Now run make.
print "Executing nmake over the ssl makefiles..."
if debug:
rc = os.system("nmake /nologo -f d32.mak")
if rc:
print "Executing d32.mak failed"
print rc
sys.exit(rc)
else:
rc = os.system("nmake /nologo -f 32.mak")
if rc:
print "Executing 32.mak failed"
print rc
sys.exit(rc)
rc = os.system("nmake /nologo -f "+makefile)
if rc:
print "Executing d32.mak failed"
print rc
sys.exit(rc)
finally:
os.chdir(old_cd)
# And finally, we can build the _ssl module itself for Python.

View File

@ -264,7 +264,7 @@ SDK, in particular the 64-bit support. This includes an Itanium compiler
In addition, you need the Visual Studio plugin for external C compilers,
from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to
locate the proper target compiler, and convert compiler options
accordingly. The project files require atleast version 0.8.
accordingly. The project files require atleast version 0.9.
Building for AMD64
------------------