@@ -167,12 +167,21 @@ def get_and_extract_tarball(urls, sha, dirname):
167
167
'955e17244e9b38adb0c98df66abb50467312e6bb70eac07e49ce6bd1a20e809a' ,
168
168
'2.10.1' :
169
169
'3a60d391fd579440561bf0e7f31af2222bc610ad6ce4d9d7bd2165bca8669110' ,
170
+ '2.11.1' :
171
+ 'f8db94d307e9c54961b39a1cc799a67d46681480696ed72ecf78d4473770f09b'
170
172
}
171
173
# This is the version of FreeType to use when building a local version. It
172
174
# must match the value in lib/matplotlib.__init__.py and also needs to be
173
175
# changed below in the embedded windows build script (grep for "REMINDER" in
174
176
# this file). Also update the cache path in `.circleci/config.yml`.
175
- LOCAL_FREETYPE_VERSION = '2.6.1'
177
+ TESTING_VERSION_OF_FREETYPE = '2.6.1'
178
+ if sys .platform .startswith ('win' ) and platform .machine () == 'ARM64' :
179
+ # older versions of freetype are not supported for win/arm64
180
+ # Matplotlib tests will not pass
181
+ LOCAL_FREETYPE_VERSION = '2.11.1'
182
+ else :
183
+ LOCAL_FREETYPE_VERSION = TESTING_VERSION_OF_FREETYPE
184
+
176
185
LOCAL_FREETYPE_HASH = _freetype_hashes .get (LOCAL_FREETYPE_VERSION , 'unknown' )
177
186
178
187
# Also update the cache path in `.circleci/config.yml`.
@@ -646,9 +655,16 @@ def do_custom_build(self, env):
646
655
subprocess .check_call ([make ], env = env , cwd = src_path )
647
656
else : # compilation on windows
648
657
shutil .rmtree (src_path / "objs" , ignore_errors = True )
649
- msbuild_platform = (
650
- 'x64' if platform .architecture ()[0 ] == '64bit' else 'Win32' )
651
- base_path = Path ("build/freetype-2.6.1/builds/windows" )
658
+ is_x64 = platform .architecture ()[0 ] == '64bit'
659
+ if platform .machine () == 'ARM64' :
660
+ msbuild_platform = 'ARM64'
661
+ elif is_x64 :
662
+ msbuild_platform = 'x64'
663
+ else :
664
+ msbuild_platform = 'Win32'
665
+ base_path = Path (
666
+ f"build/freetype-{ LOCAL_FREETYPE_VERSION } /builds/windows"
667
+ )
652
668
vc = 'vc2010'
653
669
sln_path = (
654
670
base_path / vc / "freetype.sln"
@@ -678,14 +694,29 @@ def do_custom_build(self, env):
678
694
679
695
cc = get_ccompiler ()
680
696
cc .initialize () # Get msbuild in the %PATH% of cc.spawn.
697
+ # Freetype 2.10.0+ support static builds.
698
+ msbuild_config = (
699
+ "Release Static"
700
+ if [* map (int , LOCAL_FREETYPE_VERSION .split ("." ))] >= [2 , 10 ]
701
+ else "Release"
702
+ )
703
+
681
704
cc .spawn (["msbuild" , str (sln_path ),
682
705
"/t:Clean;Build" ,
683
- f"/p:Configuration=Release;Platform={ msbuild_platform } " ])
706
+ f"/p:Configuration={ msbuild_config } ;"
707
+ f"Platform={ msbuild_platform } " ])
684
708
# Move to the corresponding Unix build path.
685
709
(src_path / "objs" / ".libs" ).mkdir ()
686
710
# Be robust against change of FreeType version.
687
- lib_path , = (src_path / "objs" / vc / msbuild_platform ).glob (
688
- "freetype*.lib" )
711
+ lib_paths = Path (src_path / "objs" ).rglob ('freetype*.lib' )
712
+ # Select FreeType library for required platform
713
+ lib_path , = [
714
+ p for p in lib_paths
715
+ if msbuild_platform in p .resolve ().as_uri ()
716
+ ]
717
+ print (
718
+ f"Copying { lib_path } to { src_path } /objs/.libs/libfreetype.lib"
719
+ )
689
720
shutil .copy2 (lib_path , src_path / "objs/.libs/libfreetype.lib" )
690
721
691
722
0 commit comments