'Ŀ.ddlmZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z ejGddZdS) )absolute_importN)Path)PhpBrokenException)cached_in_scope)run_in_cagefs_if_neededceZdZUeed<eed<eed<eed<eed<eed<dZdd Zd Zed efd Z ed efd Z ddZ dS)PHP identifierversion modules_dirbininidirc*t|jSN)hashr )selfs py/clwpos/php/base.py__hash__z PHP.__hash__"sDO$$$otherc"|j|jkSrr rrs r__eq__z PHP.__eq__%s%"222rc"|j|jkSrrrs r__gt__z PHP.__gt__(s!111r extensionc ttt|jd|d}|S)zr Quick check that given extension is installed as so file in default extensions directory z**/z.so)boollistrr glob)rr is_presents ris_extension_installedzPHP.is_extension_installed+sD $tD$455::;O;O;O;OPPQQRR rc||sdS|j}tjdkrtj}t dd}n t}i}||dgfdii|}||j v}|S)z Complex check that given extension is loaded as part of the ini configuration. Be careful with this method because it actually runs php process and may be heavy. FrT)capture_outputtextz-menv) r$r osgeteuid subprocessrundictrstdoutsplit)rr php_bin_path exec_func exec_kwargsresult is_loadeds ris_extension_loadedzPHP.is_extension_loaded4s**955 5x  :<<1  "Id>>>KK/IK 4       !4!4!6!66 rreturnc|jddg}t|i}|jr.|js't t |j|jt jd}||j}|r@|d d dd}ddl m }||S|S) zn PHP selector can replace path with symlink. It's a reason why we need normalization. z-rzecho php_ini_loaded_file();)r(zalt.*php[^/]*/r/-)create_generic_php) r rstderrr.rstrrecompilesearchstripreplaceclwpos.php.alt_phpr:)rcommandr3 alt_patterncaptured_versionphp_namer:s rapply_php_selectorzPHP.apply_php_selectorSs8T#@A(b999 = C C$S]]FMBB Bj!233 &--fm<<  0'*0055==c3GGH > = = = = =%%h// / rN)rr )r6r ) __name__ __module__ __qualname__r<__annotations__rrrrr$r5rGrrr r sOOOLLL HHH HHH HHH%%%3333222_S_<rr ) __future__r dataclassesr)r=r+pathlibrclwpos.cl_wpos_exceptionsrclwpos.scoped_cacher clwpos.utilsr dataclassr rLrrrTs&&&&&& 888888//////000000 bbbbbbbbbbr