mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
186 lines
4.9 KiB
Python
186 lines
4.9 KiB
Python
from fetch import fetch
|
|
from unzip import unzip
|
|
from untar import untar
|
|
import os, hashlib
|
|
|
|
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
|
|
|
|
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():
|
|
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
|
|
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
|
|
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
|
|
|
|
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
|
|
|
|
rem build openjpeg
|
|
setlocal
|
|
cd /D %%OPENJPEG&&
|
|
%%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
|
|
copy %%~dp0\nmake.opt %%TIFF%%
|
|
|
|
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
|
|
|
|
|
|
""" % 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()]
|
|
|
|
for compiler in compilers.values():
|
|
#if True:
|
|
# compiler = compilers[(7,64)]
|
|
script.append(setup_compiler(compiler))
|
|
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))
|
|
|
|
|