o
    “siïu  ã                
   @   sÄ  d 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 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mZ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dddddœZ ddddddœddddddœe ddd dddœddd dddœd!œZ!er¨d"d"d#d$d%dœe!d&< d"d"d'd(d%dœe!d)< e! "ej#¡ dZ$d*d+„ Z%d,d-„ Z&d.d/„ Z'd0d1„ Z(d2d3„ Z)d4d5„ Z*d6d7„ Z+d8d9„ Z,d:d;„ Z-d<d=„ Z.G d>d?„ d?e	ƒZ/dS )@zFdistutils.command.install

Implements the Distutils 'install' command.é    N)Úlog)ÚCommand)ÚDEBUG)Úget_config_vars)ÚDistutilsPlatformError)Ú
write_file)Úconvert_pathÚ
subst_varsÚchange_root)Úget_platform)ÚDistutilsOptionErroré   )Ú_framework_compaté   )Ú_collections)Ú	USER_BASE)Ú	USER_SITETz{base}/Lib/site-packagesz{base}/Include/{dist_name}z{base}/Scriptsz{base})ÚpurelibÚplatlibÚheadersÚscriptsÚdatazA{base}/lib/{implementation_lower}{py_version_short}/site-packageszN{platbase}/{platlibdir}/{implementation_lower}{py_version_short}/site-packageszM{base}/include/{implementation_lower}{py_version_short}{abiflags}/{dist_name}z
{base}/binz!{base}/lib/{implementation_lower}z*{base}/{platlibdir}/{implementation_lower}z1{base}/include/{implementation_lower}/{dist_name}z{base}/site-packagesz{base}/include/{dist_name})Úposix_prefixÚ
posix_homeÚntÚpypyZpypy_ntz
{usersite}zF{userbase}/{implementation}{py_version_nodot_plat}/Include/{dist_name}z:{userbase}/{implementation}{py_version_nodot_plat}/Scriptsz
{userbase}Únt_userzQ{userbase}/include/{implementation_lower}{py_version_short}{abiflags}/{dist_name}z{userbase}/binÚ
posix_userc                   C   s@   t  t¡� dd„ t ¡ D ƒW  d   ƒ S 1 sw   Y  d S )Nc                 S   s   i | ]
}|t j|d d�“qS )F)Úexpand)Ú	sysconfigÚ	get_paths©Ú.0Úscheme© r$   útC:\Users\PC\students\dividedattentionclub\venv\lib\python3.10\site-packages\setuptools/_distutils/command/install.pyÚ
<dictcomp>b   s    ÿÿz+_load_sysconfig_schemes.<locals>.<dictcomp>)Ú
contextlibÚsuppressÚAttributeErrorr   Úget_scheme_namesr$   r$   r$   r%   Ú_load_sysconfig_schemes`   s
   þ$ÿr+   c                      s(   t ƒ pi ‰ ‡ fdd„tt tˆ ¡ƒD ƒS )z=
    Extend default schemes with schemes from sysconfig.
    c                    s*   i | ]}|i t  |i ¡¥ˆ  |i ¡¥“qS r$   )ÚINSTALL_SCHEMESÚgetr!   ©Zsysconfig_schemesr$   r%   r&   o   s    ü
ÿ
þÿz!_load_schemes.<locals>.<dictcomp>)r+   ÚsetÚ	itertoolsÚchainr,   r$   r$   r.   r%   Ú_load_schemesh   s   

ûr2   c                   C   s   t tdƒrdS dS )NÚpypy_version_infoÚPyPyÚPython)ÚhasattrÚsysr$   r$   r$   r%   Ú_get_implementationx   s   
r8   c                 C   s.   t |tt|ƒƒƒ}t| ƒ t| t|ƒƒ¡ d S ©N)Ú_inject_headersÚ_load_schemeÚ_resolve_schemeÚvarsÚupdateÚ_remove_setÚ_scheme_attrs)ÚobÚnamer#   r$   r$   r%   Ú_select_scheme   s   rC   c                    s   ‡ fdd„|  ¡ D ƒS )z1
    Include only attrs that are None in ob.
    c                    s$   i | ]\}}t ˆ |ƒd u r||“qS r9   )Úgetattr)r"   ÚkeyÚvalue©rA   r$   r%   r&   ˆ   s   $ z_remove_set.<locals>.<dictcomp>)Úitems)rA   Úattrsr$   rG   r%   r?   „   s   r?   c                 C   sD   |   d¡\}}}zt |¡}W |S  ty!   t t| ƒ¡}Y |S w )NÚ_)Ú	partitionr   Úget_preferred_schemeÚ	ExceptionÚfwr#   Ú
_pypy_hack)rB   Úos_nameÚseprE   Úresolvedr$   r$   r%   r<   ‹   s   þþr<   c                 C   s
   t ƒ |  S r9   )r2   )rB   r$   r$   r%   r;   ”   s   
r;   c                 C   s    t t| ƒƒ}| d|d ¡ |S )z¾
    Given a scheme name and the resolved scheme,
    if the scheme does not include headers, resolve
    the fallback scheme for the name and use headers
    from it. pypa/distutils#88
    r   )r;   rO   Ú
setdefault)rB   r#   Úfallbackr$   r$   r%   r:   ˜   s   	r:   c                    s   ‡ fdd„t D ƒS )z<Resolve install directories by applying the install schemes.c                    s   i | ]
}d |› �ˆ | “qS )Úinstall_r$   )r"   rE   ©r#   r$   r%   r&   ¨   s    z!_scheme_attrs.<locals>.<dictcomp>)ÚSCHEME_KEYSrV   r$   rV   r%   r@   ¦   s   r@   c                 C   sF   t jdk }tt dƒo|}|  d¡ }ddtjdk  }|r!|r!|S | S )N)é   é   r3   )Ú_userÚ_homer   Z_ntr   )r7   Úversion_infor6   ÚendswithÚosrB   )rB   ZPY37Zold_pypyÚprefixZ	pypy_namer$   r$   r%   rO   «   s
   
rO   c                   @   s  e Zd ZdZg d¢Zg d¢Zere ddde f¡ e d¡ ddiZ	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3efd4efd5efd6efd7d8d9„ fgZdS ):Úinstallz'install everything from build directory))zprefix=Nzinstallation prefix)zexec-prefix=Nz.(Unix only) prefix for platform-specific files)zhome=Nz+(Unix only) home directory to install under)zinstall-base=Nz;base installation directory (instead of --prefix or --home))zinstall-platbase=Nz\base installation directory for platform-specific files (instead of --exec-prefix or --home))zroot=Nz<install everything relative to this alternate root directory)zinstall-purelib=Nz;installation directory for pure Python module distributions)zinstall-platlib=Nz8installation directory for non-pure module distributions)zinstall-lib=Nzginstallation directory for all module distributions (overrides --install-purelib and --install-platlib))zinstall-headers=Nz(installation directory for C/C++ headers)zinstall-scripts=Nz)installation directory for Python scripts)zinstall-data=Nz%installation directory for data files)ÚcompileÚczcompile .py to .pyc [default])ú
no-compileNzdon't compile .py files)z	optimize=ÚOzlalso compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0])ÚforceÚfz1force installation (overwrite any existing files))ú
skip-buildNz2skip rebuilding everything (for testing/debugging))zrecord=Nz3filename in which to record list of installed files)ra   re   rg   ÚuserNz!install in user site-package '%s'rc   ra   c                 C   sš   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _t| _t| _d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _dS )zInitializes options.Nr   r   )r_   Úexec_prefixÚhomerh   Úinstall_baseÚinstall_platbaseÚrootÚinstall_purelibÚinstall_platlibÚinstall_headersÚinstall_libÚinstall_scriptsÚinstall_datar   Úinstall_userbaser   Úinstall_usersitera   ÚoptimizeÚ
extra_pathÚinstall_path_filere   Ú
skip_buildÚwarn_dirÚ
build_baseÚ	build_libÚrecord©Úselfr$   r$   r%   Úinitialize_optionsý   s2   
zinstall.initialize_optionsc                 C   sº  | j s	| js	| jr| js| jrtdƒ‚| jr | j s| jr tdƒ‚| jr6| j s2| js2| js2| js2| jr6tdƒ‚tjdkrF| jrF|  	d¡ d| _|  
d¡ tjdkrU|  ¡  n|  ¡  |  
d¡ tj ¡ d	 }td
dƒ\}}ztj}W n ty|   d}Y nw | j ¡ | j ¡ | j ¡ |dtjdd…  dtjdd…  |||||ttddƒtƒ  ¡ tƒ dœ}tttddƒ dd¡d�}trÆ| j|d< | j|d< t  !t" #¡ |t$ ¡ |g¡| _%|  &¡  |  
d¡ | j|d< | j|d< t'rúd	dl(m(} t)dƒ |t| j%ƒƒ |  *¡  |  
d¡ | j�r|  +¡  | j,du �r | j -¡ �r| j.| _,n| j/| _,|  0dddd d!d"dd¡ |  1¡  | j,| _2tj3 4| j,| j5¡| _,| j6du�rO|  7d#dddd d!d"¡ |  
d$¡ |  8d%d&d'¡ dS )(zFinalizes options.zWmust supply either prefix/exec-prefix/home or install-base/install-platbase -- not bothz9must supply either home or prefix/exec-prefix -- not bothzGcan't combine user with prefix, exec_prefix/home, or install_(plat)baseÚposixz+exec-prefix option ignored on this platformNzpre-finalize_{unix,other}zpost-finalize_{unix,other}()r   r_   ri   Ú z%d.%dr   z%d%dÚ
platlibdirÚlib)Ú	dist_nameZdist_versionZdist_fullnameÚ
py_versionÚpy_version_shortÚpy_version_nodotZ
sys_prefixr_   Zsys_exec_prefixri   Úabiflagsrƒ   Zimplementation_lowerÚimplementationÚwinverÚ.)Úpy_version_nodot_platÚuserbaseZusersitezpost-expand_basedirs()ÚbaseÚplatbase)Úpprintzconfig vars:zpost-expand_dirs()r   r   r   r   r   Zlibbasezafter prepending rootÚbuild)r{   r{   )r|   r|   )9r_   ri   rj   rk   rl   r   rh   r^   rB   ÚwarnÚ	dump_dirsÚfinalize_unixÚfinalize_otherr7   ÚversionÚsplitr   r‰   r)   ÚdistributionÚget_nameÚget_versionZget_fullnamer\   rD   r8   ÚlowerÚdictÚreplaceÚHAS_USER_SITErt   ru   r   Z	DictStackrN   r=   r   Úconfig_varsÚexpand_basedirsr   r‘   ÚprintÚexpand_dirsÚcreate_home_pathrq   Úhas_ext_modulesro   rn   Úconvert_pathsÚhandle_extra_pathÚinstall_libbaseÚpathÚjoinÚ
extra_dirsrm   Úchange_rootsZset_undefined_options)r   r†   r_   ri   r‰   Ú
local_varsZcompat_varsr‘   r$   r$   r%   Úfinalize_optionsJ  sÎ   ÿÿÿÿÿþýüûÿ







þ
òþ

ÿ




øÿ
ÿzinstall.finalize_optionsc                 C   s    t sdS ddlm} t |d ¡ | jD ]9}|d }|d dkr&|dd… }|| jv r<| j| }| |¡}t| |ƒ }n
| |¡}t| |ƒ}t d||¡ qdS )zDumps the list of user options.Nr   )Úlongopt_xlateú:éÿÿÿÿú=z  %s: %s)	r   Zdistutils.fancy_getoptr¯   r   ÚdebugÚuser_optionsÚnegative_optÚ	translaterD   )r   Úmsgr¯   ÚoptZopt_nameÚvalr$   r$   r%   r”   ÿ  s    





õzinstall.dump_dirsc                 C   s<  | j dus
| jdur0| jdu o| jdu o| jdu p'| jdu p'| jdu p'| jdu }|r.tdƒ‚dS | j	rJ| j
du r<tdƒ‚| j
 | _ | _|  d¡ dS | jdur]| j | _ | _|  d¡ dS | jdu r†| jdurktdƒ‚ttddƒ}tj tj¡| | _tj tj¡| | _n	| jdu r�| j| _| j| _ | j| _|  d	¡ dS )
z&Finalizes options for posix platforms.NzPinstall-base or install-platbase supplied, but installation scheme is incompleteú$User base directory is not specifiedr   r   z*must not supply exec-prefix without prefixÚ_prefix_additionr‚   r   )rk   rl   rq   rn   ro   rp   rr   rs   r   rh   rt   r   Úselect_schemerj   r_   ri   rD   r   r^   r©   Únormpathr7   )r   Zincomplete_schemer»   r$   r$   r%   r•     sL   
ÿýûúø
ÿ



ÿ
zinstall.finalize_unixc                 C   s¸   | j r| jdu rtdƒ‚| j | _| _|  tjd ¡ dS | jdur0| j | _| _|  d¡ dS | j	du r=tj
 tj	¡| _	| j	 | _| _z	|  tj¡ W dS  ty[   tdtj ƒ‚w )z)Finalizes options for non-posix platformsNrº   rZ   r   z)I don't know how to install stuff on '%s')rh   rt   r   rk   rl   r¼   r^   rB   rj   r_   r©   r½   r7   ÚKeyErrorr~   r$   r$   r%   r–   D  s$   


ÿÿzinstall.finalize_otherc                 C   s   t | |ƒ d S r9   )rC   )r   rB   r$   r$   r%   r¼   Z  s   zinstall.select_schemec                 C   sX   |D ]'}t | |ƒ}|d ur)tjdkstjdkrtj |¡}t|| jƒ}t| ||ƒ qd S )Nr�   r   )rD   r^   rB   r©   Ú
expanduserr	   r    Úsetattr)r   rI   Úattrr¹   r$   r$   r%   Ú_expand_attrs]  s   
€úzinstall._expand_attrsc                 C   ó   |   g d¢¡ dS )zNCalls `os.path.expanduser` on install_base, install_platbase and
        root.)rk   rl   rm   N©rÂ   r~   r$   r$   r%   r¡   f  s   zinstall.expand_basedirsc                 C   rÃ   )z+Calls `os.path.expanduser` on install dirs.)rn   ro   rq   rp   rr   rs   NrÄ   r~   r$   r$   r%   r£   k  s   ÿzinstall.expand_dirsc                 G   s,   |D ]}d| }t | |tt| |ƒƒƒ qdS )z!Call `convert_path` over `names`.rU   N)rÀ   r   rD   ©r   ÚnamesrB   rÁ   r$   r$   r%   r¦   x  s   þzinstall.convert_pathsc                 C   s¤   | j du r
| jj | _ | j durFt d¡ t| j tƒr!| j  d¡| _ t| j ƒdkr0| j d  }}nt| j ƒdkr=| j \}}ntdƒ‚t	|ƒ}nd}d}|| _
|| _dS )	z4Set `path_file` and `extra_dirs` using `extra_path`.NzIDistribution option extra_path is deprecated. See issue27919 for details.ú,r   r   r   zY'extra_path' option must be a list, tuple, or comma-separated string with 1 or 2 elementsr‚   )rw   r™   r   r“   Ú
isinstanceÚstrr˜   Úlenr   r   Ú	path_filer«   )r   rË   r«   r$   r$   r%   r§   ~  s(   


ÿÿ

zinstall.handle_extra_pathc              	   G   s0   |D ]}d| }t | |t| jt| |ƒƒƒ qdS )z:Change the install directories pointed by name using root.rU   N)rÀ   r
   rm   rD   rÅ   r$   r$   r%   r¬   ¡  s   þzinstall.change_rootsc                 C   sf   | j sdS ttj d¡ƒ}| j ¡ D ]\}}t|ƒ |¡r0tj 	|¡s0|  
d| ¡ t |d¡ qdS )zCreate directories under ~.Nú~zos.makedirs('%s', 0o700)iÀ  )rh   r   r^   r©   r¿   r    rH   rÉ   Ú
startswithÚisdirZdebug_printÚmakedirs)r   rj   rB   r©   r$   r$   r%   r¤   §  s   €ýzinstall.create_home_pathc                 C   s&  | j s|  d¡ | j d¡j}| jr|tƒ krtdƒ‚|  ¡ D ]}|  |¡ q| j	r.|  
¡  | jr]|  ¡ }| jrPt| jƒ}tt|ƒƒD ]}|| |d… ||< qC|  t| j|fd| j ¡ ttjjtjƒ}ttjj|ƒ}tj tj | j¡¡}| jr�| j	r€| js‘||vr�t d| j¡ dS dS dS dS )zRuns the command.r’   z"Can't install when cross-compilingNz'writing list of installed files to '%s'zƒmodules installed to '%s', which is not in Python's module search path (sys.path) -- you'll have to change the search path yourself)ry   Úrun_commandr™   Zget_command_objZ	plat_namerz   r   r   Úget_sub_commandsrË   Úcreate_path_filer}   Úget_outputsrm   rÊ   ÚrangeÚexecuter   Úmapr^   r©   r½   r7   Únormcaserq   rx   r   r³   )r   Z
build_platÚcmd_nameÚoutputsZroot_lenÚcounterÚsys_pathrq   r$   r$   r%   Úrun³  sJ   

ýÿþþúûýzinstall.runc                 C   sL   t j | j| jd ¡}| jr|  t|| jgfd| ¡ dS |  	d| ¡ dS )zCreates the .pth fileú.pthzcreating %szpath file '%s' not createdN)
r^   r©   rª   r¨   rË   rx   rÕ   r   r«   r“   )r   Úfilenamer$   r$   r%   rÒ   å  s   ÿzinstall.create_path_filec                 C   sh   g }|   ¡ D ]}|  |¡}| ¡ D ]}||vr| |¡ qq| jr2| jr2| tj | j	| jd ¡¡ |S )z.Assembles the outputs of all the sub-commands.rÝ   )
rÑ   Úget_finalized_commandrÓ   ÚappendrË   rx   r^   r©   rª   r¨   )r   rÙ   rØ   ÚcmdrÞ   r$   r$   r%   rÓ   ñ  s   

€þzinstall.get_outputsc                 C   s.   g }|   ¡ D ]}|  |¡}| | ¡ ¡ q|S )z*Returns the inputs of all the sub-commands)rÑ   rß   ÚextendÚ
get_inputs)r   ZinputsrØ   rá   r$   r$   r%   rã     s
   
zinstall.get_inputsc                 C   s   | j  ¡ p	| j  ¡ S )zSReturns true if the current distribution has any Python
        modules to install.)r™   Zhas_pure_modulesr¥   r~   r$   r$   r%   Úhas_lib  s   ÿzinstall.has_libc                 C   ó
   | j  ¡ S )zLReturns true if the current distribution has any headers to
        install.)r™   Úhas_headersr~   r$   r$   r%   ræ     ó   
zinstall.has_headersc                 C   rå   )zMReturns true if the current distribution has any scripts to.
        install.)r™   Úhas_scriptsr~   r$   r$   r%   rè     rç   zinstall.has_scriptsc                 C   rå   )zJReturns true if the current distribution has any data to.
        install.)r™   Zhas_data_filesr~   r$   r$   r%   Úhas_data  rç   zinstall.has_datarq   rp   rr   rs   Zinstall_egg_infoc                 C   s   dS )NTr$   r~   r$   r$   r%   Ú<lambda>*  s    zinstall.<lambda>) Ú__name__Ú
__module__Ú__qualname__Údescriptionr´   Zboolean_optionsrŸ   rà   r   rµ   r€   r®   r”   r•   r–   r¼   rÂ   r¡   r£   r¦   r§   r¬   r¤   rÜ   rÒ   rÓ   rã   rä   ræ   rè   ré   Zsub_commandsr$   r$   r$   r%   r`   ³   sL    <ÿ
M 61	#2
ûr`   )0Ú__doc__r7   r^   r'   r   r0   Ú	distutilsr   Zdistutils.corer   Zdistutils.debugr   Údistutils.sysconfigr   Zdistutils.errorsr   Zdistutils.file_utilr   Zdistutils.utilr   r	   r
   r   r   r‚   r   rN   r   Úsiter   r   rŸ   ZWINDOWS_SCHEMEr,   r>   ÚschemesrW   r+   r2   r8   rC   r?   r<   r;   r:   r@   rO   r`   r$   r$   r$   r%   Ú<module>   sœ    û
ûûûûé!
û	
û		