Pillow/winbuild/build_dep.py

186 lines
4.9 KiB
Python
Raw Normal View History

from fetch import fetch
from unzip import unzip
2014-03-25 09:38:45 +04:00
from untar import untar
import os, hashlib
2014-04-05 00:00:52 +04:00
from config import *
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
2014-03-25 09:38:45 +04:00
def extract(src, dest):
if '.zip' in src:
return unzip(src, dest)
if '.tar.gz' in src or '.tgz' in src:
return untar(src, dest)
def fetch_libs():
for lib in libs.values():
2014-03-25 09:38:45 +04:00
extract(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
2014-03-25 09:38:45 +04:00
cd /D %%JPEG%%
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
2014-03-25 09:38:45 +04:00
cd /D %%ZLIB%%
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
2014-03-25 09:38:45 +04:00
rem Build webp
setlocal
cd /D %%WEBP%%
nmake -f Makefile.vc clean
nmake -f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
copy /Y /B release-static\output\%(platform)s\* %%INCLIB%%
copy /Y /B src\webp\*.h %%INCLIB%%
endlocal
2014-04-05 00:00:52 +04:00
rem build openjpeg
setlocal
2014-05-06 21:21:37 +04:00
cd /D %%OPENJPEG%%
2014-04-05 00:00:52 +04:00
%%CMAKE%% -DBUILD_THIRDPARTY:BOOL=ON .
nmake -f Makefile.vc clean
nmake -f Makefile.vc
copy /Y /B bin/* %%INCLIB%%
copy /Y /B src/lib/openjp2/openjpeg.h %%INCLIB%%
copy /Y /B src/lib/openjp2/opj_stdint.h %%INCLIB%%
endlocal
rem Build libtiff
setlocal
rem do after building jpeg and zlib
2014-03-25 09:38:45 +04:00
copy %%~dp0\nmake.opt %%TIFF%%
2014-03-25 09:38:45 +04:00
cd /D %%TIFF%%
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
2014-03-25 09:38:45 +04:00
""" % compiler
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 /m
xcopy /Y /E /Q %%FREETYPE%%\include %%INCLIB%%
xcopy /Y /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 /m
xcopy /Y /E /Q %%LCMS%%\include %%INCLIB%%
xcopy /Y /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()]
2014-04-05 00:00:52 +04:00
for compiler in compilers.values():
#if True:
2014-04-05 00:00:52 +04:00
# compiler = compilers[(7,64)]
script.append(setup_compiler(compiler))
2014-04-05 00:00:52 +04:00
script.append(nmake_libs(compiler))
script.append(msbuild_libs(compiler))
script.append(end_compiler())
with open('build_deps.cmd', 'w') as f:
f.write("\n".join(script))