1
+ from __future__ import annotations
2
+
1
3
import os
2
4
import subprocess
3
5
import sys
6
+ from pathlib import Path
4
7
5
8
if sys .version_info < (3 , 8 ):
6
9
from importlib_metadata import distribution
9
12
10
13
from ._version import version as __version__
11
14
15
+ TYPE_CHECKING = False
16
+
17
+ if TYPE_CHECKING :
18
+ from typing import Iterable , NoReturn
19
+
20
+
12
21
__all__ = ["__version__" , "CMAKE_DATA" , "CMAKE_BIN_DIR" , "CMAKE_DOC_DIR" , "CMAKE_SHARE_DIR" , "cmake" , "cpack" , "ctest" ]
13
22
14
23
15
- def __dir__ ():
24
+ def __dir__ () -> list [ str ] :
16
25
return __all__
17
26
18
27
19
28
cmake_executable_path = None
20
- for script in distribution ("cmake" ).files :
29
+ cmake_files = distribution ("cmake" ).files
30
+ assert cmake_files is not None , "This is the cmake package so it must be installed and have files"
31
+ for script in cmake_files :
21
32
if str (script ).startswith ("cmake/data/bin/cmake" ):
22
- resolved_script = script .locate ().resolve (strict = True )
33
+ resolved_script = Path ( script .locate () ).resolve (strict = True )
23
34
cmake_executable_path = resolved_script .parents [1 ]
24
35
break
25
36
CMAKE_DATA = str (cmake_executable_path ) if cmake_executable_path else None
@@ -32,17 +43,17 @@ def __dir__():
32
43
CMAKE_SHARE_DIR = os .path .join (CMAKE_DATA , 'share' )
33
44
34
45
35
- def _program (name , args ) :
46
+ def _program (name : str , args : Iterable [ str ]) -> int :
36
47
return subprocess .call ([os .path .join (CMAKE_BIN_DIR , name ), * args ], close_fds = False )
37
48
38
49
39
- def cmake ():
50
+ def cmake () -> NoReturn :
40
51
raise SystemExit (_program ('cmake' , sys .argv [1 :]))
41
52
42
53
43
- def cpack ():
54
+ def cpack () -> NoReturn :
44
55
raise SystemExit (_program ('cpack' , sys .argv [1 :]))
45
56
46
57
47
- def ctest ():
58
+ def ctest () -> NoReturn :
48
59
raise SystemExit (_program ('ctest' , sys .argv [1 :]))
0 commit comments