Ë
    nûàgs'  ã                  óô   — d dl mZ 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mZ d dlmZ d dlmZ d dlmZ d	d
lmZ d	dlmZ d dlmc mZ d dlmZ dej8                  v Z G d„ d«      Z G d„ d«      Zd„ Z y)é    )ÚannotationsN)Úcache_from_source)Úpath)Ú	build_extÚget_abi3_suffix)ÚDistribution)ÚCompileError)Ú	Extensioné   )Úenvironment)ÚDALS)Úget_config_varÚ__pypy__c                  ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestBuildExtc                ó¼   — t        «       }t        |«      }d|j                  d<   |j                  d«      }t        j                  j                  |d«      }||k(  sJ ‚y)z…
        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/skyplay_api_hub/venv/lib/python3.12/site-packages/setuptools/tests/test_build_ext.pyÚtest_get_ext_filenamez"TestBuildExt.test_get_ext_filename   sT   € ô ‹~ˆÜ˜‹oˆØ!#ˆ�‰�IÑØ×"Ñ" 5Ó)ˆÜ—‘×0Ñ0°°eÓ<ˆØ�fŠ}Ð‰}ó    c                ó”  — t        t        «       «       t        ddgd¬«      }t        t	        |g¬«      «      }t        |«      }|j                  «        d|j                  v sJ ‚|j                  d«      }t        «       s|j                  t        d«      «      sJ ‚y
t        j                  dk(  r|j                  d«      sJ ‚y
d	|v sJ ‚y
)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Úwin32zeggs.pydÚabi3N)Úprintr   r
   r   Údictr   Úfinalize_optionsr   r   Úendswithr   ÚsysÚplatform)r   Ú	extensionr   r   r   s        r   Útest_abi3_filenamezTestBuildExt.test_abi3_filename&   s®   € ô
 	ŒoÓÔ ä˜k¨H¨:ÀdÔKˆ	ÜœD¨i¨[Ô9Ó:ˆÜ˜‹oˆØ×ÑÔØ˜cŸk™kÑ)Ð)Ð)Ø×"Ñ" ;Ó/ˆäÔ Ø—<‘<¤¨|Ó <Ô=Ð=Ñ=Ü�\‰\˜WÒ$Ø—<‘< 
Ô+Ð+Ñ+à˜S‘=Ð ‘=r   c                ó„  — t        «       }t        |«      }t        ddgd¬«      x|j                  d<   }d|_        t
        s|j                  d«      }nd}	 dt        j                  d<   |j                  d	«      }d
|k(  sJ ‚|j                  d«      }||k(  sJ ‚	 t        j                  d= y# t        j                  d= w xY w)zd
        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_overridez%TestBuildExt.test_ext_suffix_override;   sÆ   € ô
 ‹~ˆÜ˜‹oˆÜ(1ØØˆGàô	)
ð 	
ˆ�‰�JÑ #ð !&ˆÔåØ×)Ñ)¨*Ó5‰Fð ,ˆFð	4Ø2@ŒB�J‰JÐ.Ñ/Ø×&Ñ& xÓ0ˆCØ'¨3Ò.Ð.Ð.Ø×&Ñ& zÓ2ˆCØ˜S’=Ð ‘=ä—
‘
Ð2Ñ3ø”—
‘
Ð2Ñ3ús   ÁAB, Â,B?c                óÀ   — ddddiiidddiidœ}t        dd	g«      }t        d
dg«      }t        ddg«      }t        j                  |«       t        d|||gddidœ«      S )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%rA   )Úscript_namer&   Úpackage_dir)r
   r   Úbuildr   )r   Úfilesr@   Úext2rB   s        r   Údist_with_examplezTestBuildExt.dist_with_example[   s‹   € à˜h¨°2¨Ð7Ð8Ø# h° ^Ð4ñ
ˆô
 ˜Ð(BÐ'CÓDˆÜÐ,Ð/HÐ.IÓJˆÜ˜Ð"6Ð!7Ó8ˆä�
‰
�5ÔÜØ#Ø  $¨Ð-Ø ˜;ñ
ó ð 	r   c           	     óL  — |j                  dd«       |j                  dd«       | j                  «       }|j                  d«      }d|_         |j
                  «        |j                  j                  t        j                  d«      } |j                  «       D �cg c]"  }|j                  t        j                  d«      ‘Œ$ }}||› d�|› d�|› d	�gk(  sJ ‚ |j                  «       i k(  sJ ‚|j                  d«       d
|_         |j
                  «         |j                  «       j                  «       D ��	ci c]D  \  }}	|j                  t        j                  d«      |	j                  t        j                  d«      “ŒF }
}}	|
|› d�d|› d�d|› d	�dik(  sJ ‚y c c}w c c}	}w )Nr4   ú.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ÚsetattrrH   Úget_command_objÚeditable_modeÚensure_finalizedÚ	build_libÚreplacer8   ÚsepÚget_outputsÚget_output_mappingÚreinitialize_commandÚitems)r   Ú
tmpdir_cwdÚmonkeypatchr   r   rX   ÚxÚoutputsÚkÚvÚmappings              r   Útest_get_outputszTestBuildExt.test_get_outputsl   s¿  € Ø×ÑÐ2°FÔ;Ø×ÑÐDÀeÔLØ×%Ñ%Ó'ˆð ×(Ñ(¨Ó5ˆ	Ø"'ˆ	ÔØ"ˆ	×"Ñ"Ô$Ø×'Ñ'×/Ñ/´·±¸Ó<ˆ	Ø3H°9×3HÑ3HÓ3JÖK¨a�1—9‘9œRŸV™V SÕ)ÐKˆÐKØØˆk˜Ð#Øˆk˜Ð)ØˆkÐ/Ð0ð
ò 
ð 	
ð 
ð
 ,ˆy×+Ñ+Ó-°Ò3Ð3Ð3ð 	×!Ñ! +Ô.Ø"&ˆ	ÔØ"ˆ	×"Ñ"Ô$ð 5˜	×4Ñ4Ó6×<Ñ<Ó>÷
á��1ð �I‰I”b—f‘f˜cÓ" A§I¡I¬b¯f©f°cÓ$:Ñ:ð
ˆñ 
ð Øˆk˜Ð# ^Øˆk˜Ð)Ð+?ØˆkÐ/Ð0Ð2Mð
ò 
ð 	
ñ 
ùò! Lùó
s   Â'FÄ8A	F c                ór  — |j                  dd«       |j                  dd«       | j                  «       }|j                  d«      }d|_         |j
                  «        |j                  D ]  }|j                  |dd«       Œ |j                  j                  t        j                  d«      } |j                  «       j                  «       D ��ci c]D  \  }}|j                  t        j                  d«      |j                  t        j                  d«      “ŒF }	}}d„ }
|	 |
|› d	�«       |
d
«      |› d�d |
|› d�«       |
d«      |› d�d |
|› d�«       |
d«      |› d�dik(  sJ ‚|› d�|	vsJ ‚|› d�|	vsJ ‚ |
|› d�«      }||	v sJ ‚|j                  |› d�«      sJ ‚|j                  d«      sJ ‚y c c}}w )Nr4   rJ   rK   Tr   Ú_needs_stubrL   c                óT   — t        | «      j                  t        j                  d«      S )zDMake it possible to do comparisons and tests in a OS-independent wayrL   )Ú_compiled_file_namerY   r8   rZ   )Úfiles    r   ÚCz9TestBuildExt.test_get_output_mapping_with_stub.<locals>.Cž   s   € ä& tÓ,×4Ñ4´R·V±V¸SÓAÐAr   z/ext3.pyzsrc/ext3.pyrM   rP   z/mypkg/ext1.pyzsrc/mypkg/ext1.pyrN   rQ   z/mypkg/subpkg/ext2.pyzsrc/mypkg/subpkg/ext2.pyrO   rR   z/mypkg/__pycache__/ext1z.pyc)rS   rT   rH   rU   rV   rW   Ú
extensionsrX   rY   r8   rZ   r\   r^   Ú
startswithr-   )r   r_   r`   r   r   r:   rX   rc   rd   re   rl   Úexample_stubs               r   Ú!test_get_output_mapping_with_stubz.TestBuildExt.test_get_output_mapping_with_stubŒ   s  € Ø×ÑÐ2°FÔ;Ø×ÑÐDÀdÔKØ×%Ñ%Ó'ˆð ×(Ñ(¨Ó5ˆ	Ø"&ˆ	ÔØ"ˆ	×"Ñ"Ô$Ø×'Ñ'ò 	:ˆCØ×Ñ  ]°DÕ9ð	:ð ×'Ñ'×/Ñ/´·±¸Ó<ˆ	ð 5˜	×4Ñ4Ó6×<Ñ<Ó>÷
á��1ð �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ˆØ˜wÑ&Ð&Ð&Ø×&Ñ&¨)¨Ð4KÐ'LÔMÐMÐMØ×$Ñ$ VÔ,Ð,Ñ,ùó5
s   ÃA	F3N)	Ú__name__Ú
__module__Ú__qualname__r   r1   r<   rH   rf   rp   © r   r   r   r      s"   „ òò!ò*4ò@ò"
ó@'-r   r   c                  ó&   — e Zd Zdd„Zd„ Zd„ Zd„ Zy)ÚTestBuildExtInplacec                ó
  — di i dœdœ}t        j                  |«       t        ddg|¬«      }t        t	        |g¬«      «      }d|_        t        |«      } t        |«      j                  dd	d
dœ|¤Ž |j                  «        |S )Nz#include missingheader.h
)ÚlibÚtmp)r"   z.buildr!   r"   )Úoptionalr%   úsetup.pyz
.build/libz
.build/tmp)rX   Ú
build_temprt   )
r   rE   r
   r   r+   rC   r   ÚvarsÚupdaterW   )r   rz   ÚoptsrF   r0   r   r   s          r   Úget_build_ext_cmdz%TestBuildExtInplace.get_build_ext_cmd·   sƒ   € à2Ø ¨Ñ,ñ=
ˆô 	�
‰
�5ÔÜ˜k¨H¨:ÀÔIˆ	ÜœD¨i¨[Ô9Ó:ˆØ%ˆÔÜ˜‹oˆØŒˆS‹	×ÑÐQ <¸LÑQÈDÒQØ×ÑÔØˆ
r   c                ó¦   — |j                  «       }|j                  j                  «       |j                  j                  «       z   |j                  z   S )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Å   s@   € ð ×ÑÓ!ˆØ�w‰w×!Ñ!Ó# c§g¡g×&8Ñ&8Ó&:Ñ:¸V¿_¹_ÑLÐLr   c                ó’   — | j                  dd¬«      }|j                  «        t        d„ | j                  ||«      D «       «      sJ ‚y)z‚
        If optional extensions fail to build, setuptools should show the error
        in the logs but not fail to build
        T©rz   Úinplacec              3  ó    K  — | ]  }d –— Œ y­w)z0build_ext: building extension "spam.eggs" failedNrt   )Ú.0Úmsgs     r   ú	<genexpr>z4TestBuildExtInplace.test_optional.<locals>.<genexpr>Õ   s   è ø€ ò 
àô ?ñ
ùs   ‚N)r€   ÚrunÚanyrŠ   )r   r_   r‡   rˆ   r   s        r   Útest_optionalz!TestBuildExtInplace.test_optionalÎ   sN   € ð
 ×$Ñ$¨d¸DÐ$ÓAˆØ�‰Œ	Üñ 
à×,Ñ,¨V°VÓ<ô
ô 
ð 	
ñ 
r   c                ó¦   — | j                  dd¬«      }t        j                  t        «      5  |j	                  «        d d d «       y # 1 sw Y   y xY w)NFTrŒ   )r€   ÚpytestÚraisesr	   r’   )r   r_   r   s      r   Útest_non_optionalz%TestBuildExtInplace.test_non_optionalÛ   sA   € à×$Ñ$¨e¸TÐ$ÓBˆÜ�]‰]œ<Ó(ñ 	Ø�G‰GŒI÷	÷ 	ñ 	ús   ­AÁAN)rz   ÚboolÚreturnr   )rq   rr   rs   r€   rŠ   r”   r˜   rt   r   r   rv   rv   ¶   s   „ óòMò

ór   rv   c                óÐ   — t        d«      t        d«      t        d«      dœ}t        j                  |«       t        j                  dgd¬«      \  }\  }}|dk(  sJ d	|› d
|› �«       ‚y )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.cfgrE   )r   é   )r   Údata_streamr   z	
STDOUT:
z	
STDERR:
)r   r   rE   r   Úrun_setup_py)r_   rF   ÚcodeÚstdoutÚstderrs        r   Útest_build_ext_config_handlingr¢   â   s‡   € äðó	
ô ð(ó*
ôV ðó
ñm<€Eôz 	‡J�JˆuÔÜ(×5Ñ5ØˆIØôÑ€DÑ
ˆ6�6ð �1Š9Ð?˜ F 8¨;°v°hÐ?Ó?‰9r   )!Ú
__future__r   r8   r.   Úimportlib.utilr   rj   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_namesr7   r   rv   r¢   rt   r   r   ú<module>r¯      sa   ðÝ "ã 	Û 
Ý Cã Ý ç CÝ (Ý *Ý *å Ý ç *Ð *Ý .à
˜×0Ñ0Ð
0€÷[-ñ [-÷|)ñ )óXC@r   