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