o
    àý°j  ã                   @   sH   d dl Z d dlZd dlZddlmZ dd„ Ze  ¡ fdd„Zdd	„ ZdS )
é    Né   )ÚPkgConfigErrorc                 C   sj   |  ¡ D ].\}}|| vr|| |< qt| | tƒstd|f ƒ‚t|tƒs+td|f ƒ‚| |  |¡ q| S )z¬Merge values from cffi config flags cfg2 to cf1

    Example:
        merge_flags({"libraries": ["one"]}, {"libraries": ["two"]})
        {"libraries": ["one", "two"]}
    z$cfg1[%r] should be a list of stringsz$cfg2[%r] should be a list of strings)ÚitemsÚ
isinstanceÚlistÚ	TypeErrorÚextend)Úcfg1Úcfg2ÚkeyÚvalue© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/cffi/pkgconfig.pyÚmerge_flags   s   

r   c              
   C   s  ddg}|  |¡ |  | ¡ ztj|tjtjd�}W n ty1 } ztdt|ƒ ¡ f ƒ‚d}~ww | ¡ \}}|j	dkrTz| 
|¡}W n	 tyM   Y nw t| ¡ ƒ‚tjdkrwt|tƒswz| 
|¡}W n tyv   td|| ||f ƒ‚w tjd	kr‰d	|v r‰td
|| |f ƒ‚|S )z5Calls pkg-config and returns the output if found
    z
pkg-configz--print-errors)ÚstdoutÚstderrzcannot run pkg-config: %sNr   )é   zKpkg-config %s %s returned bytes that cannot be decoded with encoding %r:
%rú\zEpkg-config %s %s returned an unsupported backslash-escaped output:
%r)ÚappendÚ
subprocessÚPopenÚPIPEÚOSErrorr   ÚstrÚstripÚcommunicateÚ
returncodeÚdecodeÚ	ExceptionÚsysÚversion_infor   ÚUnicodeDecodeErrorÚosÚaltsep)ÚlibnameÚflagÚencodingÚaÚpcÚeÚboutÚberrr   r   r   Úcall   s<   

€ÿ
ÿ
þÿþr,   c                    sj   dd„ ‰ dd„ ‰dd„ ‰dd„ ‰d	d
„ ‰dd„ ‰‡ ‡‡‡‡‡fdd„}i }| D ]}||ƒ}t ||ƒ q'|S )aÞ  Return compiler line flags for FFI.set_source based on pkg-config output

    Usage
        ...
        ffibuilder.set_source("_foo", pkgconfig = ["libfoo", "libbar >= 1.8.3"])

    If pkg-config is installed on build machine, then arguments include_dirs,
    library_dirs, libraries, define_macros, extra_compile_args and
    extra_link_args are extended with an output of pkg-config for libfoo and
    libbar.

    Raises PkgConfigError in case the pkg-config call fails.
    c                 S   ó   dd„ |   ¡ D ƒS )Nc                 S   ó"   g | ]}|  d ¡r|dd… ‘qS )ú-Ié   N©Ú
startswith©Ú.0Úxr   r   r   Ú
<listcomp>L   ó   " zBflags_from_pkgconfig.<locals>.get_include_dirs.<locals>.<listcomp>©Úsplit©Ústringr   r   r   Úget_include_dirsK   ó   z.flags_from_pkgconfig.<locals>.get_include_dirsc                 S   r-   )Nc                 S   r.   )ú-Lr0   Nr1   r3   r   r   r   r6   O   r7   zBflags_from_pkgconfig.<locals>.get_library_dirs.<locals>.<listcomp>r8   r:   r   r   r   Úget_library_dirsN   r=   z.flags_from_pkgconfig.<locals>.get_library_dirsc                 S   r-   )Nc                 S   r.   )ú-lr0   Nr1   r3   r   r   r   r6   R   r7   z?flags_from_pkgconfig.<locals>.get_libraries.<locals>.<listcomp>r8   r:   r   r   r   Úget_librariesQ   r=   z+flags_from_pkgconfig.<locals>.get_librariesc                    s   dd„ ‰ ‡ fdd„|   ¡ D ƒS )Nc                 S   s,   | dd … } d| v rt |  dd¡ƒS | d fS )Nr0   ú=r   )Útupler9   )r5   r   r   r   Ú_macroV   s   z8flags_from_pkgconfig.<locals>.get_macros.<locals>._macroc                    s   g | ]}|  d ¡rˆ |ƒ‘qS )ú-Dr1   r3   ©rD   r   r   r6   \   s    z<flags_from_pkgconfig.<locals>.get_macros.<locals>.<listcomp>r8   r:   r   rF   r   Ú
get_macrosU   s   z(flags_from_pkgconfig.<locals>.get_macrosc                 S   r-   )Nc                 S   ó$   g | ]}|  d ¡s|  d¡s|‘qS )r/   rE   r1   r3   r   r   r   r6   _   ó    
ÿzBflags_from_pkgconfig.<locals>.get_other_cflags.<locals>.<listcomp>r8   r:   r   r   r   Úget_other_cflags^   r=   z.flags_from_pkgconfig.<locals>.get_other_cflagsc                 S   r-   )Nc                 S   rH   )r>   r@   r1   r3   r   r   r   r6   c   rI   z@flags_from_pkgconfig.<locals>.get_other_libs.<locals>.<listcomp>r8   r:   r   r   r   Úget_other_libsb   r=   z,flags_from_pkgconfig.<locals>.get_other_libsc                    sF   t  ¡ }t| dƒ}t| dƒ}ˆ |ƒˆ|ƒˆ|ƒˆ|ƒˆ|ƒˆ|ƒdœS )Nz--cflagsz--libs)Úinclude_dirsÚlibrary_dirsÚ	librariesÚdefine_macrosÚextra_compile_argsÚextra_link_args)r   Úgetfilesystemencodingr,   )r$   ÚfseÚ
all_cflagsÚall_libs©r<   rA   r?   rG   rJ   rK   r   r   Úkwargsg   s   

úz$flags_from_pkgconfig.<locals>.kwargs)r   )ÚlibsrW   Úretr$   Ú	lib_flagsr   rV   r   Úflags_from_pkgconfig<   s   	r[   )	r   r"   r   Úerrorr   r   rR   r,   r[   r   r   r   r   Ú<module>   s
   "