
    dafY                     V   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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 jD                        Z# G d	 d
e jD                        Z$e%dk(  r e jL                          yy)    N)copy)captured_stdoutPythonSymlinkrequires_subprocessis_wasi)import_module)TESTFNunlinkskip_unless_symlink
change_cwd)	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#jH                  d      du d       d!        Z% ej>                  ej:                  d"k(  xr  e&ejN                  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 | _        | j                  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 ]^  }|t        j2                  v r/| j0                  j5                  |t        j2                  |   f       D| j.                  j5                  |       ` y )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     ./root/Python-3.12.4/Lib/test/test_sysconfig.pyr!   zTestSysConfig.setUp   s8   mT(*2wDJ((*DKDJOOG$??GG	{{66GGLL	WW]]
'',,%22D9O9O4PP  "7 	0Cbjj %%,,c2::c?-CD##**3/		0    c                    | j                   t        j                  d d  | j                          | 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                  j!                          t        j                  j#                  | j                  d          | j$                  D ]  \  }}|t
        j&                  |<    | j(                  D ]"  }t
        j&                  j+                  |d        $ t,        t.        | c          y )Nr      )r$   r"   r#   _cleanup_testfnr   r&   r*   r+   r,   r-   r.   r/   r0   r3   r1   r2   clearupdater5   r6   r4   popr    r   tearDown)r8   r9   valuer:   s      r;   rC   zTestSysConfig.tearDown8   s4   mm::!zzBH))}}llyy

!__!%!2!21!5	$$&%%d&7&7&:;// 	$JC#BJJsO	$&& 	&CJJNN3%	& 	mT+-r<   c                 8    t        j                  |      | _        y N)r&   uname_resultr'   )r8   r   s     r;   r(   zTestSysConfig._set_unameP   s    ooe,r<   c                     | j                   S rF   )r'   r8   s    r;   r)   zTestSysConfig._get_unameS   s    {{r<   c                     t         }t        j                  j                  |      rt        j                  |       y t        j                  j                  |      rt        j                  |       y y rF   )r	   r&   r#   isfileremoveisdirshutilrmtree)r8   r#   s     r;   r?   zTestSysConfig._cleanup_testfnV   sC    77>>$IIdOWW]]4 MM$ !r<   c                 T    | j                  t               t        j                         y rF   )assertEqualr   r1   _SCHEME_KEYSrI   s    r;   test_get_path_namesz!TestSysConfig.test_get_path_names]   s    )9+A+ABr<   c                     t               }t               }t        |d       }t        |j	                               }t        |j	                               }| j                  ||       y rF   )r   r   r   sorteditemsrQ   )r8   schemedefault_schemewanteds       r;   test_get_pathszTestSysConfig.test_get_paths`   sM    +-nd3''(r<   c           
      `   t               }t        j                  dk(  r|ddiz  }t        D ]  }t        |   D ]s  }t        |   |   j                  di |}| j                  t        j                  j                  t        ||            t        j                  j                  |             u  y )Nnt
platlibdirlib )	r   r&   r*   r   formatrQ   r#   normpathr   )r8   config_varsrW   r*   expecteds        r;   test_get_pathzTestSysConfig.test_get_pathh   s    %'77d? &u(==K& 	F(0 +F3D9@@O;O  GG$$XdF%;<GG$$X.	r<   c                 @    | j                  t               t               y rF   )assertInr   r   rI   s    r;   test_get_default_schemez%TestSysConfig.test_get_default_schemev   s    (*,<=r<   c                    h d}dt         _        t               }| j                  |t               | j                  t        |      |       dt         _        t               }| j                  |t               | j                  t        |      |       dt         _        dt        _        dt        _	        | j                  |t               | j                  t        |      |       y )N>   homeuserprefixr\   posixdarwinT)
r&   r*   r   assertIsInstancedictrQ   setr"   r+   
_framework)r8   expected_schemesschemess      r;   test_get_preferred_schemesz(TestSysConfig.test_get_preferred_schemesy   s    5 (*gt,W'78 (*gt,W'78 gt,W'78r<   c                    d}d}t         j                  j                  ddt        j                  d d z  d      }t         j                  j                  d|      }t         j                  j                  d|      }t         j                  j                  d|      }d}|D ci c]  }|d }}| j                  |t        j                  d	d
|             | j                  |t        j                  dd
|             t        j                  dd
|      }| j                  |j                  |t         j                  z                y c c}w )Nbinincluder^   zpython%d.%d   site-packagesvenvbaseplatbaseinstalled_baseinstalled_platbasescripts
posix_venvrW   varspurelib)r&   r#   r.   r"   version_inforQ   r1   r   
assertTrue
startswithr-   )r8   binpathincpathlibpathbasesr|   r   sysconfig_includedirs           r;   test_posix_venv_schemez$TestSysConfig.test_posix_venv_scheme   s    '',,u,s/?/?/CC.0
 '',,vw/'',,vw/'',,vw/ M)./f//)"4"4Y|Z^"_`)"4"4Y|Z^"_`  )11)LW[\,77"&&8HIJ 0s    
Ec                 .   d}d}t         j                  j                  dd      }d}t         j                  j                  ||      }t         j                  j                  ||      }t         j                  j                  ||      }d}|D ci c]  }|d }}| j                  |t	        j
                  dd|	             | j                  |t	        j
                  d
d|	             | j                  |t	        j
                  dd|	             y c c}w )NScriptsIncludeLibry   rz   r{   r   nt_venvr   rw   r   )r&   r#   r.   rQ   r1   r   )r8   r   r   r   rz   r   r|   r   s           r;   test_nt_venv_schemez!TestSysConfig.test_nt_venv_scheme   s     '',,uo6 '',,tW-'',,tW-'',,tW- M)./f//)"4"4YyW["\])"4"4YyW["\])"4"4YyW["\]	 0s   
Dc                    t         j                  dk(  r| j                  t        j                  dd      t        j                  dd             | j                  t        j                  dd      t        j                  dd             | j                  t        j                  dd      t        j                  dd             y | j                  t        j                  dd      t        j                  dd             | j                  t        j                  dd      t        j                  dd             | j                  t        j                  dd      t        j                  dd             y )	Nwin32r   rz   )rW   r   rw   r   r   )r"   r+   rQ   r1   r   rI   s    r;   test_venv_schemezTestSysConfig.test_venv_scheme   s,   <<7"""9V<""9Y? ""9V<""9Y? ""9V<""9Y?
 ""9V<""9\B ""9V<""9\B ""9V<""9\Br<   c                 f    t               }| j                  |t               | j                  |       y rF   )r   rn   ro   r   )r8   cvarss     r;   test_get_config_varsz"TestSysConfig.test_get_config_vars   s&    !eT*r<   c                 &   dt         _        dt        _        dt        _        | j                  t               d       dt         _        dt        _        dt        _        | j                  t               d       dt         _        dt        _        dt        _        | j                  d	       t        j                  t                      d
t               d<   dt               d<   t        j                  }	 dt        _        | j                  t               d       dt        _        | j                  t               d       |t        _        | j                  d       t        j                  t                      d
t               d<   dt               d<   t        j                  }	 dt        _        | j                  t               d       dt        _        | j                  t               d       |t        _        t        j                  t                      dt               d<   dt               d<   | j                  t               d       t        j                  t                      dt               d<   | j                  t               d       t        j                  t                      dt               d<   | j                  t               d       t        j                  t                      dt               d<   | j                  t               d       t        j                  t                      dt               d<   | j                  t               d       d D ]L  }t        j                  t                      d!|z  t               d<   | j                  t               d"|z         N dt         _        d#t        _        d$t        _        | j                  d%       | j                  t               d&       y # |t        _        w xY w# |t        _        w xY w)'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-amd64rl   zU2.5 (r25:51918, Sep 19 2006, 08:49:13) 
[GCC 4.0.1 (Apple Computer, Inc. build 5341)]rm   )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+   rQ   r   r(   _osx_support_remove_original_valuesr   maxsize)r8   maxintarchs      r;   test_get_platformzTestSysConfig.test_get_platform   sZ   51 55 I E 	F 	,,_->?8>45(O(# 	!$CK\^->?-CK\^-@A CK B 	C 	,,_->?8>45(O(#	!$CK\^-?@-CK\^-AB CK 	,,_->?8>45(B(#
 	):;,,_->?(B(#
 	)<=,,_->?(B(# 	);<,,_->?(B(# 	)@A,,_->?(B(#
 	)<=6 	FD001BC,F IM,MOh'
 \^-=-DE	F O @ 	A 	6[ !CK$ !CKs   1A
O3 A
P 3P P,Incompatible with WASI mapdir and OOT buildsc                     t        j                         }| j                  t        j                  j                  |      |       y rF   )r1   get_config_h_filenamer   r&   r#   rK   )r8   config_hs     r;   test_get_config_h_filenamez(TestSysConfig.test_get_config_h_filenameU  s+    224x0(;r<   c                     g d}t         r|j                  g d       | j                  t               t	        t        |                   y )N)r\   
posix_homeposix_prefixr   r   rz   )nt_userosx_framework_user
posix_user)HAS_USER_BASEextendrQ   r   tuplerU   )r8   rY   s     r;   test_get_scheme_namesz#TestSysConfig.test_get_scheme_namesZ  s4    VMMIJ)+U6&>-BCr<   c                     t               5 }d}| j                   |j                  |  |j                  |        d d d        y # 1 sw Y   y xY w)N)-c1import sysconfig; print(sysconfig.get_platform()))r   rQ   	call_real	call_link)r8   pycmds      r;   test_symlinkzTestSysConfig.test_symlink`  sO     _ 	EKC\R\\3/s1CD	E 	E 	Es   /AAc                    t        d      }t        rt        d      }t        j                  t        j                  k7  }dD ]  }t        |d      }|r]|j                  t        j                  t        j                        }|j                  t        j                  t        j                        }n}t        j                  t        j                  k7  r\|j                  t        j                  t        j                        }|j                  t        j                  t        j                        }t        st        |d      }t        j                  j                  |j                  |d            }|dk(  rCt        j                         }d| d	}	|j                  d
t        j                   d
|	 d|	       }| j                  ||        y )Nr|   userbase)stdlib
platstdlibr   platlibr   r   r>   r   pythonz/site-packages/z/lib/)r   r   r"   base_prefixbase_exec_prefixr   replaceexec_prefixrk   r&   r#   ra   r1   get_python_versionr]   rQ   )
r8   r|   rj   adaptr*   global_path	user_pathrc   py_version_shortsuffixs
             r;   test_user_similarzTestSysConfig.test_user_similarg  sa    f%!*-D 3#7#77B 	6D"48K)11#//3??S||COOS__ECJJ. *11#//3::N||COOSZZ@$T<8	77++K,?,?dA,NO 9$ (1'C'C'E$%&6%7~FF'//!CNN3C1VH0M27x0@ BH  H5-	6r<   c                     t               5 }t                d d d        | j                  t        j	                         j                  d            dkD         y # 1 sw Y   DxY w)N
r   )r   r   r   lengetvaluesplit)r8   outputs     r;   	test_mainzTestSysConfig.test_main  sL     	&G	FOO-33D9:Q>?	 	s   AA"r   zDoes not apply to Windowsc                 |    t        j                  d      }t        j                  d      }| j                  ||       y )NLDFLAGSLDSHARED)r1   r   rf   )r8   ldflagsldshareds      r;   test_ldshared_valuez!TestSysConfig.test_ldshared_value  s0    **95++J7gx(r<   rm   ztest only relevant on MacOSXc                 l   t        j                         }t        j                  j	                         }d|v r|d= t        j                  t        j                  ddgt
        j                  t
        j                  |      }|j                         d   j                         }|j                  d      }|j                         }| j                  |d       | j                  ||       t        j                  j	                         }d|d<   t        j                  t        j                  ddgt
        j                  t
        j                  |      }|j                         d   j                         }|j                  d      }|j                         }| j                  |d       | j                  ||       y )Nr   r   r   )stdoutstderrenvr   zutf-8z10.1)r1   r   r&   r6   r   
subprocessPopenr"   
executablePIPEDEVNULLcommunicatestripdecodewaitrQ   )r8   my_platformr   ptest_platformstatuss         r;   test_platform_in_subprocessz)TestSysConfig.test_platform_in_subprocess  sj     ,,. jjoo%,./C ??%% *002%,,W5#m4 jjoo*0&'C ??%% *002%,,W5#m4r<   c                    t        j                  d      }| j                  t        j                  j                  |      |       | j                  t        j                  j                  |      |       t         j                  rt        j                  j                  |dd      }| j                  t        j                  j                  |      |       t        j                  j                  |dd      }| j                  t        j                  j                  |      |       t        j                  j                  |d      }| j                  t        j                  j                  |      |       y t        j                  dk(  rct        j                  j                  t        j                               }t        j                  j                  |      }| j                  ||       y y )Nsrcdirr   zPython.hPCz
pyconfig.hzpyconfig.h.inrl   )r1   r   r   r&   r#   r/   rM   _PYTHON_BUILDr.   existsr*   dirnameget_makefile_filenamerealpathrQ   )r8   r   Python_h
pyconfig_hpyconfig_h_inmakefile_dirs         r;   test_srcdirzTestSysConfig.test_srcdir  s6    ))(3f-v6f-v6"" ww||FIzBHOOBGGNN84h?fdLAJOOBGGNN:6
CGGLLAMOOBGGNN=9=IWW77??9+J+J+LML77++L9L\62	  r<   c                     t        j                  d      }t        t        j                        5  t        j                  d      }d d d        | j                  |       y # 1 sw Y   xY w)Nr   )r1   r   r   r&   pardirrQ   )r8   r   srcdir2s      r;   test_srcdir_independent_of_cwdz,TestSysConfig.test_srcdir_independent_of_cwd  sU     ))(3		" 	9..x8G	9)	9 	9s   A  A)
EXT_SUFFIXNz!EXT_SUFFIX required for this testc                     dd l }|j                         s| j                  d       t        j                         }| j                  |d   |j                         d          y )Nr   zstub loader has no suffixesr  )_impextension_suffixesskipTestr1   r   rQ   )r8   r
  r   s      r;   test_EXT_SUFFIX_in_varsz%TestSysConfig.test_EXT_SUFFIX_in_vars  sQ     	&&(MM78((*l+T-D-D-Fq-IJr<   linux
_multiarchzmultiarch-specific testc                 |   t        d      }dd l}dd l}|j                         }t	        j
                  d      }|j                  d|      r| j                  d|v |       |j                  d|      rL|j                  |j                               dk(  rd}nd	}| j                  |j                  |      d
|       y y )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machiner1   r   matchr   sizeofc_char_pendswith)r8   r  r+   r  r  r   expected_suffixess          r;   test_triplet_in_ext_suffixz(TestSysConfig.test_triplet_in_ext_suffix  s     x(""$)),788?IOOGv-v688('2}}V__./14$g!$Q!OOFOO,=>0
;= 3r<   zOS X-specific testc                 p    t        j                  d      }| j                  |j                  d      |       y )Nr  z
-darwin.so)r1   r   r   r  )r8   r   s     r;   test_osx_ext_suffixz!TestSysConfig.test_osx_ext_suffix  s)    )),75v>r<   )+__name__
__module____qualname__r!   rC   r(   r)   r?   rS   rZ   rd   rg   rt   r   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r"   r+   r   
skipUnlessr   r  r  r1   r   r  r%   implementationr  r  __classcell__)r:   s   @r;   r   r      s   08.0- C)>9,K4^*8
r7l X__WLM< N<D E  E
 6D@ X__S\\W,.IJ) K) X13QR(5  S(5T X__WLM3 N3.* X__-Y--l;tC8:K:K X0 C !3!3\B24=4= X13GH? I?r<   r   c                       e Zd Z ej                  ej                  j                  d      d       ej                  ed      d               Z	d Z
y)MakefileTestswinzTest is not Windows compatibler   c                     t        j                         }| j                  t        j                  j                  |      |       y rF   )r1   r   r   r&   r#   rK   )r8   makefiles     r;   test_get_makefile_filenamez(MakefileTests.test_get_makefile_filename  s-     224x0(;r<   c           
         | j                  t        t               t        t        d      5 }t	        d|       t	        d|       t	        d|       t	        d|       t	        d|       t	        d|       d d d        t        j                  t              }| j                  |d	d
ddddd       y # 1 sw Y   <xY w)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printr1   _parse_makefilerQ   )r8   r)  r   s      r;   test_parse_makefilez!MakefileTests.test_parse_makefile  s    '&# 	6(/1/1)(+"2"2 &,46	6 ((0J 
 		6 	6s   AB55B>N)r  r  r  r   r!  r"   r+   r   r   r*  r;  r_   r<   r;   r&  r&    sO    X__S\\,,U357X__WLM< N7<r<   r&  __main__)'r   r"   r&   r   rN   r   test.supportr   r   r   r   test.support.import_helperr   test.support.os_helperr	   r
   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   _HAS_USER_BASEr   TestCaser   r&  r  mainr_   r<   r;   <module>rC     s     
 	     50 0 D D D D  ((f?H%% f?PH%% < zHMMO r<   