diff --git a/winbuild/build_dep.py b/winbuild/build_dep.py new file mode 100644 index 000000000..b01dcefe3 --- /dev/null +++ b/winbuild/build_dep.py @@ -0,0 +1,224 @@ +from fetch import fetch +from unzip import unzip +import os, hashlib + + +libs = { 'zlib':{ + 'url':'http://zlib.net/zlib128.zip', + 'hash': 'md5:126f8676442ffbd97884eb4d6f32afb4', + 'dir': 'zlib-1.2.8', + }, + 'jpeg':{ + 'url':'http://www.ijg.org/files/jpegsr9a.zip', + 'hash': 'md5:a34f3c82760270ee1e1885b15b90a72e', # not found - generated by wiredfool + 'dir': 'jpeg-9a', + }, + 'tiff':{ + 'url':'ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.3.zip', + 'hash': 'md5:dd70349cedb3981371686e1c9b89a7f9', # not found - generated by wiredfool + 'dir': 'tiff-4.0.3', + }, + 'freetype':{ + 'url':'http://download.savannah.gnu.org/releases/freetype/ft253.zip', + 'hash': 'md5:b3858f7e69740ac04ef53366aeb172bc', # not found - generated by wiredfool + 'dir': 'freetype-2.5.3', + }, + 'lcms':{ + 'url':'http://hivelocity.dl.sourceforge.net/project/lcms/lcms/2.6/lcms2-2.6.zip', + 'hash': 'sha1:eea25f001246fa2e6b242ac456cecff7483cf061', + 'dir': 'lcms2-2.6', + }, + 'tcl':{ + 'url':'http://hivelocity.dl.sourceforge.net/project/tcl/Tcl/8.5.13/tcl8513-src.zip', + 'hash': 'sha1:3e01585c91293c532a3cd594ec59deca92153a5e', + 'dir': '', + }, + 'tk':{ + 'url':'http://hivelocity.dl.sourceforge.net/project/tcl/Tcl/8.5.13/tk8513-src.zip', + 'hash': 'sha1:23a1d7ddd416e11e06dfdb9f86111d4bab9420b4', + 'dir': '', + } + } + +compilers = [ { + 'env_version':'v7.0', + 'vc_version':'2008', + 'env_flags': '/x64 /vista', + 'inc_dir': 'msvcr90-x64', + 'platform': 'x64' + }, + { + 'env_version':'v7.0', + 'vc_version':'2008', + 'env_flags': '/x86 /xp', + 'inc_dir': 'msvcr90-x32', + 'platform': 'Win32' + }, + + { + 'env_version':'v7.1', + 'vc_version':'2010', + 'env_flags': '/x64 /vista', + 'inc_dir': 'msvcr10-x64', + 'platform': 'x64' + }, + { + 'env_version':'v7.1', + 'vc_version':'2010', + 'env_flags': '/x86 /xp', + 'inc_dir': 'msvcr10-x32', + 'platform': 'Win32' + }, + + ] + + +def _relpath(*args): + return os.path.join(os.getcwd(),*args) + +def _relbuild(*args): + return _relpath('build', *args) + +build_dir = _relpath('build') +inc_dir = _relpath('depends') + +def check_hash(filename, checksum): + if not checksum: return filename + + (algo, value) = checksum.split(':') + h = hashlib.new(algo) + with open(filename, 'rb') as f: + h.update(f.read()) + if not(h.hexdigest().lower() == value): + raise ValueError('Checksum Mismatch for %s' %filename) + return filename + +def check_sig(filename, signame): + #UNDONE -- need gpg + return filename + +def mkdirs(): + try: + os.mkdir(build_dir) + except: + pass + try: + os.mkdir(inc_dir) + except: + pass + +def fetch_libs(): + for lib in libs.values(): + unzip(check_hash(fetch(lib['url']),lib['hash']),build_dir) + +def cp_tk(): + return r""" +mkdir %INCLIB%\tcl85\include\X11 +copy /Y /B %BUILD%\tcl8.5.13\generic\*.h %INCLIB%\tcl85\include\ +copy /Y /B %BUILD%\tk8.5.13\generic\*.h %INCLIB%\tcl85\include\ +copy /Y /B %BUILD%\tk8.5.13\xlib\X11\* %INCLIB%\tcl85\include\X11\ +""" + +def header(): + return r"""setlocal +set MSBUILD=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe +set CMAKE="C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" +set INCLIB=%~dp0\depends +set BUILD=%~dp0\build +""" + "\n".join('set %s=%%BUILD%%\%s' %(k.upper(), v['dir']) + for (k,v) in libs.items() if v['dir']) + +def setup_compiler(compiler): + return r"""setlocal EnableDelayedExpansion +call "%%ProgramFiles%%\Microsoft SDKs\Windows\%(env_version)s\Bin\SetEnv.Cmd" /Release %(env_flags)s +set INCLIB=%%INCLIB%%\%(inc_dir)s +mkdir %%INCLIB%% +""" % compiler + +def end_compiler(): + return """ +endlocal +""" + +def nmake_libs(compiler): + # undone -- pre, makes, headers, libs + return r""" +rem Build libjpeg +setlocal +cd /D %s +nmake -f makefile.vc setup-vc6 +nmake -f makefile.vc clean +nmake -f makefile.vc all +copy /Y /B *.dll %%INCLIB%% +copy /Y /B *.lib %%INCLIB%% +copy /Y /B j*.h %%INCLIB%% +endlocal + +rem Build zlib +setlocal +cd /D %s +nmake -f win32\Makefile.msc clean +nmake -f win32\Makefile.msc +copy /Y /B *.dll %%INCLIB%% +copy /Y /B *.lib %%INCLIB%% +copy /Y /B zlib.lib %%INCLIB%%\z.lib +copy /Y /B zlib.h %%INCLIB%% +copy /Y /B zconf.h %%INCLIB%% +endlocal + +rem Build libtiff +setlocal +rem do after building jpeg and zlib +copy %%~dp0\nmake.opt %s + +cd /D %s +nmake -f makefile.vc clean +nmake -f makefile.vc +copy /Y /B libtiff\*.dll %%INCLIB%% +copy /Y /B libtiff\*.lib %%INCLIB%% +copy /Y /B libtiff\tiff*.h %%INCLIB%% +endlocal +""" %(_relbuild(libs['jpeg']['dir']), + _relbuild(libs['zlib']['dir']), + _relbuild(libs['tiff']['dir']), + _relbuild(libs['tiff']['dir']), + ) + + +def msbuild_libs(compiler): + return r""" +rem Build freetype +setlocal +py -3 %%~dp0\fixproj.py %%FREETYPE%%\builds\windows\vc%(vc_version)s\freetype.sln %(platform)s +py -3 %%~dp0\fixproj.py %%FREETYPE%%\builds\windows\vc%(vc_version)s\freetype.vcproj %(platform)s +rd /S /Q %%FREETYPE%%\objs +%%MSBUILD%% %%FREETYPE%%\builds\windows\vc%(vc_version)s\freetype.sln /t:Clean;Build /p:Configuration="LIB Release";Platform=%(platform)s +xcopy /E /Q %%FREETYPE%%\include %%INCLIB%% +xcopy /E /Q %%FREETYPE%%\objs\win32\vc%(vc_version)s %%INCLIB%% +copy /Y /B %%FREETYPE%%\objs\win32\vc%(vc_version)s\*.lib %%INCLIB%%\freetype.lib +endlocal + +rem Build lcms2 +setlocal +py -3 %%~dp0\fixproj.py %%LCMS%%\Projects\VC%(vc_version)s\lcms2.sln %(platform)s +py -3 %%~dp0\fixproj.py %%LCMS%%\Projects\VC%(vc_version)s\lcms2.vcproj %(platform)s +rd /S /Q %%LCMS%%\objs +%%MSBUILD%% %%LCMS%%\Projects\VC%(vc_version)s\lcms2.sln /t:Clean;Build /p:Configuration="LIB Release";Platform=%(platform)s +xcopy /E /Q %%LCMS%%\include %%INCLIB%% +xcopy /E /Q %%LCMS%%\objs\win32\VC%(vc_version)s %%INCLIB%% +copy /Y /B %%LCMS%%\objs\win32\VC%(vc_version)s\*.lib %%INCLIB%%\lcms2.lib +endlocal +""" % compiler + +mkdirs() +fetch_libs() + +script = [header(), cp_tk()] + +for compiler in compilers: + script.append(setup_compiler(compiler)) + script.append(nmake_libs(compiler)) + script.append(msbuild_libs(compiler)) + script.append(end_compiler()) + +print ("\n".join(script)) diff --git a/winbuild/fetch.py b/winbuild/fetch.py index 00845678e..dfedb9835 100644 --- a/winbuild/fetch.py +++ b/winbuild/fetch.py @@ -1,7 +1,16 @@ import sys, os, urllib.parse, urllib.request -name = urllib.parse.urlsplit(sys.argv[1])[2].split('/')[-1] -if not os.path.exists(name): - print("Fetching", sys.argv[1]) - content = urllib.request.urlopen(sys.argv[1]).read() - with open(name, 'wb') as fd: - fd.write(content) + +def fetch(url): + name = urllib.parse.urlsplit(url)[2].split('/')[-1] + + if not os.path.exists(name): + print("Fetching", url) + content = urllib.request.urlopen(url).read() + with open(name, 'wb') as fd: + fd.write(content) + return name + +if __name__=='__main__': + fetch(sys.argv[1]) + + diff --git a/winbuild/get_pythons.py b/winbuild/get_pythons.py new file mode 100644 index 000000000..fcce5fe3e --- /dev/null +++ b/winbuild/get_pythons.py @@ -0,0 +1,11 @@ +from fetch import fetch + +if __name__=='__main__': + for version in ['2.6.5', '2.7.6', '3.2.5', '3.3.5', '3.4.0']: + for platform in ['', '.amd64']: + for extension in ['','.asc']: + fetch('https://www.python.org/ftp/python/%s/python-%s%s.msi%s' %( + version, version, platform, extension)) + + # find pip, if it's not in the path! + os.system('pip install virtualenv') diff --git a/winbuild/unzip.py b/winbuild/unzip.py index 9793906cb..18588433c 100644 --- a/winbuild/unzip.py +++ b/winbuild/unzip.py @@ -1,3 +1,8 @@ import sys, zipfile -with zipfile.ZipFile(sys.argv[1]) as zf: - zf.extractall(sys.argv[2]) + +def unzip(src, dest): + with zipfile.ZipFile(src) as zf: + zf.extractall(dest) + +if __name__=='__main__': + unzip(sys.argv[1], sys.argv[2])