Ë
    –2Úi('  ã                   óè   — 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j4                  v Z G d„ d«      Z G d„ d«      Zd„ Zy)é    N)Ú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        úV/var/www/html/acx/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_override9   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%r@   )Úscript_namer%   Úpackage_dir)r	   r   Úbuildr   )r   Úfilesr?   Úext2rA   s        r   Údist_with_examplezTestBuildExt.dist_with_exampleY   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 )Nr3   ú.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ÚsetattrrG   Úget_command_objÚeditable_modeÚensure_finalizedÚ	build_libÚreplacer7   ÚsepÚget_outputsÚget_output_mappingÚreinitialize_commandÚitems)r   Ú
tmpdir_cwdÚmonkeypatchr   r   rW   ÚxÚoutputsÚkÚvÚmappings              r   Útest_get_outputszTestBuildExt.test_get_outputsj   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 )Nr3   rI   rJ   Tr   Ú_needs_stubrK   c                 óT   — t        | «      j                  t        j                  d«      S )zDMake it possible to do comparisons and tests in a OS-independent wayrK   )Ú_compiled_file_namerX   r7   rY   )Ú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.pyrL   rO   z/mypkg/ext1.pyzsrc/mypkg/ext1.pyrM   rP   z/mypkg/subpkg/ext2.pyzsrc/mypkg/subpkg/ext2.pyrN   rQ   z/mypkg/__pycache__/ext1z.pyc)rR   rS   rG   rT   rU   rV   Ú
extensionsrW   rX   r7   rY   r[   r]   Ú
startswithr,   )r   r^   r_   r   r   r9   rW   rb   rc   rd   rk   Ú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   r0   r;   rG   re   ro   © r   r   r   r      s"   „ òò!ò*4ò@ò"
ó@'-r   r   c                   ó.   — e Zd Zdedefd„Zd„ Zd„ Zd„ Zy)ÚTestBuildExtInplaceÚoptionalÚreturnc                 ó
  — 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!   )rv   r$   úsetup.pyz
.build/libz
.build/tmp)rW   Ú
build_temprs   )
r   rD   r	   r   r*   rB   r   ÚvarsÚupdaterV   )r   rv   ÚoptsrE   r/   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©rv   Úinplacec              3   ó    K  — | ]  }d –— Œ y­w)z0build_ext: building extension "spam.eggs" failedNrs   )Ú.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)	rp   rq   rr   Úboolr   r€   rŠ   r”   r˜   rs   r   r   ru   ru   ´   s%   „ ð¨$ð ¸9ó òMò

ór   ru   c                 óÄ   — t        d«      t        d«      t        d«      dœ}t        j                  |«       t        j                  dgd¬«      \  }}|dk(  s
J d	|z  «       ‚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.cfgrD   )r   é   )r   Údata_streamr   z
STDOUT:
%s
STDERR:
%s)r   r   rD   r   Úrun_setup_py)r^   rE   ÚcodeÚoutputs       r   Útest_build_ext_config_handlingr    à   sz   € äðó	
ô ð(ó*
ôV ðó
ñm<€Eôz 	‡J�JˆuÔÜ×+Ñ+ØˆIØô�L€Dˆ&ð �1Š9Ð;Ð2°VÑ;Ó;‰9r   )r7   r-   Úimportlib.utilr   ri   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_namesr6   r   ru   r    rs   r   r   ú<module>r¬      s]   ðÛ 	Û 
Ý Cã Ý ç CÝ (Ý *Ý *å Ý ç *Ð *Ý .à
˜×0Ñ0Ð
0€÷[-ñ [-÷|)ñ )óXC<r   