o
    JAf3                     @   s   d dl mZ d dlmZ d dlmZm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ZG dd	 d	ejeZG d
d dZdS )    )convert_path)log)DistutilsErrorDistutilsOptionErrorN)easy_install)_path)
namespacesc                   @   sv   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 Zedd Zdd Z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
   multi_versionuninstall_linkZuninstall_namespacesinstall_for_developmentwarn_deprecated_optionsself r   \/usr/lib/python3.10/site-packages/setuptools-67.5.1-py3.10.egg/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_pathalways_copy_fromr   r   r   r   r   %   s
   

zdevelop.initialize_optionsc                 C   s   dd l }| d}|jrd}|j|jf}t|| |jg| _t|  | 	  | 
  | jtd |jd }tj| j|| _|j| _| jd u rTtj|j| _t| j}ttj| j| j}||krptd| |j|||tj|j|jd| _| | j| j| j| _d S )Nr   egg_infoz-Please rename %r to %r before using 'develop'z*.eggz	.egg-linkzA--egg-path must be a relative path from the install directory to project_name)pkg_resourcesget_finalized_commandbroken_egg_infor   r   egg_nameargsr   finalize_optionsexpand_basedirsexpand_dirspackage_indexscanglobospathjoininstall_diregg_linkegg_baser   abspathr   normpathr   DistributionPathMetadatadist_resolve_setup_pathr   )r   r   eitemplater!   Zegg_link_fntargetr   r   r   r   r"   ,   sD   





zdevelop.finalize_optionsc                 C   sj   |  tjdd}|tjkrd|dd  }ttj	|||}ttj}||kr3t
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   r3   W   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
sNt| jd}|| jd | j  W d    n1 sIw   Y  | d | j| j  d S )Nr   	build_extr8   )ZinplacezCreating %s (link to %s)w
)run_commandreinitialize_command
setuptoolsbootstrap_install_fromr   Zinstall_namespacesr   infor,   r-   dry_runopenwriter   r   process_distributionr2   no_deps)r   fr   r   r   r   n   s   

zdevelop.install_for_developmentc                 C   s   t j| jr=td| j| j t| j}dd |D }|  || j	g| j	| j
gfvr4td| d S | js=t | j | jsF| | j | jjrQtd d S d S )NzRemoving %s (link to %s)c                 S   s   g | ]}|  qS r   )r;   ).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   rF   r-   rH   closer   r   warnrG   unlink
update_pthr2   distributionscripts)r   Zegg_link_filecontentsr   r   r   r      s   
zdevelop.uninstall_linkc              	   C   s   || j urt| |S | | | jjpg D ]1}tjt	|}tj
|}t|}| }W d    n1 s:w   Y  | |||| qd S N)r2   r   install_egg_scriptsinstall_wrapper_scriptsrU   rV   r(   r)   r.   r   basenameiorH   readinstall_script)r   r2   script_nameZscript_pathstrmscript_textr   r   r   rY      s   


zdevelop.install_egg_scriptsc                 C   s   t |}t| |S rX   )VersionlessRequirementr   rZ   r   r2   r   r   r   rZ      s   zdevelop.install_wrapper_scriptsN)__name__
__module____qualname____doc__descriptionr   user_optionsboolean_optionscommand_consumes_argumentsr   r   r"   staticmethodr3   r   r   rY   rZ   r   r   r   r   r	      s$    	+
r	   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	rb   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'
    c                 C   s
   || _ d S rX   )_VersionlessRequirement__distrc   r   r   r   __init__   s   
zVersionlessRequirement.__init__c                 C   s   t | j|S rX   )getattrrm   )r   namer   r   r   __getattr__   s   z"VersionlessRequirement.__getattr__c                 C   s   | j S rX   r   r   r   r   r   as_requirement   s   z%VersionlessRequirement.as_requirementN)rd   re   rf   rg   rn   rq   rr   r   r   r   r   rb      s
    rb   )distutils.utilr   	distutilsr   distutils.errorsr   r   r(   r'   r\   setuptools.command.easy_installr   rD   r   r   ZDevelopInstallerr	   rb   r   r   r   r   <module>   s     