
    CeQ                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlZdd	lmZ d
dlmZ d
dlmZ d
dlmZ d
dlm Z  d
dl!m"Z" d
dl!m#Z$ d
dl%m&Z& d Z'd Z( e)ej2                  jU                  d      d         Z+dZ,d Z-d Z.d Z/d!dZ0d Z1d Z2d Z3d Z4d Z5 G d d e      Z6y)"zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    )annotationsN)BytesGenerator	Generator)EmailPolicy)iglob)rmtree)ZIP_DEFLATED
ZIP_STORED)Command   )__version__)calculate_macosx_platform_tag)pkginfo_to_metadata)log)tagsversion)	WheelFilec                0    t        j                  dd|       S )zConvert an arbitrary string to a standard distribution name
    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
    [^A-Za-z0-9.]+-)resubnames    3/usr/lib/python3/dist-packages/wheel/bdist_wheel.py	safe_namer   #   s     66"C..    c                    	 t        t        j                  |             S # t        j                  $ r, | j	                  dd      } t        j                  dd|       cY S w xY w)zB
    Convert an arbitrary string to a standard version string
     .r   r   )str_packaging_versionVersionInvalidVersionreplacer   r   r   s    r   safe_versionr'   *   sW    6%--g677,, 6//#s+vv&W556s     <AAr!   zcp3\dc                 2    t        j                  d      dk(  S )NP   )structcalcsize r   r   _is_32bit_interpreterr.   ;   s    ??31$$r   c                 .    dt         j                  d    S )Npyr   )sysversion_infor-   r   r   
python_tagr3   ?   s      #$%%r   c                    t        j                         }|j                  d      r| t        | |      }nt	               r|dk(  rd}n|dk(  rd}|j                  dd      S )z0Return our platform name 'win32', 'linux_x86_64'macosxlinux-x86_64z
linux-i686linux-aarch64zlinux-armv7lr   _)	sysconfigget_platform
startswithr   r.   r&   )archive_rootresults     r   r:   r:   C   sb    ##%F"|'?.|VD		 ^#!F& $F>>#s##r   c                    t        j                  |       }|$|r t        j                  d|  dt        d       |S ||k(  S )zfUse a fallback value for determining SOABI flags if the needed config
    var is unset or unavailable.zConfig variable 'z+' is unset, Python ABI tag may be incorrect   
stacklevel)r9   get_config_varwarningswarnRuntimeWarning)varfallbackexpectedrD   vals        r   get_flagrJ   U   sL     
"
"3
'C
{MM#C5(WW
 (?r   c                    t        j                  d      } t        j                         }| s|dv rt	        t
        d      rd}d}d}t        dt	        t
        d      |dk(        rd	}t        d
|dk(  |dk(  xr t
        j                  dk        rt
        j                  dk  rd}| t        j                          | | | }|S | r/|dk(  r*| j                  d      rd| j                  d      d   z   }|S | r,|dk(  r'| j                  d      r| j                  d      d   }|S | rL|dk(  rGdj                  | j                  d      dd       }|j                  dd      j                  dd      }|S | rL|dk(  rGdj                  | j                  d      dd       }|j                  dd      j                  dd      }|S | r$| j                  dd      j                  dd      }|S d}|S )zJReturn the ABI tag based on SOABI (if available) or emulate SOABI (PyPy2).SOABI)cppp
maxunicode Py_DEBUGgettotalrefcountrM   )rD   dWITH_PYMALLOC)      mcpythonr   r   r   rN   Nr?   r!   r8   graalpyrU   )r9   rB   r   interpreter_namehasattrr1   rJ   r2   interpreter_versionr;   splitjoinr&   )soabiimplrS   rW   uabis         r   get_abi_tagrc   d   s   $$W-E  "DT\)gc<.HJ-? @PTVADL$,<3#3#3f#<
 'At//121#aS<& J% 
44<E$4$4Y$?U[[%a((  J 
44<E$4$4T$:kk#q! J 
44<hhu{{3'+,kk#s#++C5 J 
49$hhu{{3'+,kk#s#++C5 J 
mmC%--c37 J Jr   c                8    t        |       j                  dd      S Nr   r8   )r   r&   r   s    r   
safer_namerf      s    T?""3,,r   c                8    t        |       j                  dd      S re   )r'   r&   r   s    r   safer_versionrh      s     ((c22r   c                $    t        | ||d          y )Nr   )remove_readonly_exc)funcpathexcinfos      r   remove_readonlyrn      s    dGAJ/r   c                \    t        j                  |t        j                          | |       y )N)oschmodstatS_IWRITE)rk   rl   excs      r   rj   rj      s    HHT4==!Jr   c                  
   e Zd ZdZeedZdddd ed      z  fdd	d
dddddddj                  dj                  e            fddd e
       z  fddgZg dZd Zd Zed        Zd Zd Zdez   dz   fdZd Zed         Zd! Zy)"bdist_wheelzcreate a wheel distribution)storeddeflated)z
bdist-dir=bz1temporary directory for creating the distributionz
plat-name=pz;platform name to embed in generated filenames (default: %s)N)	keep-tempkzPkeep the pseudo-installation tree around after creating the distribution archive)z	dist-dir=rS   z-directory to put final built distributions in)
skip-buildNz2skip rebuilding everything (for testing/debugging))relativeNz7build the archive using relative paths (default: false))zowner=ra   z@Owner name used when creating a tar file [default: current user])zgroup=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])zpy-limited-api=Nz?Python tag (cp32|cp33|cpNN) for abi3 wheel tag (default: false))r{   r}   r~   r   c                   d | _         d | _        d | _        d | _        d| _        d| _        d | _        d | _        d | _        d | _	        d| _
        d | _        d | _        d| _        d| _        t               | _        d | _        d| _        d| _        y )NzipFrx   )	bdist_dirdata_dir	plat_nameplat_tagformat	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildr~   ownergroupr   compressionr3   build_numberpy_limited_apiplat_name_supplied)selfs    r   initialize_optionszbdist_wheel.initialize_options   s     

%$, #"'r   c                4   | j                   @| j                  d      j                  }t        j                  j                  |d      | _         | j                  j                  d      }|j                          | j                  dz   | _
        | j                  d u| _        	 | j                  | j                     | _        d} | j"                  dgt%        ||        | j                  j'                         xs | j                  j)                          | _        | j,                  r6t/        j0                  t2        | j,                        st!        dt2        z        | j                  j5                  d      }d|v rDt7        j8                  d	       |d   d
   j;                         }|j=                         dv rd| _        | j@                  )| j@                  d d
 jC                         st!        d      y y # t        $ r t!        d| j                         d w xY w)Nbdistwheelegg_infoz.datazUnsupported compression: )r   r   r   zpy-limited-api must match '%s'r   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.)"r   get_finalized_command
bdist_baserp   rl   r^   distributionget_command_objensure_finalizedwheel_dist_namer   r   r   supported_compressionsr   KeyError
ValueErrorset_undefined_optionsr   has_ext_moduleshas_c_librariesr   r   r   matchPY_LIMITED_API_PATTERNget_option_dictr   warningstriplowerr   r   isdigit)r   r   r   need_optionsr   rI   s         r   finalize_optionszbdist_wheel.finalize_options   s   >>!33G<GGJWW\\*g>DN$$44Z@!!#,,w6"&.."<	W#::4;K;KLD ?"""7MS|-LM --/V43D3D3T3T3V
 rxx"D$7$7(
 =@VVWW !!11':%KKO $Q'--/Cyy{22!%(1B1B2A1F1N1N1PPQQ 2Q(7  	W89I9I8JKLRVV	Ws    G4 4#Hc                    t        | j                  j                               t        | j                  j	                               f}| j
                  r|| j
                  fz  }dj                  |      S )z4Return distribution full name with - replaced with _r   )rf   r   get_namerh   get_versionr   r^   )r   
componentss     r   r   zbdist_wheel.wheel_dist_name"  sf     t((1134$++779:

 4,,..Jxx
##r   c                   | j                   r| j                  }nn| j                  rd}n_| j                  r(| j                  j                  d      s| j                  }nt	        | j
                        }t               r|dv rd}|dv rd}|j                         j                  dd      j                  d	d      j                  d
d      }| j                  r"| j                  rd}n| j                  }|d|f}|S t        j                         }t        j                         }||z   }| j                  r#||z   j                  d      r| j                  }d}n!t        t!                     j                         }|||f}t        j"                         D cg c]  }|j$                  |j&                  |f }}||v s
J d|        |S c c}w )Nanyr5   )r6   linux_x86_64
linux_i686)r7   linux_aarch64linux_armv7lr   r8   r!   r    zpy2.py3nonecp3abi3z'would build wheel with unsupported tag )r   r   r   r;   r:   r   r.   r   r&   r   r3   r   rZ   r\   r   r"   rc   sys_tagsinterpreterrb   )	r   r   r`   tag	impl_nameimpl_verabi_tagtsupported_tagss	            r   get_tagzbdist_wheel.get_tag-  s    ""II ~~dnn&?&?&I NN	 )8	$& @@ ,I BB !/I OO%%c3/77SAII#sS 	 ~~ +C& 
# --/I//1Hx'D""	H(<'H'H'O** km,224),C <@==?67y1N  ~%?8>?%
s    G c           	        | j                  d      }d|_        d|_        | j                  d      }d|_        | j                  s| j                  d       | j                  dd      }| j                  |_        d|_        | j                  |_        d|_	        | j                  d	      }d|_
        d
D ]:  }t        |d|z   t        j                  j                  | j                  |             < d}t        j                   dk(  rUt        j                  j#                  t        j                  j                  | j                  d            }|x| _        | _        t        || j(                  rdnd|       t+        j,                  d| j                          | j                  d       | j/                         \  }}}	| j0                   d| d| d|	 }
| j2                  s| j                  }nCt        j                  j                  | j                  | j5                  |j6                              }| j9                  dd       dj;                  t=        | j>                  jA                               tC        | j>                  jE                                     }t        j                  j                  | j                  |      }| jG                  | jH                  |       | jK                  |       t        j                  jM                  | jN                        st        jP                  | jN                         t        j                  j                  | jN                  |
dz         }tS        |d| jT                        5 }|jW                  |       d d d        tY        | j>                  dg       j[                  d dj:                  t\        j^                  d d  |f       | j`                  szt+        j,                  d| j                          | jb                  sKt\        j^                  dk  rte        | j                  tf               y te        | j                  th               y y y # 1 sw Y   xY w) Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibinstall_rP   ntz..install_purelibinstall_platlibzinstalling to r   install_egg_info)targetr   z{}-{}.dist-infoz.whlw
dist_filesrv   z{}.{}r?   z	removing )rU      )onerror)onexc)5reinitialize_command
executableforceinplacer   run_commandr   rootcompilewarn_dirno_epsetattrrp   rl   r^   r   r   normpathinstall_libbaseinstall_libr   r   infor   r   r~   _ensure_relativeinstall_baser   r   rf   r   r   rh   r   egg2distr   write_wheelfileexistsr   makedirsr   r   write_filesgetattrappendr1   r2   r   dry_runr   rn   rj   )r   r   r   r   r   keybasedir_observedimpl_tagr   r   archive_basenamer<   distinfo_dirnamedistinfo_dir
wheel_pathwfs                   r   runzbdist_wheel.rung  s   11/B#+ "--k:	!	W%++I$+O~~!__ 
 334EF $ H 	QCGZ#-rww||DMM3/OP	Q 77d?  "ww//T]]D0QR6FFD 4#3!%!2!28I	
 	>$..!123#&*lln#'8"2231XJay(T}}>>L77<< 5 5g6J6J KL 	""#57PQ,33t((1134$++779:
 ww||DNN4DEd&&5\* ww~~dmm,KK&WW\\$--1AF1JK
z3(8(89 	)RNN<(	) 	!!<4;; 0 0! 45	
 ~~HHy 012<<##g-4>>?C4>>1DE	   	) 	)s   7QQ(zbdist_wheel ()c                x   ddl m}  |       }d|d<   ||d<   t        | j                        j	                         |d<   | j
                  | j
                  |d<   | j                         \  }}}|j                  d      D ]E  }|j                  d      D ]/  }	|j                  d      D ]  }
d	j                  ||	|
f      |d
<    1 G t        j                  j                  |d      }t        j                  d|        t        |d      5 }t        |d      j                  |       d d d        y # 1 sw Y   y xY w)Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibBuildr!   r   TagWHEELz	creating wb)maxheaderlen)email.messager  r"   r   r   r   r   r]   r^   rp   rl   r   r   openr   flatten)r   wheelfile_base	generatorr  msgr   r   r   r`   rb   platwheelfile_pathfs                r   r   zbdist_wheel.write_wheelfile  s1    	*i$O$K!$T%6%6!7!=!=!?(,,CL '+lln#'8NN3' 	=D}}S) =$NN3/ =D!$4d*;!<CJ==	=
 ng>9^,-..$' 	;111-55c:	; 	; 	;s   
D00D9c                    t         j                  j                  |      \  }}|dd t         j                  k(  r||dd  z   }|S )Nr   r   )rp   rl   
splitdrivesep)r   rl   drives      r   r   zbdist_wheel._ensure_relative  sA    gg((.t!948#Dr   c           	        t         dk\  r$| j                  j                  j                  xs dS t	               }| j                  j                  d      }t         dk\  r!| j                  j                  j                  }nd|v r|d   d   j                         }nd}d|v r3t        j                  dt        d	
       |j                  |d   d          |s|st        |t              sd}|D ]  }t        |      D ]  }|j                  d      rt        j                   d| d       .||vs3t"        j$                  j'                  |      sSt        j(                  d| d| d       |j                  |         |S )N9   r-   metadata*   license_filesr   license_filezEThe "license_file" option is deprecated. Use "license_files" instead.r?   r@   )zLICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*~zignoring license file "z" as it looks like a backupzadding license file "z" (matched pattern "z"))setuptools_major_versionr   r  r  setr   r]   rC   rD   DeprecationWarningadd
isinstancelistr   endswithr   debugrp   rl   isfiler   )r   filesr  patternspatternrl   s         r   license_pathszbdist_wheel.license_paths  si   #r)$$--;;ArA$$44Z@#r)((11??H (*#O4Q7==?X%MMW"
 IIh~.q12Xj4.HIH 	$Gg $==%II1$7RS u$)=HH/v5I'RTU IIdO$	$ r   c                   d } ||       t         j                  j                  |      sddl}t         j                  j	                  t         j                  j                  |      d      }|j                  |      }d| d}|r+t         j                  j                  |d         }|d| dz  }t        |      t         j                  j                  |      r$|}	t        ||      }
t        j                  |       nt         j                  j	                  |d	      }	t        ||	      }
t        j                  ||d
        t         j                  j	                  |d      }t        |d      5 }|j                         j                         }ddd       s ||       t         j                  j	                  |d      }t!        ddd      }t        |dd      5 }t#        ||      j%                  |
       ddd       | j&                  D ]U  }t         j                  j                  |      }t        j(                  |t         j                  j	                  ||             W  ||       y# 1 sw Y   xY w# 1 sw Y   xY w)z:Convert an .egg-info directory into a .dist-info directoryc                T   t         j                  j                  |       rTt         j                  j                  |       s5t         j                  j	                  |       rt        j                  |        yt         j                  j                  |       rt        j                  |        yy)z-Appropriately delete directory, file or link.N)rp   rl   r   islinkisdirshutilr   unlink)rz   s    r   adiosz#bdist_wheel.egg2dist.<locals>.adios  s\    ww~~a ):rww}}Q?Oa "		! #r   r   Nz
*.egg-infozEgg metadata expected at z but not foundz (z) found - possible misnamed archive file?)PKG-INFOc                
    h dS )N>   SOURCES.txtnot-zip-saferequires.txtr0  r-   )xys     r   <lambda>z&bdist_wheel.egg2dist.<locals>.<lambda>7  s	     % r   )ignorezdependency_links.txtzutf-8)encodingMETADATATF)utf8mangle_from_max_line_lengthr   )policy)rp   rl   r   globr^   dirnamebasenamer   r$  r   mkdirr-  copytreer	  readr   r   r   r
  r(  copy)r   egginfo_pathdistinfo_pathr/  r?  patpossibleerraltpkginfo_pathpkg_infodependency_links_pathdependency_links_filedependency_linkspkg_info_pathserialization_policyoutlicense_pathfilenames                      r   r   zbdist_wheel.egg2dist  s!   	 	mww~~l+
 '',,rww|<lKCyy~H-l^>JCgg&&x{3C5 IJJS/!77>>,''L*<FHHH]# 77<<jAL*<FH OO	 %'GGLL@V$W!+g> HBW#8#=#=#?#E#E#G H#+,]J?* 

 -w7 	J3c"67??I	J !.. 	MLww''5HKKbggll=(&KL	M 	l%H H	J 	Js   0I/I;/I8;J)__name__
__module____qualname__descriptionr
   r	   r   r:   r   r^   r3   user_optionsboolean_optionsr   r   propertyr   r   r   wheel_versionr   r   r(  r   r-   r   r   rv   rv      s   /K   	Q*401	
	
 	LR	

	

	

 	JGNN		01	
 ",,0	
	
	
i9Lv KO(*)RV $ $8tXFv )8-(G#(M;0 * *XFr   rv   )TT)7__doc__
__future__r   rp   r   r-  rr   r+   r1   r9   rC   email.generatorr   r   email.policyr   r?  r   r   zipfiler	   r
   
setuptoolsr   rP   r   r]  macosx_libfiler   r  r   utilr   vendored.packagingr   r   r#   	wheelfiler   r   r'   intr]   r  r   r.   r3   r:   rJ   rc   rf   rh   rn   rj   rv   r-   r   r   <module>ri     s    # 	 	    
   5 $   ,   * 9 )  $ =  /	6 z55;;C@CD ! %&$$%P-30
v' vr   