a „oe¯@ã@sdZddlmZmZddlmZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl mZddlmZdd lmZdd lmZmZd d „Zd d„Zdd„Zdd„ZGdd„deƒZe d ¡¡Zdd„Zdd„Z dd„Z!dddœZ"dd „Z#d!d"„Z$d#d$„Z%gd%¢Z&d*d(d)„Z'dS)+z6setuptools.command.bdist_egg Build .egg distributionsé)Ú remove_treeÚmkpath)Úlog)ÚCodeTypeN)ÚLibrary)ÚCommandé)Úensure_directory)Úget_pathÚget_python_versioncCstdƒS)NZpurelib)r ©r r ú=C:\Program Files\Certbot\pkgs\setuptools\command\bdist_egg.pyÚ _get_purelibsrcCs2d|vrtj |¡d}| d¡r.|dd…}|S)NÚ.rÚmoduleiúÿÿÿ)ÚosÚpathÚsplitextÚendswith)Úfilenamer r r Ú strip_modules   rccs6t |¡D]&\}}}| ¡| ¡|||fVq dS)zbDo os.walk in a reproducible way, independent of indeterministic filesystem readdir order N)rÚwalkÚsort)ÚdirÚbaseÚdirsÚfilesr r r Ú sorted_walk!srcCsJt d¡ ¡}t|dƒ}| ||¡Wdƒn1s<0YdS)NaÛ def __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, importlib.util __file__ = pkg_resources.resource_filename(__name__, %r) __loader__ = None; del __bootstrap__, __loader__ spec = importlib.util.spec_from_file_location(__name__,__file__) mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(mod) __bootstrap__() Úw)ÚtextwrapÚdedentÚlstripÚopenÚwrite)ÚresourceÚpyfileZ_stub_templateÚfr r r Ú write_stub+s ÿ r'c@sxeZdZdZgd¢Zgd¢Zdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)Ú bdist_eggzcreate an "egg" distribution))z bdist-dir=Úbz1temporary directory for creating the distribution)z plat-name=Úpzdplatform name to embed in generated filenames (by default uses `pkg_resources.get_build_platform()`))úexclude-source-filesNz+remove all .py files from the generated egg)ú keep-tempÚkzPkeep the pseudo-installation tree around after creating the distribution archive)z dist-dir=Údz-directory to put final built distributions in)ú skip-buildNz2skip rebuilding everything (for testing/debugging))r,r/r+cCs.d|_d|_d|_d|_d|_d|_d|_dS)Nr)Ú bdist_dirÚ plat_nameÚ keep_tempÚdist_dirÚ skip_buildÚ egg_outputÚexclude_source_files©Úselfr r r Úinitialize_optionsUszbdist_egg.initialize_optionscCs¨| d¡}|_|j|_|jdur>| d¡j}tj |d¡|_|jdur\ddl m }|ƒ|_|  dd¡|j dur¤|j tƒ|j ¡oˆ|jd}tj |j|d¡|_ dS) NÚegg_infoZbdistZeggr)Úget_build_platform)r3r3)Z py_versionÚplatformz.egg)Úget_finalized_commandÚei_cmdr:r0Ú bdist_baserrÚjoinr1Z pkg_resourcesr;Zset_undefined_optionsr5Z_get_egg_basenamer Ú distributionÚhas_ext_modulesr3)r8r>r?r;Úbasenamer r r Úfinalize_options^s      þzbdist_egg.finalize_optionscCsþ|j| d¡_tj tj tƒ¡¡}|jj g}|j_ |D]ˆ}t |t ƒr´t |ƒdkr´tj  |d¡r´tj |d¡}tj |¡}||ks˜| |tj¡r´|t |ƒdd…|df}|jj  |¡q:z*t d|j¡|jddddW||j_ n ||j_ 0dS)NÚinstallrrézinstalling package data to %sÚ install_data)ÚforceÚroot)r0r=Ú install_librrÚnormcaseÚrealpathrrAÚ data_filesÚ isinstanceÚtupleÚlenÚisabsÚ startswithÚsepÚappendrÚinfoÚ call_command)r8Z site_packagesÚoldÚitemrLZ normalizedr r r Údo_install_datavs"  ÿzbdist_egg.do_install_datacCs|jgS)N)r5r7r r r Ú get_outputsszbdist_egg.get_outputscKsTtD]}| ||j¡q| d|j¡| d|j¡|j|fi|¤Ž}| |¡|S)z8Invoke reinitialized command `cmdname` with keyword argsr4Údry_run)ÚINSTALL_DIRECTORY_ATTRSÚ setdefaultr0r4r[Zreinitialize_commandÚ run_command)r8ZcmdnameÚkwÚdirnameÚcmdr r r rV’s zbdist_egg.call_commandcCs¢| d¡t d|j¡| d¡}|j}d|_|j ¡rH|jsH| d¡|j ddd}||_|  ¡\}}g|_ g}t |ƒD]|\}}t j |¡\} } t j |jt| ƒd¡} |j  | ¡t d |¡|jsÚtt j |¡| ƒ| | ¡| t jd ¡||<qz|r| |¡|jjr| ¡|j} t j | d ¡} | | ¡|jjrlt j | d ¡}t d |¡|j d|dd| | ¡t j | d¡}|rÔt d|¡|jst|ƒt|dƒ}|  d |¡¡|  d¡| !¡n,t j "|¡rt d|¡|jst  #|¡t$t j | d ¡| %¡ƒt j &t j |j'd¡¡r.+)\.(?P[^.]+)\.pycÚnameú.pyczRenaming file from [%s] to [%s])rrUÚwalk_eggr0rrr@rÚdebugrsÚreÚmatchÚpardirÚgroupÚremoveÚOSErrorÚrename) r8rrrrrZpath_oldÚpatternÚmZpath_newr r r rxïs$       zbdist_egg.zap_pyfilescCs2t|jddƒ}|dur|St d¡t|j|jƒS)Nruz4zip_safe flag not set; analyzing archive contents...)r{rArrwÚ analyze_eggr0rm)r8Úsafer r r rus  zbdist_egg.zip_safecCsdS)Nrr r7r r r rz szbdist_egg.gen_headercCshtj |j¡}tj |d¡}|jjjD]<}| |¡r&tj ||t |ƒd…¡}t |ƒ|  ||¡q&dS)z*Copy metadata (egg info) to the target_dirÚN) rrÚnormpathr:r@r>ZfilelistrrRrPr Z copy_file)r8Z target_dirZ norm_egg_infoÚprefixrÚtargetr r r rps zbdist_egg.copy_metadata_toc Csg}g}|jdi}t|jƒD]f\}}}|D].}tj |¡d ¡tvr*| |||¡q*|D]"}|||d|tj ||¡<q^q|j   ¡rú|  d¡}|j D]Z} t | tƒr®qž| | j¡} | | ¡}tj |¡ d¡sžtj tj |j|¡¡rž| |¡qž||fS)zAGet a list of relative paths to C extensions in the output distrorrFrcZ build_extzdl-)r0rrrrÚlowerÚNATIVE_EXTENSIONSrTr@rArBr=Ú extensionsrNrZget_ext_fullnamerZget_ext_filenamerCrRrv) r8r|r}ÚpathsrrrrZ build_cmdr~Úfullnamer r r rls( "       zbdist_egg.get_ext_outputsN)Ú__name__Ú __module__Ú __qualname__Ú descriptionZ user_optionsZboolean_optionsr9rDrYrZrVrrxrurzrprlr r r r r(=s  S r(z.dll .so .dylib .pydccsHt|ƒ}t|ƒ\}}}d|vr(| d¡|||fV|D] }|Vq8dS)z@Walk an unpacked egg's contents, skipping the metadata directoryrdN)rÚnextr‰)Úegg_dirZwalkerrrrZbdfr r r rƒ;s  rƒc Cs t ¡D](\}}tj tj |d|¡¡r|Sqtƒst|ƒ|krzt |¡q|durt|ƒ|krt|dƒ}|  d¡|  ¡qdS)Nrgrh) rŸr rrr@rvÚboolrsr"r#rq)ržrr£r¤r&r r r rtXs    rtzzip-safez not-zip-safe)TFc Cstj ||¡}|dd…|vr"dS|t|ƒdd… tjd¡}||rJdpLdtj |¡d}tjdkrpd }nd }t |d ƒ}|  |¡t   |¡} |  ¡d} t t| ƒ¡} d D]} | | vr°t d || ¡d} q°d| vrüdD]} | | vrÜt d|| ¡d} qÜ| S)z;Check whether module possibly uses unsafe-for-zipfile stuffNéÿÿÿÿTrFrrr)ééé éÚrb)Ú__file__Ú__path__z%s: module references %sFÚinspect) Z getsourceZ getabsfileZ getsourcefileZgetfilegetsourcelinesZ findsourceZ getcommentsZ getframeinfoZgetinnerframesZgetouterframesÚstackZtracez"%s: module MAY be using inspect.%s)rrr@rProrSrÚsysÚ version_infor"ÚreadÚmarshalÚloadrqÚdictÚfromkeysÚ iter_symbolsrrw) ržrrrmrÚpkgrÚskipr&ÚcoderZsymbolsZbadr r r r¢ks0      r¢ccsR|jD] }|Vq|jD]4}t|tƒr.|Vqt|tƒrt|ƒD] }|Vq@qdS)zBYield names and strings used by `code` and its nested code objectsN)Úco_namesÚ co_constsrNÚstrrr·)rºrÚconstr r r r·•s     r·cCs2tj d¡stjdkrdSt d¡t d¡dS)NÚjavaZcliTz1Unable to analyze compiled code on this platform.zfPlease ask the author to include a 'zip_safe' setting (either True or False) in the package's setup.py)r°r<rRrrwr r r r r¡¡s  ÿr¡)rJrfrGZ install_baseTrc sªddl}ttj |¡ˆdt d|ˆ¡‡‡fdd„}|rB|jn|j}ˆs†|j |||d} t ˆƒD]\} } } || | | ƒqd|   ¡n t ˆƒD]\} } } |d| | ƒqŽ|S)aqCreate a zip file from all the files under 'base_dir'. The output zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" Python module (if available) or the InfoZIP "zip" utility (if installed and found on the default search path). If neither tool is available, raises DistutilsExecError. Returns the name of the output zip file. rNrkz#creating '%s' and adding '%s' to itcs`|D]V}tj tj ||¡¡}tj |¡r|tˆƒdd…}ˆsN| ||¡t d|¡qdS)NrFz adding '%s') rrr‘r@rrrPr#rr„)Úzr`Únamesrrr*©Úbase_dirr[r r Úvisit¾s  zmake_zipfile..visit)Ú compression) Úzipfilerrrr`rrUÚ ZIP_DEFLATEDZ ZIP_STOREDÚZipFilerrq) Ú zip_filenamerÃrir[ÚcompressrjrÆrÄrÅrÀr`rrr rÂr ry²s  ry)rrTr)(Ú__doc__Zdistutils.dir_utilrrZ distutilsrÚtypesrr°rr…rr³Zsetuptools.extensionrZ setuptoolsrÚ_pathr Z sysconfigr r rrrr'r(rµr¶Úsplitr•rƒrŽrtrŸr¢r·r¡r\ryr r r r Ús<      | þ*