o caJ@srdZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddlm Z ddlmZddlmZddlmZdd lmZdd lmZmZddlZd d lmZd d lmZd dlmZd dlm Z d dl!m"Z"d dl#m$Z%ej&dkrddl'm(Z)nddl'm)Z)ej*Z*ej+Z+dZ,ddZ-ddZ.d'ddZ/ddZ0dd Z1d!d"Z2d#d$Z3Gd%d&d&e Z4dS)(zI Create a wheel (.whl) distribution. A wheel is a built archive format. N) OrderedDict)Command)log)BytesIO)iglob)rmtree)get_config_var) ZIP_DEFLATED ZIP_STORED)write_pkg_info)calculate_macosx_platform_tag)pkginfo_to_metadata)tags) WheelFile) __version__) Generator)BytesGeneratorzcp3\dcCsdtjdS)Nzpy{}r)formatsys version_inforr3/usr/lib/python3/dist-packages/wheel/bdist_wheel.py python_tag+rcCs@tj}|dr|durt||}|dkrtjdkrd}|S)z0Return our platform name 'win32', 'linux_x86_64'macosxN linux_x86_64 linux_i686) distutilsutil get_platform startswithr rmaxsize) archive_rootresultrrrr#/s  r#TcCs4t|}|dur|rtd|td|S||kS)zfUse a fallback value for determining SOABI flags if the needed config var is unset or unavailable.Nz?Config variable '{0}' is unset, Python ABI tag may be incorrect)rwarningswarnrRuntimeWarning)varfallbackexpectedr*valrrrget_flag;s r0cCsNtd}t}|sd|dvrdttdrdd}d}d}tdttd|dkdr'd }td |dk|dko4tjd kdr>tjd kr>d }td tjdkd|dkoMtjdkdrWtjdkrWd}d|t|||f}|S|rv| drvd| dd}|S|r| drd | ddd}| dd dd}|S|r| dd dd}|Sd}|S)zXReturn the ABI tag based on SOABI (if available) or emulate SOABI (CPython 2, PyPy).SOABI)cppp maxunicodePy_DEBUGgettotalrefcountr2)r*d WITH_PYMALLOC)rmPy_UNICODE_SIZEi)rr)r.r*uz %s%s%s%s%szcpython--r zpypy-Nr(._) rrinterpreter_namehasattrrr0rr4interpreter_versionr$splitjoinreplace)soabiimplr8r;r>abirrr get_abi_tagGsP    rKcCt|ddSNr?rA) safe_namerG)namerrr safer_nameorrPcCrLrM) safe_versionrG)versionrrr safer_versionsrrScCs*tt|dt|tj||dS)Nr )printstroschmodstatS_IWRITE)funcpathexcinforrrremove_readonlyws r]c@seZdZdZedefdefgZddddedfd d d d d ddddd d efddde fddg Z gdZ ddZddZeddZddZd d!Zd"ed#fd$d%Zd&d'Zed(d)Zd*d+ZdS), bdist_wheelzcreate a wheel distributionstoreddeflated)z bdist-dir=bz1temporary directory for creating the distributionz plat-name=pz;platform name to embed in generated filenames (default: %s)N) keep-tempkzPkeep the pseudo-installation tree around after creating the distribution archive)z dist-dir=r8z-directory to put final built distributions in) skip-buildNz2skip rebuilding everything (for testing/debugging))relativeNz7build the archive using relative paths (default: false))zowner=r>z@Owner name used when creating a tar file [default: current user])zgroup=gzAGroup name used when creating a tar file [default: current group]) universalNz'make a universal wheel (default: false)z compression=z6zipfile compression (one of: {}) (default: 'deflated')z, z python-tag=z7Python implementation compatibility tag (default: '%s'))z build-number=NzqBuild number for this particular version. As specified in PEP-0427, this must start with a digit. [default: None])zpy-limited-api=Nz?Python tag (cp32|cp33|cpNN) for abi3 wheel tag (default: false))rcrerfrhcCsxd|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_t|_d|_d|_d|_dS)NzipFr`) bdist_dirdata_dir plat_nameplat_tagr keep_tempdist_dir egginfo_dir root_is_pure skip_buildrfownergrouprh compressionr build_numberpy_limited_apiplat_name_supplied)selfrrrinitialize_optionss& zbdist_wheel.initialize_optionscCs0|jdur|dj}tj|d|_|jd|_|jdu|_ z |j |j |_ Wnt y7t d|j wd}|jdgt||R|jpO|j |_|jrbtt|jsbt dt|jd}d|vrtd|dd }|d vrd |_|jdur|jdd  st d dSdS) Nbdistwheelz.datazUnsupported compression: {})rorlrrzpy-limited-api must match '%s'rhz=The [wheel] section is deprecated. Use [bdist_wheel] instead.r )1trueyesTz1Build tag (build-number) must start with a digit.)!rjget_finalized_command bdist_baserVr[rFwheel_dist_namerkrlrxsupported_compressionsruKeyError ValueErrorrset_undefined_optionsri distributionhas_ext_moduleshas_c_librariesrqrwrematchPY_LIMITED_API_PATTERNget_option_dictloggerr*striplowerrhrvisdigit)ryr need_optionsr|r/rrrfinalize_optionss8          zbdist_wheel.finalize_optionscCs8t|jt|jf}|jr||jf7}d|S)z4Return distribution full name with - replaced with _r?)rPrget_namerS get_versionrvrF)ry componentsrrrrs    zbdist_wheel.wheel_dist_namecs|jr|jn#|jr dn|jr|jds|jnt|jdvr*tjdkr*d dd dd|jrI|j r?d }n|j }|d f}|St }t }||}|jre||d re|j}d }ntt}||f}fd dt D}||vsJd||S)Nanyr)z linux-x86_64rrr r?rAr@zpy2.py3nonecp3abi3csg|] }|j|jfqSr) interpreterrJ).0trlrr sz'bdist_wheel.get_tag..z)would build wheel with unsupported tag {})rxrlrqr$r#rjrr%rrGrhrrrBrDrwrUrKsys_tagsr)ryrItag impl_nameimpl_verabi_tagsupported_tagsrrrget_tags:    zbdist_wheel.get_tagcCsX|d}d|_d|_|d}d|_|js|d|jddd}|j|_d|_|j|_d|_ |d }d|_ d D]}t |d |t j |j|q:d }t jd krdt j t j |jd}||_|_t ||jrkdnd|td|j|d|\}}} d|j||| } |js|j} n t j |j||j} |dddt|j t!|j"} t j |j| } |#|j$| |%| t j &|j'st (|j't j |j'| d}t)|d|j* }|+| Wdn1swYt,|jdg-ddjt.j/dd|f|j0s(td|j|j1s*t2|jt3ddSdSdS)N build_scriptspythonT build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibinstall_r5ntz..install_purelibinstall_platlibzinstalling to %sz {}-{}-{}-{}install_egg_info)targetrpz{}-{}.dist-infoz.whlw dist_filesr^z{}.{}r(z removing %s)onerror)4reinitialize_command executableforceinplacerr run_commandrjrootcompilewarn_dirno_epsetattrrVr[rFrkrOnormpathinstall_libbase install_librqrinforrrrf_ensure_relative install_baserrPrrrSregg2distrpwrite_wheelfileexistsromakedirsrru write_filesgetattrappendrrrndry_runrr])ryrrrrkeybasedir_observedimpl_tagrrmarchive_basenamer&distinfo_dirname distinfo_dir wheel_pathwfrrrrun"s               zbdist_wheel.runz bdist_wheel ()cCs0ddlm}tjdkrt|ts|d}|}d|d<||d<t|j|d<|j dur3|j |d <| \}}}| d D]}| d D]} | d D] } d || | f|d <qMqFq?t j |d } td| t} t| dd|t| d} | | ddWddS1swYdS)Nr)Messagerzutf-8z1.0z Wheel-VersionrzRoot-Is-PurelibBuildr@r?TagWHEELz creating %s) maxheaderlenwbs  ) email.messagerrr isinstancerUencoderqrrvrrErFrVr[rrrrflattenopenwritegetvaluerG)rywheelfile_base generatorrmsgrrrmrIrJplatwheelfile_pathbufferfrrrrvs.      "zbdist_wheel.write_wheelfilecCs6tj|\}}|ddtjkr||dd}|S)Nrr )rVr[ splitdrivesep)ryr[driverrrrszbdist_wheel._ensure_relativecCs|jd}t}tdd|dddD}d|vr-tdt| |ddd|vr7d|vr7d }|D]+}t |D]$}| d rMt d |q?||vrctj|rct d ||| |q?q9|S) NmetadatacSsh|]}|qSrr)roptionrrr sz,bdist_wheel.license_paths.. license_files)r5r5r license_filezEThe "license_file" option is deprecated. Use "license_files" instead.)z LICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*~z4ignoring license file "%s" as it looks like a backupz/adding license file "%s" (matched pattern "%s"))rrsetsortedgetrEr)r*DeprecationWarningaddrendswithrdebugrVr[isfiler)ryrfilespatternspatternr[rrr license_pathss.      zbdist_wheel.license_pathscCshdd}||tj|stj|d} t || } t j ||d d d tj|d } t | d } | } Wdn1swY| s|| ttj|d| |jD]}tj|}t |tj||q||dS)z:Convert an .egg-info directory into a .dist-info directorycSsPtj|rtj|stj|rt|dStj|r&t|dSdS)z-Appropriately delete directory, file or link.N)rVr[rislinkisdirshutilrunlink)rbrrradioss $ z#bdist_wheel.egg2dist..adiosrNz *.egg-infoz)Egg metadata expected at %s but not foundz- (%s found - possible misnamed archive file?)PKG-INFOcSshdS)N> SOURCES.txt not-zip-safe requires.txtr r)xyrrrsz&bdist_wheel.egg2dist..)ignorezdependency_links.txtrMETADATA)rVr[rglobrFdirnamebasenamerrrmkdirr copytreerreadrr rcopy)ry egginfo_path distinfo_pathr rpatpossibleerralt pkginfo_pathpkg_infodependency_links_pathdependency_links_filedependency_links license_pathfilenamerrrrs>           zbdist_wheel.egg2dist)__name__ __module__ __qualname__ descriptionrr r rr#rrFr user_optionsboolean_optionsrzrpropertyrrr wheel_versionrrrrrrrrr^}sV ($ 0T  r^)TT)5__doc__r!rVr rXrrr) collectionsrdistutils.corerrriorrrr sysconfigrzipfiler r pkg_resourcespkginfor macosx_libfiler rrvendored.packagingr wheelfilerr5rr2remail.generatorrrrNrQrrr#r0rKrPrSr]r^rrrrsJ                 (