Workarounds for install errors on Windows (#21890)
1. Forwarding sys.stdin, e.g. use input_multiprocess_fd, gives an error on Windows. Skipping for now 3. subprocess_context needs to serialize for Windows, like it does for Mac. Co-authored-by: lou.lawrence@kitware.com <lou.lawrence@kitware.com> Co-authored-by: John Parent <john.parent@kitware.com>
This commit is contained in:
parent
81bc00d61f
commit
b60a0eea01
@ -6,11 +6,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import contextlib
|
||||
import fcntl
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import termios
|
||||
import textwrap
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
@ -18,6 +16,11 @@
|
||||
import six
|
||||
from six import StringIO
|
||||
from six.moves import input
|
||||
from sys import platform as _platform
|
||||
|
||||
if _platform != "win32":
|
||||
import fcntl
|
||||
import termios
|
||||
|
||||
from llnl.util.tty.color import cescape, clen, cprint, cwrite
|
||||
|
||||
@ -370,22 +373,28 @@ def hline(label=None, **kwargs):
|
||||
|
||||
def terminal_size():
|
||||
"""Gets the dimensions of the console: (rows, cols)."""
|
||||
def ioctl_gwinsz(fd):
|
||||
try:
|
||||
rc = struct.unpack('hh', fcntl.ioctl(
|
||||
fd, termios.TIOCGWINSZ, '1234'))
|
||||
except BaseException:
|
||||
return
|
||||
return rc
|
||||
rc = ioctl_gwinsz(0) or ioctl_gwinsz(1) or ioctl_gwinsz(2)
|
||||
if not rc:
|
||||
try:
|
||||
fd = os.open(os.ctermid(), os.O_RDONLY)
|
||||
rc = ioctl_gwinsz(fd)
|
||||
os.close(fd)
|
||||
except BaseException:
|
||||
pass
|
||||
if not rc:
|
||||
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
|
||||
if _platform != "win32":
|
||||
def ioctl_gwinsz(fd):
|
||||
try:
|
||||
rc = struct.unpack('hh', fcntl.ioctl(
|
||||
fd, termios.TIOCGWINSZ, '1234'))
|
||||
except BaseException:
|
||||
return
|
||||
return rc
|
||||
rc = ioctl_gwinsz(0) or ioctl_gwinsz(1) or ioctl_gwinsz(2)
|
||||
if not rc:
|
||||
try:
|
||||
fd = os.open(os.ctermid(), os.O_RDONLY)
|
||||
rc = ioctl_gwinsz(fd)
|
||||
os.close(fd)
|
||||
except BaseException:
|
||||
pass
|
||||
if not rc:
|
||||
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
|
||||
|
||||
return int(rc[0]), int(rc[1])
|
||||
return int(rc[0]), int(rc[1])
|
||||
else:
|
||||
# return shutil.get_terminal_size()
|
||||
# TODO: find python 2 compatible module to get terminal size
|
||||
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
|
||||
return int(rc[0]), int(rc[1])
|
||||
|
@ -1135,7 +1135,7 @@ def child_fun():
|
||||
|
||||
try:
|
||||
# Forward sys.stdin when appropriate, to allow toggling verbosity
|
||||
if sys.stdin.isatty() and hasattr(sys.stdin, 'fileno'):
|
||||
if sys.platform != "win32" and sys.stdin.isatty() and hasattr(sys.stdin, 'fileno'):
|
||||
input_fd = os.dup(sys.stdin.fileno())
|
||||
input_multiprocess_fd = MultiProcessFd(input_fd)
|
||||
|
||||
|
@ -27,7 +27,8 @@
|
||||
import spack.repo
|
||||
import spack.store
|
||||
|
||||
_serialize = sys.version_info >= (3, 8) and sys.platform == 'darwin'
|
||||
_serialize = sys.platform == 'win32' or (sys.version_info >= (3, 8)
|
||||
and sys.platform == 'darwin')
|
||||
|
||||
|
||||
patches = None
|
||||
|
@ -10,12 +10,19 @@
|
||||
from os import O_NONBLOCK
|
||||
from os.path import basename
|
||||
from subprocess import PIPE, Popen
|
||||
from sys import platform as _platform
|
||||
from sys import stdout
|
||||
|
||||
from llnl.util import tty
|
||||
|
||||
from spack import *
|
||||
|
||||
if _platform != 'win32':
|
||||
from fcntl import F_GETFL, F_SETFL, fcntl
|
||||
from os import O_NONBLOCK, rename
|
||||
else:
|
||||
from os import rename
|
||||
|
||||
re_optline = re.compile(r'\s+[0-9]+\..*\((serial|smpar|dmpar|dm\+sm)\)\s+')
|
||||
re_paroptname = re.compile(r'\((serial|smpar|dmpar|dm\+sm)\)')
|
||||
re_paroptnum = re.compile(r'\s+([0-9]+)\.\s+\(')
|
||||
@ -27,9 +34,11 @@
|
||||
def setNonBlocking(fd):
|
||||
"""
|
||||
Set the given file descriptor to non-blocking
|
||||
Non-blocking pipes are not supported on windows
|
||||
"""
|
||||
flags = fcntl(fd, F_GETFL) | O_NONBLOCK
|
||||
fcntl(fd, F_SETFL, flags)
|
||||
if _platform != 'win32':
|
||||
flags = fcntl(fd, F_GETFL) | O_NONBLOCK
|
||||
fcntl(fd, F_SETFL, flags)
|
||||
|
||||
|
||||
def collect_platform_options(stdoutpipe):
|
||||
|
Loading…
Reference in New Issue
Block a user