ó
    ¶'Ôis'  ã                  óö   • S SK Jr  S SKrS SKrS SKJr  S SKrS SKJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJr  S	S
KJr  S	SKJr  S SKJs  Jr  S SKJr  S\R8                  ;   r " S S5      r " S S5      rS r g)é    )ÚannotationsN)Úcache_from_source)Úpath)Ú	build_extÚget_abi3_suffix)ÚDistribution)ÚCompileError)Ú	Extensioné   )Úenvironment)ÚDALS)Úget_config_varÚ__pypy__c                  ó8   • \ rS rSrS rS rS rS rS rS r	Sr
g	)
ÚTestBuildExté   c                ó¼   • [        5       n[        U5      nSUR                  S'   UR                  S5      n[        R                  R                  US5      nX4:X  d   eg)ze
Setuptools needs to give back the same
result as distutils, even if the fullname
is not in ext_map.
Ú zfoo/barÚfooN)r   r   Úext_mapÚget_ext_filenameÚorig)ÚselfÚdistÚcmdÚresÚwanteds        Ú^/var/www/surfInsights/venv3-11/lib/python3.13/site-packages/setuptools/tests/test_build_ext.pyÚtest_get_ext_filenameÚ"TestBuildExt.test_get_ext_filename   sR   € ô ‹~ˆÜ˜‹oˆØ!#ˆ�‰�IÑØ×"Ñ" 5Ó)ˆÜ—‘×0Ñ0°°eÓ<ˆØ‹}Ð‰}ó    c                ó°  • [        [        5       5        [        SS/SS9n[        [	        U/S95      n[        U5      nUR                  5         SUR                  ;   d   eUR                  S5      n[        5       (       d"  UR                  [        S5      5      (       d   eg
[        R                  S:X  a  UR                  S5      (       d   eg
S	U;   d   eg
)ze
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Úwin32zeggs.pydÚabi3N)Úprintr   r
   r   Údictr   Úfinalize_optionsr   r   Úendswithr   ÚsysÚplatform)r   Ú	extensionr   r   r   s        r   Útest_abi3_filenameÚTestBuildExt.test_abi3_filename&   s·   € ô
 	ŒoÓÔ ä˜k¨H¨:ÀdÑKˆ	ÜœD¨i¨[Ñ9Ó:ˆÜ˜‹oˆØ×ÑÔØ˜cŸk™kÓ)Ð)Ð)Ø×"Ñ" ;Ó/ˆä× Ñ Ø—<‘<¤¨|Ó <×=Ñ=Ð=Ñ=Ü�\‰\˜WÓ$Ø—<‘< 
×+Ñ+Ð+Ñ+à˜S“=Ð ‘=r!   c                óŠ  • [        5       n[        U5      n[        SS/SS9=UR                  S'   nSUl        [
        (       d  UR                  S5      nOSn S[        R                  S'   UR                  S	5      nS
U:X  d   eUR                  S5      nXE:X  d   e [        R                  S	 g! [        R                  S	 f = f)zL
SETUPTOOLS_EXT_SUFFIX variable always overrides
default extension options.
Úfor_abi3zs.cTr%   Fzfor_abi3.test-suffixz.test-suffixÚSETUPTOOLS_EXT_SUFFIXÚnormalznormal.test-suffixN)	r   r   r
   r   Ú_links_to_dynamicÚIS_PYPYr   ÚosÚenviron)r   r   r   ÚextÚexpectr   s         r   Útest_ext_suffix_overrideÚ%TestBuildExt.test_ext_suffix_override;   sÆ   € ô
 ‹~ˆÜ˜‹oˆÜ(1ØØˆGàñ	)
ð 	
ˆ�‰�JÑ #ð !&ˆÔçŠwØ×)Ñ)¨*Ó5‰Fð ,ˆFð	4Ø2@ŒB�J‰JÐ.Ñ/Ø×&Ñ& xÓ0ˆCØ'¨3Ó.Ð.Ð.Ø×&Ñ& zÓ2ˆCØ“=Ð ‘=ä—
‘
Ð2Ñ3ø”—
‘
Ð2Ñ3ús   ÁAB/ Â/Cc                óÀ   • SSSS000SSS00S.n[        SS	/5      n[        S
S/5      n[        SS/5      n[        R                  " U5        [        SX#U/SS0S.5      $ )NÚmypkgÚsubpkgzext2.cr   Úext1zmain.c)Úsrczc-extensionsz
mypkg.ext1zc-extensions/ext1/main.czmypkg.subpkg.ext2zsrc/mypkg/subpkg/ext2.cÚext3zc-extension/ext3.cz%test%rE   )Úscript_namer(   Úpackage_dir)r
   r   Úbuildr   )r   ÚfilesrD   Úext2rF   s        r   Údist_with_exampleÚTestBuildExt.dist_with_example[   s‰   € à˜h¨°2¨Ð7Ð8Ø# h° ^Ð4ñ
ˆô
 ˜Ð(BÐ'CÓDˆÜÐ,Ð/HÐ.IÓJˆÜ˜Ð"6Ð!7Ó8ˆä�
Š
�5ÔÜØ#Ø ¨Ð-Ø ˜;ñ
ó ð 	r!   c           	     óZ  • UR                  SS5        UR                  SS5        U R                  5       nUR                  S5      nSUl        UR
                  " 5         UR                  R                  [        R                  S5      nUR                  " 5        Vs/ s H"  ofR                  [        R                  S5      PM$     nnUU S3U S3U S	3/:X  d   eUR                  " 5       0 :X  d   eUR                  S5        S
Ul        UR
                  " 5         UR                  " 5       R                  5        VV	s0 s HD  u  p‰UR                  [        R                  S5      U	R                  [        R                  S5      _MF     n
nn	U
U S3SU S3SU S	3S0:X  d   eg s  snf s  sn	nf )Nr7   ú.mp3ú&setuptools.command.build_ext.use_stubsFr   Ú/ú	/ext3.mp3ú/mypkg/ext1.mp3ú/mypkg/subpkg/ext2.mp3Túsrc/ext3.mp3úsrc/mypkg/ext1.mp3úsrc/mypkg/subpkg/ext2.mp3)ÚsetenvÚsetattrrL   Úget_command_objÚeditable_modeÚensure_finalizedÚ	build_libÚreplacer;   ÚsepÚget_outputsÚget_output_mappingÚreinitialize_commandÚitems)r   Ú
tmpdir_cwdÚmonkeypatchr   r   r]   ÚxÚoutputsÚkÚvÚmappings              r   Útest_get_outputsÚTestBuildExt.test_get_outputsl   s·  € Ø×ÑÐ2°FÔ;Ø×ÑÐDÀeÔLØ×%Ñ%Ó'ˆð ×(Ñ(¨Ó5ˆ	Ø"'ˆ	ÔØ×"Ò"Ô$Ø×'Ñ'×/Ñ/´·±¸Ó<ˆ	Ø3<×3HÒ3HÔ3JÓKÒ3J¨a—9‘9œRŸV™V SÖ)Ñ3JˆÐKØØˆk˜Ð#Øˆk˜Ð)ØˆkÐ/Ð0ð
ó 
ð 	
ð 
ð
 ×+Ò+Ó-°Ó3Ð3Ð3ð 	×!Ñ! +Ô.Ø"&ˆ	ÔØ×"Ò"Ô$ð "×4Ò4Ó6×<Ñ<Ô>ô
â>‘�ð �I‰I”b—f‘f˜cÓ" A§I¡I¬b¯f©f°cÓ$:Ò:Ù>ð 	ñ 
ð Øˆk˜Ð# ^Øˆk˜Ð)Ð+?ØˆkÐ/Ð0Ð2Mð
ó 
ð 	
ñ 
ùò! Lùó
s   Â)F"Ä<AF'c                óš  • UR                  SS5        UR                  SS5        U R                  5       nUR                  S5      nSUl        UR
                  " 5         UR                   H  nUR                  USS5        M     UR                  R                  [        R                  S5      nUR                  " 5       R                  5        VVs0 s HD  u  pxUR                  [        R                  S5      UR                  [        R                  S5      _MF     n	nnS n
U	U
" U S	35      U
" S
5      U S3SU
" U S35      U
" S5      U S3SU
" U S35      U
" S5      U S3S0:X  d   eU S3U	;  d   eU S3U	;  d   eU
" U S35      nX¹;   d   eUR                  U S35      (       d   eUR                  S5      (       d   eg s  snnf )Nr7   rO   rP   Tr   Ú_needs_stubrQ   c                óT   • [        U 5      R                  [        R                  S5      $ )zDMake it possible to do comparisons and tests in a OS-independent wayrQ   )Ú_compiled_file_namer^   r;   r_   )Úfiles    r   ÚCÚ9TestBuildExt.test_get_output_mapping_with_stub.<locals>.Cž   s   € ä& tÓ,×4Ñ4´R·V±V¸SÓAÐAr!   z/ext3.pyzsrc/ext3.pyrR   rU   z/mypkg/ext1.pyzsrc/mypkg/ext1.pyrS   rV   z/mypkg/subpkg/ext2.pyzsrc/mypkg/subpkg/ext2.pyrT   rW   z/mypkg/__pycache__/ext1z.pyc)rX   rY   rL   rZ   r[   r\   Ú
extensionsr]   r^   r;   r_   ra   rc   Ú
startswithr/   )r   rd   re   r   r   r=   r]   rh   ri   rj   rr   Úexample_stubs               r   Ú!test_get_output_mapping_with_stubÚ.TestBuildExt.test_get_output_mapping_with_stubŒ   s  € Ø×ÑÐ2°FÔ;Ø×ÑÐDÀdÔKØ×%Ñ%Ó'ˆð ×(Ñ(¨Ó5ˆ	Ø"&ˆ	ÔØ×"Ò"Ô$Ø×'Ô'ˆCØ×Ñ  ]°DÖ9ñ (ð ×'Ñ'×/Ñ/´·±¸Ó<ˆ	ð "×4Ò4Ó6×<Ñ<Ô>ô
â>‘�ð �I‰I”b—f‘f˜cÓ" A§I¡I¬b¯f©f°cÓ$:Ò:Ù>ð 	ñ 
ò
	Bð Ù��˜8Ð$Ó%¡q¨Ó'7Øˆk˜Ð# ^Ù��˜>Ð*Ó+©QÐ/BÓ-CØˆk˜Ð)Ð+?Ù��Ð0Ð1Ó2±AÐ6PÓ4QØˆkÐ/Ð0Ð2Mð
ó 
ð 	
ð 
ð �˜NÐ+°7Ó:Ð:Ð:Ø�Ð1Ð2¸'ÓAÐAÐAñ ˜I˜; nÐ5Ó6ˆØÓ&Ð&Ð&Ø×&Ñ&¨)¨Ð4KÐ'L×MÑMÐMÐMØ×$Ñ$ V×,Ñ,Ð,Ñ,ùó5
s   ÃAG© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r3   r?   rL   rk   rw   Ú__static_attributes__ry   r!   r   r   r      s"   † òò!ò*4ò@ò"
õ@'-r!   r   c                  ó0   • \ rS rSrSS jrS rS rS rSrg)	ÚTestBuildExtInplaceé¶   c                ó   • S0 0 S.S.n[         R                  " U5        [        SS/US9n[        [	        U/S95      nSUl        [        U5      n[        U5      R                  " SS	S
S.UD6  UR                  5         U$ )Nz#include missingheader.h
)ÚlibÚtmp)r$   z.buildr#   r$   )Úoptionalr'   úsetup.pyz
.build/libz
.build/tmp)r]   Ú
build_tempry   )
r   rI   r
   r   r-   rG   r   ÚvarsÚupdater\   )r   r…   ÚoptsrJ   r2   r   r   s          r   Úget_build_ext_cmdÚ%TestBuildExtInplace.get_build_ext_cmd·   s�   € à2Ø ¨Ñ,ñ=
ˆô 	�
Š
�5ÔÜ˜k¨H¨:ÀÑIˆ	ÜœD¨i¨[Ñ9Ó:ˆØ%ˆÔÜ˜‹oˆÜˆS‹	×ÒÐQ <¸LÑQÈDÒQØ×ÑÔØˆ
r!   c                ó¦   • UR                  5       nUR                  R                  5       UR                  R                  5       -   UR                  -   $ )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_messagesÚ$TestBuildExtInplace.get_log_messagesÅ   s@   € ð ×ÑÓ!ˆØ�w‰w×!Ñ!Ó# c§g¡g×&8Ñ&8Ó&:Ñ:¸V¿_¹_ÑLÐLr!   c                ó”   • U R                  SSS9nUR                  5         [        S U R                  X#5       5       5      (       d   eg)zj
If optional extensions fail to build, setuptools should show the error
in the logs but not fail to build
T©r…   Úinplacec              3  ó&   #   • U  H  nS v •  M	     g7f)z0build_ext: building extension "spam.eggs" failedNry   )Ú.0Úmsgs     r   Ú	<genexpr>Ú4TestBuildExtInplace.test_optional.<locals>.<genexpr>Õ   s   é € ð 
â<�õ ?Ú<ùs   ‚N)r‹   ÚrunÚanyr–   )r   rd   r“   r”   r   s        r   Útest_optionalÚ!TestBuildExtInplace.test_optionalÎ   sQ   € ð
 ×$Ñ$¨d¸DÐ$ÐAˆØ�‰Œ	Üñ 
à×,Ñ,¨VÔ<ó
÷ 
ñ 
ð 	
ñ 
r!   c                ó¬   • U R                  SSS9n[        R                  " [        5         UR	                  5         S S S 5        g ! , (       d  f       g = f)NFTr™   )r‹   ÚpytestÚraisesr	   r    )r   rd   r   s      r   Útest_non_optionalÚ%TestBuildExtInplace.test_non_optionalÛ   s8   € à×$Ñ$¨e¸TÐ$ÐBˆÜ�]Š]œ<Õ(Ø�G‰GŒI÷ )×(Ö(ús   «AÁ
Ary   N)r…   ÚboolÚreturnr   )	rz   r{   r|   r}   r‹   r–   r¢   r§   r~   ry   r!   r   r€   r€   ¶   s   † ôòMò

õr!   r€   c                óÎ   • [        S5      [        S5      [        S5      S.n[        R                  " U5        [        R                  " S/SS9u  nu  p4US:X  d   S	U S
U 35       eg )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†   zfoo.cz	setup.cfgrI   )r   é   )r   Údata_streamr   z	
STDOUT:
z	
STDERR:
)r   r   rI   r   Úrun_setup_py)rd   rJ   ÚcodeÚstdoutÚstderrs        r   Útest_build_ext_config_handlingr²   â   s…   € äðó	
ô ð(ó*
ôV ðó
ñm<€Eôz 	‡J‚JˆuÔÜ(×5Ò5ØˆIØñÑ€DÑ
ˆ6ð �1‹9Ð?˜ F 8¨;°v°hÐ?Ó?‰9r!   )!Ú
__future__r   r;   r0   Úimportlib.utilr   rp   r¥   Újaracor   Úsetuptools.command.build_extr   r   Úsetuptools.distr   Úsetuptools.errorsr	   Úsetuptools.extensionr
   r   r   Útextwrapr   Údistutils.command.build_extÚcommandr   Údistutils.sysconfigr   Úbuiltin_module_namesr:   r   r€   r²   ry   r!   r   Ú<module>r¿      sa   ðÝ "ã 	Û 
Ý Cã Ý ç CÝ (Ý *Ý *å Ý ç *Ð *Ý .à
˜×0Ñ0Ñ
0€÷[-ñ [-÷|)ñ )óXC@r!   