a  zeP@sddlZddlZddlmZddlZddlmZddlmZddl m Z ddl m Z m Z mZmZddlmZddlmZmZmZmZddlZdd lmZdd lmZd aGd d d e e ejZGdddeZddZ e!dkre"e!dS)N)StringIO) Distribution build_ext) sysconfig)TempdirManagerLoggingSilencercopy_xxmodule_cfixup_build_ext) Extension) CompileErrorDistutilsPlatformErrorDistutilsSetupErrorUnknownFileError)support)assert_python_okFcseZdZfddZfddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZeejdkddd Zeejdkdd!d"Zeejdkdd#d$Zd%d&ZZS)'BuildExtTestCasecsptt|||_ddl}|j|_||_ddlm }|j|_t |j}| | |jddddSNrr)superrsetUpmkdtemptmp_dirsite USER_BASE old_user_basedistutils.commandrr change_cwd __enter__ addCleanup__exit__)selfrrr __class__R/opt/bitninja-python-dojo/embedded/lib/python3.9/distutils/tests/test_build_ext.pyrs    zBuildExtTestCase.setUpcs6ddl}|j|_ddlm}|j|_tt|dSr)rrrrrrrtearDown)r rrr!r#r$r%-s  zBuildExtTestCase.tearDowncOst|i|SNr)r argskwargsr#r#r$r4szBuildExtTestCase.build_extcCst}|dur|d|t|jtj|jd}td|g}t d|gd}|j|_ | |}t ||j|_ |j|_tj}tjstt_z||W|t_n|t_0tr|dtn t|jatd|jd}td|dS) NThe %r command is not foundz xxmodule.cxxnameZ ext_moduleszAlready 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)rmissing_compiler_executableskipTestr rospathjoinr r package_dirrr build_lib build_tempsysstdoutverboserensure_finalizedrunALREADY_TESTEDtype__name__textwrapdedentr)r cmdZxx_cZxx_extdist old_stdoutcoder#r#r$test_build_ext7s4      zBuildExtTestCase.test_build_extc Cstddi}||}tj}dt_ddlm}|d}d|d<z*|W|t_|durb|d=q||d<n |t_|dur|d=n||d<0|t |j ddS)Nr,r*Zsunosr) _config_varsZPy_ENABLE_SHARED) rrr5platformZdistutils.sysconfigrDgetr8Z assertGreaterlen library_dirs)r r@r?oldrDZold_varr#r#r$test_solaris_enable_sharedrs$       z+BuildExtTestCase.test_solaris_enable_sharedcCsddl}tddi}||}dd|jD}|d|d|_tj|j d}tj|j d }t |t || |||j |||j |||jdS) Nrr,r*cSsg|]\}}}|qSr#r#).0r,ZshortZlabler#r#r$ z3BuildExtTestCase.test_user_site..userrElibZinclude)rrrZ user_optionsassertInrOr/r0r1rmkdirr8rIrpath include_dirs)r rr@r?optionsrPZinclr#r#r$test_user_sites      zBuildExtTestCase.test_user_sitecCstddgddg}td|d}||}||ttf|jtddgddg}td|d}||}||dS)NfooxxxFZoptionalr*r+T)r rrr8 assertRaisesrr r9r modulesr@r?r#r#r$test_optional_extensions   z(BuildExtTestCase.test_optional_extensioncCstddgddg}td|d}||}|t}|tjj D]}| ||j qHtjdd}|tjj D]}| ||j qv||}d |_ || |j gd ||}d tj |_|| d |j| d |j||}dtj |_|| |jddgt|}d|_|| |jgd||}d|_|| |jddg||}d|_|| |jddg||}d|_|| |jg||}d|_|| |jddgdS)NrWrXFrYr*r+rE)Z plat_specificzmy_lib, other_lib lastlib)Zmy_libZ other_libZlastlibzmy_lib_dir%sother_lib_dirZ my_lib_dirZ other_lib_dirzone%stwoonetwoz one two,three)r^r_Zthreezone,two)r^1)r_r`z1 2r`2)r rrfinalize_optionsrZget_python_incsplitr/r0pathseprQrT libraries assertEqualrIrSZ link_objectsZdefineZundefZ swig_opts)r r\r@r?Z py_includepZplat_py_includer#r#r$test_finalize_optionssV           z&BuildExtTestCase.test_finalize_optionscCs0t}||}||t|jdddg}|t|j|dg}|t|j|dg}|t|j|ddgdddfg}|||d }||t||j d| t |d ddgddd dgd fg}|t|j|d dg|d dd<||||d j dg||d j d gdS)NrW)barrWri)zfoo-bar)foo.barrjrkrjri)sourcesresomerrm)r`ra3)rlrermmacros)r`ra)rnrErorn)rrrbrZrZcheck_extensions_listZassertIsInstancer rfreZ assertFalsehasattrZ undef_macrosZ define_macros)r r@r?Zextsextr#r#r$test_check_extensions_lists8      z+BuildExtTestCase.test_check_extensions_listcCsHtddgddg}td|d}||}|||dgdS)NrWrXFrYr*r+)r rrr8rfZget_source_filesr[r#r#r$test_get_source_files,s  z&BuildExtTestCase.test_get_source_filescCstddgddtddgddg}td|d}||}||||d jd |||d jd |||d d g|||d dgdS)NrWZaaaFrYufööZuuur*r+rz foo(_d)?\..*rEuföö(_d)?\..*Z PyInit_fooZPyInitU_f_gkaa) r rrr8Z assertRegexZget_ext_filenamer,rfZget_export_symbolsr[r#r#r$test_unicode_module_names3s z*BuildExtTestCase.test_unicode_module_namescCs8t}||}d|_||||jddS)NZunix)rrcompilerr8r9rf)r r@r?r#r#r$test_compiler_option@s  z%BuildExtTestCase.test_compiler_optionc Csdt}|dur|d||}tj|d}||dtd|gdd}t d|gd}| |}t || | t|d tj|jd |_tj|jd |_tj|}t}t|z(d |_||d }Wt|n t|0|tj|td } ||| tj|} | | |d |_d|_||d }|tj|||| tj|} | | |j|d} ddi| _ |!d} tj"| d } | | |jd |_tj|}t}t|z|!d} Wt|n t|0tj"| d } tj"| d} | | ddS)Nr)zfoo.czvoid PyInit_foo(void) {} rWFrYr*r+rEZbuildZtemptr EXT_SUFFIXbuild_pyrjri)#rr-r.rr/r0r1Z write_filer rrr r8rfrHZ get_outputsrr3r4realpathgetcwdchdirinplacer9Z assertTrueexistsrget_config_varendswithdirnameruget_finalized_commandr2get_ext_fullpathrc)r r?rZc_filerqr@Z other_tmp_dirZold_wdZso_fileZ ext_suffixZso_dirrxr0Zlastdirr#r#r$test_get_outputsKsh             z!BuildExtTestCase.test_get_outputscCs.td}t}||}d|_ddi|j_ddg|j_t }tj |ddd|}| d}| ||d |_tj |d |_tj |d dd|}| d}| |||d }i|_d d g|j_| d }tj |d d dd|}| ||d|_| d }tj |d dd|}| ||dS)NrwrErjsrcZlxmlz lxml.htmlZetreez lxml.etreerZtmpdirrxZtwistedztwisted.runner.portmapZrunnerZportmap)rrrrr}Z distributionr2Zpackagesr/r{r0r1rrfr3r)r rqr@r?curdirZwantedr0rxr#r#r$test_ext_fullpaths6             z"BuildExtTestCase.test_ext_fullpathdarwinztest only relevant for MacOSXcCs|dddS)Nz==)_try_compile_deployment_targetr r#r#r$test_deployment_target_defaultsz/BuildExtTestCase.test_deployment_target_defaultcCs|t|jdddS)N>z10.1)rZr rrr#r#r$test_deployment_target_too_lowsz/BuildExtTestCase.test_deployment_target_too_lowcCsVtd}|rRdd|dD}|dd7<ddd|D}|d |dS) NMACOSX_DEPLOYMENT_TARGETcSsg|] }t|qSr#)int)rLxr#r#r$rMrNzEBuildExtTestCase.test_deployment_target_higher_ok...ryrEcss|]}t|VqdSr&)str)rLir#r#r$ rNzDBuildExtTestCase.test_deployment_target_higher_ok..<)rrrcr1r)r deptargetr#r#r$ test_deployment_target_higher_oks  z1BuildExtTestCase.test_deployment_target_higher_okc Cstj}|t_|ttd||dur>tjdrHtjd=n |tjd<tj|jd}t |d$}| t d|Wdn1s0Yt d}ttt|ddd}|ddd krd |}nt|dkrd |}nd |}td |gd|fgd}td |gd}|j|_||}|j|_|j|_z>tj} tjsVtt_z|| W| t_n| t_0Wnt!y|"dYn0dS)Nenvironrzdeptargetmodule.cwz #include int dummy; #if TARGET %s MAC_OS_X_VERSION_MIN_REQUIRED #else #error "Unexpected target" #endif rr) rz %02d%01d0z %02d%02d00z%02d0000rz -DTARGET=%s)Zextra_compile_argsr+z*Wrong deployment target during compilation)#r/rcopyrsetattrrGr0r1ropenwriter=r>rrtuplemaprrcrHr rr2rr3r4r5r6rr7rr8r9r Zfail) r operatortargetZ orig_environZ deptarget_cfpZ deptarget_extr@r?rAr#r#r$rsT      &       z/BuildExtTestCase._try_compile_deployment_target)r< __module__ __qualname__rr%rrCrKrVr]rhrrrsrtrvrrunittestZ skipUnlessr5rFrrrr __classcell__r#r#r!r$rs*  ;H0  B'   rcseZdZfddZZS)ParallelBuildExtTestCasecstj|i|}d|_|S)NT)rrZparallel)r r'r(rr!r#r$rsz"ParallelBuildExtTestCase.build_ext)r<rrrrr#r#r!r$rsrcCs,t}|tt|tt|Sr&)rZ TestSuiteZaddTestZ makeSuiterr)Zsuiter#r#r$ test_suitesr__main__)#r5r/iorr=Zdistutils.corerZdistutils.command.build_extrZ distutilsrZdistutils.tests.supportrrr r Zdistutils.extensionr Zdistutils.errorsr r rrrtestrZtest.support.script_helperrr:ZTestCaserrrr<Z run_unittestr#r#r#r$s2