
    eP                     :   d dl Z d dlZd dlm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mZmZm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 da G d deeej                   Z! G d de!          Z"e#dk    r ej$                     dS dS )    N)StringIO)Distribution	build_ext)	sysconfig)TempdirManagerLoggingSilencercopy_xxmodule_cfixup_build_ext)	Extension)CompileErrorDistutilsPlatformErrorDistutilsSetupErrorUnknownFileError)support)	os_helper)assert_python_ok)threading_helperFc                       e Zd Z fdZ fdZd Z ej                    d             Zd Z	d Z
 ej                    d             Zd Zd	 Zd
 Zd Zd Z ej                    d             Zd Z ej        ej        dk    d          d             Z ej        ej        dk    d          d             Z ej        ej        dk    d          d             Zd Z xZS )BuildExtTestCasec                    t          t          |                                            |                                 | _        dd l}|j        | _        |                                 |_        ddlm	} |j        |_        t          t          j                  | _        |                     t          j        | j                             d S Nr   r   )superr   setUpmkdtemptmp_dirsite	USER_BASEold_user_basedistutils.commandr   dictr   _config_varsold_config_varsenterContextr   
change_cwdselfr   r   	__class__s      0  /home/conda/feedstock_root/build_artifacts/python-split_1708115622739/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/lib/python3.11/distutils/tests/test_build_ext.pyr   zBuildExtTestCase.setUp   s    %%++---||~~!^//////"n	#I$:;;
 	).t|<<=====    c                    dd l }| j        |_        ddlm} | j        |_        t
          j                                         t
          j                            | j	                   t          t          |                                            d S r   )r   r   r   r    r   r   r"   clearupdater#   r   r   tearDownr&   s      r)   r.   zBuildExtTestCase.tearDown.   s    +//////"0	$$&&&%%d&:;;;%%..00000r*   c                     t          |i |S Nr   )r'   argskwargss      r)   r   zBuildExtTestCase.build_ext7   s    $)&)))r*   c                 d   t          j                    }||                     d|z             t          | j                   t
          j                            | j        d          }t          d|g          }t          d|gd          }| j        |_
        |                     |          }t          |           | j        |_        | j        |_        t          j        }t           j        st%                      t          _        	 |                                 |                                 |t          _        n# |t          _        w xY wt*          r|                     dt*          z             nt-          |           j        at1          j        d| j        d          }t5          d|           d S )	NThe %r command is not foundz
xxmodule.cxxnameext_moduleszAlready tested in %sz
            tmp_dir = ai  

            import sys
            import unittest
            from test import support

            sys.path.insert(0, tmp_dir)
            import xx

            class Tests(unittest.TestCase):
                def test_xx(self):
                    for attr in ('error', 'foo', 'new', 'roj'):
                        self.assertTrue(hasattr(xx, attr))

                    self.assertEqual(xx.foo(2, 5), 7)
                    self.assertEqual(xx.foo(13,15), 28)
                    self.assertEqual(xx.new().demo(), None)
                    if support.HAVE_DOCSTRINGS:
                        doc = 'This is a template module just for instruction.'
                        self.assertEqual(xx.__doc__, doc)
                    self.assertIsInstance(xx.Null(), xx.Null)
                    self.assertIsInstance(xx.Str(), xx.Str)


            unittest.main()
        z-c)r   missing_compiler_executableskipTestr
   r   ospathjoinr   r   package_dirr   r   	build_lib
build_tempsysstdoutverboser   ensure_finalizedrunALREADY_TESTEDtype__name__textwrapdedentr   )r'   cmdxx_cxx_extdist
old_stdoutcodes          r)   test_build_extzBuildExtTestCase.test_build_ext:   s   133?MM7#=>>>%%%w||DL,774$((T6(CCDD<nnT""Z
 	$!CJ	$  """GGIII#CJJCJ#### 	1MM0>ABBBB!$ZZ0N  |       6 	t$$$$$s   (D9 9Ec                    t          ddi          }|                     |          }t          j        }dt          _        ddlm} |                    d          }d|d<   	 |                                 |t          _        ||d= n"||d<   n# |t          _        ||d= n||d<   w xY w|                     t          |j
                  d           d S )Nr7   r5   sunosr   )r"   Py_ENABLE_SHARED   )r   r   rA   platformdistutils.sysconfigr"   getrD   assertGreaterlenlibrary_dirs)r'   rN   rK   oldr"   old_vars         r)   test_solaris_enable_sharedz+BuildExtTestCase.test_solaris_enable_sharedv   s    VTN++nnT""l555555""#566+,'(	;  """CL !3443:/00	 CL !3443:/0:::: 	3s/00!44444s    B B%c                 d   dd l }t          ddi          }|                     |          }d |j        D             }|                     d|           d|_        t          j                            |j	        d          }t          j                            |j	        d          }t          j
        |           t          j
        |           |                                 |                     ||j                   |                     ||j                   |                     ||j                   d S )	Nr   r7   r5   c                     g | ]\  }}}|	S  ra   ).0r7   shortlables       r)   
<listcomp>z3BuildExtTestCase.test_user_site.<locals>.<listcomp>   s+     % % %.D%4 % % %r*   userrU   libinclude)r   r   r   user_optionsassertInrf   r;   r<   r=   r   mkdirrD   r[   rpathinclude_dirs)r'   r   rN   rK   optionsrg   incls          r)   test_user_sitezBuildExtTestCase.test_user_site   s   VTN++nnT""% %#% % %fg&&&  gll4>511w||DNI66

 	 	c3+,,,c39%%%dC,-----r*   c                    t          ddgd          g}t          d|d          }|                     |          }|                                 |                     t
          t          f|j                   t          ddgd          g}t          d|d          }|                     |          }|                                 |                                 d S )NfooxxxFoptionalr5   r6   T)r   r   r   rD   assertRaisesr   r   rE   r'   modulesrN   rK   s       r)   test_optional_extensionz(BuildExtTestCase.test_optional_extension   s    
 UUGe<<<=T'BBCCnnT""+\:'	# 	# 	# UUGd;;;<T'BBCCnnT""					r*   c                 "   t          ddgd          g}t          d|d          }|                     |          }|                                 t	          j                    }|                    t          j        j	                  D ]}| 
                    ||j                   t	          j        d          }|                    t          j        j	                  D ]}| 
                    ||j                   |                     |          }d	|_        |                                 |                     |j        g d
           |                     |          }dt          j	        z  |_        |                                 | 
                    d|j                   | 
                    d|j                   |                     |          }dt          j	        z  |_        |                                 |                     |j        ddg           t          |          }d|_        |                                 |                     |j        g d           |                     |          }d|_        |                                 |                     |j        ddg           |                     |          }d|_        |                                 |                     |j        ddg           |                     |          }d |_        |                                 |                     |j        g            |                     |          }d|_        |                                 |                     |j        ddg           d S )Nrr   rs   Frt   r5   r6   rU   )plat_specificzmy_lib, other_lib lastlib)my_lib	other_liblastlibzmy_lib_dir%sother_lib_dir
my_lib_dirother_lib_dirzone%stwo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splitr;   r<   pathseprj   rm   	librariesassertEqualr[   rl   link_objectsdefineundef	swig_opts)r'   rx   rN   rK   
py_includepplat_py_includes          r)   test_finalize_optionsz&BuildExtTestCase.test_finalize_options   sP    UUGe<<<=T'BBCCnnT""-//
!!"'/22 	/ 	/AMM!S-....#2CCC &&rw77 	/ 	/AMM!S-.... nnT""3(J(J(JKKK nnT""6ClC$4555os'7888 nnT""+	UEN333 oo*)+B+B+BCCC nnT""
lL%ABBB nnT""	UEN333 nnT""+++nnT""c
33333r*   c                    t                      }|                     |          }|                                 |                     t          |j        d           ddg}|                     t          |j        |           dg}|                     t          |j        |           dg}|                     t          |j        |           ddgdddfg}|                    |           |d	         }|                     |t                     |                     |j	        d           | 
                    t          |d
                     ddgddddgdfg}|                     t          |j        |           ddg|d	         d         d<   |                    |           |                     |d	         j        dg           |                     |d	         j        dg           d S )Nrr   )barrr   r   )zfoo-bar )foo.barr   r   r   r   )sourcesr   somer   r   )r   r   3)r   r   r   macros)r   r   )r   rU   r   r   )r   r   r   rv   r   check_extensions_listassertIsInstancer   r   r   assertFalsehasattrundef_macrosdefine_macros)r'   rN   rK   extsexts        r)   test_check_extensions_listz+BuildExtTestCase.test_check_extensions_list  s   ~~nnT"" 	-3U	< 	< 	<
 &u--s/H$OOO
   -s/H$OOO   -s/H$OOO 5%*, , - .!!$'''1gc9---
 	...f--... 5/5)AC C D E-s/H$OOO *F3Q
8!!$'''a-u555a.=====r*   c                     t          ddgd          g}t          d|d          }|                     |          }|                                 |                     |                                dg           d S )Nrr   rs   Frt   r5   r6   )r   r   r   rD   r   get_source_filesrw   s       r)   test_get_source_filesz&BuildExtTestCase.test_get_source_files1  s}    UUGe<<<=T'BBCCnnT""--//%99999r*   c                 X   t          ddgd          t          ddgd          g}t          d|d          }|                     |          }|                                 |                     |                    |d	         j                  d
           |                     |                    |d         j                  d           |                     |                    |d	                   dg           |                     |                    |d                   dg           d S )Nrr   aaaFrt   u   fööuuur5   r6   r   zfoo(_d)?\..*rU   u   föö(_d)?\..*
PyInit_fooPyInitU_f_gkaa)	r   r   r   rD   assertRegexget_ext_filenamer7   r   get_export_symbolsrw   s       r)   test_unicode_module_namesz*BuildExtTestCase.test_unicode_module_names8  s   eeWu555gw777
 T'BBCCnnT""--gajo>>PPP--gajo>>@QRRR//
;;l^LLL//
;;>N=OPPPPPr*   c                     t                      }|                     |          }d|_        |                                 |                                 |                     |j        d           d S )Nunix)r   r   compilerrD   rE   r   )r'   rN   rK   s      r)   test_compiler_optionz%BuildExtTestCase.test_compiler_optionE  sb     ~~nnT""			v.....r*   c                 
   t          j                    }||                     d|z             |                                 }t          j                            |d          }|                     |d           t          d|gd          }t          d|gd          }| 
                    |          }t          |           |                                 |                     t          |                                          d	           t          j                            | j        d
          |_        t          j                            | j        d          |_        t          j                            |                                           }t	          j                    }t	          j        |           	 d	|_        |                                 |                                d         }t	          j        |           n# t	          j        |           w xY w|                     t          j                            |                     t5          j        d          }	|                     |                    |	                     t          j                            |          }
|                     |
|           d|_        d |_        |                                 |                                d         }|                     t          j                            |                     |                     |                    |	                     t          j                            |          }
|                     |
|j                   |                    d          }ddi|_         |!                    d          }t          j        "                    |          d         }|                     ||j                   d	|_        t          j                            |                                           }t	          j                    }t	          j        |           	 |!                    d          }t	          j        |           n# t	          j        |           w xY wt          j        "                    |          d         }t          j        "                    |          d         }|                     |d           d S )Nr4   zfoo.czvoid PyInit_foo(void) {}
rr   Frt   r5   r6   rU   buildtemptr   
EXT_SUFFIXbuild_pyr   r   )#r   r9   r:   r   r;   r<   r=   
write_filer   r   r   r   rD   r   rZ   get_outputsr   r?   r@   realpathgetcwdchdirinplacerE   
assertTrueexistsr   get_config_varendswithdirnamer   get_finalized_commandr>   get_ext_fullpathr   )r'   rK   r   c_filer   rN   other_tmp_dirold_wdso_file
ext_suffixso_dirr   r<   lastdirs                 r)   test_get_outputsz!BuildExtTestCase.test_get_outputsP  s   133?MM7#=>>>,,..gw// <===x%888T-0E3 3 4 4nnT""S__..//333T\7;;dlG<< ((88
	CKGGIIIoo''*GHVBHVw//000-l;;
((44555))///			//##A&w//000((44555))/// ,,Z88 "E{##E**w}}T""1%s}--- ((88
	''..DHVBHVw}}T""1%'--%%b)%(((((s   85H H!R R!c                    t          j        d          }t                      }|                     |          }d|_        ddi|j        _        ddg|j        _        t          j	                    }t          j
                            |ddd|z             }|                    d          }|                     ||           d	|_        t          j
                            |d
          |_        t          j
                            |d
dd|z             }|                    d          }|                     ||           |                    d          }i |_        ddg|j        _        |                    d          }t          j
                            |d
ddd|z             }|                     ||           d|_        |                    d          }t          j
                            |ddd|z             }|                     ||           d S )Nr   rU   r   srclxmlz	lxml.htmletreez
lxml.etreer   tmpdirr   twistedztwisted.runner.portmaprunnerportmap)r   r   r   r   r   distributionr>   packagesr;   r   r<   r=   r   r   r?   r   )r'   r   rN   rK   curdirwantedr<   r   s           r)   test_ext_fullpathz"BuildExtTestCase.test_ext_fullpath  s   &|44
 ~~nnT""(*E{$%+[$9!feVWs]CC##L11&&& VX66fh#FF##L11&&& ,,Z88!%.0H$I!##$<==fh	8'#o/ /&&& ##$<==fi9s?KK&&&&&r*   darwinztest only relevant for MacOSXc                 2    |                      dd            d S )Nz==)_try_compile_deployment_targetr'   s    r)   test_deployment_target_defaultz/BuildExtTestCase.test_deployment_target_default  s     
 	++D$77777r*   c                 J    |                      t          | j        dd           d S )N>z10.1)rv   r   r   r   s    r)   test_deployment_target_too_lowz/BuildExtTestCase.test_deployment_target_too_low  s3     	0/f	> 	> 	> 	> 	>r*   c                     t          j        d          }|rfd |                    d          D             }|dxx         dz  cc<   d                    d |D                       }|                     d|           d S d S )NMACOSX_DEPLOYMENT_TARGETc                 ,    g | ]}t          |          S ra   )int)rb   xs     r)   re   zEBuildExtTestCase.test_deployment_target_higher_ok.<locals>.<listcomp>  s    >>>AQ>>>r*   .r   rU   c              3   4   K   | ]}t          |          V  d S r0   )str)rb   is     r)   	<genexpr>zDBuildExtTestCase.test_deployment_target_higher_ok.<locals>.<genexpr>  s(       ; ;AQ ; ; ; ; ; ;r*   <)r   r   r   r=   r   )r'   	deptargets     r)    test_deployment_target_higher_okz1BuildExtTestCase.test_deployment_target_higher_ok  s    
 ,-GHH	 	@>>)=)=>>>IbMMMQMMM ; ; ; ; ;;;I//Y?????	@ 	@r*   c                    t           j        }|                                t           _        |                     t          t           d|           |-t           j                            d          rt           j        d= n|t           j        d<   t           j                            | j        d          }t          |d          5 }|
                    t          j        d|z                       d d d            n# 1 swxY w Y   t          j        d          }t          t!          t"          |                    d          dd                             }|d d         d	k     rd
|z  }nt'          |          dk    rd|z  }nd|z  }t)          d|gd|g          }t+          d|gd          }| j        |_        |                     |          }| j        |_        | j        |_        	 t4          j        }	t8          j        st=                      t4          _        	 |                                 |                                  |	t4          _        d S # |	t4          _        w xY w# tB          $ r | "                    d           Y d S w xY w)Nenvironr   zdeptargetmodule.cwz                #include <AvailabilityMacros.h>

                int dummy;

                #if TARGET %s MAC_OS_X_VERSION_MIN_REQUIRED
                #else
                #error "Unexpected target"
                #endif

            r   r      )
   r   z	%02d%01d0z
%02d%02d00z%02d0000r   z	-DTARGET=)extra_compile_argsr6   z*Wrong deployment target during compilation)#r;   r   copy
addCleanupsetattrrX   r<   r=   r   openwriterI   rJ   r   r   tuplemapr   r   rZ   r   r   r>   r   r?   r@   rA   rB   r   rC   r   rD   rE   r   fail)
r'   operatortargetorig_environdeptarget_cfpdeptarget_extrN   rK   rO   s
             r)   r   z/BuildExtTestCase._try_compile_deployment_target  s   z!&&((
Y===>z~~899 ;J9:5;BJ12gll4<1DEE+s## 	rHHX_ 
& 
& 
 
 
 
 
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )*DEEs3S 1 1!A# 67788 "1":   6)FF 6{{a%. $f,!MM/5v 78
 
 

 )?
 
    <nnT""	DJ? (%ZZ
($$&&&			'


Z
'''' 	D 	D 	DIIBCCCCCC	Ds<    +C77C;>C;)0I! (I I! II! !JJ)rH   
__module____qualname__r   r.   r   r   requires_subprocessrQ   r^   rp   r   requires_working_threadingry   r   r   r   r   r   r   r   unittest
skipUnlessrA   rV   r   r   r   r   __classcell__r(   s   @r)   r   r      s       > > > > > 1 1 1 1 1* * * !W ""9% 9% #"9%v5 5 5*. . .8 1022  32"F4 F4 F4P.> .> .>`: : :Q Q Q	/ 	/ 	/ !W ""@) @) #"@)D$' $' $'N X13RSS8 8 TS8 X13RSS> > TS> X13RSS
@ 
@ TS
@DD DD DD DD DD DD DDr*   r   c                        e Zd Z fdZ xZS )ParallelBuildExtTestCasec                 H     t                      j        |i |}d|_        |S )NT)r   r   parallel)r'   r1   r2   r   r(   s       r)   r   z"ParallelBuildExtTestCase.build_ext  s,    %EGG%t6v66	!	r*   )rH   r  r  r   r  r  s   @r)   r  r    s8                r*   r  __main__)%rA   r;   ior   rI   distutils.corer   distutils.command.build_extr   	distutilsr   distutils.tests.supportr   r	   r
   r   distutils.extensionr   distutils.errorsr   r   r   r   r
  testr   test.supportr   test.support.script_helperr   r   rF   TestCaser   r  rH   mainra   r*   r)   <module>r     s   



 				        ' ' ' ' ' ' 1 1 1 1 1 1      G G G G G G G G G G G G ) ) ) ) ) )                   " " " " " " 7 7 7 7 7 7 ) ) ) ) ) ) ~D ~D ~D ~D ~D~&(~D ~D ~DB    /    zHMOOOOO r*   