B ل=^@sHddlZddlZddlZddlmZddZefddZdd ZdS) N)PkgConfigErrorcCsnxh|D]\\}}||kr$|||<q t||ts@td|ft|tsXtd|f|||q W|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 A/opt/alt/python37/lib64/python3.7/site-packages/cffi/pkgconfig.py merge_flagss  r c Cs2ddg}||||ytj|tjtjd}Wn8tk rl}ztdt|fWdd}~XYnX|\}}|j dkry| |}Wnt k rYnXt|t j dkrt|tsy| |}Wn*tk rtd||||fYnXtjd kr.d |kr.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 calls0  (   r&csnddddddddd d d d fd d}i}x|D]}||}t||qPW|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)z-IN) startswith).0xr r r LszBflags_from_pkgconfig..get_include_dirs..)split)stringr r r get_include_dirsKsz.flags_from_pkgconfig..get_include_dirscSsdd|DS)NcSs"g|]}|dr|ddqS)z-Lr'N)r()r)r*r r r r+OszBflags_from_pkgconfig..get_library_dirs..)r,)r-r r r get_library_dirsNsz.flags_from_pkgconfig..get_library_dirscSsdd|DS)NcSs"g|]}|dr|ddqS)z-lr'N)r()r)r*r r r r+Rsz?flags_from_pkgconfig..get_libraries..)r,)r-r r r get_librariesQsz+flags_from_pkgconfig..get_librariescsddfdd|DS)NcSs0|dd}d|kr$t|ddS|dfSdS)Nr'=r)tupler,)r*r r r _macroVs z8flags_from_pkgconfig..get_macros.._macrocsg|]}|dr|qS)z-D)r()r)r*)r3r r r+\sz.get_macros..)r,)r-r )r3r get_macrosUsz(flags_from_pkgconfig..get_macroscSsdd|DS)NcSs$g|]}|ds|ds|qS)z-Iz-D)r()r)r*r r r r+_s zBflags_from_pkgconfig..get_other_cflags..)r,)r-r r r get_other_cflags^sz.flags_from_pkgconfig..get_other_cflagscSsdd|DS)NcSs$g|]}|ds|ds|qS)z-Lz-l)r()r)r*r r r r+cs z@flags_from_pkgconfig..get_other_libs..)r,)r-r 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_libs)r.r0r/r4r5r6r r kwargsgs  z$flags_from_pkgconfig..kwargs)r )Zlibsr8Zretr!Z lib_flagsr )r.r0r/r4r5r6r flags_from_pkgconfig<s  r9) rrrerrorrr r7r&r9r r r r s "