§ w<ˆjs'ãóø—ddlmZddlZddlZddlmZddlZddlm Z ddl m Z m Z ddl mZddlmZddlmZd d lmZd d lmZddlmcm Zdd lmZd ejvZGd„d¦«ZGd„d¦«Zd„Z dS)é)Ú annotationsN)Úcache_from_source)Úpath)Ú build_extÚget_abi3_suffix)Ú Distribution)Ú CompileError)Ú Extensioné)Ú environment)ÚDALS)Úget_config_varÚ__pypy__có2—eZdZd„Zd„Zd„Zd„Zd„Zd„ZdS)Ú TestBuildExtcóΗt¦«}t|¦«}d|jd<| d¦«}tj |d¦«}||ksJ‚dS)z… Setuptools needs to give back the same result as distutils, even if the fullname is not in ext_map. Úzfoo/barÚfooN)rrÚext_mapÚget_ext_filenameÚorig)ÚselfÚdistÚcmdÚresÚwanteds úq/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/setuptools/tests/test_build_ext.pyÚtest_get_ext_filenamez"TestBuildExt.test_get_ext_filenames_€õ ‰~Œ~ˆÝ˜‰oŒoˆØ!#ˆŒ �IÑØ×"Ò" 5Ñ)Ô)ˆÝ”×0Ò0°°eÑ<Ô<ˆØ�fŠ}ˆ}ˆ}ˆ}ˆ}ˆ}ócóê—tt¦«¦«tddgd¬¦«}tt |g¬¦«¦«}t |¦«}| ¦«d|jvsJ‚| d¦«}t¦«s&|  td¦«¦«sJ‚d Stj dkr|  d¦«sJ‚d Sd |vsJ‚d S) z} Filename needs to be loadable by several versions of Python 3 if 'is_abi3' is truthy on Extension() ú spam.eggsúeggs.cT©Úpy_limited_api©Ú ext_modulesÚ EXT_SUFFIXÚwin32zeggs.pydÚabi3N) Úprintrr rÚdictrÚfinalize_optionsrrÚendswithrÚsysÚplatform)rÚ extensionrrrs rÚtest_abi3_filenamezTestBuildExt.test_abi3_filename&sû€õ �oÑÔÑ Ô Ð å˜k¨H¨:ÀdÐKÑKÔKˆ Ý�D¨i¨[Ð9Ñ9Ô9Ñ:Ô:ˆÝ˜‰oŒoˆØ ×ÒÑÔÐØ˜cœkÐ)Ð)Ð)Ð)Ø×"Ò" ;Ñ/Ô/ˆåÑ Ô ð !Ø—<’<¥¨|Ñ <Ô <Ñ=Ô=Ð =Ð =Ð=Ð =Ð =Ý Œ\˜WÒ $Ð $Ø—<’<  Ñ+Ô+Ð +Ð +Ð+Ð +Ð +à˜S�=�=�=�=�=�=rcóš—t¦«}t|¦«}tddgd¬¦«x|jd<}d|_t s| d¦«}nd} dtjd<| d ¦«}d |ksJ‚| d¦«}||ksJ‚ tjd=d S#tjd=wxYw) zd SETUPTOOLS_EXT_SUFFIX variable always overrides default extension options. Úfor_abi3zs.cTr#Fzfor_abi3.test-suffixz .test-suffixÚSETUPTOOLS_EXT_SUFFIXÚnormalznormal.test-suffixN) rrr rÚ_links_to_dynamicÚIS_PYPYrÚosÚenviron)rrrÚextÚexpectrs rÚtest_ext_suffix_overridez%TestBuildExt.test_ext_suffix_override;só€õ ‰~Œ~ˆÝ˜‰oŒoˆÝ(1Ø Ø ˆGàð ) ñ) ô) 𠈌 �JÑ #ð!&ˆÔåð ,Ø×)Ò)¨*Ñ5Ô5ˆFˆFð,ˆFð 4Ø2@�BŒJÐ.Ñ /Ø×&Ò& xÑ0Ô0ˆCØ'¨3Ò.Ð.Ð.Ð.Ø×&Ò& zÑ2Ô2ˆCؘS’=�=�=�=�=å” Ð2Ð3Ð3Ð3ø•” Ð2Ð3Ð 3Ð 3Ð 3Ð 3s Á"A B;Â;C cóÞ—ddddiiidddiidœ}tdd g¦«}td d g¦«}td d g¦«}tj|¦«td|||gddidœ¦«S)NÚmypkgÚsubpkgzext2.crÚext1zmain.c)Úsrcz c-extensionsz mypkg.ext1zc-extensions/ext1/main.czmypkg.subpkg.ext2zsrc/mypkg/subpkg/ext2.cÚext3zc-extension/ext3.cz%test%rA)Ú script_namer&Ú package_dir)r rÚbuildr)rÚfilesr@Úext2rBs rÚdist_with_examplezTestBuildExt.dist_with_example[s§€à˜h¨°2¨Ð7Ð8Ø# h° ^Ð4ð ð ˆõ ˜Ð(BÐ'CÑDÔDˆÝÐ,Ð/HÐ.IÑJÔJˆÝ˜Ð"6Ð!7Ñ8Ô8ˆå Œ �5ÑÔÐÝØ#Ø  $¨Ð-Ø ˜;ð ð ñ ô ð rcó„—| dd¦«| dd¦«| ¦«}| d¦«}d|_|j¦«|j tj d¦«}d„|j ¦«D¦«}||›d�|›d �|›d �gksJ‚|j ¦«iksJ‚|  d¦«d |_|j¦«d „|j ¦«  ¦«D¦«}||›d�d |›d �d|›d �diksJ‚dS)Nr4ú.mp3ú&setuptools.command.build_ext.use_stubsFrú/cóN—g|]"}| tjd¦«‘Œ#S©rL©Úreplacer8Úsep)Ú.0Úxs rú z1TestBuildExt.test_get_outputs..vs(€ÐKÐKÐK¨a�1—9’9�RœV SÑ)Ô)ÐKÐKÐKrú /ext3.mp3ú/mypkg/ext1.mp3ú/mypkg/subpkg/ext2.mp3Tcó’—i|]D\}}| tjd¦«| tjd¦«“ŒESrNrO©rRÚkÚvs rú z1TestBuildExt.test_get_outputs..‚óN€ð ð ð á��1ð �IŠI•b”f˜cÑ "Ô " A§I¢I­b¬f°cÑ$:Ô$:ð ð ð rú src/ext3.mp3úsrc/mypkg/ext1.mp3úsrc/mypkg/subpkg/ext2.mp3)ÚsetenvÚsetattrrHÚget_command_objÚ editable_modeÚensure_finalizedÚ build_librPr8rQÚ get_outputsÚget_output_mappingÚreinitialize_commandÚitems)rÚ tmpdir_cwdÚ monkeypatchrrrfÚoutputsÚmappings rÚtest_get_outputszTestBuildExt.test_get_outputsls¾€Ø×ÒÐ2°FÑ;Ô;Ð;Ø×ÒÐDÀeÑLÔLÐLØ×%Ò%Ñ'Ô'ˆð×(Ò(¨Ñ5Ô5ˆ Ø"'ˆ ÔØ"ˆ Ô"Ñ$Ô$Ð$ØÔ'×/Ò/µ´¸Ñ<Ô<ˆ ØKÐKÐ3H°9Ô3HÑ3JÔ3JÐKÑKÔKˆØØÐ #Ð #Ð #ØÐ )Ð )Ð )ØÐ 0Ð 0Ð 0ð ò ð ð ð ð ,ˆyÔ+Ñ-Ô-°Ò3Ð3Ð3Ð3ð ×!Ò! +Ñ.Ô.Ð.Ø"&ˆ ÔØ"ˆ Ô"Ñ$Ô$Ð$ð ð à4˜ Ô4Ñ6Ô6×<Ò<Ñ>Ô>ð ñ ô ˆðØÐ #Ð #Ð # ^ØÐ )Ð )Ð )Ð+?ØÐ 0Ð 0Ð 0Ð2Mð ò ð ð ð ð ð rc ó*—| dd¦«| dd¦«| ¦«}| d¦«}d|_|j¦«|jD]}| |dd¦«Œ|j tj d¦«}d„|j ¦«  ¦«D¦«}d „}|||›d �¦«|d ¦«|›d �d ||›d�¦«|d¦«|›d�d||›d�¦«|d¦«|›d�diksJ‚|›d�|vsJ‚|›d�|vsJ‚||›d�¦«} | |vsJ‚|   |›d�¦«sJ‚|  d¦«sJ‚dS)Nr4rJrKTrÚ _needs_stubrLcó’—i|]D\}}| tjd¦«| tjd¦«“ŒESrNrOrYs rr\zBTestBuildExt.test_get_output_mapping_with_stub..™r]rcó\—t|¦« tjd¦«S)zDMake it possible to do comparisons and tests in a OS-independent wayrL)Ú_compiled_file_namerPr8rQ)Úfiles rÚCz9TestBuildExt.test_get_output_mapping_with_stub..Cžs"€å& tÑ,Ô,×4Ò4µR´V¸SÑAÔAÐ Arz/ext3.pyz src/ext3.pyrUr^z/mypkg/ext1.pyzsrc/mypkg/ext1.pyrVr_z/mypkg/subpkg/ext2.pyzsrc/mypkg/subpkg/ext2.pyrWr`z/mypkg/__pycache__/ext1z.pyc)rarbrHrcrdreÚ extensionsrfrPr8rQrhrjÚ startswithr-) rrkrlrrr:rfrnrvÚ example_stubs rÚ!test_get_output_mapping_with_stubz.TestBuildExt.test_get_output_mapping_with_stubŒsS€Ø×ÒÐ2°FÑ;Ô;Ð;Ø×ÒÐDÀdÑKÔKÐKØ×%Ò%Ñ'Ô'ˆð×(Ò(¨Ñ5Ô5ˆ Ø"&ˆ ÔØ"ˆ Ô"Ñ$Ô$Ð$ØÔ'ð :ð :ˆCØ × Ò   ]°DÑ 9Ô 9Ð 9Ð 9àÔ'×/Ò/µ´¸Ñ<Ô<ˆ ð ð à4˜ Ô4Ñ6Ô6×<Ò<Ñ>Ô>ð ñ ô ˆð  Bð Bð BðØ ˆA�Ð$Ð$Ð$Ñ %Ô % q q¨Ñ'7Ô'7ØÐ #Ð #Ð # ^Ø ˆA�Ð*Ð*Ð*Ñ +Ô +¨Q¨QÐ/BÑ-CÔ-CØÐ )Ð )Ð )Ð+?Ø ˆA�Ð1Ð1Ð1Ñ 2Ô 2°A°AÐ6PÑ4QÔ4QØÐ 0Ð 0Ð 0Ð2Mð  ò ð ð ð ðÐ+Ð+Ð+°7Ð:Ð:Ð:Ð:ØÐ2Ð2Ð2¸'ÐAÐAÐAÐAð�q˜IÐ5Ð5Ð5Ñ6Ô6ˆ ؘwÐ&Ð&Ð&Ð&Ø×&Ò&¨)Ð'LÐ'LÐ'LÑMÔMÐMÐMÐMØ×$Ò$ VÑ,Ô,Ð,Ð,Ð,Ð,Ð,rN) Ú__name__Ú __module__Ú __qualname__rr1r<rHrorz©rrrrsp€€€€€ð ð ð ð!ð!ð!ð*4ð4ð4ð@ ð ð ð" ð ð ð@'-ð'-ð'-ð'-ð'-rrcó(—eZdZd d„Zd„Zd„Zd„Zd S) ÚTestBuildExtInplaceÚoptionalÚboolÚreturnrc ó.—diidœdœ}tj|¦«tddg|¬¦«}tt |g¬¦«¦«}d|_t |¦«}t|¦«jd d d d œ|¤Ž|  ¦«|S) Nz#include missingheader.h )ÚlibÚtmp)r"z.buildr!r")r�r%úsetup.pyz .build/libz .build/tmp)rfÚ build_tempr~) rrEr rr+rCrÚvarsÚupdatere)rr�ÚoptsrFr0rrs rÚget_build_ext_cmdz%TestBuildExtInplace.get_build_ext_cmd·s®€à2Ø ¨Ð,Ð,ð= ð= ˆõ Œ �5ÑÔÐݘk¨H¨:ÀÐIÑIÔIˆ Ý�D¨i¨[Ð9Ñ9Ô9Ñ:Ô:ˆØ%ˆÔݘ‰oŒoˆØ�ˆS‰ Œ ÔÐQ <¸LÐQÐQÈDÐQÐQÐQØ ×ÒÑÔÐØˆ rcó —| ¦«}|j ¦«|j ¦«z|jzS)z½ Historically, distutils "logged" by printing to sys.std*. Later versions adopted the logging framework. Grab messages regardless of how they were captured. )Ú readouterrÚoutÚ splitlinesÚerrÚmessages)rÚcaplogÚcapsysÚstds rÚget_log_messagesz$TestBuildExtInplace.get_log_messagesÅsC€ð ×ÒÑ!Ô!ˆØŒw×!Ò!Ñ#Ô# c¤g×&8Ò&8Ñ&:Ô&:Ñ:¸V¼_ÑLÐLrcóº—| dd¬¦«}| ¦«td„| ||¦«D¦«¦«sJ‚dS)z‚ If optional extensions fail to build, setuptools should show the error in the logs but not fail to build T©r�Úinplacec3óK—|]}dV—ŒdS)z0build_ext: building extension "spam.eggs" failedNr~)rRÚmsgs rú z4TestBuildExtInplace.test_optional..Õs6èè€ð ð àð ?ð ð ð ð ð ð rN)rŒÚrunÚanyr–)rrkr“r”rs rÚ test_optionalz!TestBuildExtInplace.test_optionalÎs{€ð ×$Ò$¨d¸DÐ$ÑAÔAˆØ �Љ Œ ˆ Ýð ð à×,Ò,¨V°VÑ<Ô<ð ñ ô ñ ô ð ð ð ð ð rcóÀ—| dd¬¦«}tjt¦«5| ¦«ddd¦«dS#1swxYwYdS)NFTr˜)rŒÚpytestÚraisesr r�)rrkrs rÚtest_non_optionalz%TestBuildExtInplace.test_non_optionalÛs›€à×$Ò$¨e¸TÐ$ÑBÔBˆÝ Œ]�<Ñ (Ô (ð ð Ø �GŠG‰IŒIˆIð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s±AÁAÁAN)r�r‚rƒr)r{r|r}rŒr–rŸr£r~rrr€r€¶sX€€€€€ð ð ð ð ðMðMðMð  ð  ð  ðððððrr€cóî—td¦«td¦«td¦«dœ}tj|¦«tjdgd¬¦«\}\}}|dksJd |›d |›�¦«‚dS) NzÚ from setuptools import Extension, setup setup( name='foo', version='0.0.0', ext_modules=[Extension('foo', ['foo.c'])], ) aÜ #include "Python.h" #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "foo", NULL, 0, NULL, NULL, NULL, NULL, NULL }; #define INITERROR return NULL PyMODINIT_FUNC PyInit_foo(void) #else #define INITERROR return void initfoo(void) #endif { #if PY_MAJOR_VERSION >= 3 PyObject *module = PyModule_Create(&moduledef); #else PyObject *module = Py_InitModule("extension", NULL); #endif if (module == NULL) INITERROR; #if PY_MAJOR_VERSION >= 3 return module; #endif } zD [build] build_base = foo_build )r‡zfoo.cz setup.cfgrE)ré)rÚ data_streamrz STDOUT: z STDERR: )r rrEr Ú run_setup_py)rkrFÚcodeÚstdoutÚstderrs rÚtest_build_ext_config_handlingr«âs°€åð ñ  ô  õð( ñ* ô* õVð ñ ô ðm< ð< €Eõz „JˆuÑÔÐÝ(Ô5Ø ˆIØðñôÑ€DÑ ˆ6�6ð �1Š9ˆ9ˆ9Ð? FÐ?Ð?°vÐ?Ð?‰9Œ9ˆ9ˆ9ˆ9r)!Ú __future__rr8r.Úimportlib.utilrrtr¡ÚjaracorÚsetuptools.command.build_extrrÚsetuptools.distrÚsetuptools.errorsr Úsetuptools.extensionr rr Útextwrapr Údistutils.command.build_extÚcommandrÚdistutils.sysconfigrÚbuiltin_module_namesr7rr€r«r~rrúr¸sðØ"Ð"Ð"Ð"Ð"Ð"à € € € Ø € € € ØCÐCÐCÐCÐCÐCà € € € ØÐÐÐÐÐàCÐCÐCÐCÐCÐCÐCÐCØ(Ð(Ð(Ð(Ð(Ð(Ø*Ð*Ð*Ð*Ð*Ð*Ø*Ð*Ð*Ð*Ð*Ð*àÐÐÐÐÐØÐÐÐÐÐà*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø.Ð.Ð.Ð.Ð.Ð.à ˜Ô0Ð 0€ð[-ð[-ð[-ð[-ð[-ñ[-ô[-ð[-ð|)ð)ð)ð)ð)ñ)ô)ð)ðXC@ðC@ðC@ðC@ðC@r