Index: PCbuild/build_ssl.py =================================================================== --- PCbuild/build_ssl.py (revision 84935) +++ PCbuild/build_ssl.py (working copy) @@ -23,7 +23,6 @@ # python.exe build_ssl.py Release x64 # python.exe build_ssl.py Release Win32 -from __future__ import with_statement import os, sys, re, shutil # Find all "foo.exe" files on the PATH. @@ -122,7 +121,6 @@ """ if not os.path.isfile(makefile): return - fin = open(makefile) with open(makefile) as fin: lines = fin.readlines() with open(makefile, 'w') as fout: @@ -148,6 +146,22 @@ print(do_script) os.system(do_script) +def cmp(f1, f2): + bufsize = 1024 * 8 + with open(f1, 'rb') as fp1, open(f2, 'rb') as fp2: + while True: + b1 = fp1.read(bufsize) + b2 = fp2.read(bufsize) + if b1 != b2: + return False + if not b1: + return True + +def copy(src, dst): + if os.path.isfile(dst) and cmp(src, dst): + return + shutil.copy(src, dst) + def main(): build_all = "-a" in sys.argv if sys.argv[1] == "Release": @@ -224,15 +238,17 @@ if arch == "amd64": create_makefile64(makefile, m32) fix_makefile(makefile) - shutil.copy2(r"crypto\buildinf.h", r"crypto\buildinf_%s.h" % arch) - shutil.copy2(r"crypto\opensslconf.h", r"crypto\opensslconf_%s.h" % arch) + 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 not os.path.exists("tmp"+dirsuffix): - os.mkdir("tmp"+dirsuffix) - for f in os.listdir("asm"+dirsuffix): - if not f.endswith(".asm"): continue - shutil.copy2(r"asm%s\%s" % (dirsuffix, f), "tmp"+dirsuffix) + if perl is None: + 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": @@ -241,8 +257,8 @@ print("ml64 assembler has failed.") sys.exit(rc) - shutil.copy2(r"crypto\buildinf_%s.h" % arch, r"crypto\buildinf.h") - shutil.copy2(r"crypto\opensslconf_%s.h" % arch, r"crypto\opensslconf.h") + 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