diff --git a/PCbuild/build_ssl.bat b/PCbuild/prepare_ssl.bat
rename from PCbuild/build_ssl.bat
rename to PCbuild/prepare_ssl.bat
--- a/PCbuild/build_ssl.bat
+++ b/PCbuild/prepare_ssl.bat
@@ -8,5 +8,4 @@
if not exist python35.dll exit 1
)
)
-%HOST_PYTHON% build_ssl.py %1 %2 %3
-
+%HOST_PYTHON% prepare_ssl.py %*
diff --git a/PCbuild/build_ssl.py b/PCbuild/prepare_ssl.py
rename from PCbuild/build_ssl.py
rename to PCbuild/prepare_ssl.py
--- a/PCbuild/build_ssl.py
+++ b/PCbuild/prepare_ssl.py
@@ -1,29 +1,25 @@
-# Script for building the _ssl and _hashlib modules for Windows.
+# Script for preparing OpenSSL for building on Windows.
# Uses Perl to setup the OpenSSL environment correctly
-# and build OpenSSL, then invokes a simple nmake session
-# for the actual _ssl.pyd and _hashlib.pyd DLLs.
+
+# Script originally authored by Mark Hammond.
+# Major revisions by:
+# Martin v. Löwis
+# Christian Heimes
+# Zachary Ware
# THEORETICALLY, you can:
-# * Unpack the latest SSL release one level above your main Python source
-# directory. It is likely you will already find the zlib library and
-# any other external packages there.
+# * Unpack the latest OpenSSL release where $(opensslDir) in
+# PCbuild\pyproject.props expects it to be.
# * Install ActivePerl and ensure it is somewhere on your path.
-# * Run this script from the PCBuild directory.
+# * Run this script with the OpenSSL source dir as the only argument.
#
-# it should configure and build SSL, then build the _ssl and _hashlib
-# Python extensions without intervention.
+# it should configure OpenSSL such that it is ready to be built by
+# ssl.vcxproj on 32 or 64 bit platforms.
-# Modified by Christian Heimes
-# Now this script supports pre-generated makefiles and assembly files.
-# Developers don't need an installation of Perl anymore to build Python. A svn
-# checkout from our svn repository is enough.
-#
-# In Order to create the files in the case of an update you still need Perl.
-# Run build_ssl in this order:
-# python.exe build_ssl.py Release x64
-# python.exe build_ssl.py Release Win32
-
-import os, sys, re, shutil
+import os
+import re
+import sys
+import shutil
# Find all "foo.exe" files on the PATH.
def find_all_on_path(filename, extras = None):
@@ -63,14 +59,6 @@
print(" Please install ActivePerl and ensure it appears on your path")
return None
-# Fetch SSL directory from VC properties
-def get_ssl_dir():
- propfile = (os.path.join(os.path.dirname(__file__), 'pyproject.props'))
- with open(propfile) as f:
- m = re.search('openssl-([^<]+)<', f.read())
- return "..\..\openssl-"+m.group(1)
-
-
def create_makefile64(makefile, m32):
"""Create and fix makefile for 64bit
@@ -138,24 +126,14 @@
return
shutil.copy(src, dst)
-def main():
- build_all = "-a" in sys.argv
- if sys.argv[1] == "Release":
- debug = False
- elif sys.argv[1] == "Debug":
- debug = True
- else:
- raise ValueError(str(sys.argv))
-
- if sys.argv[2] == "Win32":
- arch = "x86"
+def prep(arch):
+ if arch == "x86":
configure = "VC-WIN32"
do_script = "ms\\do_nasm"
makefile="ms\\nt.mak"
m32 = makefile
dirsuffix = "32"
- elif sys.argv[2] == "x64":
- arch="amd64"
+ elif arch == "amd64":
configure = "VC-WIN64A"
do_script = "ms\\do_win64a"
makefile = "ms\\nt64.mak"
@@ -163,11 +141,54 @@
dirsuffix = "64"
#os.environ["VSEXTCOMP_USECL"] = "MS_OPTERON"
else:
- raise ValueError(str(sys.argv))
+ raise ValueError('Unrecognized platform: %s' % arch)
- make_flags = ""
- if build_all:
- make_flags = "-a"
+ # rebuild makefile when we do the role over from 32 to 64 build
+ if arch == "amd64" and os.path.isfile(m32) and not os.path.isfile(makefile):
+ os.unlink(m32)
+
+ # If the ssl makefiles do not exist, we invoke Perl to generate them.
+ # Due to a bug in this script, the makefile sometimes ended up empty
+ # Force a regeneration if it is.
+ if not os.path.isfile(makefile) or os.path.getsize(makefile)==0:
+ print("Creating the makefiles...")
+ sys.stdout.flush()
+ run_configure(configure, do_script)
+
+ if arch == "amd64":
+ create_makefile64(makefile, m32)
+ fix_makefile(makefile)
+ copy(r"crypto\buildinf.h", r"crypto\buildinf_%s.h" % arch)
+ copy(r"crypto\opensslconf.h", r"crypto\opensslconf_%s.h" % arch)
+ else:
+ print(makefile, 'already exists!')
+
+ # If the assembler files don't exist in tmpXX, copy them there
+ if os.path.exists("asm"+dirsuffix):
+ if not os.path.exists("tmp"+dirsuffix):
+ os.mkdir("tmp"+dirsuffix)
+ for f in os.listdir("asm"+dirsuffix):
+ if not f.endswith(".asm"): continue
+ if os.path.isfile(r"tmp%s\%s" % (dirsuffix, f)): continue
+ shutil.copy(r"asm%s\%s" % (dirsuffix, f), "tmp"+dirsuffix)
+
+def main():
+ if len(sys.argv) == 1:
+ print("Not enough arguments: directory containing OpenSSL",
+ "sources must be supplied")
+ sys.exit(1)
+
+ if len(sys.argv) > 2:
+ print("Too many arguments supplied, all we need is the directory",
+ "containing OpenSSL sources")
+ sys.exit(1)
+
+ ssl_dir = sys.argv[1]
+
+ if not os.path.exists(ssl_dir) and os.path.isdir(ssl_dir):
+ print(ssl_dir, "is not an existing directory!")
+ sys.exit(1)
+
# perl should be on the path, but we also look in "\perl" and "c:\\perl"
# as "well known" locations
perls = find_all_on_path("perl.exe", ["\\perl\\bin", "C:\\perl\\bin"])
@@ -175,79 +196,21 @@
if perl:
print("Found a working perl at '%s'" % (perl,))
else:
- print("No Perl installation was found. Existing Makefiles are used.")
+ sys.exit(1)
sys.stdout.flush()
- # Look for SSL 2 levels up from pcbuild - ie, same place zlib etc all live.
- ssl_dir = get_ssl_dir()
- if ssl_dir is None:
- sys.exit(1)
- old_cd = os.getcwd()
+ # Put our working Perl at the front of our path
+ os.environ["PATH"] = os.path.dirname(perl) + \
+ os.pathsep + \
+ os.environ["PATH"]
+
+ old_cwd = os.getcwd()
try:
os.chdir(ssl_dir)
- # rebuild makefile when we do the role over from 32 to 64 build
- if arch == "amd64" and os.path.isfile(m32) and not os.path.isfile(makefile):
- os.unlink(m32)
-
- # If the ssl makefiles do not exist, we invoke Perl to generate them.
- # Due to a bug in this script, the makefile sometimes ended up empty
- # Force a regeneration if it is.
- if not os.path.isfile(makefile) or os.path.getsize(makefile)==0:
- if perl is None:
- print("Perl is required to build the makefiles!")
- sys.exit(1)
-
- print("Creating the makefiles...")
- sys.stdout.flush()
- # Put our working Perl at the front of our path
- os.environ["PATH"] = os.path.dirname(perl) + \
- os.pathsep + \
- os.environ["PATH"]
- run_configure(configure, do_script)
- if debug:
- print("OpenSSL debug builds aren't supported.")
- #if arch=="x86" and debug:
- # # the do_masm script in openssl doesn't generate a debug
- # # build makefile so we generate it here:
- # os.system("perl util\mk1mf.pl debug "+configure+" >"+makefile)
-
- if arch == "amd64":
- create_makefile64(makefile, m32)
- fix_makefile(makefile)
- copy(r"crypto\buildinf.h", r"crypto\buildinf_%s.h" % arch)
- copy(r"crypto\opensslconf.h", r"crypto\opensslconf_%s.h" % arch)
-
- # If the assembler files don't exist in tmpXX, copy them there
- if perl is None and os.path.exists("asm"+dirsuffix):
- if not os.path.exists("tmp"+dirsuffix):
- os.mkdir("tmp"+dirsuffix)
- for f in os.listdir("asm"+dirsuffix):
- if not f.endswith(".asm"): continue
- if os.path.isfile(r"tmp%s\%s" % (dirsuffix, f)): continue
- shutil.copy(r"asm%s\%s" % (dirsuffix, f), "tmp"+dirsuffix)
-
- # Now run make.
- if arch == "amd64":
- rc = os.system("nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm")
- if rc:
- print("nasm assembler has failed.")
- sys.exit(rc)
-
- copy(r"crypto\buildinf_%s.h" % arch, r"crypto\buildinf.h")
- copy(r"crypto\opensslconf_%s.h" % arch, r"crypto\opensslconf.h")
-
- #makeCommand = "nmake /nologo PERL=\"%s\" -f \"%s\"" %(perl, makefile)
- makeCommand = "nmake /nologo -f \"%s\"" % makefile
- print("Executing ssl makefiles:", makeCommand)
- sys.stdout.flush()
- rc = os.system(makeCommand)
- if rc:
- print("Executing "+makefile+" failed")
- print(rc)
- sys.exit(rc)
+ for arch in ['amd64', 'x86']:
+ prep(arch)
finally:
- os.chdir(old_cd)
- sys.exit(rc)
+ os.chdir(old_cwd)
if __name__=='__main__':
main()
diff --git a/PCbuild/ssl.vcxproj b/PCbuild/ssl.vcxproj
--- a/PCbuild/ssl.vcxproj
+++ b/PCbuild/ssl.vcxproj
@@ -118,9 +118,12 @@
<_ProjectFileVersion>10.0.30319.1
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+copy /Y crypto\buildinf_x86.h crypto\buildinf.h
+copy /Y crypto\opensslconf_x86.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -129,9 +132,13 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm || echo nasm failed! && exit
+copy /Y crypto\buildinf_amd64.h crypto\buildinf.h
+copy /Y crypto\opensslconf_amd64.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt64.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -140,9 +147,12 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+copy /Y crypto\buildinf_x86.h crypto\buildinf.h
+copy /Y crypto\opensslconf_x86.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -151,9 +161,13 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm || echo nasm failed! && exit
+copy /Y crypto\buildinf_amd64.h crypto\buildinf.h
+copy /Y crypto\opensslconf_amd64.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt64.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -162,9 +176,12 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+copy /Y crypto\buildinf_x86.h crypto\buildinf.h
+copy /Y crypto\opensslconf_x86.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -173,9 +190,13 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm || echo nasm failed! && exit
+copy /Y crypto\buildinf_amd64.h crypto\buildinf.h
+copy /Y crypto\opensslconf_amd64.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt64.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -184,9 +205,12 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+copy /Y crypto\buildinf_x86.h crypto\buildinf.h
+copy /Y crypto\opensslconf_x86.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -195,9 +219,13 @@
$(NMakeForcedIncludes)
$(NMakeAssemblySearchPath)
$(NMakeForcedUsingAssemblies)
- cd "$(SolutionDir)"
-"$(PythonExe)" build_ssl.py Release $(Platform) -a
-
+
+cd "$(SolutionDir)$(opensslDir)"
+nasm -f win64 -DNEAR -Ox -g ms\\uptable.asm || echo nasm failed! && exit
+copy /Y crypto\buildinf_amd64.h crypto\buildinf.h
+copy /Y crypto\opensslconf_amd64.h crypto\opensslconf.h
+nmake /nologo -f "ms\nt64.mak"
+
echo OpenSSL must be cleaned manually if you want to rebuild it.
@@ -209,12 +237,6 @@
-
-
- {b11d750f-cd1f-4a96-85ce-e69a5c5259f9}
- false
-
-