
#þîhc  ã            
   @   s)  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d e j k Z d d d d i Z d d „  Z d	 d d
 d „ Z	 d d d „ Z
 e j j e j d1 k d d ƒZ e d d „  ƒ Z d d „  Z e j j d d d ƒd d „  ƒ Z d d „  Z d d „  Z d Z e j j d ƒ e j j d2 e j d" d# d$ e ƒe j d" d% d$ e ƒe j d" d& d$ e ƒd3 d4 d5 g ƒ d( d) „  ƒ ƒ Z d* Z e j j d ƒ e j j d  d' e j d" d$ e ƒg ƒ d+ d, „  ƒ ƒ Z d- Z e j j d ƒ e j j d6 d7 e j d" d. d$ e ƒg ƒ d/ d0 „  ƒ ƒ Z d S)8é    NZ__pypy__ÚtextTÚencodingzutf-8c             C   s-   |  r) t  j ƒ  d k r) t j d |  d <|  S)z¨
    On Windows, SYSTEMROOT must be present to avoid

    > Fatal Python error: _Py_HashRandomization_Init: failed to
    > get random numbers to initialize Python
    ÚWindowsZ
SYSTEMROOT)ÚplatformÚsystemÚosÚenviron)Úenv© r
   úN/tmp/pip-build-zijwfla7/setuptools/setuptools/tests/test_distutils_adoption.pyÚwin_sr   s    r   Ú	distutilsc             K   sC   d j  t ƒ  �  } d d | g } |  j | d t | ƒ t | —�S)Nz+import {imports}; print(distutils.__file__)Úpythonz-cr	   )ÚformatÚlocalsÚrunr   Ú_TEXT_KWARGS)ÚvenvÚimportsr	   ÚkwargsÚpy_cmdÚcmdr
   r
   r   Úfind_distutils   s    r   c             C   s@   t  j d ƒ } d d | g } t |  j | d t | ƒ t �ƒ S)Nz³
        import sys
        is_distutils = lambda finder: finder.__class__.__name__ == "DistutilsMetaFinder"
        print(len(list(filter(is_distutils, sys.meta_path))))
        r   z-cr	   )ÚtextwrapÚdedentÚintr   r   r   )r   r	   r   r   r
   r
   r   Úcount_meta_path   s    	r   é   é   Úreasonz-stdlib distutils is removed from Python 3.12+c             C   s^   t  d d ƒ } |  j t |  d | ƒj t j ƒ k s< t ‚ t |  d | ƒd k sZ t ‚ d S)z;
    Ensure stdlib distutils is used when appropriate.
    ÚSETUPTOOLS_USE_DISTUTILSÚstdlibr	   r   N)ÚdictÚnamer   Úsplitr   ÚsepÚAssertionErrorr   )r   r	   r
   r
   r   Útest_distutils_stdlib1   s    -r'   c             C   sj   t  d d ƒ } t |  d d d | ƒ} |  j | j t j ƒ k sH t ‚ t |  d | ƒd k sf t ‚ d S)z:
    Ensure local distutils is used when appropriate.
    r    Úlocalr   zsetuptools, distutilsr	   é   N)r"   r   r#   r$   r   r%   r&   r   )r   r	   Úlocr
   r
   r   Ú$test_distutils_local_with_setuptools;   s    !r+   ÚIS_PYPYz!pypy imports distutils on startupc             C   s^   t  d d ƒ } |  j t |  d | ƒj t j ƒ k s< t ‚ t |  d | ƒd k sZ t ‚ d S)zZ
    Even without importing, the setuptools-local copy of distutils is
    preferred.
    r    r(   r	   r)   N)r"   r#   r   r$   r   r%   r&   r   )r   r	   r
   r
   r   Útest_distutils_localE   s    -r-   c             C   s#   d d d g } |  j  | t � d S)zD
    Ensure pip can be imported.
    Regression test for #3002.
    r   z-cz
import pipN)r   r   )r   r   r
   r
   r   Útest_pip_importP   s    r.   c               C   s   t  d ƒ j j s t ‚ d S)z=
    Distutils module spec should have an origin. #2990.
    r   N)Ú
__import__Ú__spec__Úoriginr&   r
   r
   r
   r   Útest_distutils_has_originY   s    r2   a8  
# Depending on the importlib machinery and _distutils_hack, some imports are
# duplicated resulting in different module objects being loaded, which prevents
# patches as shown in #3042.
# This script provides a way of verifying if this duplication is happening.

from distutils import cmd
import distutils.command.sdist as sdist

# import last to prevent caching
from distutils import {imported_module}

for mod in (cmd, sdist):
    assert mod.{imported_module} == {imported_module}, (
        f"\n{{mod.dir_util}}\n!=\n{{{imported_module}}}"
    )

print("success")
Z
tmpdir_cwdÚdistutils_versionÚimported_moduler!   Údir_utilZmarksÚ	file_utilÚarchive_utilr(   c             C   sj   t  d |  ƒ } t j d | ƒ } d d | g } | j | d t | ƒ t �j ƒ  } | d k sf t ‚ d  S)Nr    r4   r   z-cr	   Úsuccess)r"   Ú!ENSURE_IMPORTS_ARE_NOT_DUPLICATEDr   r   r   r   Ústripr&   )r3   r4   r   r	   Úscriptr   Úoutputr
   r
   r   Ú)test_modules_are_not_duplicated_on_importu   s
    $r=   z¹
import types
import distutils.dist as dist
from distutils import log
if isinstance(dist.log, types.ModuleType):
    assert dist.log == log, f"\n{dist.log}\n!=\n{log}"
print("success")
c             C   sX   t  d |  ƒ } d d t g } | j | d t | ƒ t �j ƒ  } | d k sT t ‚ d  S)Nr    r   z-cr	   r8   )r"   Ú#ENSURE_LOG_IMPORT_IS_NOT_DUPLICATEDr   r   r   r:   r&   )r3   r   r	   r   r<   r
   r
   r   Ú+test_log_module_is_not_duplicated_on_import“   s    	$r?   zý
from setuptools.modified import newer
from {imported_module}.errors import DistutilsError

# Can't use pytest.raises in this context
try:
    newer("", "")
except DistutilsError:
    print("success")
else:
    raise AssertionError("Expected to raise")
zsetuptools._distutilsc             C   sd   t  d |  ƒ } d d t j d | ƒ g } | j | d t | ƒ t �j ƒ  } | d k s` t ‚ d  S)Nr    r   z-cr4   r	   r8   )r"   Ú(ENSURE_CONSISTENT_ERROR_FROM_MODIFIED_PYr   r   r   r   r:   r&   )r3   r4   r   r	   r   r<   r
   r
   r   Ú&test_consistent_error_from_modified_py°   s    	$rA   )r   r   )údistutils_versionúimported_module)úlocalzdir_util)rD   z	file_util)rD   zarchive_util)rB   rC   )rD   z	distutils)r   r   Úsysr   ZpytestÚbuiltin_module_namesr,   r   r   r   r   ÚmarkZskipifÚversion_infoZskip_without_stdlib_distutilsr'   r+   Zxfailr-   r.   r2   r9   ZusefixturesZparametrizeÚparamr=   r>   r?   r@   rA   r
   r
   r
   r   Ú<module>   sP   		

$			*	