1414import shutil
1515import subprocess
1616import sys
17+ import tarfile
1718import textwrap
1819import urllib .request
1920import warnings
@@ -1029,6 +1030,8 @@ def add_flags(self, ext):
10291030 ext .define_macros .append (('FREETYPE_BUILD_TYPE' , 'system' ))
10301031
10311032 def do_custom_build (self ):
1033+ from pathlib import Path
1034+
10321035 # We're using a system freetype
10331036 if not options .get ('local_freetype' ):
10341037 return
@@ -1081,45 +1084,45 @@ def do_custom_build(self):
10811084 tarball_url = url_fmt .format (
10821085 version = LOCAL_FREETYPE_VERSION , tarball = tarball )
10831086
1084- print ("Downloading {0 }" .format (tarball_url ))
1087+ print ("Downloading {}" .format (tarball_url ))
10851088 try :
10861089 urllib .request .urlretrieve (tarball_url , tarball_path )
10871090 except IOError : # URLError (a subclass) on Py3.
1088- print ("Failed to download {0 }" .format (tarball_url ))
1091+ print ("Failed to download {}" .format (tarball_url ))
10891092 else :
10901093 if get_file_hash (tarball_path ) != LOCAL_FREETYPE_HASH :
10911094 print ("Invalid hash." )
10921095 else :
10931096 break
10941097 else :
1095- raise IOError ("Failed to download freetype. "
1096- "You can download the file by "
1097- "alternative means and copy it "
1098- " to '{0}'" .format (tarball_path ))
1098+ raise IOError ("Failed to download FreeType. You can "
1099+ "download the file by alternative means and "
1100+ "copy it to {}" .format (tarball_path ))
10991101 os .makedirs (tarball_cache_dir , exist_ok = True )
11001102 try :
11011103 shutil .copy (tarball_path , tarball_cache_path )
1102- print ('Cached tarball at: {}' .format (tarball_cache_path ))
1104+ print ('Cached tarball at {}' .format (tarball_cache_path ))
11031105 except OSError :
11041106 # If this fails, we can always re-download.
11051107 pass
11061108
11071109 if get_file_hash (tarball_path ) != LOCAL_FREETYPE_HASH :
11081110 raise IOError (
1109- "{0} does not match expected hash." .format (tarball ))
1111+ "{} does not match expected hash." .format (tarball ))
1112+
1113+ print ("Building {}" .format (tarball ))
1114+ with tarfile .open (tarball_path , "r:gz" ) as tgz :
1115+ tgz .extractall ("build" )
11101116
1111- print ("Building {0}" .format (tarball ))
11121117 if sys .platform != 'win32' :
11131118 # compilation on all other platforms than windows
1114- cflags = 'CFLAGS="{0} -fPIC" ' .format (os .environ .get ('CFLAGS' , '' ))
1115-
1116- subprocess .check_call (
1117- ['tar' , 'zxf' , tarball ], cwd = 'build' )
1118- subprocess .check_call (
1119- [cflags + './configure --with-zlib=no --with-bzip2=no '
1120- '--with-png=no --with-harfbuzz=no' ], shell = True , cwd = src_path )
1119+ env = {** os .environ ,
1120+ "CFLAGS" : "{} -fPIC" .format (os .environ .get ("CFLAGS" , "" ))}
11211121 subprocess .check_call (
1122- [cflags + 'make' ], shell = True , cwd = src_path )
1122+ ["./configure" , "--with-zlib=no" , "--with-bzip2=no" ,
1123+ "--with-png=no" , "--with-harfbuzz=no" ],
1124+ env = env , cwd = src_path )
1125+ subprocess .check_call (["make" ], env = env , cwd = src_path )
11231126 else :
11241127 # compilation on windows
11251128 FREETYPE_BUILD_CMD = """\
@@ -1138,11 +1141,10 @@ def do_custom_build(self):
11381141 copy %FREETYPE%\\ objs\\ win32\\ {vc20xx}\\ freetype261.lib %FREETYPE%\\ objs\\ .libs\\ libfreetype.lib
11391142)
11401143"""
1141- from setup_external_compile import fixproj , prepare_build_cmd , VS2010 , X64 , tar_extract
1144+ from setup_external_compile import fixproj , prepare_build_cmd , VS2010 , X64
11421145 # Note: freetype has no build profile for 2014, so we don't bother...
11431146 vc = 'vc2010' if VS2010 else 'vc2008'
11441147 WinXX = 'x64' if X64 else 'Win32'
1145- tar_extract (tarball_path , "build" )
11461148 # This is only false for py2.7, even on py3.5...
11471149 if not VS2010 :
11481150 fixproj (os .path .join (src_path , 'builds' , 'windows' , vc , 'freetype.sln' ), WinXX )
0 commit comments