mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 19:21:06 +00:00
scripts: Auto-detect whether we can enable colors
Also do the setup necessary on Windows to enable ANSI colours on the console (if available). That code is copied from Meson and is Apache2 licensed.
This commit is contained in:
parent
50037dd1eb
commit
124098adc4
3 changed files with 29 additions and 6 deletions
|
@ -73,7 +73,7 @@ if __name__ == "__main__":
|
|||
help="The meson build directory")
|
||||
options = parser.parse_args()
|
||||
|
||||
if options.no_color:
|
||||
if options.no_color or not Colors.can_enable():
|
||||
Colors.disable()
|
||||
|
||||
if not os.path.exists(options.builddir):
|
||||
|
|
31
common.py
31
common.py
|
@ -1,9 +1,10 @@
|
|||
import argparse
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
import shlex
|
||||
import shutil
|
||||
import argparse
|
||||
import platform
|
||||
import subprocess
|
||||
|
||||
|
||||
ROOTDIR = os.path.abspath(os.path.dirname(__file__))
|
||||
|
@ -19,6 +20,27 @@ class Colors:
|
|||
|
||||
force_disable = False
|
||||
|
||||
def _windows_ansi():
|
||||
from ctypes import windll, byref
|
||||
from ctypes.wintypes import DWORD
|
||||
|
||||
kernel = windll.kernel32
|
||||
stdout = kernel.GetStdHandle(-11)
|
||||
mode = DWORD()
|
||||
if not kernel.GetConsoleMode(stdout, byref(mode)):
|
||||
return False
|
||||
# Try setting ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x4)
|
||||
# If that fails (returns 0), we disable colors
|
||||
return kernel.SetConsoleMode(stdout, mode.value | 0x4) or os.environ.get('ANSICON')
|
||||
|
||||
@classmethod
|
||||
def can_enable(cls):
|
||||
if not os.isatty(sys.stdout.fileno()):
|
||||
return False
|
||||
if platform.system().lower() == 'windows':
|
||||
return cls._windows_ansi()
|
||||
return os.environ.get('TERM') != 'dumb'
|
||||
|
||||
@classmethod
|
||||
def disable(cls):
|
||||
cls.HEADER = ''
|
||||
|
@ -44,7 +66,8 @@ class Colors:
|
|||
|
||||
def git(*args, repository_path='.'):
|
||||
return subprocess.check_output(["git"] + list(args), cwd=repository_path,
|
||||
).decode()
|
||||
stdin=subprocess.DEVNULL,
|
||||
stderr=subprocess.STDOUT).decode()
|
||||
|
||||
def accept_command(commands):
|
||||
"""Search @commands and returns the first found absolute path."""
|
||||
|
|
|
@ -136,7 +136,7 @@ if __name__ == "__main__":
|
|||
help="Use a android repo manifest to sync repositories"
|
||||
" Note that it will let all repositories in detached state")
|
||||
options = parser.parse_args()
|
||||
if options.no_color:
|
||||
if options.no_color or not Colors.can_enable():
|
||||
Colors.disable()
|
||||
|
||||
if options.no_interaction:
|
||||
|
|
Loading…
Reference in a new issue