a
    6Rîhæ  ã                   @   sŽ   d dl Z d dlZd dl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 G d	d
„ d
ejeƒZG dd„ dƒZdS )é    N)Ú_normalizationÚ_pathÚ
namespaces)Úeasy_installé   )Ú_read_utf8_with_fallback)Úlog)ÚDistutilsOptionError)Úconvert_pathc                   @   sˆ   e Zd ZdZdZejddg Zejdg ZdZdd„ Z	d	d
„ Z
ddœdd„Zedd„ ƒZddœdd„Zddœdd„Zdd„ Zdd„ ZdS )ÚdevelopzSet up package for developmentz%install package in 'development mode')Ú	uninstallÚuzUninstall this source package)z	egg-path=Nz-Set the path to be used in the .egg-link filer   Fc                 C   s2   | j rd| _|  ¡  |  ¡  n|  ¡  |  ¡  d S )NT)r   Zmulti_versionÚuninstall_linkZuninstall_namespacesÚinstall_for_developmentZwarn_deprecated_options©Úself© r   úP/opt/python-3.9.24/usr/lib/python3.9/site-packages/setuptools/command/develop.pyÚrun   s    
zdevelop.runc                 C   s&   d | _ d | _t | ¡ d | _d| _d S )NÚ.)r   Úegg_pathr   Úinitialize_optionsÚ
setup_pathZalways_copy_fromr   r   r   r   r   &   s
    
zdevelop.initialize_optionsN©Úreturnc                 C   s  dd l }|  d¡}|jg| _t | ¡ |  ¡  |  ¡  | j 	t
 
d¡¡ t |j¡d }tj | j|¡| _|j| _| jd u rŒtj |j¡| _t | j¡}t tj | j| j¡¡}||krÄtd| ƒ‚|j|| |tj |j¡¡|jd| _|  | j| j| j¡| _d S )Nr   Úegg_infoz*.eggz	.egg-linkzA--egg-path must be a relative path from the install directory to ©Úproject_name)Úpkg_resourcesÚget_finalized_commandÚegg_nameÚargsr   Úfinalize_optionsÚexpand_basedirsÚexpand_dirsZpackage_indexÚscanÚglobr   Zfilename_component_brokenÚosÚpathÚjoinÚinstall_dirÚegg_linkÚegg_baser   Úabspathr   Únormpathr	   ÚDistributionÚPathMetadatar   ÚdistÚ_resolve_setup_pathr   )r   r   ÚeiZegg_link_fnÚtargetr   r   r   r   r"   -   s>    


ÿ
ÿÿýýzdevelop.finalize_optionsc                 C   sj   |   tjd¡ d¡}|tjkr0d| d¡d  }t tj 	|||¡¡}t tj¡}||krft
d||ƒ‚|S )zµ
        Generate a path from egg_base back to '.' where the
        setup script resides and ensure that path points to the
        setup path from $install_dir/$egg_path.
        ú/z../é   zGCan't get a consistent path to setup script from installation directory)Úreplacer'   ÚsepÚrstripÚcurdirÚcountr   r.   r(   r)   r	   )r,   r*   r   Zpath_to_setupÚresolvedr:   r   r   r   r2   V   s    
üzdevelop._resolve_setup_pathc                 C   s¸   |   d¡ | jddd |   d¡ tjr:|  tj¡ d t_|  ¡  t d| j| j	¡ | j
s t| jddd&}| | jd	 | j ¡ W d   ƒ n1 s–0    Y  |  d | j| j ¡ d S )
Nr   Ú	build_extT)ZinplacezCreating %s (link to %s)Úwzutf-8)ÚencodingÚ
)Úrun_commandÚreinitialize_commandÚ
setuptoolsZbootstrap_install_fromr   Zinstall_namespacesr   Úinfor+   r,   Údry_runÚopenÚwriter   r   Zprocess_distributionr1   Úno_deps)r   Úfr   r   r   r   k   s    

4zdevelop.install_for_developmentc                 C   sš   t j | j¡rrt d| j| j¡ dd„ t| jƒ ¡ D ƒ}|| j	g| j	| j
gfvr`t d|¡ d S | jsrt  | j¡ | js„|  | j¡ | jjr–t d¡ d S )NzRemoving %s (link to %s)c                 S   s   g | ]}|  ¡ ‘qS r   )r9   )Ú.0Úliner   r   r   Ú
<listcomp>…   s   ÿz*develop.uninstall_link.<locals>.<listcomp>z$Link points to %s: uninstall abortedz5Note: you must uninstall or replace scripts manually!)r'   r(   Úexistsr+   r   rD   r,   r   Ú
splitlinesr   r   ÚwarnrE   ÚunlinkZ
update_pthr1   ÚdistributionÚscripts)r   Úcontentsr   r   r   r      s    þzdevelop.uninstall_linkc                 C   sj   || j urt | |¡S |  |¡ | jjp*g D ]8}tj t	|ƒ¡}tj 
|¡}t|ƒ}|  ||||¡ q,d S ©N)r1   r   Úinstall_egg_scriptsÚinstall_wrapper_scriptsrQ   rR   r'   r(   r-   r
   Úbasenamer   Zinstall_script)r   r1   Úscript_nameZscript_pathÚscript_textr   r   r   rU   •   s    

zdevelop.install_egg_scriptsc                 C   s   t |ƒ}t | |¡S rT   )ÚVersionlessRequirementr   rV   ©r   r1   r   r   r   rV   ¨   s    zdevelop.install_wrapper_scripts)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Údescriptionr   Úuser_optionsÚboolean_optionsZcommand_consumes_argumentsr   r   r"   Ústaticmethodr2   r   r   rU   rV   r   r   r   r   r      s"   þ	)
r   c                   @   s4   e Zd ZdZddœdd„Zedœdd„Zd	d
„ ZdS )rZ   a©  
    Adapt a pkg_resources.Distribution to simply return the project
    name as the 'requirement' so that scripts will work across
    multiple versions.

    >>> from pkg_resources import Distribution
    >>> dist = Distribution(project_name='foo', version='1.0')
    >>> str(dist.as_requirement())
    'foo==1.0'
    >>> adapted_dist = VersionlessRequirement(dist)
    >>> str(adapted_dist.as_requirement())
    'foo'
    Nr   c                 C   s
   || _ d S rT   )Ú_VersionlessRequirement__distr[   r   r   r   Ú__init__¼   s    zVersionlessRequirement.__init__)Únamec                 C   s   t | j|ƒS rT   )Úgetattrrd   )r   rf   r   r   r   Ú__getattr__¿   s    z"VersionlessRequirement.__getattr__c                 C   s   | j S rT   r   r   r   r   r   Úas_requirementÂ   s    z%VersionlessRequirement.as_requirement)r\   r]   r^   r_   re   Ústrrh   ri   r   r   r   r   rZ   ­   s   rZ   )r&   r'   rC   r   r   r   Zsetuptools.command.easy_installr   Zunicode_utilsr   Ú	distutilsr   Údistutils.errorsr	   Údistutils.utilr
   ZDevelopInstallerr   rZ   r   r   r   r   Ú<module>   s    