B ©#aã@sHddlZddlZddlZddlmZdd„Ze ¡fdd„Zdd „ZdS) éNé)ÚPkgConfigErrorcCsnxh| ¡D]\\}}||kr$|||<q t||tƒs@td|fƒ‚t|tƒsXtd|fƒ‚|| |¡q W|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)Zcfg1Zcfg2ÚkeyÚvalue©r ú7/tmp/pip-target-jgxl_w8r/lib64/python/cffi/pkgconfig.pyÚ merge_flagss  r c Cs2ddg}| |¡| |¡ytj|tjtjd}Wn8tk rl}ztdt|ƒ ¡fƒ‚Wdd}~XYnX| ¡\}}|j dkr´y|  |¡}Wnt k r¦YnXt| ¡ƒ‚t j dkrt|tƒsy|  |¡}Wn*tk rtd||||fƒ‚YnXtjd kr.d |kr.td |||fƒ‚|S) z5Calls pkg-config and returns the output if found z pkg-configz--print-errors)ÚstdoutÚstderrzcannot 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ÚEnvironmentErrorrÚstrÚstripÚ communicateÚ returncodeÚdecodeÚ ExceptionÚsysÚ version_inforÚUnicodeDecodeErrorÚosÚaltsep)ÚlibnameÚflagÚencodingÚaZpcÚeZboutZberrr r r Úcalls0  (   r'csndd„‰dd„‰dd„‰dd„‰d d „‰d d „‰‡‡‡‡‡‡fd d„}i}x|D]}||ƒ}t||ƒqPW|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. cSsdd„| ¡DƒS)NcSs"g|]}| d¡r|dd…‘qS)z-IéN)Ú startswith)Ú.0Úxr r r ú LszBflags_from_pkgconfig..get_include_dirs..)Úsplit)Ústringr r r Úget_include_dirsKsz.flags_from_pkgconfig..get_include_dirscSsdd„| ¡DƒS)NcSs"g|]}| d¡r|dd…‘qS)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„| ¡DƒS)NcSs"g|]}| d¡r|dd…‘qS)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_librariescsdd„‰‡fdd„| ¡DƒS)NcSs0|dd…}d|kr$t| dd¡ƒS|dfSdS)Nr(ú=r)Útupler-)r+r r r Ú_macroVs z8flags_from_pkgconfig..get_macros.._macrocsg|]}| d¡rˆ|ƒ‘qS)z-D)r))r*r+)r4r r r,\sz.get_macros..)r-)r.r )r4r Ú get_macrosUsz(flags_from_pkgconfig..get_macroscSsdd„| ¡DƒS)NcSs$g|]}| d¡s| d¡s|‘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„| ¡DƒS)NcSs$g|]}| d¡s| d¡s|‘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ƒ}ˆ|ƒˆ|ƒˆ|ƒˆ|ƒˆ|ƒˆ|ƒdœS)Nz--cflagsz--libs)Ú include_dirsÚ library_dirsÚ librariesÚ define_macrosÚextra_compile_argsÚextra_link_args)rÚgetfilesystemencodingr')r"ZfseZ all_cflagsZall_libs)r/r1r0r5r6r7r r Úkwargsgs  z$flags_from_pkgconfig..kwargs)r )Zlibsr?Úretr"Z lib_flagsr )r/r1r0r5r6r7r Úflags_from_pkgconfig<s  rA) rr rÚerrorrr r>r'rAr r r r Ús "