
 X7                 @   s  d  Z  d d l Z d d l Z d d l Z d d l 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 m Z m Z m Z m Z m Z m Z m Z d d l	 m Z Gd d   d e  Z Gd d   d e  Z Gd d   d e
  Z d d   Z d d   Z  d d   Z! d d   Z" d d   Z# d d   Z$ d d d   Z% d! d"   Z& d# d$   Z' d S)%zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contents    N)Command)log)sdist)
basestring)	svn_utils)convert_path)FileList)parse_requirements	safe_nameparse_versionsafe_versionyield_lines
EntryPointiter_entry_pointsto_filename)walk_revctrlc               @   s   e  Z d  Z d Z d. d/ d0 d1 d2 d3 g Z d d g Z i d d 6d d 6Z d d   Z d d   Z d d   Z	 d d d  Z
 d d   Z d d    Z d! d"   Z d# d$   Z d% d&   Z e d' d(    Z d) d*   Z d+ d,   Z d- S)4egg_infoz+create a distribution's .egg-info directory	egg-base=eLdirectory containing .egg-info directories (default: top of the source tree)tag-svn-revisionr,Add subversion revision ID to version numbertag-dated0Add date stamp (e.g. 20050528) to version number
tag-build=b-Specify explicit tag to add to version numberno-svn-revisionR*Don't add subversion revision ID [default]no-dateD"Don't include date stamp [default]c             C   sU   d  |  _  d  |  _ d  |  _ d  |  _ d  |  _ d |  _ d |  _ d |  _ d  |  _ d  S)Nr   F)	egg_nameegg_versionegg_baser   	tag_buildtag_svn_revisiontag_datebroken_egg_infovtags)self r.   M/home/ubuntu/projects/ifolica/build/setuptools/setuptools/command/egg_info.pyinitialize_options)   s    								zegg_info.initialize_optionsc          	   C   sK   d d l  m } t d t d d d d d |  j     } | | |  d  S)Nr   )edit_configr   r)   r*   r(   )Zsetuptools.command.setoptr1   dicttags)r-   filenamer1   valuesr.   r.   r/   save_version_info4   s    zegg_info.save_version_infoc             C   s  t  |  j j    |  _ |  j   |  _ |  j   |  _ y$ t t	 d |  j |  j f   Wn4 t
 k
 r t j j d |  j |  j f   Yn X|  j d  k r |  j j } | p i  j d t j  |  _ n  |  j d  t |  j  d |  _ |  j t j k r#t j j |  j |  j  |  _ n  d |  j k r?|  j   n  |  j |  j j _ |  j j } | d  k	 r| j |  j j   k r|  j | _ t |  j  | _  d  |  j _ n  d  S)Nz%s==%sz2Invalid distribution name or version syntax: %s-%s r'   z	.egg-info-)!r
   distributionget_namer%   r3   r,   tagged_versionr&   listr	   
ValueError	distutilserrorsDistutilsOptionErrorr'   package_dirgetoscurdirensure_dirnamer   r   pathjoincheck_broken_egg_infometadataversionZ_patched_distkeylower_versionr   _parsed_version)r-   dirspdr.   r.   r/   finalize_options?   s2    !	!! $zegg_info.finalize_optionsFc             C   sl   | r |  j  | | |  nL t j j |  rh | d k rX | rX t j d | |  d S|  j |  n  d S)a  Write `data` to `filename` or delete if empty

        If `data` is non-empty, this routine is the same as ``write_file()``.
        If `data` is empty but not ``None``, this is the same as calling
        ``delete_file(filename)`.  If `data` is ``None``, then this is a no-op
        unless `filename` exists, in which case a warning is issued about the
        orphaned file (if `force` is false), or deleted (if `force` is true).
        Nz$%s not set in setup(), but %s exists)
write_filerC   rF   existsr   warndelete_file)r-   whatr4   dataforcer.   r.   r/   write_or_delete_fileg   s    	zegg_info.write_or_delete_filec             C   sj   t  j d | |  t j d k r4 | j d  } n  |  j sf t | d  } | j |  | j   n  d S)zWrite `data` to `filename` (if not a dry run) after announcing it

        `what` is used in a log message to identify what is being written
        to the file.
        zwriting %s to %s   zutf-8wbN)rZ   )	r   infosysversion_infoencodedry_runopenwriteclose)r-   rV   r4   rW   fr.   r.   r/   rR   {   s    	zegg_info.write_filec             C   s-   t  j d |  |  j s) t j |  n  d S)z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r\   r`   rC   unlink)r-   r4   r.   r.   r/   rU      s    	zegg_info.delete_filec             C   sE   |  j  j   } |  j r4 | j |  j  r4 t |  St | |  j  S)N)r9   get_versionr,   endswithr   )r-   rJ   r.   r.   r/   r;      s    
zegg_info.tagged_versionc             C   s   |  j  |  j  |  j j } xN t d  D]@ } | j d |  } | |  | j t j j	 |  j | j   q) Wt j j	 |  j d  } t j j
 |  r |  j |  n  |  j   d  S)Nzegg_info.writers	installerznative_libs.txt)mkpathr   r9   Zfetch_build_eggr   loadnamerC   rF   rG   rS   rU   find_sources)r-   rh   epwriternlr.   r.   r/   run   s    ,zegg_info.runc             C   s   d } |  j  r | |  j  7} n  |  j rc t j j d  sL t j j d  rc | d |  j   7} n  |  j r d d  l } | | j d  7} n  | S)Nr7   z.svnzPKG-INFOz-r%sr   z-%Y%m%d)	r(   r)   rC   rF   rS   get_svn_revisionr*   timestrftime)r-   rJ   rr   r.   r.   r/   r3      s    		$	zegg_info.tagsc               C   s   t  t j j t j  j    S)N)strr   ZSvnInforj   rC   rD   get_revisionr.   r.   r.   r/   rq      s    zegg_info.get_svn_revisionc             C   sJ   t  j j |  j d  } t |  j  } | | _ | j   | j |  _ d S)z"Generate SOURCES.txt manifest filezSOURCES.txtN)	rC   rF   rG   r   manifest_makerr9   manifestrp   filelist)r-   Zmanifest_filenamemmr.   r.   r/   rl      s
    	
zegg_info.find_sourcesc             C   s   |  j  d } |  j t j k r: t j j |  j |  } n  t j j |  r t j d d d d d | |  j	  |  j	 |  _
 | |  _	 n  d  S)Nz	.egg-infor8   N   z
Note: Your current .egg-info directory has a '-' in its name;
this will not work correctly with "setup.py develop".

Please rename %s to %s to correct this problem.
)r%   r'   rC   rD   rF   rG   rS   r   rT   r   r+   )r-   Zbeir.   r.   r/   rH      s    zegg_info.check_broken_egg_infoN)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r    r!   )r"   r#   r$   )__name__
__module____qualname__descriptionuser_optionsboolean_optionsnegative_optr0   r6   rQ   rY   rR   rU   r;   rp   r3   staticmethodrq   rl   rH   r.   r.   r.   r/   r      s0     	

(r   c               @   s"   e  Z d  Z d Z d d   Z d S)r   z@File list that accepts only existing, platform-independent pathsc             C   s	  | j  d  r" | d  d  } n  t |  } t j d k r yD t j j |  sm t j j | j d   r |  j j	 |  n  Wqt
 k
 r t j j | j d   r |  j j	 |  n t j d | t j    YqXn% t j j |  r|  j j	 |  n  d  S)N   rZ   zutf-8z!'%s' not %s encodable -- skipping)rZ   )rg   r   r]   r^   rC   rF   rS   r_   filesappendUnicodeEncodeErrorr   rT   getfilesystemencoding)r-   itemrF   r.   r.   r/   r      s    -zFileList.appendN)r{   r|   r}   __doc__r   r.   r.   r.   r/   r      s   r   c               @   sj   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)rv   zMANIFEST.inc             C   s(   d |  _  d |  _ d |  _ d |  _ d  S)Nr   )Zuse_defaultsZpruneZmanifest_onlyZforce_manifest)r-   r.   r.   r/   r0      s    			z!manifest_maker.initialize_optionsc             C   s   d  S)Nr.   )r-   r.   r.   r/   rQ      s    zmanifest_maker.finalize_optionsc             C   s   t    |  _ t j j |  j  s. |  j   n  |  j j   |  j   t j j |  j	  rg |  j
   n  |  j   |  j j   |  j j   |  j   d  S)N)r   rx   rC   rF   rS   rw   write_manifestfindalladd_defaultstemplateZread_templateprune_file_listsortZremove_duplicates)r-   r.   r.   r/   rp      s    

zmanifest_maker.runc             C   s   t  j d	 k r g  } xX |  j j D]J } y | j d  Wn# t k
 r^ t j d |  Yq" X| j |  q" W| |  j _ n  |  j j } t	 j
 d k r d d   | D } n  |  j t |  j | f d |  j  d S)
zWrite the file list in 'self.filelist' (presumably as filled in
        by 'add_defaults()' and 'read_template()') to the manifest file
        named by 'self.manifest'.
        rZ   zutf-8z$'%s' not UTF-8 encodable -- skipping/c             S   s%   g  |  ] } | j  t j d    q S)r   )replacerC   sep).0rd   r.   r.   r/   
<listcomp>  s   	 z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)rZ   )r]   r^   rx   r   r_   r   r   rT   r   rC   r   executerR   rw   )r-   r   filer.   r.   r/   r      s    zmanifest_maker.write_manifestc             C   s&   | j  d  s" t j |  |  n  d  S)Nzstandard file not found:)
startswithr   rT   )r-   msgr.   r.   r/   rT     s    zmanifest_maker.warnc             C   s   t  j |   |  j j |  j  |  j j |  j  t t    } | r[ |  j j |  n" t	 j
 j |  j  r} |  j   n  |  j d  } |  j j d d | j d  S)Nr   *prefix)r   r   rx   r   r   rw   r<   r   extendrC   rF   rS   Zread_manifestget_finalized_commandZinclude_patternr   )r-   ZrcfilesZei_cmdr.   r.   r/   r     s    zmanifest_maker.add_defaultsc             C   s   |  j  d  } |  j j   } |  j j d  d | j |  j j d  d | t j t j	  } |  j j | d | d d d  S)Nbuildr   z(RCS|CVS|\.svn)Zis_regexr   )
r   r9   get_fullnamerx   Zexclude_pattern
build_basereescaperC   r   )r-   r   base_dirr   r.   r.   r/   r   %  s    zmanifest_maker.prune_file_listN)r{   r|   r}   r   r0   rQ   rp   r   rT   r   r   r.   r.   r.   r/   rv      s   rv   c             C   sZ   d j  |  } t j d k r0 | j d  } n  t |  d  } | j |  | j   d S)z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    
rZ   zutf-8r[   N)rZ   )rG   r]   r^   r_   ra   rb   rc   )r4   contentsrd   r.   r.   r/   rR   .  s    rR   c             C   s   t  j d |  |  j s |  j j } |  j | j | _ } |  j | j | _ } z | j	 |  j
  Wd  | | | _ | _ Xt |  j d d   } d d l m } | j |  j
 |  n  d  S)Nz
writing %sZzip_safer   )	bdist_egg)r   r\   r`   r9   rI   r&   rJ   r%   rk   write_pkg_infor   getattrZsetuptools.commandr   Zwrite_safety_flag)cmdbasenamer4   rI   ZoldverZoldnamesafer   r.   r.   r/   r   9  s    	r   c             C   s&   t  j j |  r" t j d  n  d  S)NzsWARNING: 'depends.txt' is not used by setuptools 0.6!
Use the install_requires/extras_require setup() args instead.)rC   rF   rS   r   rT   )r   r   r4   r.   r.   r/   warn_depends_obsoleteJ  s    r   c             C   s   |  j  } d j t | j p f    g } xI | j p9 i  j   D]2 \ } } | j d | d j t |   f  q@ W|  j d | d j |   d  S)Nr   z	

[%s]
%srequirementsr7   )r9   rG   r   Zinstall_requiresZextras_requireitemsr   rY   )r   r   r4   distrW   extrareqsr.   r.   r/   write_requirementsR  s
    	!"*r   c             C   sI   t  j d d   |  j j   D  } |  j d | d j |  d  d  S)Nc             S   s&   g  |  ] } | j  d  d  d  q S).r   r   )split)r   kr.   r.   r/   r   \  s   	z(write_toplevel_names.<locals>.<listcomp>ztop-level namesr   )r2   fromkeysr9   Ziter_distribution_namesrR   rG   )r   r   r4   pkgsr.   r.   r/   write_toplevel_namesY  s    	r   c             C   s   t  |  | | d  d  S)NT)	write_arg)r   r   r4   r.   r.   r/   overwrite_argc  s    r   Fc             C   sg   t  j j |  d } t |  j | d   } | d  k	 rM d j |  d } n  |  j | | | |  d  S)Nr   r   )rC   rF   splitextr   r9   rG   rY   )r   r   r4   rX   Zargnamevaluer.   r.   r/   r   f  s
    r   c             C   s   |  j  j } t | t  s' | d  k r0 | } n | d  k	 r g  } xs | j   D]e \ } } t | t  s t j | |  } d j t t	 | j
     } n  | j d | | f  qO Wd j |  } n  |  j d | | d  d  S)Nr   z	[%s]
%s

r7   zentry pointsT)r9   Zentry_points
isinstancer   r   r   parse_grouprG   maprt   r5   r   rY   )r   r   r4   rm   rW   sectionr   r.   r.   r/   write_entriesm  s    	!r   c              C   sn   t  j j d  rj t d d  }  x9 |  D]1 } t j d |  } | r( t | j d   Sq( W|  j   n  d S)NzPKG-INFOrUzVersion:.*-r(\d+)\s*$r   r   )	rC   rF   rS   ra   r   matchintgrouprc   )rd   liner   r.   r.   r/   get_pkg_info_revision}  s    r   )(r   rC   r   r]   
setuptoolsr   distutils.errorsr>   r   Zsetuptools.command.sdistr   Zsetuptools.compatr   r   distutils.utilr   distutils.filelistr   Z	_FileListpkg_resourcesr	   r
   r   r   r   r   r   r   r   r   rv   rR   r   r   r   r   r   r   r   r   r.   r.   r.   r/   <module>   s2   :J
