
    wgM                        d dl Z d dlZd dlZd dlZd dlZ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 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 d dlmZmZmZ d d	lmZ d dlZ d dl!Z!d dl"Z"d d
l#m$Z$ ddl%m&Z'  e"jP                         d        Z)e jT                  d        Z+e jT                  d        Z,e"jZ                  j]                  d       G d de             Z/ G d de/      Z0y)    N)	sysconfig	build_ext)Distribution)CompileErrorDistutilsPlatformErrorDistutilsSetupErrorUnknownFileError)	Extension)missing_compiler_executable)TempdirManagercopy_xxmodule_cfixup_build_ext)StringIO)support   )py38c              #     K   | j                   }|j                         |_        t        j                  |j                        |_        ddlm} t        j                  }|j                         t        _	        t        j                  |_	        |j
                  5  d  d d d        |t        _	        ||_	        y # 1 sw Y   xY ww)Nr   r   )
instancemkdtemptmp_dirpathPathtmp_pathdistutils.commandr   site	USER_BASE)requestselfr   orig_user_bases       o/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_build_ext.pyuser_site_dirr"   %   s     D<<>DLIIdll+DM+^^N\\^DN..I
 
  $DN(I	 s   BCB8C8C=Cc              #      K   t        j                  |       5  t        | |      5 }t        j                  |      5  d  d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY wwN)import_helperCleanImportextension_redirectDirsOnSysPath)namer   new_paths      r!   safe_extension_importr+   ;   st     		"	"4	( d+ 	x,,X6 	  	 	 sJ   A=A1A%A A%A1	A=A"A%%A.	*A11A:6A=c              #   <  K   t        j                         dk7  rt        j                   dk7  r| yt        j                  |      5  t
        j                  j                  |       }ddd       t        j                  j                  j                        }t        j                  d      }t        j                  j                  |t        j                  j                  |            }t        j                   |j                  |       | y# 1 sw Y   xY ww)z
    Tests will fail to tear down an extension module if it's been imported.

    Before importing, copy the file to a temporary directory that won't
    be cleaned up. Yield the new path.
    WindowscygwinNdeleteme)prefix)platformsystemsysr%   r(   	importlibutil	find_specosr   basenameorigintempfiler   joinshutilcopy)modr   specfilename	trash_dirdests         r!   r'   r'   C   s      I%#,,(*B
		$	$T	* -~~'',-ww,H  
3I77<<	277#3#3H#=>D
KKT"
O- -s   AD D'B)DDDr"   c                      e Zd Zd Zd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zej$                  j'                  d      ej$                  j)                  d      d               Zej$                  j'                  d      ej$                  j)                  d      d               Zej$                  j'                  d      ej$                  j)                  d      d               Zd Zy)TestBuildExtc                     t        |i |S r$   r   )r   argskwargss      r!   r   zTestBuildExt.build_extZ   s    $)&))    c                    t                t        | j                         t        j                  j                  | j                  d      }t        d|g      }t        d|gd      }| j                  |_        | j                  |      }t        |       | j                  |_        | j                  |_        t        j                  }t        j                   st#               t        _        	 |j%                          |j'                          |t        _        t)        d| j                        5  | j+                          d d d        y # |t        _        w xY w# 1 sw Y   y xY w)Nz
xxmodule.cxxr)   ext_modules)r   r   r   r7   r   r;   r   r   package_dirr   r   	build_lib
build_tempr3   stdoutr   verboser   ensure_finalizedrunr+   _test_xx)r   xx_cxx_extdistcmd
old_stdouts         r!   test_build_extzTestBuildExt.test_build_ext]   s    #%%ww||DLL,74$(T6(CD<<nnT"ZZ
!CJ	$  "GGI#CJ"46 	MMO	 	 $CJ	 	s   ) E *EEEc                     dd l } dD ]  }t        | |      rJ  | j                  dd      dk(  sJ | j                  dd      dk(  sJ | j                         j	                         J t
        j                  rd	}| j                  |k(  sJ t        | j                         | j                        sJ t        | j                         | j                        sJ y )
Nr   )errorfoonewroj                  z/This is a template module just for instruction.)rJ   hasattrr]   r^   demor   HAVE_DOCSTRINGS__doc__
isinstanceNullStr)rJ   attrdocs      r!   rT   zTestBuildExt._test_xxv   s    2 	%D2t$$$	% vva|q   vvb"~###vvx}}&&&""CC::$$$"'')RWW---"&&(BFF+++rH   c                 h   t        ddi      }| j                  |      }t        j                  }dt        _        ddlm} |j                  d      }d|d<   	 |j                          |t        _        ||d= n||d<   	 t        |j                        dkD  sJ y # |t        _        ||d= w ||d<   w xY w)Nr)   rJ   sunosr   )_config_varsPy_ENABLE_SHAREDT)
r   r   r3   r1   distutils.sysconfigrq   getrR   lenlibrary_dirs)r   rW   rX   oldrq   old_vars         r!   test_solaris_enable_sharedz'TestBuildExt.test_solaris_enable_shared   s    VTN+nnT"ll4""#56+/'(	;  "CL !343:/0 3##$q((( CL !343:/0s   B B1c                 .   dd l }t        ddi      }| j                  |      }|j                  D cg c]  \  }}}|
 }}}}d|v sJ d|_        t
        j                  j                  |j                  d      }t
        j                  j                  |j                  d      }	t        j                  |       t        j                  |	       |j                          ||j                  v sJ ||j                  v sJ |	|j                  v sJ y c c}}}w )Nr   r)   rJ   userTlibinclude)r   r   r   user_optionsr{   r7   r   r;   r   mkdirrR   rv   rpathinclude_dirs)
r   r   rW   rX   r)   shortlabeloptionsr|   incls
             r!   test_user_sitezTestBuildExt.test_user_site   s    VTN+nnT" 362B2BCC.D%4CC     ggll4>>51ww||DNNI6

 	 c&&&&&ciis'''''' Ds   Dc                    t        ddgd      g}t        d|d      }| j                  |      }|j                          t	        j
                  t        t        f      5  |j                          d d d        t        ddgd      g}t        d|d      }| j                  |      }|j                          |j                          y # 1 sw Y   YxY w)Nr]   xxxFoptionalrJ   rK   T)	r   r   r   rR   pytestraisesr
   r   rS   r   modulesrW   rX   s       r!   test_optional_extensionz$TestBuildExt.test_optional_extension   s     UUGe<=T'BCnnT"]],l;< 	GGI	 UUGd;<T'BCnnT"		 	s   CCc                    t        ddgd      g}t        d|d      }| j                  |      }|j                          t	        j
                         }|j                  t        j                  j                        D ]  }||j                  v rJ  t	        j
                  d      }|j                  t        j                  j                        D ]  }||j                  v rJ  | j                  |      }d	|_        |j                          |j                  g d
k(  sJ | j                  |      }dt        j                   d|_        |j                          d|j                  v sJ d|j                  v sJ | j                  |      }dt        j                   d|_        |j                          |j                  ddgk(  sJ t        |      }d|_        |j                          |j                  g dk(  sJ | j                  |      }d|_        |j                          |j                  ddgk(  sJ | j                  |      }d|_        |j                          |j                   ddgk(  sJ | j                  |      }d |_        |j                          |j"                  g k(  sJ | j                  |      }d|_        |j                          |j"                  ddgk(  sJ y )Nr]   r   Fr   rJ   rK   T)plat_specificzmy_lib, other_lib lastlib)my_lib	other_liblastlib
my_lib_dirother_lib_dironetwozone two,three)r   r   threezone,two)r   1)r   r   z1 2r   2)r   r   r   finalize_optionsr   get_python_incsplitr7   r   pathsepr   	librariesrv   r   link_objectsdefineundef	swig_opts)r   r   rW   rX   
py_includepplat_py_includes          r!   test_finalize_optionsz"TestBuildExt.test_finalize_options   s    UUGe<=T'BCnnT"--/
!!"''//2 	)A(((((	) $22F &&rww7 	)A(((((	)
 nnT"3}} BBBB nnT"'

|=As/////#"2"2222 nnT""**S)	yyUEN*** o*#:::: nnT"
zzlL9999 nnT"	yyUEN*** nnT"}}"""nnT"}}c
***rH   c                 8   t               }| j                  |      }|j                          t        j                  t
              5  |j                  d       d d d        ddg}t        j                  t
              5  |j                  |       d d d        dg}t        j                  t
              5  |j                  |       d d d        dg}t        j                  t
              5  |j                  |       d d d        ddgdddfg}|j                  |       |d	   }t        |t              sJ |j                  dk(  sJ t        |d
      rJ ddgddddgdfg}t        j                  t
              5  |j                  |       d d d        ddg|d	   d   d<   |j                  |       |d	   j                  dgk(  sJ |d	   j                  dgk(  sJ y # 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr]   )barr]   r   )zfoo-bar )foo.barr   r   r   r   )sourcesr   somer   r   )r   r   3)r   r   r   macros)r   r   )r   r   r   r   )r   r   r   r   r   r	   check_extensions_listrj   r   r   rf   undef_macrosdefine_macros)r   rW   rX   extsexts        r!   test_check_extensions_listz'TestBuildExt.test_check_extensions_list  s   ~nnT" ]]./ 	-%%e,	-
 &u-]]./ 	,%%d+	,   ]]./ 	,%%d+	,
   ]]./ 	,%%d+	, 5%PQR!!$'1g#y)))
 }}%%%3'''
  "t!&!.6	

 ]]./ 	,%%d+	, !+F3Q
8!!$'Aw##u,,,Aw$$444i	- 	-	, 	,	, 	,	, 	,6	, 	,s<   G<G)2G6(H9HG&)G36H HHc                     t        ddgd      g}t        d|d      }| j                  |      }|j                          |j	                         dgk(  sJ y )Nr]   r   Fr   rJ   rK   )r   r   r   rR   get_source_filesr   s       r!   test_get_source_filesz"TestBuildExt.test_get_source_filesL  sW    UUGe<=T'BCnnT"##%%000rH   c                    t        ddgd      t        ddgd      g}t        d|d      }| j                  |      }|j                          t	        j
                  d	|j                  |d
   j                              sJ t	        j
                  d|j                  |d   j                              sJ |j                  |d
         dgk(  sJ |j                  |d         dgk(  sJ y )Nr]   aaaFr   u   fööuuurJ   rK   zfoo(_d)?\..*r   u   föö(_d)?\..*r   
PyInit_fooPyInitU_f_1gaa)	r   r   r   rR   researchget_ext_filenamer)   get_export_symbolsr   s       r!   test_unicode_module_namesz&TestBuildExt.test_unicode_module_namesS  s    eeWu5gw7
 T'BCnnT"yy#*>*>wqz*OPPPyy*C,@,@,QRRR%%gaj1l^CCC%%gaj16F5GGGGrH   c                     t               }| j                  |      }d|_        |j                          |j	                          |j                  dk(  sJ y )Nunix)r   r   compilerrR   rS   )r   rW   rX   s      r!   test_compiler_optionz!TestBuildExt.test_compiler_option`  sG     ~nnT"	||v%%%rH   c                    t                | j                         }t        j                  j	                  |d      }| j                  |d       t        d|gd      }t        d|gd      }| j                  |      }t        |       |j                          t        |j                               dk(  sJ t        j                  j	                  | j                  d	      |_        t        j                  j	                  | j                  d
      |_        t        j                  j!                  | j                               }t        j"                         }t        j$                  |       	 d|_        |j)                          |j                         d   }t        j$                  |       t        j                  j+                  |      sJ t-        j.                  d      }	|j1                  |	      sJ t        j                  j3                  |      }
|
|k(  sJ d|_        d |_        |j)                          |j                         d   }t        j                  j+                  |      sJ |j1                  |	      sJ t        j                  j3                  |      }
|
|j                  k(  sJ |j7                  d      }ddi|_        |j;                  d      }t        j                  j=                  |      d   }||j                  k(  sJ d|_        t        j                  j!                  | j                               }t        j"                         }t        j$                  |       	 |j;                  d      }t        j$                  |       t        j                  j=                  |      d   }t        j                  j=                  |      d   }|dk(  sJ y # t        j$                  |       w xY w# t        j$                  |       w xY w)Nzfoo.czvoid PyInit_foo(void) {}
r]   Fr   rJ   rK   r   buildtemptTr   
EXT_SUFFIXbuild_pyr   r   )r   r   r7   r   r;   
write_filer   r   r   r   rR   ru   get_outputsr   rN   rO   realpathgetcwdchdirinplacerS   existsr   get_config_varendswithdirnamer   get_finalized_commandrM   get_ext_fullpathr   )r   r   c_filer   rW   rX   other_tmp_dirold_wdso_file
ext_suffixso_dirr   r   lastdirs                 r!   test_get_outputszTestBuildExt.test_get_outputsk  s   #%,,.gw/ <=x%8T3%@AnnT"3??$%***T\\7;dllG< ((8
	CKGGIoo'*GHHVww~~g&&&--l;

+++)&&&	//#A&ww~~g&&&
+++)&&& ,,Z8 "E{##E*ww}}T"1%s}}$$$ ((8
	''.DHHVww}}T"1%''--%b)%I HHV@ HHVs   **O )O5 O25Pc                    t        j                  d      }t               }| j                  |      }d|_        ddi|j
                  _        ddg|j
                  _        t        j                         }t        j                  j                  |ddd|z         }|j                  d      }||k(  sJ d	|_        t        j                  j                  |d
      |_        t        j                  j                  |d
dd|z         }|j                  d      }||k(  sJ |j                  d      }i |_        ddg|j
                  _        |j                  d      }t        j                  j                  |d
ddd|z         }||k(  sJ d|_        |j                  d      }t        j                  j                  |ddd|z         }||k(  sJ y )Nr   Tr   srclxmlz	lxml.htmletreez
lxml.etreeFtmpdirr   twistedztwisted.runner.portmaprunnerportmap)r   r   r   r   r   distributionrM   packagesr7   r   r   r;   r   rN   r   )r   r   rW   rX   curdirwantedr   r   s           r!   test_ext_fullpathzTestBuildExt.test_ext_fullpath  s   &&|4
 ~nnT"(*E{$%+[$9!feVWs]C##L1~~ VX6fh#F##L1~~ ,,Z8!%.0H$I!##$<=fh	8YQT_U~~ ##$<=fi9s?K~~rH   zplatform.system() != "Darwin"save_envc                 (    | j                  dd        y )Nz==)_try_compile_deployment_targetr   s    r!   test_deployment_target_defaultz+TestBuildExt.test_deployment_target_default  s     	++D$7rH   c                     t        j                  t              5  | j                  dd       d d d        y # 1 sw Y   y xY w)N>z10.1)r   r   r   r   r   s    r!   test_deployment_target_too_lowz+TestBuildExt.test_deployment_target_too_low  s6    
 ]]12 	=//V<	= 	= 	=s   6?c                     t        j                  d      }|r_|j                  d      D cg c]  }t        |       }}|dxx   dz  cc<   dj	                  d |D              }| j                  d|       y y c c}w )NMACOSX_DEPLOYMENT_TARGET.r   r   c              3   2   K   | ]  }t        |        y wr$   )str).0is     r!   	<genexpr>z@TestBuildExt.test_deployment_target_higher_ok.<locals>.<genexpr>  s      ;AQ ;s   <)r   r   r   intr;   r   )r   	deptargetxs      r!    test_deployment_target_higher_okz-TestBuildExt.test_deployment_target_higher_ok  sr     ,,-GH	)2)=>AQ>I>bMQM ; ;;I//Y? >s   A8c                    |1t         j                  j                  d      r%t         j                  d= n|t         j                  d<   t        j                  j                  dt        j                  d| d      i| j                         t        j                  d      }t        t        t        |j                  d      dd             }|d d dk  rd	|z  }nt        |      dk\  rd
|z  }nd|z  }t!        d| j                  dz  gd| g      }t#        d|gd      }| j$                  |_        | j)                  |      }| j$                  |_        | j$                  |_        	 t.        j0                  }t2        j4                  st7               t.        _        	 |j9                          |j;                          |t.        _        y # |t.        _        w xY w# t<        $ r | j?                  d       Y y w xY w)Nr   zdeptargetmodule.czt                    #include <AvailabilityMacros.h>

                    int dummy;

                    #if TARGET z MAC_OS_X_VERSION_MIN_REQUIRED
                    #else
                    #error "Unexpected target"
                    #endif

                    r   r   r`   )
   r  z	%02d%01d0z
%02d%02d00z%02d0000r  z	-DTARGET=)extra_compile_argsrK   z*Wrong deployment target during compilation) r7   environrt   jaracor   r   textwrapdedentr   r   r   tuplemapr   r   ru   r   r   r   rM   r   rN   rO   r3   rP   r   rQ   r   rR   rS   r   fail)r   operatortargetdeptarget_extrW   rX   rY   s          r!   r   z+TestBuildExt._try_compile_deployment_target  s   >zz~~89JJ9:5;BJJ12#X__ : 
 !)z *
6 
& MM	
$ ))*DEs3S 1!A 678 "1:  6)F 6{a%. $f,!]]001"+F8 45

 [-QR<<nnT"	DJ??%Z
($$&	'
Z
 	DIIBC	Ds*   %3G  G 9G GG G21G2N)__name__
__module____qualname__r   rZ   staticmethodrT   ry   r   r   r   r   r   r   r   r   r   r   markskipifusefixturesr   r   r  r    rH   r!   rD   rD   X   s   *2 , ,),(8 F+P:5x1H	&= ~#J [[78[[Z(8 ) 98 [[78[[Z(= ) 9= [[78[[Z(
@ ) 9
@?DrH   rD   c                        e Zd Z fdZ xZS )TestParallelBuildExtc                 4    t        |   |i |}d|_        |S )NT)superr   parallel)r   rF   rG   r   	__class__s       r!   r   zTestParallelBuildExt.build_ext0  s%    G%t6v6	!	rH   )r  r  r  r   __classcell__)r  s   @r!   r  r  /  s     rH   r  )1
contextlibr4   r7   r1   r   r<   r   r3   r:   r	  	distutilsr   distutils.command.build_extr   distutils.corer   distutils.errorsr   r   r	   r
   distutils.extensionr   distutils.testsr   distutils.tests.supportr   r   r   ior   jaraco.pathr  r   r   testr   compatr   r%   fixturer"   contextmanagerr+   r'   r  r  rD   r  r  rH   r!   <module>r.     s      	  	   
    1 '  * 7 
      ) ) )*    ( )SD> SD *SDl< rH   