Y!D @sdZddlZddlZddlZddlZddlZddlZddlZddlZyddl Z Wn!e k rddl j Z YnXddl Z e j Z e jZddlmZddlmZddlmZddlmZddl mZddlmZd d lmZmZmZd d lmZm Z d d l!m"Z"d d l#m$Z$m%Z%d dl&m'Z'd dl(mZm&Z&ddZ)ddZ*GdddeZ+dS)zI Create a wheel (.whl) distribution. A wheel is a built archive format. N)rmtree) Generator) get_platform)Command)get_python_version)log) get_abbr_impl get_impl_ver get_abi_tag)native open_for_csv)archive_wheelfile) read_pkg_infowrite_pkg_info)pkginfo_to_dict) pep425tagsmetadatacCst|jddS)N-_) safe_namereplace)namer2/tmp/pip-build-3puug3g5/wheel/wheel/bdist_wheel.py safer_name+srcCst|jddS)Nrr) safe_versionr)versionrrr safer_version.src@s9eZdZdZd=dddefdd d d fd>d?d@dAdBdCdddedfg ZddddgZdd Zd!d"Z e d#d$Z d%d&Z d'd(Z d)d*Zd+ejd,d-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<ZdS)D bdist_wheelzcreate a wheel distribution bdist-dir=b1temporary directory for creating the distributionz plat-name=pz;platform name to embed in generated filenames (default: %s)z keep-tempkz/keep the pseudo-installation tree around after z!creating the distribution archive dist-dir=d-directory to put final built distributions in skip-buildN2skip rebuilding everything (for testing/debugging)relative6build the archive using relative paths(default: false)owner=u@Owner name used when creating a tar file [default: current user]group=gAGroup name used when creating a tar file [default: current group] universal'make a universal wheel (default: false)z python-tag=z7Python implementation compatibility tag (default: py%s)rcCsd|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_dtd|_d|_dS)NzipFpyr) bdist_dirdata_dir plat_nameplat_tagformat keep_tempdist_dir distinfo_dir egginfo_dir root_is_pure skip_buildr*ownergroupr2r python_tagplat_name_supplied)selfrrrinitialize_optionsTs"               zbdist_wheel.initialize_optionscCs|jdkr9|jdj}tjj|d|_|jd|_|jdk |_ d }|j dt |||j j p|j j |_|j jd}d|kr|ddj}|jdkrd |_dS)Nbdistwheelz.datar<r8r@r2r1trueyesT)zdist_dirz plat_namez skip_build)rIztruezyes)r6get_finalized_command bdist_baseospathjoinwheel_dist_namer7r8rDset_undefined_optionsr4 distributionhas_ext_moduleshas_c_librariesr?get_option_dictstriplowerr2)rErMZ need_optionsrHvalrrrfinalize_optionsgs  zbdist_wheel.finalize_optionscCs1djt|jjt|jjfS)z4Return distribution full name with - replaced with _r)rPrrSget_namer get_version)rErrrrQszbdist_wheel.wheel_dist_namecCs|jr|j}n$|jr'd}n|jp6t}|jddjdd}|jr|jrrd}n |j}|d|f}nqt}t}t t j }||||f}t j d|jr|nd}||dkst|S) Nanyrr.zpy2.py3noneZsupplied_platformr)rDr8r?rrr2rCr r strr rXr get_supportedAssertionError)rEr8impltagZ impl_nameimpl_verabi_tagsupported_tagsrrrget_tags&           zbdist_wheel.get_tagcCs2|j\}}}d|j|||f}|S)z%Return archive name without extensionz %s-%s-%s-%s)rhrQ)rEimpl_tagrfr9archive_basenamerrrget_archive_basenames z bdist_wheel.get_archive_basenamec Cs|jd}d|_|js.|jd|jddd}|j|_d|_|j|_d|_|jd}d|_x4dD],}t |d|t j j |j |qWd}t jdkrt j jt j j |j d}||_|_t ||jrdnd|tjd|j|jd|j}t j j |j|}|js}|j}n$t j j |j|j|j}|jddt j j |jd|j|_|j|j|j|j|j|j |j|jt j j!|js4t j"|jt#||} dt j$krot%j&t j$dd| gt'|j(dgj)dt*| f|j+s|j,rtjd|jn t-|jdS) N build_scriptspythonbuildinstallreinit_subcommandsTFinstall_scriptsheadersscriptsdatapurelibplatlibinstall_ntz..install_purelibinstall_platlibzinstalling to %sinstall_egg_infotargetr>z %s.dist-infoZ WHEEL_TOOLsign dist_filesrz removing %s)zheaderszscriptszdatazpurelibzplatlib)ztargetz egginfo_dir).reinitialize_command executabler@ run_commandr6rootcompilewarn_dirZno_epsetattrrNrOrPr7rnormpathinstall_libbase install_libr?loggerinforkr<r*_ensure_relative install_baserRrQr=egg2distr>write_wheelfile write_recordexistsmakedirsrenviron subprocesscallgetattrrSappendrr;dry_runr) rErlrorqkeyZbasedir_observedrjZpseudoinstall_rootZ archive_root wheel_namerrrrunsf           $          zbdist_wheel.runz bdist_wheel ()c Cs ddlm}|}d|d<||d.adiosrNz *.egg-infoz)Egg metadata expected at %s but not foundz- (%s found - possible misnamed archive file?)zPKG-INFOignorecSs tdS)NPKG-INFO requires.txt SOURCES.txt not-zip-safe)rrrr)set)xyrrrzsz&bdist_wheel.egg2dist..zdependency_links.txtrMETADATAz metadata.jsonrS descriptionzDESCRIPTION.rstwbzutf-8 extensionszpython.detailsZdocument_namesz LICENSE.txtlicenser sort_keysT)rNrOrglobrPdirnamebasename ValueErrorisfilermkdirrcopytreerreadrWrrrrSpopwriteencodercopyr=jsondump)rEZ egginfo_pathZ distinfo_pathrrpatpossibleerrZaltrrZdependency_links_pathZdependency_links_filedependency_linksrZmetadata_json_pathZpymetaZdescription_filenameZdescription_textZdescription_pathZdescription_filerZlicense_filenameZ metadata_jsonrrrrTs\   !           "zbdist_wheel.egg2distcsgddlm}tjj|d}tjj|fdd}fdd}t|d}tj|}x|D]} tjj| } || rd } d } n\t | d } | j }WdQRXt j |j }d t||} t|} tjj| jtjjd }|j|| | fqWWdQRXdS) Nr)urlsafe_b64encodeRECORDc3s\xUtjD]D\}}}|jx(t|D]}tjj||Vq6WqWdS)N)rNwalksortsortedrOrP)dirdirsfilesr)r6rrrs z&bdist_wheel.write_record..walkcs |kS)z!Wheel hashes every possible file.r)rO)record_relpathrrskipsz&bdist_wheel.write_record..skipzw+rxrbzsha256=/)Z wheel.utilrrNrOrPrelpathr csvwriterrrhashlibsha256digestr lenrrwriterow)rEr6r=rZ record_pathrrZ record_filerrOrhashsizerrtrr)r6rrrs(    zbdist_wheel.write_record)r r!r")r%r&r')r(Nr))zrelativeNr+)r,r-r.)r/r0r1)z universalNr3)__name__ __module__ __qualname__rrr user_optionsboolean_optionsrFrZpropertyrQrhrkrrH __version__rrrrrrrrrrrrr1sN      S    " Rr),__doc__rrrNrrrrrH sysconfig ImportErrordistutils.sysconfig pkg_resourcesrrremail.generatorrdistutils.utilrdistutils.corerr distutilsrrrr r r utilr r archiverZpkginforrrrrxrrrrrrrs<