annotate wdev.py @ 29:f76e6575dca9 v1.26.4+1

+++++ v1.26.4+1
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 19 Sep 2025 19:59:23 +0200
parents 1d09e1dec1d9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 Finds locations of Windows command-line development tools.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 import os
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 import platform
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 import glob
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 import re
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 import subprocess
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 import sys
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 import sysconfig
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 import textwrap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 import pipcl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 class WindowsVS:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 r'''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 Windows only. Finds locations of Visual Studio command-line tools. Assumes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 VS2019-style paths.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 Members and example values::
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 .year: 2019
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 .grade: Community
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 .version: 14.28.29910
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 .directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 .vcvars: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 .cl: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\cl.exe
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 .link: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\link.exe
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 .csc: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn\csc.exe
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 .msbuild: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 .devenv: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.com
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 `.csc` is C# compiler; will be None if not found.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 def __init__(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 year=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 grade=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 version=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 cpu=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 directory=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 verbose=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 year:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 None or, for example, `2019`. If None we use environment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 variable WDEV_VS_YEAR if set.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 grade:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 None or, for example, one of:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 * `Community`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 * `Professional`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 * `Enterprise`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 If None we use environment variable WDEV_VS_GRADE if set.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 None or, for example: `14.28.29910`. If None we use environment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 variable WDEV_VS_VERSION if set.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 cpu:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 None or a `WindowsCpu` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 directory:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 Ignore year, grade, version and cpu and use this directory
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67 directly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 .
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 if year is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 year = str(year) # Allow specification as a number.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 def default(value, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 if value is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 name2 = f'WDEV_VS_{name.upper()}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 value = os.environ.get(name2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 if value is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 _log(f'Setting {name} from environment variable {name2}: {value!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 year = default(year, 'year')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 grade = default(grade, 'grade')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 version = default(version, 'version')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 if not cpu:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 cpu = WindowsCpu()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 if not directory:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 # Find `directory`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 pattern = _vs_pattern(year, grade)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 directories = glob.glob( pattern)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 _log( f'Matches for: {pattern=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 _log( f'{directories=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 assert directories, f'No match found for {pattern=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 directories.sort()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 directory = directories[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 # Find `devenv`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 devenv = f'{directory}\\Common7\\IDE\\devenv.com'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 assert os.path.isfile( devenv), f'Does not exist: {devenv}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 # Extract `year` and `grade` from `directory`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 # We use r'...' for regex strings because an extra level of escaping is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 # required for backslashes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 regex = rf'^C:\\Program Files.*\\Microsoft Visual Studio\\([^\\]+)\\([^\\]+)'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 m = re.match( regex, directory)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 assert m, f'No match: {regex=} {directory=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 year2 = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 grade2 = m.group(2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 if year:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 assert year2 == year
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 year = year2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 if grade:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 assert grade2 == grade
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123 grade = grade2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 # Find vcvars.bat.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 vcvars = f'{directory}\\VC\\Auxiliary\\Build\\vcvars{cpu.bits}.bat'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 assert os.path.isfile( vcvars), f'No match for: {vcvars}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 # Find cl.exe.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 cl_pattern = f'{directory}\\VC\\Tools\\MSVC\\{version if version else "*"}\\bin\\Host{cpu.windows_name}\\{cpu.windows_name}\\cl.exe'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 cl_s = glob.glob( cl_pattern)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134 assert cl_s, f'No match for: {cl_pattern}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 cl_s.sort()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 cl = cl_s[ -1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 # Extract `version` from cl.exe's path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 m = re.search( rf'\\VC\\Tools\\MSVC\\([^\\]+)\\bin\\Host{cpu.windows_name}\\{cpu.windows_name}\\cl.exe$', cl)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 assert m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 version2 = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 if version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144 assert version2 == version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 version = version2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 assert version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 # Find link.exe.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 link_pattern = f'{directory}\\VC\\Tools\\MSVC\\{version}\\bin\\Host{cpu.windows_name}\\{cpu.windows_name}\\link.exe'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152 link_s = glob.glob( link_pattern)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 assert link_s, f'No match for: {link_pattern}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 link_s.sort()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 link = link_s[ -1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 # Find csc.exe.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 csc = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 for dirpath, dirnames, filenames in os.walk(directory):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 for filename in filenames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162 if filename == 'csc.exe':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163 csc = os.path.join(dirpath, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 #_log(f'{csc=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 #break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 # Find MSBuild.exe.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 msbuild = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 for dirpath, dirnames, filenames in os.walk(directory):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171 for filename in filenames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 if filename == 'MSBuild.exe':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 msbuild = os.path.join(dirpath, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 #_log(f'{csc=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 #break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 self.cl = cl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178 self.devenv = devenv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 self.directory = directory
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 self.grade = grade
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181 self.link = link
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 self.csc = csc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 self.msbuild = msbuild
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 self.vcvars = vcvars
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 self.version = version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 self.year = year
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187 self.cpu = cpu
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189 raise Exception( f'Unable to find Visual Studio {year=} {grade=} {version=} {cpu=} {directory=}') from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 def description_ml( self, indent=''):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 Return multiline description of `self`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195 ret = textwrap.dedent(f'''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 year: {self.year}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 grade: {self.grade}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 version: {self.version}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 directory: {self.directory}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 vcvars: {self.vcvars}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 cl: {self.cl}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 link: {self.link}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 csc: {self.csc}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 msbuild: {self.msbuild}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 devenv: {self.devenv}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 cpu: {self.cpu}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207 ''')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208 return textwrap.indent( ret, indent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 def __repr__( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211 items = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 for name in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213 'year',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214 'grade',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 'version',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 'directory',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 'vcvars',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 'cl',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219 'link',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 'csc',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 'msbuild',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222 'devenv',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 'cpu',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 items.append(f'{name}={getattr(self, name)!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226 return ' '.join(items)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229 def _vs_pattern(year=None, grade=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230 return f'C:\\Program Files*\\Microsoft Visual Studio\\{year if year else "2*"}\\{grade if grade else "*"}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 def windows_vs_multiple(year=None, grade=None, verbose=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 Returns list of WindowsVS instances.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 directories = glob.glob(_vs_pattern(year, grade))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 for directory in directories:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 vs = WindowsVS(directory=directory)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 _log(vs.description_ml())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243 ret.append(vs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 class WindowsCpu:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 For Windows only. Paths and names that depend on cpu.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 Members:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 .bits
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 32 or 64.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 .windows_subdir
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 Empty string or `x64/`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 .windows_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 `x86` or `x64`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 .windows_config
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 `x64` or `Win32`, e.g. for use in `/Build Release|x64`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 .windows_suffix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 `64` or empty string.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 def __init__(self, name=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 if not name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265 name = _cpu_name()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 self.name = name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 if name == 'x32':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 self.bits = 32
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 self.windows_subdir = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 self.windows_name = 'x86'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 self.windows_config = 'Win32'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272 self.windows_suffix = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273 elif name == 'x64':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274 self.bits = 64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 self.windows_subdir = 'x64/'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276 self.windows_name = 'x64'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 self.windows_config = 'x64'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 self.windows_suffix = '64'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280 assert 0, f'Unrecognised cpu name: {name}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
281
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 return self.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 class WindowsPython:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 Windows only. Information about installed Python with specific word size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
289 and version. Defaults to the currently-running Python.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
290
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291 Members:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
292
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
293 .path:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
294 Path of python binary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 .version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296 `{major}.{minor}`, e.g. `3.9` or `3.11`. Same as `version` passed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
297 to `__init__()` if not None, otherwise the inferred version.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298 .include:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299 Python include path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 .cpu:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301 A `WindowsCpu` instance, same as `cpu` passed to `__init__()` if
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302 not None, otherwise the inferred cpu.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 We parse the output from `py -0p` to find all available python
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305 installations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 def __init__( self, cpu=None, version=None, verbose=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
310 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 cpu:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313 A WindowsCpu instance. If None, we use whatever we are running
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 on.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 Two-digit Python version as a string such as `3.8`. If None we
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 use current Python's version.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 If true we show diagnostics.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 if cpu is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 cpu = WindowsCpu(_cpu_name())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323 if version is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 version = '.'.join(platform.python_version().split('.')[:2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325 _log(f'Looking for Python {version=} {cpu.bits=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 if '.'.join(platform.python_version().split('.')[:2]) == version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 # Current python matches, so use it directly. This avoids problems
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 # on Github where experimental python-3.13 was not available via
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 # `py`, and is kept here in case a similar problems happens with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 # future Python versions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 _log(f'{cpu=} {version=}: using {sys.executable=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 self.path = sys.executable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334 self.version = version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335 self.cpu = cpu
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336 self.include = sysconfig.get_path('include')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
339 command = 'py -0p'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
340 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
341 _log(f'{cpu=} {version=}: Running: {command}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
342 text = subprocess.check_output( command, shell=True, text=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
343 for line in text.split('\n'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
344 #_log( f' {line}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
345 if m := re.match( '^ *-V:([0-9.]+)(-32)? ([*])? +(.+)$', line):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
346 version2 = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
347 bits = 32 if m.group(2) else 64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
348 current = m.group(3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
349 path = m.group(4).strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
350 elif m := re.match( '^ *-([0-9.]+)-((32)|(64)) +(.+)$', line):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
351 version2 = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
352 bits = int(m.group(2))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
353 path = m.group(5).strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
356 _log( f'No match for {line=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
357 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
358 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
359 _log( f'{version2=} {bits=} {path=} from {line=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 if bits != cpu.bits or version2 != version:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
362 root = os.path.dirname(path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
363 if not os.path.exists(path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364 # Sometimes it seems that the specified .../python.exe does not exist,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365 # and we have to change it to .../python<version>.exe.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
367 assert path.endswith('.exe'), f'path={path!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368 path2 = f'{path[:-4]}{version}.exe'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
369 _log( f'Python {path!r} does not exist; changed to: {path2!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
370 assert os.path.exists( path2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
371 path = path2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 self.path = path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
374 self.version = version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
375 self.cpu = cpu
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
376 command = f'{self.path} -c "import sysconfig; print(sysconfig.get_path(\'include\'))"'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
377 _log(f'Finding Python include path by running {command=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
378 self.include = subprocess.check_output(command, shell=True, text=True).strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
379 _log(f'Python include path is {self.include=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
380 #_log( f'pipcl.py:WindowsPython():\n{self.description_ml(" ")}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
381 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
382 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
383 _log(f'Failed to find python matching cpu={cpu}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384 _log(f'Output from {command!r} was:\n{text}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
385 raise Exception( f'Failed to find python matching cpu={cpu} {version=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
386
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
387 # Oddly there doesn't seem to be a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
388 # `sysconfig.get_path('libs')`, but it seems to be next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
389 # to `includes`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
390 self.libs = os.path.abspath(f'{self.include}/../libs')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
392 _log( f'WindowsPython:\n{self.description_ml(" ")}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
393
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
394 def description_ml(self, indent=''):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
395 ret = textwrap.dedent(f'''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
396 path: {self.path}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
397 version: {self.version}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
398 cpu: {self.cpu}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
399 include: {self.include}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
400 libs: {self.libs}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
401 ''')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
402 return textwrap.indent( ret, indent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
403
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
405 return f'path={self.path!r} version={self.version!r} cpu={self.cpu!r} include={self.include!r} libs={self.libs!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
406
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
407
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
408 # Internal helpers.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
409 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
411 def _cpu_name():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
412 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
413 Returns `x32` or `x64` depending on Python build.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
414 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
415 #log(f'sys.maxsize={hex(sys.maxsize)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
416 return f'x{32 if sys.maxsize == 2**31 - 1 else 64}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
417
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
419
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
420 def _log(text='', caller=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
421 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
422 Logs lines with prefix.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
423 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
424 pipcl.log1(text, caller+1)