
    )VhX                        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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&jX                         d        Z-e j\                  d        Z/e j\                  d        Z0e&jb                  je                  d       G d de             Z3 G d de3      Z4y)    N)	sysconfig	build_ext)Distribution)CompileErrorDistutilsPlatformErrorDistutilsSetupErrorUnknownFileError)	Extension)missing_compiler_executable)TempdirManagercopy_xxmodule_cfixup_build_ext)StringIO)support   )py39c              #     K   | j                   }|j                         |_        t        j                  |j                        |_        ddlm} t        j                  }|j                         t        _	        t        j                  |_	        |j
                  5  d  d d d        |t        _	        ||_	        t        j                  dk(  rt        j                  d       y y # 1 sw Y   ExY ww)Nr   r   cygwinr   )instancemkdtemptmp_dirpathPathtmp_pathdistutils.commandr   site	USER_BASEsysplatformtimesleep)requestselfr   orig_user_bases       Z/home/dcms/DCMS/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
||x

1   s   BC-C!AC-!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_importr0   =   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.
    Windowsr   Ndeleteme)prefix)r    systemr   r*   r-   	importlibutil	find_specosr   basenameorigintempfiler   joinshutilcopy)modr   specfilename	trash_dirdests         r&   r,   r,   E   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ej
                  j                  ddg      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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_ext\   s    $)&))    copy_soFc                    t                t        | j                         t        j                  j                  | j                  d      }t        d|g      }t        j                  dk7  r|st        d|gdgdgdg      }nt        j                  dk(  rzt        j                  d      D ch c]!  }t        j                  j                  |      # }}t        |d	 
      }t        j                  |d   d       t        d|gdgdgdg      }t        d|gd      }| j                  |_        | j#                  |      }t%        |       | j                  |_        | j                  |_        t        j*                  }t,        j.                  st1               t        _        	 |j3                          |j5                          |t        _        t7        d| j                        5  | j9                  |       d d d        t        j                  dk(  r|rt        j:                  d       y y y c c}w # |t        _        w xY w# 1 sw Y   KxY w)Nz
xxmodule.cxxwin32/usr/libz)library_dirs	librariesruntime_library_dirslinuxz/usr/lib*/libz.so*c                     t        |       S r)   )len)lib_paths    r&   <lambda>z-TestBuildExt.test_build_ext.<locals>.<lambda>r   s
    s8} rJ   )keyz/tmp/libxx_z.so/tmpxx_zr.   ext_modules)r   r   r   r9   r   r=   r   r   r    globiglobrealpathsortedr>   copyfiler   package_dirr   r   	build_lib
build_tempstdoutr   verboser   ensure_finalizedrunr0   _test_xxunlink)	r$   rK   xx_cxx_extr.   libz_sodistcmd
old_stdouts	            r&   test_build_extzTestBuildExt.test_build_ext_   s   #%%ww||DLL,74$(<<7""F","e*4 (7;zzBV7W/3BGG$$T*  !.LM->?"F"(%h*0 T6(CD<<nnT"ZZ
!CJ	$  "GGI#CJ"46 	#MM'"	# <<7"wII'( (/"C8 $CJ	# 	#s   +&H(  H- !H=-H:=Ic                 B   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 t        j                  d
k(  rt        j                  dd|j                  gd      }dd l}|j!                  |       |j#                  d      D cg c]6  }d|v sd|v r,|j#                         d   dd j#                  d      D ]  }| 8 }}}| s|j!                  |       d|vrd|vsJ y d|v sJ y y c c}}w )Nr   )errorfoonewroj                  z/This is a template module just for instruction.rT   readelfz-dT)universal_newlines
RPATHRUNPATHr   rZ   :rO   z
/usr/lib64r[   )rM   hasattrrv   rw   demor   HAVE_DOCSTRINGS__doc__
isinstanceNullStrr   r    
subprocesscheck_output__file__pprintsplit)	rK   rM   attrdoc
so_headersr   linerpathrpathss	            r&   rk   zTestBuildExt._test_xx   s   2 	%D2t$$$	% vva|q   vvb"~###vvx}}&&&""CC::$$$"'')RWW---"&&(BFF+++<<7"#00D"++.4J MM*% ',,T2d?i4&7!ZZ\!_Qr288=	  F  f%!/L4NNN4N '''' #s   7;F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.   rM   sunosr   )_config_varsPy_ENABLE_SHAREDT)
r   r   r   r    distutils.sysconfigr   getri   rV   rQ   )r$   rp   rq   oldr   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.   rM   userTlibinclude)r   r   r   user_optionsr   r9   r   r=   r   mkdirri   rQ   r   include_dirs)
r$   r   rp   rq   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)Nrv   xxxFoptionalrM   r]   T)	r   r   r   ri   pytestraisesr
   r   rj   r$   modulesrp   rq   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 )Nrv   r   Fr   rM   r]   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_incr   r9   r   pathsepr   rR   rQ   r   link_objectsdefineundef	swig_opts)r$   r   rp   rq   
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
***rJ   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)Nrv   )barrv   r   )zfoo-bar )foo.barr   r   r   r   )sourcesrR   somer   r   )r   r   3)r   rR   r   macros)r   r   )r   r   r   r   )r   r   r   r   r   r	   check_extensions_listr   r   rR   r   undef_macrosdefine_macros)r$   rp   rq   extsexts        r&   test_check_extensions_listz'TestBuildExt.test_check_extensions_listC  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 )Nrv   r   Fr   rM   r]   )r   r   r   ri   get_source_filesr   s       r&   test_get_source_filesz"TestBuildExt.test_get_source_files  sW    UUGe<=T'BCnnT"##%%000rJ   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 )Nrv   aaaFr   u   fööuuurM   r]   zfoo(_d)?\..*r   u   föö(_d)?\..*r   
PyInit_fooPyInitU_f_1gaa)	r   r   r   ri   researchget_ext_filenamer.   get_export_symbolsr   s       r&   test_unicode_module_namesz&TestBuildExt.test_unicode_module_names  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GrJ   c                     t        ddg      t        ddg      g}t        d|d      }| j                  |      }|j                          |j	                  |d         dgk(  sJ |j	                  |d	         d
gk(  sJ y )Nzfoo.__init__r   u   föö.__init__r   rM   r]   r   r   r   r   )r   r   r   ri   r   r   s       r&   test_export_symbols__init__z(TestBuildExt.test_export_symbols__init__  s     nug.&0
 T'BCnnT"%%gaj1l^CCC%%gaj16F5GGGGrJ   c                     t               }| j                  |      }d|_        |j                          |j	                          |j                  dk(  sJ y )Nunix)r   r   compilerri   rj   )r$   rp   rq   s      r&   test_compiler_optionz!TestBuildExt.test_compiler_option  sG     ~nnT"	||v%%%rJ   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) {}
rv   Fr   rM   r]   r   buildtemptTr   
EXT_SUFFIXbuild_pyr   r   rZ   )r   r   r9   r   r=   
write_filer   r   r   r   ri   rV   get_outputsr   re   rf   ra   getcwdchdirinplacerj   existsr   get_config_varendswithdirnamer   get_finalized_commandrd   get_ext_fullpathr   )r$   r   c_filer   rp   rq   other_tmp_dirold_wdso_file
ext_suffixso_dirr   r   lastdirs                 r&   test_get_outputszTestBuildExt.test_get_outputs  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   distributionrd   packagesr9   r   r   r=   r   re   r   )r$   r   rp   rq   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~~rJ   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$7rJ   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.rZ   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	}nt        |      dk\  rd
}nd} |j                   | }t#        d| j                  dz  gd| g      }t%        d|gd      }| j&                  |_        | j+                  |      }| j&                  |_        | j&                  |_        	 t0        j2                  }t4        j6                  st9               t0        _        	 |j;                          |j=                          |t0        _        y # |t0        _        w xY w# t>        $ r | jA                  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   ry   )
   r(  z{:02}{:01}0z{:02}{:02}00z	{:02}0000r$  z	-DTARGET=)extra_compile_argsr]   z*Wrong deployment target during compilation)!r9   environr   jaracor   r   textwrapdedentr   r   r   tuplemapr#  r   rV   formatr   r   r   rd   r   re   rf   r   rg   r   rh   r   ri   rj   r   fail)r$   operatortargettmpldeptarget_extrp   rq   rr   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:  D 6{a% #f%!]]001"+F8 45

 [-QR<<nnT"	DJ??%Z
($$&	'
Z
 	DIIBC	Ds*   +3G  G ?G GG G87G8N)__name__
__module____qualname__r   r   markparametrizers   staticmethodrk   r   r   r   r   r   r   r   r   r   r  r  skipifusefixturesr  r  r&  r   rJ   r&   rF   rF   Z   s<   * [[Y01) 11)f "( "(J),(8 F+P:5x1HH	&= ~#J [[78[[Z(8 ) 98 [[78[[Z(= ) 9= [[78[[Z(
@ ) 9
@@DrJ   rF   c                        e Zd Z fdZ xZS )TestParallelBuildExtc                 4    t        |   |i |}d|_        |S )NT)superr   parallel)r$   rH   rI   r   	__class__s       r&   r   zTestParallelBuildExt.build_extq  s%    G%t6v6	!	rJ   )r6  r7  r8  r   __classcell__)rD  s   @r&   r@  r@  p  s     rJ   r@  )5
contextlibr_   r6   os.pathr9   r    r   r>   r   r   r   r<   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'   contextmanagerr0   r,   r9  r=  rF   r@  r>  rJ   r&   <module>rU     s         	    
     1 '  * 7 T T      )  0    ( )RD> RD *RDj< rJ   