aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-05-07 17:57:47 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-05-07 17:57:47 +0300
commit5bfde4ee72e5ef4f59d97947f195189e1c3ed8ff (patch)
treef0d05048673645588b093bd1f611b764e1af45b8
parentproject.toolset: support versioned MSVC toolsets (diff)
downloadcmake-common-5bfde4ee72e5ef4f59d97947f195189e1c3ed8ff.tar.gz
cmake-common-5bfde4ee72e5ef4f59d97947f195189e1c3ed8ff.zip
project.toolset: move _full_exe_name to utils
-rw-r--r--project/toolset.py33
-rw-r--r--project/utils.py30
2 files changed, 33 insertions, 30 deletions
diff --git a/project/toolset.py b/project/toolset.py
index b9cb6c3..c0c771d 100644
--- a/project/toolset.py
+++ b/project/toolset.py
@@ -35,9 +35,9 @@ import os.path
import shutil
import project.mingw
-from project.os import on_cygwin, on_linux, on_windows
+from project.os import on_windows
from project.platform import Platform
-from project.utils import temp_file
+from project.utils import full_exe_name, temp_file
class MSVCVersion(Enum):
@@ -338,33 +338,6 @@ class MSVC(Toolset):
return args
-def _full_exe_name(exe):
- if on_linux():
- # There's no PATHEXT on Linux.
- return exe
- # b2 on Windows/Cygwin doesn't like it when the executable name doesn't
- # include the extension.
- dir_path = os.path.dirname(exe) or None
- path = shutil.which(exe, path=dir_path)
- if not path:
- raise RuntimeError(f"executable '{exe}' could not be found")
- if on_cygwin():
- # On Cygwin, shutil.which('gcc') == '/usr/bin/gcc' and shutil.which('gcc.exe')
- # == '/usr/bin/gcc.exe'; we want the latter version. shutil.which('clang++')
- # == '/usr/bin/clang++' is fine though, since it _is_ the complete path
- # (clang++ is a symlink).
- if os.path.exists(path) and os.path.exists(path + '.exe'):
- path += '.exe'
- if dir_path:
- # If it was found in a specific directory, include the directory in the
- # result. shutil.which returns the executable name prefixed with the
- # path argument.
- return path
- # If it was found in PATH, just return the basename (which includes the
- # extension).
- return os.path.basename(path)
-
-
class BoostCustom(Toolset):
COMPILER_VERSION = 'custom'
@@ -375,7 +348,7 @@ class BoostCustom(Toolset):
version = BoostCustom.COMPILER_VERSION
self.version = version
path = path or ''
- path = path and _full_exe_name(path)
+ path = path and full_exe_name(path)
self.path = path
build_options = build_options or []
self.build_options = build_options
diff --git a/project/utils.py b/project/utils.py
index 711db97..39dfb0d 100644
--- a/project/utils.py
+++ b/project/utils.py
@@ -7,11 +7,14 @@ from contextlib import contextmanager
import functools
import logging
import os.path
+import shutil
import subprocess
import sys
import tempfile
import time
+from project.os import on_cygwin, on_linux
+
def normalize_path(s):
return os.path.abspath(os.path.normpath(s))
@@ -21,6 +24,33 @@ def mkdir_parent(path):
os.makedirs(path, exist_ok=True)
+def full_exe_name(exe):
+ if on_linux():
+ # There's no PATHEXT on Linux.
+ return exe
+ # b2 on Windows/Cygwin doesn't like it when the executable name doesn't
+ # include the extension.
+ dir_path = os.path.dirname(exe) or None
+ path = shutil.which(exe, path=dir_path)
+ if not path:
+ raise RuntimeError(f"executable '{exe}' could not be found")
+ if on_cygwin():
+ # On Cygwin, shutil.which('gcc') == '/usr/bin/gcc' and shutil.which('gcc.exe')
+ # == '/usr/bin/gcc.exe'; we want the latter version. shutil.which('clang++')
+ # == '/usr/bin/clang++' is fine though, since it _is_ the complete path
+ # (clang++ is a symlink).
+ if os.path.exists(path) and os.path.exists(path + '.exe'):
+ path += '.exe'
+ if dir_path:
+ # If it was found in a specific directory, include the directory in the
+ # result. shutil.which returns the executable name prefixed with the
+ # path argument.
+ return path
+ # If it was found in PATH, just return the basename (which includes the
+ # extension).
+ return os.path.basename(path)
+
+
@contextmanager
def setup_logging():
logging.basicConfig(