
    <eX                     R   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!Z!ej"        Z# G d d	e j$                  Z% G d
 de j$                  Z&e'dk    r e j(                     dS dS )    N)copy)captured_stdoutPythonSymlinkrequires_subprocessis_wasi)import_module)TESTFNunlinkskip_unless_symlink
change_cwd)check_warnings)	get_pathsget_platformget_config_varsget_pathget_path_names_INSTALL_SCHEMESget_default_schemeget_scheme_namesget_config_var_expand_vars_get_preferred_schemes_mainc                       e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z ej        ed          d             Zd Ze e            d                         Zd Zd Z ej        ej        dk    d          d             Z ej        ej        dk    d           e            d                         Z  ej        ed          d             Z!d Z" ej         e#j$        d          du d           d!             Z% ej        ej        d"k    o e&ej'        d#          d$          d%             Z( ej        ej        dk    d&          d'             Z) xZ*S )(TestSysConfigc                    t          t          |                                            t          j        d d          | _        t          t          d          r*t          j        | _        t          j                    | _	        nd | _        | 
                    d           | j        t          _        t          j        | _        t          j        | _        t          j        | _        t          j        | _        t          j        j        | _        t          j        j        | _        t          j        j        | _        t&          j        t+          t&          j                  f| _        g | _        g | _        dD ]W}|t          j        v r-| j                            |t          j        |         f           =| j                            |           Xd S )Nuname) r   r   r   r   )MACOSX_DEPLOYMENT_TARGETPATH)superr   setUpsyspathsys_pathhasattrosr   _uname
_set_uname
_get_unamenameplatformversionsepjoinisabs
splitdrive	sysconfig_CONFIG_VARSr   _config_vars_added_envvars_changed_envvarsenvironappend)selfvar	__class__s     */usr/lib/python3.11/test/test_sysconfig.pyr"   zTestSysConfig.setUp   sR   mT""((***2w 	%DJ(**DKKDJOOG$$$?G	{6GL	W]
',%2D9O4P4PP  "7 	0 	0Cbj  %,,c2:c?-CDDDD#**3////		0 	0    c                 @   | j         t          j        d d <   |                                  | j        | j        t
          _        nt
          `| j        t
          _        | j        t          _        | j        t          _        | j	        t
          _	        | j
        t
          j        _
        | j        t
          j        _        | j        t
          j        _        | j        d         t          _        t          j                                         t          j                            | j        d                    | j        D ]\  }}|t
          j        |<   | j        D ]"}t
          j                            |d            #t-          t.          |                                            d S )Nr      )r%   r#   r$   _cleanup_testfnr   r'   r+   r,   r-   r.   r/   r0   r1   r4   r2   r3   clearupdater6   r7   r5   popr!   r   tearDown)r9   r:   valuer;   s      r<   rD   zTestSysConfig.tearDown9   s8   m:!zBHH)}ly
!_!%!21!5	$$&&&%%d&7&:;;;/ 	$ 	$JC#BJsOO& 	& 	&CJNN3%%%%mT""++-----r=   c                 8    t          j        |          | _        d S N)r'   uname_resultr(   )r9   r   s     r<   r)   zTestSysConfig._set_unameQ   s    oe,,r=   c                     | j         S rG   )r(   r9   s    r<   r*   zTestSysConfig._get_unameT   s
    {r=   c                     t           }t          j                            |          rt          j        |           d S t          j                            |          rt          j        |           d S d S rG   )r	   r'   r$   isfileremoveisdirshutilrmtree)r9   r$   s     r<   r@   zTestSysConfig._cleanup_testfnW   sd    7>>$ 	 IdOOOOOW]]4   	 M$	  	 r=   c                 ^    |                      t                      t          j                   d S rG   )assertEqualr   r2   _SCHEME_KEYSrJ   s    r<   test_get_path_namesz!TestSysConfig.test_get_path_names^   s'    ))9+ABBBBBr=   c                    t                      }t                      }t          |d           }t          |                                          }t          |                                          }|                     ||           d S rG   )r   r   r   sorteditemsrR   )r9   schemedefault_schemewanteds       r<   test_get_pathszTestSysConfig.test_get_pathsa   sk    +--nd33''''(((((r=   c           
      z   t                      }t          j        dk    r|ddiz  }t          D ]}t          |         D ]}}t          |         |         j        di |}|                     t          j                            t          ||                    t          j                            |                     ~d S )Nnt
platlibdirlib )	r   r'   r+   r   formatrR   r$   normpathr   )r9   config_varsrX   r+   expecteds        r<   test_get_pathzTestSysConfig.test_get_pathi   s    %''7d?? &u(==K& 	 	F(0  +F3D9@OO;OO  G$$XdF%;%;<<G$$X..   	 	r=   c                 T    |                      t                      t                     d S rG   )assertInr   r   rJ   s    r<   test_get_default_schemez%TestSysConfig.test_get_default_schemew   s$    (**,<=====r=   c                 2   h d}dt           _        t                      }|                     |t                     |                     t          |          |           dt           _        t                      }|                     |t                     |                     t          |          |           dt           _        dt          _        dt          _	        |                     |t                     |                     t          |          |           d S )N>   homeuserprefixr]   posixdarwinT)
r'   r+   r   assertIsInstancedictrR   setr#   r,   
_framework)r9   expected_schemesschemess      r<   test_get_preferred_schemesz(TestSysConfig.test_get_preferred_schemesz   s    555 (**gt,,,W'7888 (**gt,,,W'7888 gt,,,W'788888r=   c                    d}d}t           j                            ddt          j        d d         z  d          }t           j                            t          j        |          }t           j                            t          j        |          }t           j                            t          j        |          }|                     |t          j        dd	                     |                     |t          j        d
d	                     t          j        dd	          }| 	                    |
                    |t           j        z                        d S )Nbinincluder_   zpython%d.%d   site-packagesscripts
posix_venvrX   purelib)r'   r$   r/   r#   version_inforl   rR   r2   r   
assertTrue
startswithr.   )r9   binpathincpathlibpathsysconfig_includedirs        r<   test_posix_venv_schemez$TestSysConfig.test_posix_venv_scheme   s    ',,u,s/?/CC.0 0
 ',,sz733',,sz733',,sz733)"4Y|"T"T"TUUU)"4Y|"T"T"TUUU  )1)LQQQ,77"&8HIIJJJJJr=   c                 F   d}d}t           j                            dd          }t           j                            t          j        |          }t           j                            t          j        |          }t           j                            t          j        |          }|                     |t          j        dd                     |                     |t          j        dd                     |                     |t          j        d	d                     d S )
NScriptsIncludeLibrz   r{   nt_venvr}   rx   r~   )r'   r$   r/   r#   rl   rR   r2   r   )r9   r   r   r   s       r<   test_nt_venv_schemez!TestSysConfig.test_nt_venv_scheme   s     ',,uo66 ',,sz733',,sz733',,sz733)"4Yy"Q"Q"QRRR)"4Yy"Q"Q"QRRR)"4Yy"Q"Q"QRRRRRr=   c                    t           j        dk    r|                     t          j        dd          t          j        dd                     |                     t          j        dd          t          j        dd                     |                     t          j        dd          t          j        dd                     d S |                     t          j        dd          t          j        dd                     |                     t          j        dd          t          j        dd                     |                     t          j        dd          t          j        dd                     d S )	Nwin32r{   venvr}   r   rx   r~   r|   )r#   r,   rR   r2   r   rJ   s    r<   test_venv_schemezTestSysConfig.test_venv_scheme   s   <7"""9V<<<"9Y???   "9V<<<"9Y???   "9V<<<"9Y???    
 "9V<<<"9\BBB   "9V<<<"9\BBB   "9V<<<"9\BBB    r=   c                     t                      }|                     |t                     |                     |           d S rG   )r   ro   rp   r   )r9   cvarss     r<   test_get_config_varsz"TestSysConfig.test_get_config_vars   s;    !!eT***r=   c                 	   dt           _        dt          _        dt          _        |                     t                      d           dt           _        dt          _        dt          _        |                     t                      d           dt           _        dt          _        dt          _        |                     d	           t          j	        t                                 d
t                      d<   dt                      d<   t          j        }	 dt          _        |                     t                      d           dt          _        |                     t                      d           |t          _        n# |t          _        w xY w|                     d           t          j	        t                                 d
t                      d<   dt                      d<   t          j        }	 dt          _        |                     t                      d           dt          _        |                     t                      d           |t          _        n# |t          _        w xY wt          j	        t                                 dt                      d<   dt                      d<   |                     t                      d           t          j	        t                                 dt                      d<   |                     t                      d           t          j	        t                                 dt                      d<   |                     t                      d           t          j	        t                                 dt                      d<   |                     t                      d           t          j	        t                                 dt                      d<   |                     t                      d           d D ][}t          j	        t                                 d!|z  t                      d<   |                     t                      d"|z             \dt           _        d#t          _        d$t          _        |                     d%           |                     t                      d&           d S )'Nr]   z>2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)]r   z>2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Amd64)]z	win-amd64rm   zU2.5 (r25:51918, Sep 19 2006, 08:49:13) 
[GCC 4.0.1 (Apple Computer, Inc. build 5341)]rn   )Darwinmacziade8.11.1]Darwin Kernel Version 8.11.1: Wed Oct 10 18:23:28 PDT 2007; root:xnu-792.25.20~1/RELEASE_I386PowerPCz10.3r   zF-fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypesCFLAGSizmacosx-10.3-ppcl    zmacosx-10.3-ppc64)r   r   r   r   i386zmacosx-10.3-i386zmacosx-10.3-x86_64z10.4zy-arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fatz|-arch x86_64 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-intelz-arch x86_64 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fat3z-arch ppc64 -arch x86_64 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-universalz}-arch x86_64 -arch ppc64 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fat64)ppcr   x86_64ppc64zm-arch %s -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-%szV2.3.5 (#1, Jul  4 2007, 17:28:59) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)]linux2)Linuxaglaez2.6.21.1dedibox-r7z #1 Mon Apr 30 17:25:38 CEST 2007i686z
linux-i686)r'   r+   r#   r-   r,   rR   r   r)   _osx_support_remove_original_valuesr   maxsize)r9   maxintarchs      r<   test_get_platformzTestSysConfig.test_get_platform   sP   5111 5555 I E 	F 	F 	F 	,_->->???8>45(O(# 	!$CK\^^->???-CK\^^-@AAA CKK&CK     B 	C 	C 	C 	,_->->???8>45(O(#	!$CK\^^-?@@@-CK\^^-ABBB CKK&CK     	,_->->???8>45(B(#
 	):;;;,_->->???(B(#
 	)<===,_->->???(B(# 	);<<<,_->->???(B(# 	)@AAA,_->->???(B(#
 	)<===6 	F 	FD01B1BCCC,F IM,MOh'
 \^^-=-DEEEE O @ 	A 	A 	A 	66666s   AE> >F3AI I*,Incompatible with WASI mapdir and OOT buildsc                     t          j                    }|                     t          j                            |          |           d S rG   )r2   get_config_h_filenamer   r'   r$   rL   )r9   config_hs     r<   test_get_config_h_filenamez(TestSysConfig.test_get_config_h_filenameM  s8    244x00(;;;;;r=   c                     g d}t           r|                    g d           |                     t                      t	          t          |                               d S )N)r]   
posix_homeposix_prefixr|   r   r   )nt_userosx_framework_user
posix_user)HAS_USER_BASEextendrR   r   tuplerV   )r9   rZ   s     r<   test_get_scheme_namesz#TestSysConfig.test_get_scheme_namesR  s`    VVV 	KMMIIIJJJ)++U6&>>-B-BCCCCCr=   c                     t                      5 }d}|                      |j        |  |j        |            d d d            d S # 1 swxY w Y   d S )N)-c1import sysconfig; print(sysconfig.get_platform()))r   rR   	call_real	call_link)r9   pycmds      r<   test_symlinkzTestSysConfig.test_symlinkX  s     __ 	EKC\R\3/s1CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   )AA	A	c                    t          d          }t          rt          d          }t          j        t          j        k    }dD ]}t          |d          }|rU|                    t          j        t          j                  }|                    t          j        t          j                  }nnt          j        t          j        k    rT|                    t          j        t          j                  }|                    t          j        t          j                  }t          rt          |d          }t          j
                            |                    ||d                    }|dk    rBt          j                    }d| d	}	|                    d
t          j         d
|	 d|	           }|                     ||           d S )Nbaseuserbase)stdlib
platstdlibr~   platlibr   r   r?   r   pythonz/site-packages/z/lib/)r   r   r#   base_prefixbase_exec_prefixr   replaceexec_prefixrl   r'   r$   rb   r2   get_python_versionr^   rR   )
r9   r   rk   adaptr+   global_path	user_pathrd   py_version_shortsuffixs
             r<   test_user_similarzTestSysConfig.test_user_similar_  s    f%% 	.!*--D 3#77B 	6 	6D"488K A)11#/3?SS||COS_EECJ.. *11#/3:NN||COSZ@@ 6$T<88	7++K,?,?dA,N,NOO 9$$ (1'C'E'E$F&6FFFF'//0MCN0M0MV0M0M0@0@0@ B  BH  H555-	6 	6r=   c                    t                      5 }t                       d d d            n# 1 swxY w Y   |                     t          |                                                    d                    dk               d S )N
r   )r   r   r   lengetvaluesplit)r9   outputs     r<   	test_mainzTestSysConfig.test_main  s     	&GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	FOO--33D99::Q>?????s   *..r   zDoes not apply to Windowsc                     t          j        d          }t          j        d          }|                     ||           d S )NLDFLAGSLDSHARED)r2   r   rg   )r9   ldflagsldshareds      r<   test_ldshared_valuez!TestSysConfig.test_ldshared_value  s<    *955+J77gx(((((r=   rn   ztest only relevant on MacOSXc                    t          j                    }t          j                                        }d|v r|d= t          j        t          j        ddgt
          j	        t
          j
        |          }|                                d                                         }|                    d          }|                                }|                     |d           |                     ||           t          j                                        }d|d<   t          j        t          j        ddgt
          j	        t
          j
        |          }|                                d                                         }|                    d          }|                                }|                     |d           |                     ||           d S )Nr   r   r   )stdoutstderrenvr   zutf-8z10.1)r2   r   r'   r7   r   
subprocessPopenr#   
executablePIPEDEVNULLcommunicatestripdecodewaitrR   )r9   my_platformr   ptest_platformstatuss         r<   test_platform_in_subprocessz)TestSysConfig.test_platform_in_subprocess  s     ,.. joo%,,./C ?%   *0022%,,W55###m444 joo*0&'C ?%   *0022%,,W55###m44444r=   c                    t          j        d          }|                     t          j                            |          |           |                     t          j                            |          |           t           j        rt          j                            |dd          }|                     t          j        	                    |          |           t          j                            |dd          }|                     t          j        	                    |          |           t          j                            |d          }|                     t          j        	                    |          |           d S t          j
        dk    rgt          j                            t          j                              }t          j                            |          }|                     ||           d S d S )Nsrcdirr   zPython.hPCz
pyconfig.hzpyconfig.h.inrm   )r2   r   r   r'   r$   r0   rN   _PYTHON_BUILDr/   existsr+   dirnameget_makefile_filenamerealpathrR   )r9   r   Python_h
pyconfig_hpyconfig_h_inmakefile_dirs         r<   test_srcdirzTestSysConfig.test_srcdir  sv    )(33f--v666f--v666" 	3 w||FIzBBHOOBGNN844h???fdLAAJOOBGNN:66
CCCGLLAAMOOBGNN=99=IIIIIW7??9+J+L+LMML7++L99L\622222	  r=   c                     t          j        d          }t          t          j                  5  t          j        d          }d d d            n# 1 swxY w Y   |                     ||           d S )Nr   )r2   r   r   r'   pardirrR   )r9   r   srcdir2s      r<   test_srcdir_independent_of_cwdz,TestSysConfig.test_srcdir_independent_of_cwd  s     )(33	"" 	9 	9.x88G	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9)))))s   AAA
EXT_SUFFIXNz!EXT_SUFFIX required for this testc                     dd l }|                                s|                     d           t          j                    }|                     |d         |                                d                    d S )Nr   zstub loader has no suffixesr  )_impextension_suffixesskipTestr2   r   rR   )r9   r  varss      r<   test_EXT_SUFFIX_in_varsz%TestSysConfig.test_EXT_SUFFIX_in_vars  st     	&&(( 	9MM7888(**l+T-D-D-F-Fq-IJJJJJr=   linux
_multiarchzmultiarch-specific testc                    t          d          }dd l}dd l}|                                }t	          j        d          }|                    d|          r|                     d|v |           |                    d|          r^|                    |	                                          dk    rd}nd	}|                     |
                    |          d
|           d S d S )Nctypesr   r  z)(aarch64|arm|mips|ppc|powerpc|s390|sparc)r
  z(i[3-6]86|x86_64)$   )zi386-linux-gnu.sozx86_64-linux-gnux32.sozi386-linux-musl.so)zx86_64-linux-gnu.sozx86_64-linux-musl.sozunexpected suffix )r   r,   remachiner2   r   matchr   sizeofc_char_pendswith)r9   r  r,   r  r  r   expected_suffixess          r<   test_triplet_in_ext_suffixz(TestSysConfig.test_triplet_in_ext_suffix  s    x((""$$),7788?II 	7OOGv-v66688('22 	=}}V__..//144$g!!$Q!OOFOO,=>>;;;= = = = =	= 	=r=   zOS X-specific testc                     t          j        d          }|                     |                    d          |           d S )Nr  z
-darwin.so)r2   r   r   r  )r9   r   s     r<   test_osx_ext_suffixz!TestSysConfig.test_osx_ext_suffix  s8    ),7755v>>>>>r=   )+__name__
__module____qualname__r"   rD   r)   r*   r@   rT   r[   re   rh   ru   r   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r#   r,   r   
skipUnlessr   r   r  r2   r   r	  r&   implementationr  r  __classcell__)r;   s   @r<   r   r      s7       0 0 0 0 08. . . . .0- - -       C C C) ) )  > > >9 9 9,K K K,S S S   8  
r7 r7 r7l X_WLMM< < NM<D D D E E  E
 6  6  6D@ @ @ X_S\W,.IJJ) ) KJ) X13QRR(5 (5  SR(5T X_WLMM3 3 NM3.* * * X_-Y-l;;tC8: :K K: :K X0 C !3\BB24 4= =4 4= X13GHH? ? IH? ? ? ? ?r=   r   c                       e Zd Z ej        ej                            d          d           ej        ed          d                         Z	d Z
dS )MakefileTestswinzTest is not Windows compatibler   c                     t          j                    }|                     t          j                            |          |           d S rG   )r2   r   r   r'   r$   rL   )r9   makefiles     r<   test_get_makefile_filenamez(MakefileTests.test_get_makefile_filename  s:     244x00(;;;;;r=   c           
         |                      t          t                     t          t          d          5 }t	          d|           t	          d|           t	          d|           t	          d|           t	          d|           t	          d|           d d d            n# 1 swxY w Y   t          j        t                    }|                     |d	d
ddddd           d S )Nwzvar1=a$(VAR2))filezVAR2=b$(var3)zvar3=42zvar4=$/invalidzvar5=dollar$$5zAvar6=${var3}/lib/python3.5/config-$(VAR2)$(var5)-x86_64-linux-gnuab42b42*   z	$/invalidzdollar$5z442/lib/python3.5/config-b42dollar$5-x86_64-linux-gnu)var1VAR2var3var4var5var6)
addCleanupr
   r	   openprintr2   _parse_makefilerR   )r9   r%  r  s      r<   test_parse_makefilez!MakefileTests.test_parse_makefile  sJ   '''&# 	6(/1111/1111)(++++"2222"2222 &,46 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 (00J 
  
 	 	 	 	 	s   A'B))B-0B-N)r  r  r  r  r  r#   r,   r   r   r&  r7  r`   r=   r<   r"  r"    s}        X_S\,,U3357 7X_WLMM< < NM7 7<    r=   r"  __main__))r  r#   r'   r   rO   r   test.supportr   r   r   r   test.support.import_helperr   test.support.os_helperr	   r
   r   r   test.support.warnings_helperr   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   _HAS_USER_BASEr   TestCaser   r"  r  mainr`   r=   r<   <module>r@     s:    



 				                       5 4 4 4 4 40 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7 7    D D D D D D D D D D D D D D D D D D D D D D D D D D D D     (]? ]? ]? ]? ]?H% ]? ]? ]?~    H%   < zHMOOOOO r=   