70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
if sys.version_info < (3, 8):
|
|
from importlib_metadata import distribution
|
|
else:
|
|
from importlib.metadata import distribution
|
|
|
|
from ._version import version as __version__
|
|
|
|
TYPE_CHECKING = False
|
|
|
|
if TYPE_CHECKING:
|
|
from typing import Iterable, NoReturn
|
|
|
|
|
|
__all__ = ["CMAKE_BIN_DIR", "CMAKE_DATA", "CMAKE_DOC_DIR", "CMAKE_SHARE_DIR", "__version__", "cmake", "cpack", "ctest"]
|
|
|
|
|
|
def __dir__() -> list[str]:
|
|
return __all__
|
|
|
|
|
|
cmake_executable_path = None
|
|
cmake_files = distribution("cmake").files
|
|
assert cmake_files is not None, "This is the cmake package so it must be installed and have files"
|
|
for script in cmake_files:
|
|
if str(script).startswith("cmake/data/bin/cmake"):
|
|
resolved_script = Path(script.locate()).resolve(strict=True)
|
|
cmake_executable_path = resolved_script.parents[1]
|
|
break
|
|
CMAKE_DATA = str(cmake_executable_path) if cmake_executable_path else None
|
|
|
|
assert CMAKE_DATA is not None
|
|
assert os.path.exists(CMAKE_DATA)
|
|
|
|
CMAKE_BIN_DIR = os.path.join(CMAKE_DATA, 'bin')
|
|
CMAKE_DOC_DIR = os.path.join(CMAKE_DATA, 'doc')
|
|
CMAKE_SHARE_DIR = os.path.join(CMAKE_DATA, 'share')
|
|
|
|
|
|
def _program(name: str, args: Iterable[str]) -> int:
|
|
return subprocess.call([os.path.join(CMAKE_BIN_DIR, name), *args], close_fds=False)
|
|
|
|
def _program_exit(name: str, *args: str) -> NoReturn:
|
|
if sys.platform.startswith("win"):
|
|
raise SystemExit(_program(name, args))
|
|
cmake_exe = os.path.join(CMAKE_BIN_DIR, name)
|
|
os.execl(cmake_exe, cmake_exe, *args)
|
|
|
|
|
|
def ccmake() -> NoReturn:
|
|
_program_exit('ccmake', *sys.argv[1:])
|
|
|
|
|
|
def cmake() -> NoReturn:
|
|
_program_exit('cmake', *sys.argv[1:])
|
|
|
|
|
|
def cpack() -> NoReturn:
|
|
_program_exit('cpack', *sys.argv[1:])
|
|
|
|
|
|
def ctest() -> NoReturn:
|
|
_program_exit('ctest', *sys.argv[1:])
|