YL i\ddlZddlZddlZddlmZdZej fdZdZy)N)PkgConfigErrorc|jD]d\}}||vr|||<t||tstd|dt|tstd|d||j |f|S)zMerge values from cffi config flags cfg2 to cf1 Example: merge_flags({"libraries": ["one"]}, {"libraries": ["two"]}) {"libraries": ["one", "two"]} zcfg1[z] should be a list of stringszcfg2[)items isinstancelist TypeErrorextend)cfg1cfg2keyvalues T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/cffi/pkgconfig.py merge_flagsrszjjl$ U d?DId3i.# OPPeT*# OPP I  U #$ Kc ddg}|j||j| tj|tjtj}|j\}}|jdk7r+ |j|}t |jtjdk\r"t|t s |j|}t j"d k7rd |vrt d|d |d ||S#t$r*}t dt |jd}~wwxYw#t$rYwxYw#t$rt d|d |d |d |wxYw)z5Calls pkg-config and returns the output if found z pkg-configz--print-errors)stdoutstderrzcannot 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 subprocessPopenPIPEEnvironmentErrorrstrstrip communicate returncodedecode Exceptionsys version_inforUnicodeDecodeErrorosaltsep)libnameflagencodingapceboutberrs rcallr0sZ '(AHHTNHHWN   a   P!JD$ }} ;;x(DTZZ\** 4 4(= B;;x(D  yyDTT\"GT34 4 K/ NCFLLNLMMN   " B "&4"AB B Bs54D ?E E D>%D99D> E  E !E1c ddddd d  fd}i}|D]}||}t|||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. cr|jDcgc]}|jds|ddc}Scc}w)N-Isplit startswithstringxs rget_include_dirsz.flags_from_pkgconfig..get_include_dirsK-%||~D!d1C!"DDD44cr|jDcgc]}|jds|ddc}Scc}w)N-Lr4r5r8s rget_library_dirsz.flags_from_pkgconfig..get_library_dirsNr<r=cr|jDcgc]}|jds|ddc}Scc}w)N-lr4r5r8s r get_librariesz+flags_from_pkgconfig..get_librariesQr<r=c~d}|jDcgc]}|jds||c}Scc}w)NcR|dd}d|vrt|jddS|dfS)Nr4=r)tupler6)r:s r_macroz8flags_from_pkgconfig..get_macros.._macroVs3!"AaxQWWS!_--4y r-Dr5)r9rHr:s r get_macrosz(flags_from_pkgconfig..get_macrosUs2 ! $*<<>HaQ\\$5Gq HHHs: :c|jDcgc]'}|jdr|jds|)c}Scc}w)Nr3rIr5r8s rget_other_cflagsz.flags_from_pkgconfig..get_other_cflags^B!<<>Ead1C12d1CE EE AAc|jDcgc]'}|jdr|jds|)c}Scc}w)Nr?rBr5r8s rget_other_libsz,flags_from_pkgconfig..get_other_libsbrMrNctj}t|d}t|d}||||| |dS)Nz--cflagsz--libs) include_dirs library_dirs libraries define_macrosextra_compile_argsextra_link_args)r#getfilesystemencodingr0) r(fse all_cflagsall_libsr;rCr@rJrLrPs rkwargsz$flags_from_pkgconfig..kwargsgsc'')':. *,Z8,X6&x0' 3"2:">-h7  r)r) libsr\retr( lib_flagsr;rCr@rJrLrPs @@@@@@rflags_from_pkgconfigr`<saEEEIEE   C$7O C#$ Jr) r#r&rerrorrrrXr0r`rrrcs.!&";!:!:!<D=r