a (`@sHddlZddlZddlZddlmZddZefddZdd ZdS) N)PkgConfigErrorcCsj|D]\\}}||vr"|||<qt||ts>td|ft|tsVtd|f|||q|S)zMerge 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 isinstancelist TypeErrorextend)Zcfg1Zcfg2keyvaluer 4/usr/lib64/python3.9/site-packages/cffi/pkgconfig.py merge_flagss  r c Cs*ddg}||||ztj|tjtjd}Wn:tyn}z"tdt|fWYd}~n d}~00|\}}|j dkrz| |}Wnt yYn0t|t j dkrt|tsz| |}Wn&tytd||||fYn0tjd kr&d |vr&td |||f|S) z5Calls pkg-config and returns the output if found z pkg-configz--print-errors)stdoutstderrzcannot 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 subprocessPopenPIPEEnvironmentErrorrstrstripZ communicate returncodedecode Exceptionsys version_inforUnicodeDecodeErrorosaltsep)libnameflagencodingaZpceZboutZberrr r r calls4  ,      r&csjddddddddd d d d fd d}i}|D]}||}t||qN|S)aReturn 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. cSsdd|DS)NcSs"g|]}|dr|ddqS)-IN startswith.0xr r r LzBflags_from_pkgconfig..get_include_dirs..splitstringr r r get_include_dirsKsz.flags_from_pkgconfig..get_include_dirscSsdd|DS)NcSs"g|]}|dr|ddqS)-Lr(Nr)r+r r r r.Or/zBflags_from_pkgconfig..get_library_dirs..r0r2r r r get_library_dirsNsz.flags_from_pkgconfig..get_library_dirscSsdd|DS)NcSs"g|]}|dr|ddqS)-lr(Nr)r+r r r r.Rr/z?flags_from_pkgconfig..get_libraries..r0r2r r r get_librariesQsz+flags_from_pkgconfig..get_librariescsddfdd|DS)NcSs0|dd}d|vr$t|ddS|dfSdS)Nr(=r)tupler1)r-r r r _macroVs z8flags_from_pkgconfig..get_macros.._macrocsg|]}|dr|qS)-Dr)r+r;r r r.\r/z.get_macros..r0r2r r=r get_macrosUsz(flags_from_pkgconfig..get_macroscSsdd|DS)NcSs$g|]}|ds|ds|qS)r'r<r)r+r r r r._s zBflags_from_pkgconfig..get_other_cflags..r0r2r r r get_other_cflags^sz.flags_from_pkgconfig..get_other_cflagscSsdd|DS)NcSs$g|]}|ds|ds|qS)r5r7r)r+r r r r.cs z@flags_from_pkgconfig..get_other_libs..r0r2r r r get_other_libsbsz,flags_from_pkgconfig..get_other_libscsFt}t|d}t|d}||||||dS)Nz--cflagsz--libs)Z include_dirsZ library_dirsZ librariesZ define_macrosZextra_compile_argsZextra_link_args)rgetfilesystemencodingr&)r!ZfseZ all_cflagsZall_libsr4r8r6r>r?r@r r kwargsgs  z$flags_from_pkgconfig..kwargs)r )ZlibsrCretr!Z lib_flagsr rBr flags_from_pkgconfig<s  rE) rrrerrorrr rAr&rEr r r r s "