3 œäL]ã@sHddlZddlZddlZddlmZdd„Zejƒfdd„Zdd „ZdS) éNé)ÚPkgConfigErrorcCsnxh|jƒD]\\}}||kr$|||<q t||tƒs@td|fƒ‚t|tƒsXtd|fƒ‚||j|ƒ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 ú0/tmp/pip-install-wfra5znf/cffi/cffi/pkgconfig.pyÚ merge_flagss  r c#Cs2ddg}|j|ƒ|j|ƒytj|tjtjd}Wn8tk rl}ztdt|ƒjƒfƒ‚WYdd}~XnX|jƒ\}}|j dkr´y|j |ƒ}Wnt k r¦YnXt|jƒƒ‚t j d koÈt|tƒ ry|j |ƒ}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)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„|jƒDƒS)NcSs"g|]}|jdƒ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„|jƒDƒS)NcSs"g|]}|jdƒ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„|jƒDƒS)NcSs"g|]}|jdƒ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„|jƒDƒS)NcSs0|dd…}d|kr$t|jddƒƒS|dfSdS)Nr(ú=r)Útupler-)r+r r r Ú_macroVs z8flags_from_pkgconfig..get_macros.._macrocsg|]}|jdƒrˆ|ƒ‘qS)z-D)r))r*r+)r4r r r,\sz.get_macros..)r-)r.r )r4r Ú get_macrosUsz(flags_from_pkgconfig..get_macroscSsdd„|jƒDƒS)NcSs(g|] }|jdƒ r|jdƒ r|‘qS)z-Iz-D)r))r*r+r r r r,_szBflags_from_pkgconfig..get_other_cflags..)r-)r.r r r Úget_other_cflags^sz.flags_from_pkgconfig..get_other_cflagscSsdd„|jƒDƒS)NcSs(g|] }|jdƒ r|jdƒ r|‘qS)z-Lz-l)r))r*r+r r r r,csz@flags_from_pkgconfig..get_other_libs..)r-)r.r r r Úget_other_libsbsz,flags_from_pkgconfig..get_other_libscsFtjƒ}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 )Úlibsr?Úretr"Z lib_flagsr )r/r1r0r5r6r7r Úflags_from_pkgconfig<s  rB) rr rÚerrorrr r>r'rBr r r r Ús "