17
17
18
18
from more_itertools import unique_everseen
19
19
20
+ from ._path import StrPath
21
+ from .compat import py310
22
+
20
23
import distutils .errors
21
24
22
25
if TYPE_CHECKING :
@@ -135,7 +138,7 @@ def target_dir(self, hidex86=False, x64=False) -> str:
135
138
else rf'\{ self .target_cpu } '
136
139
)
137
140
138
- def cross_dir (self , forcex86 = False ):
141
+ def cross_dir (self , forcex86 = False ) -> str :
139
142
r"""
140
143
Cross platform specific subfolder.
141
144
@@ -306,7 +309,7 @@ def microsoft(self, key, x86=False):
306
309
node64 = '' if self .pi .current_is_x86 () or x86 else 'Wow6432Node'
307
310
return os .path .join ('Software' , node64 , 'Microsoft' , key )
308
311
309
- def lookup (self , key , name ) :
312
+ def lookup (self , key : str , name : str ) -> str | None :
310
313
"""
311
314
Look for values in registry in Microsoft software registry.
312
315
@@ -319,7 +322,7 @@ def lookup(self, key, name):
319
322
320
323
Return
321
324
------
322
- str
325
+ str | None
323
326
value
324
327
"""
325
328
key_read = winreg .KEY_READ
@@ -366,7 +369,7 @@ class SystemInfo:
366
369
ProgramFiles = environ .get ('ProgramFiles' , '' )
367
370
ProgramFilesx86 = environ .get ('ProgramFiles(x86)' , ProgramFiles )
368
371
369
- def __init__ (self , registry_info , vc_ver = None ) -> None :
372
+ def __init__ (self , registry_info : RegistryInfo , vc_ver = None ) -> None :
370
373
self .ri = registry_info
371
374
self .pi = self .ri .pi
372
375
@@ -486,7 +489,7 @@ def _as_float_version(version):
486
489
return float ('.' .join (version .split ('.' )[:2 ]))
487
490
488
491
@property
489
- def VSInstallDir (self ):
492
+ def VSInstallDir (self ) -> str :
490
493
"""
491
494
Microsoft Visual Studio directory.
492
495
@@ -504,7 +507,7 @@ def VSInstallDir(self):
504
507
return self .ri .lookup (self .ri .vs , f'{ self .vs_ver :0.1f} ' ) or default
505
508
506
509
@property
507
- def VCInstallDir (self ):
510
+ def VCInstallDir (self ) -> str :
508
511
"""
509
512
Microsoft Visual C++ directory.
510
513
@@ -608,7 +611,7 @@ def WindowsSdkLastVersion(self):
608
611
return self ._use_last_dir_name (os .path .join (self .WindowsSdkDir , 'lib' ))
609
612
610
613
@property
611
- def WindowsSdkDir (self ) -> str | None : # noqa: C901 # is too complex (12) # FIXME
614
+ def WindowsSdkDir (self ) -> str : # noqa: C901 # is too complex (12) # FIXME
612
615
"""
613
616
Microsoft Windows SDK directory.
614
617
@@ -651,13 +654,13 @@ def WindowsSdkDir(self) -> str | None: # noqa: C901 # is too complex (12) # F
651
654
return sdkdir
652
655
653
656
@property
654
- def WindowsSDKExecutablePath (self ):
657
+ def WindowsSDKExecutablePath (self ) -> str | None :
655
658
"""
656
659
Microsoft Windows SDK executable directory.
657
660
658
661
Return
659
662
------
660
- str
663
+ str | None
661
664
path
662
665
"""
663
666
# Find WinSDK NetFx Tools registry dir name
@@ -688,7 +691,7 @@ def WindowsSDKExecutablePath(self):
688
691
return None
689
692
690
693
@property
691
- def FSharpInstallDir (self ):
694
+ def FSharpInstallDir (self ) -> str :
692
695
"""
693
696
Microsoft Visual F# directory.
694
697
@@ -701,13 +704,13 @@ def FSharpInstallDir(self):
701
704
return self .ri .lookup (path , 'productdir' ) or ''
702
705
703
706
@property
704
- def UniversalCRTSdkDir (self ):
707
+ def UniversalCRTSdkDir (self ) -> str | None :
705
708
"""
706
709
Microsoft Universal CRT SDK directory.
707
710
708
711
Return
709
712
------
710
- str
713
+ str | None
711
714
path
712
715
"""
713
716
# Set Kit Roots versions for specified MSVC++ version
@@ -717,12 +720,12 @@ def UniversalCRTSdkDir(self):
717
720
for ver in vers :
718
721
sdkdir = self .ri .lookup (self .ri .windows_kits_roots , f'kitsroot{ ver } ' )
719
722
if sdkdir :
720
- return sdkdir or ''
723
+ return sdkdir
721
724
722
725
return None
723
726
724
727
@property
725
- def UniversalCRTSdkLastVersion (self ):
728
+ def UniversalCRTSdkLastVersion (self ) -> str :
726
729
"""
727
730
Microsoft Universal C Runtime SDK last version.
728
731
@@ -731,7 +734,11 @@ def UniversalCRTSdkLastVersion(self):
731
734
str
732
735
version
733
736
"""
734
- return self ._use_last_dir_name (os .path .join (self .UniversalCRTSdkDir , 'lib' ))
737
+ try :
738
+ return self ._use_last_dir_name (os .path .join (self .UniversalCRTSdkDir , 'lib' )) # type: ignore[arg-type] # Expected TypeError
739
+ except TypeError as ex :
740
+ py310 .add_note (ex , "Cannot find UniversalCRTSdkDir" )
741
+ raise
735
742
736
743
@property
737
744
def NetFxSdkVersion (self ):
@@ -751,16 +758,16 @@ def NetFxSdkVersion(self):
751
758
)
752
759
753
760
@property
754
- def NetFxSdkDir (self ):
761
+ def NetFxSdkDir (self ) -> str | None :
755
762
"""
756
763
Microsoft .NET Framework SDK directory.
757
764
758
765
Return
759
766
------
760
- str
767
+ str | None
761
768
path
762
769
"""
763
- sdkdir = ''
770
+ sdkdir : str | None = ''
764
771
for ver in self .NetFxSdkVersion :
765
772
loc = os .path .join (self .ri .netfx_sdk , ver )
766
773
sdkdir = self .ri .lookup (loc , 'kitsinstallationfolder' )
@@ -769,7 +776,7 @@ def NetFxSdkDir(self):
769
776
return sdkdir
770
777
771
778
@property
772
- def FrameworkDir32 (self ):
779
+ def FrameworkDir32 (self ) -> str :
773
780
"""
774
781
Microsoft .NET Framework 32bit directory.
775
782
@@ -785,7 +792,7 @@ def FrameworkDir32(self):
785
792
return self .ri .lookup (self .ri .vc , 'frameworkdir32' ) or guess_fw
786
793
787
794
@property
788
- def FrameworkDir64 (self ):
795
+ def FrameworkDir64 (self ) -> str :
789
796
"""
790
797
Microsoft .NET Framework 64bit directory.
791
798
@@ -855,13 +862,13 @@ def _find_dot_net_versions(self, bits) -> tuple[str, ...]:
855
862
return ()
856
863
857
864
@staticmethod
858
- def _use_last_dir_name (path , prefix = '' ):
865
+ def _use_last_dir_name (path : StrPath , prefix : str = '' ) -> str :
859
866
"""
860
867
Return name of the last dir in path or '' if no dir found.
861
868
862
869
Parameters
863
870
----------
864
- path: str
871
+ path: StrPath
865
872
Use dirs in this path
866
873
prefix: str
867
874
Use only dirs starting by this prefix
@@ -877,7 +884,7 @@ def _use_last_dir_name(path, prefix=''):
877
884
if os .path .isdir (os .path .join (path , dir_name ))
878
885
and dir_name .startswith (prefix )
879
886
)
880
- return next (matching_dirs , None ) or ''
887
+ return next (matching_dirs , '' )
881
888
882
889
883
890
class _EnvironmentDict (TypedDict ):
@@ -1200,7 +1207,7 @@ def _sdk_tools(self):
1200
1207
yield self .si .WindowsSDKExecutablePath
1201
1208
1202
1209
@property
1203
- def _sdk_subdir (self ):
1210
+ def _sdk_subdir (self ) -> str :
1204
1211
"""
1205
1212
Microsoft Windows SDK version subdir.
1206
1213
@@ -1345,7 +1352,7 @@ def HTMLHelpWorkshop(self):
1345
1352
return [os .path .join (self .si .ProgramFilesx86 , 'HTML Help Workshop' )]
1346
1353
1347
1354
@property
1348
- def UCRTLibraries (self ):
1355
+ def UCRTLibraries (self ) -> list [ str ] :
1349
1356
"""
1350
1357
Microsoft Universal C Runtime SDK Libraries.
1351
1358
@@ -1358,12 +1365,16 @@ def UCRTLibraries(self):
1358
1365
return []
1359
1366
1360
1367
arch_subdir = self .pi .target_dir (x64 = True )
1361
- lib = os .path .join (self .si .UniversalCRTSdkDir , 'lib' )
1368
+ try :
1369
+ lib = os .path .join (self .si .UniversalCRTSdkDir , 'lib' ) # type: ignore[arg-type] # Expected TypeError
1370
+ except TypeError as ex :
1371
+ py310 .add_note (ex , "Cannot find UniversalCRTSdkDir" )
1372
+ raise
1362
1373
ucrtver = self ._ucrt_subdir
1363
1374
return [os .path .join (lib , f'{ ucrtver } ucrt{ arch_subdir } ' )]
1364
1375
1365
1376
@property
1366
- def UCRTIncludes (self ):
1377
+ def UCRTIncludes (self ) -> list [ str ] :
1367
1378
"""
1368
1379
Microsoft Universal C Runtime SDK Include.
1369
1380
@@ -1375,11 +1386,15 @@ def UCRTIncludes(self):
1375
1386
if self .vs_ver < 14.0 :
1376
1387
return []
1377
1388
1378
- include = os .path .join (self .si .UniversalCRTSdkDir , 'include' )
1389
+ try :
1390
+ include = os .path .join (self .si .UniversalCRTSdkDir , 'include' ) # type: ignore[arg-type] # Expected TypeError
1391
+ except TypeError as ex :
1392
+ py310 .add_note (ex , "Cannot find UniversalCRTSdkDir" )
1393
+ raise
1379
1394
return [os .path .join (include , f'{ self ._ucrt_subdir } ucrt' )]
1380
1395
1381
1396
@property
1382
- def _ucrt_subdir (self ):
1397
+ def _ucrt_subdir (self ) -> str :
1383
1398
"""
1384
1399
Microsoft Universal C Runtime SDK version subdir.
1385
1400
0 commit comments