
    Mh                     Z    d dl Z d dlZd dlZddlmZ d Z e j                    fdZd ZdS )    N   )PkgConfigErrorc                 0   |                                 D ]\  }}|| vr|| |<   t          | |         t                    st          d|d          t          |t                    st          d|d          | |                             |           | S )zMerge values from cffi config flags cfg2 to cf1

    Example:
        merge_flags({"libraries": ["one"]}, {"libraries": ["two"]})
        {"libraries": ["one", "two"]}
    zcfg1[z] should be a list of stringszcfg2[)items
isinstancelist	TypeErrorextend)cfg1cfg2keyvalues       N/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/cffi/pkgconfig.pymerge_flagsr      s     jjll $ $
Ud??DIId3i.. Qi### OPPPeT** Qi### OPPPIU####K    c                 8   ddg}|                     |           |                     |            	 t          j        |t          j        t          j                  }nC# t          $ r6}t          dt          |                                                    d}~ww xY w|                                \  }}|j	        dk    rH	 |
                    |          }n# t          $ r Y nw xY wt          |                                          t          j        dk    rUt          |t                    s@	 |
                    |          }n)# t          $ r t          d|d	| d
|d|          w xY wt           j        dk    rd|v rt          d|d	| d|          |S )z5Calls pkg-config and returns the output if found
    z
pkg-configz--print-errors)stdoutstderrzcannot run pkg-config: Nr   )   zpkg-config  z5 returned bytes that cannot be decoded with encoding z:
\z3 returned an unsupported backslash-escaped output:
)append
subprocessPopenPIPEEnvironmentErrorr   strstripcommunicate
returncodedecode	Exceptionsysversion_infor   UnicodeDecodeErrorosaltsep)libnameflagencodingapceboutberrs           r   callr0      s    
'(AHHTNNNHHWNa

PPP N N NnCFFLLNNNLMMMN !!JD$	}	;;x((DD 	 	 	D	TZZ\\***
4
4(=(=	B;;x((DD! 	B 	B 	B ."&$$44"A B B B	B
 
yDTT\\n"ddGGGTT3 4 4 	4 Ks5   +A 
B&1BBC 
C%$C%/E &E+c                    	
 d d d d d 	d 
	
fd}i }| D ]} ||          }t          ||           |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                 >    d |                                  D             S )Nc                 L    g | ]!}|                     d           |dd         "S )-I   N
startswith.0xs     r   
<listcomp>zBflags_from_pkgconfig.<locals>.get_include_dirs.<locals>.<listcomp>L   1    DDD!d1C1CD!""DDDr   splitstrings    r   get_include_dirsz.flags_from_pkgconfig.<locals>.get_include_dirsK       DDv||~~DDDDr   c                 >    d |                                  D             S )Nc                 L    g | ]!}|                     d           |dd         "S )-Lr5   Nr6   r8   s     r   r;   zBflags_from_pkgconfig.<locals>.get_library_dirs.<locals>.<listcomp>O   r<   r   r=   r?   s    r   get_library_dirsz.flags_from_pkgconfig.<locals>.get_library_dirsN   rB   r   c                 >    d |                                  D             S )Nc                 L    g | ]!}|                     d           |dd         "S )-lr5   Nr6   r8   s     r   r;   z?flags_from_pkgconfig.<locals>.get_libraries.<locals>.<listcomp>R   r<   r   r=   r?   s    r   get_librariesz+flags_from_pkgconfig.<locals>.get_librariesQ   rB   r   c                 J    d fd|                                  D             S )Nc                 l    | dd          } d| v r#t          |                     dd                    S | d fS )Nr5   =r   )tupler>   )r:   s    r   _macroz8flags_from_pkgconfig.<locals>.get_macros.<locals>._macroV   s<    !""AaxxQWWS!__---4y r   c                 P    g | ]"}|                     d            |          #S )-Dr6   )r9   r:   rO   s     r   r;   z<flags_from_pkgconfig.<locals>.get_macros.<locals>.<listcomp>\   s2    HHHaQ\\$5G5GHq		HHHr   r=   )r@   rO   s    @r   
get_macrosz(flags_from_pkgconfig.<locals>.get_macrosU   s7    	! 	! 	! IHHH6<<>>HHHHr   c                 >    d |                                  D             S )Nc                 f    g | ].}|                     d           |                     d          ,|/S )r4   rQ   r6   r8   s     r   r;   zBflags_from_pkgconfig.<locals>.get_other_cflags.<locals>.<listcomp>_   S     E E Ead1C1C E12d1C1CE E E Er   r=   r?   s    r   get_other_cflagsz.flags_from_pkgconfig.<locals>.get_other_cflags^   0    E E6<<>> E E E 	Er   c                 >    d |                                  D             S )Nc                 f    g | ].}|                     d           |                     d          ,|/S )rE   rI   r6   r8   s     r   r;   z@flags_from_pkgconfig.<locals>.get_other_libs.<locals>.<listcomp>c   rU   r   r=   r?   s    r   get_other_libsz,flags_from_pkgconfig.<locals>.get_other_libsb   rW   r   c                     t          j                    }t          | d          }t          | d          } |           |           |           |           |           	|          dS )Nz--cflagsz--libs)include_dirslibrary_dirs	librariesdefine_macrosextra_compile_argsextra_link_args)r#   getfilesystemencodingr0   )
r(   fse
all_cflagsall_libsrA   rJ   rF   rR   rV   rZ   s
       r   kwargsz$flags_from_pkgconfig.<locals>.kwargsg   s    '))':..
**,,Z88,,X66&x00'Z
33"2"2:">">-~h77  	r   )r   )libsrf   retr(   	lib_flagsrA   rJ   rF   rR   rV   rZ   s        @@@@@@r   flags_from_pkgconfigrj   <   s    E E EE E EE E EI I IE E EE E E
          C $ $F7OO	C####Jr   )	r#   r&   r   errorr   r   rb   r0   rj    r   r   <module>rm      s                ! ! ! ! ! !  & ";!:!<!<    D= = = = =r   