Skip to content

Commit

Permalink
Merge branch 'main' into remove-old-check
Browse files Browse the repository at this point in the history
  • Loading branch information
jaraco committed Dec 18, 2021
2 parents 93e3790 + 460b59f commit 315e145
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 30 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,30 @@ jobs:
- name: Run tests
run: tox

test_cygwin:
strategy:
matrix:
python: [39]
platform: [windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- name: Install Cygwin
uses: cygwin/cygwin-install-action@v1
with:
platform: x86_64
packages: >-
python${{ matrix.python }},
python${{ matrix.python }}-devel,
python${{ matrix.python }}-pytest,
gcc-core,
gcc-g++,
ncompress
- name: Run tests
shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0}
run: |
pytest -rs
ci_setuptools:
# Integration testing with setuptools
strategy:
Expand Down
41 changes: 30 additions & 11 deletions distutils/command/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@
'data' : '{userbase}',
}

INSTALL_SCHEMES['osx_framework_user'] = {
'headers':
'{userbase}/include/{implementation_lower}{py_version_short}{abiflags}/{dist_name}',
}

# The keys to an installation scheme; if any new types of files are to be
# installed, be sure to add an entry to every installation scheme above,
# and to SCHEME_KEYS here.
Expand Down Expand Up @@ -445,12 +450,17 @@ def dump_dirs(self, msg):
def finalize_unix(self):
"""Finalizes options for posix platforms."""
if self.install_base is not None or self.install_platbase is not None:
if ((self.install_lib is None and
self.install_purelib is None and
self.install_platlib is None) or
incomplete_scheme = (
(
self.install_lib is None and
self.install_purelib is None and
self.install_platlib is None
) or
self.install_headers is None or
self.install_scripts is None or
self.install_data is None):
self.install_data is None
)
if incomplete_scheme:
raise DistutilsOptionError(
"install-base or install-platbase supplied, but "
"installation scheme is incomplete")
Expand Down Expand Up @@ -510,21 +520,30 @@ def finalize_other(self):
"I don't know how to install stuff on '%s'" % os.name)

def select_scheme(self, name):
os_name, sep, key = name.partition('_')
try:
resolved = sysconfig.get_preferred_scheme(key)
except Exception:
resolved = self._pypy_hack(name)
return self._select_scheme(resolved)

def _select_scheme(self, name):
"""Sets the install directories by applying the install schemes."""
# it's the caller's problem if they supply a bad name!
if (hasattr(sys, 'pypy_version_info') and
sys.version_info < (3, 8) and
not name.endswith(('_user', '_home'))):
if os.name == 'nt':
name = 'pypy_nt'
else:
name = 'pypy'
scheme = _load_schemes()[name]
for key in SCHEME_KEYS:
attrname = 'install_' + key
if getattr(self, attrname) is None:
setattr(self, attrname, scheme[key])

@staticmethod
def _pypy_hack(name):
PY37 = sys.version_info < (3, 8)
old_pypy = hasattr(sys, 'pypy_version_info') and PY37
prefix = not name.endswith(('_user', '_home'))
pypy_name = 'pypy' + '_nt' * (os.name == 'nt')
return pypy_name if old_pypy and prefix else name

def _expand_attrs(self, attrs):
for attr in attrs:
val = getattr(self, attr)
Expand Down
3 changes: 2 additions & 1 deletion distutils/cygwinccompiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import os
import sys
import copy
import shlex
from subprocess import check_output

from distutils.unixccompiler import UnixCCompiler
Expand Down Expand Up @@ -342,6 +343,6 @@ def check_config_h():

def is_cygwincc(cc):
'''Try to determine if the compiler that would be used is from cygwin.'''
out_string = check_output([cc, '-dumpmachine'])
out_string = check_output(shlex.split(cc) + ['-dumpmachine'])
return out_string.strip().endswith(b'cygwin')

4 changes: 2 additions & 2 deletions distutils/msvc9compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,8 +291,6 @@ def query_vcvarsall(version, arch="x86"):

# More globals
VERSION = get_build_version()
if VERSION < 8.0:
raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION)
# MACROS = MacroExpander(VERSION)

class MSVCCompiler(CCompiler) :
Expand Down Expand Up @@ -339,6 +337,8 @@ def __init__(self, verbose=0, dry_run=0, force=0):
def initialize(self, plat_name=None):
# multi-init means we would need to check platform same each time...
assert not self.initialized, "don't init multiple times"
if self.__version < 8.0:
raise DistutilsPlatformError("VC %0.1f is not supported by this module" % self.__version)
if plat_name is None:
plat_name = get_platform()
# sanity check for platforms to prevent obscure errors later.
Expand Down
12 changes: 4 additions & 8 deletions distutils/tests/test_archive_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,11 @@
from distutils.spawn import find_executable, spawn
from distutils.tests import support
from test.support import run_unittest, patch
from .unix_compat import require_unix_id, require_uid_0, grp, pwd, UID_0_SUPPORT

from .py38compat import change_cwd
from .py38compat import check_warnings

try:
import grp
import pwd
UID_GID_SUPPORT = True
except ImportError:
UID_GID_SUPPORT = False

try:
import zipfile
Expand Down Expand Up @@ -339,7 +334,7 @@ def test_make_archive_xztar(self):
def test_make_archive_owner_group(self):
# testing make_archive with owner and group, with various combinations
# this works even if there's not gid/uid support
if UID_GID_SUPPORT:
if UID_0_SUPPORT:
group = grp.getgrgid(0)[0]
owner = pwd.getpwuid(0)[0]
else:
Expand All @@ -364,7 +359,8 @@ def test_make_archive_owner_group(self):
self.assertTrue(os.path.exists(res))

@unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
@unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
@require_unix_id
@require_uid_0
def test_tarfile_root_owner(self):
tmpdir = self._create_files()
base_name = os.path.join(self.mkdtemp(), 'archive')
Expand Down
11 changes: 3 additions & 8 deletions distutils/tests/test_sdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from os.path import join
from textwrap import dedent
from test.support import captured_stdout, run_unittest
from .unix_compat import require_unix_id, require_uid_0, pwd, grp

from .py38compat import check_warnings

Expand All @@ -16,13 +17,6 @@
except ImportError:
ZLIB_SUPPORT = False

try:
import grp
import pwd
UID_GID_SUPPORT = True
except ImportError:
UID_GID_SUPPORT = False

from distutils.command.sdist import sdist, show_formats
from distutils.core import Distribution
from distutils.tests.test_config import BasePyPIRCCommandTestCase
Expand Down Expand Up @@ -440,7 +434,8 @@ def test_manual_manifest(self):
'fake-1.0/README.manual'])

@unittest.skipUnless(ZLIB_SUPPORT, "requires zlib")
@unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
@require_unix_id
@require_uid_0
@unittest.skipIf(find_executable('tar') is None,
"The tar command is not found")
@unittest.skipIf(find_executable('gzip') is None,
Expand Down
16 changes: 16 additions & 0 deletions distutils/tests/unix_compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import sys
import unittest

try:
import grp
import pwd
except ImportError:
grp = pwd = None


UNIX_ID_SUPPORT = grp and pwd
UID_0_SUPPORT = UNIX_ID_SUPPORT and sys.platform != "cygwin"

require_unix_id = unittest.skipUnless(
UNIX_ID_SUPPORT, "Requires grp and pwd support")
require_uid_0 = unittest.skipUnless(UID_0_SUPPORT, "Requires UID 0 support")

0 comments on commit 315e145

Please sign in to comment.