
 X!                 @   s   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	 y d  d l
 m Z Wn% e k
 r Gd d   d  Z Yn XGd d	   d	 e e  Z d
 d   Z d S)    N)build_py)convert_path)glob)	Mixin2to3c               @   s   e  Z d  Z d d d  Z d S)r   Tc             C   s   d S)z
do nothingN )selffilesZdoctestsr   r   M/home/ubuntu/projects/ifolica/build/setuptools/setuptools/command/build_py.pyrun_2to3   s    zMixin2to3.run_2to3N)__name__
__module____qualname__r
   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 d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z e j d k  r d d d  Z n  d d   Z d d   Z d d   Z d d   Z d  S)!r   aX  Enhanced 'build_py' command that includes data files with packages

    The data files are specified via a 'package_data' argument to 'setup()'.
    See 'setuptools.dist.Distribution' for more details.

    Also, this version of the 'build_py' command allows you to specify both
    'py_modules' and 'packages' in the same setup operation.
    c             C   sc   t  j |   |  j j |  _ |  j j p+ i  |  _ d |  j k rM |  j d =n  g  |  _ g  |  _ d  S)N
data_files)	_build_pyfinalize_optionsdistributionpackage_dataexclude_package_data__dict___build_py__updated_files_build_py__doctests_2to3)r   r   r   r	   r      s     	zbuild_py.finalize_optionsc             C   s   |  j  r |  j r d S|  j  r. |  j   n  |  j rN |  j   |  j   n  |  j |  j d  |  j |  j d  |  j |  j d  |  j t	 j
 |  d d  d S)z?Build modules, packages, and copy data files to build directoryNFTinclude_bytecoder   )
py_modulespackagesZbuild_modulesZbuild_packagesbuild_package_datar
   r   r   byte_compiler   get_outputs)r   r   r   r	   run!   s    		
zbuild_py.runc             C   s3   | d k r# |  j    |  _ } | St j |  |  S)Nr   )_get_data_filesr   r   __getattr__)r   attrr   r   r   r	   r   5   s    zbuild_py.__getattr__c             C   sA   t  j |  | | |  \ } } | r7 |  j j |  n  | | f S)N)r   build_moduler   append)r   moduleZmodule_filepackageoutfilecopiedr   r   r	   r!   ;   s    zbuild_py.build_modulec                s   |  j    g  } x |  j p f  D] } |  j |  } t j j |  j g | j d    } t |  d     f d d   |  j	 | |  D } | j
 | | | | f  q  W| S)z?Generate list of '(package,src_dir,build_dir,filenames)' tuples.   c                s    g  |  ] } |   d    q S)Nr   ).0file)plenr   r	   
<listcomp>Q   s   	 z,build_py._get_data_files.<locals>.<listcomp>)analyze_manifestr   get_package_dirospathjoin	build_libsplitlenfind_data_filesr"   )r   datar$   src_dir	build_dir	filenamesr   )r+   r	   r   A   s    
%%zbuild_py._get_data_filesc             C   s   |  j  j d g   |  j  j | g   } |  j j | g   d d  } x6 | D]. } | j t t j j | t |     qN W|  j	 | | |  S)z6Return filenames for package's data files in 'src_dir' N)
r   getmanifest_filesextendr   r/   r0   r1   r   exclude_data_files)r   r$   r7   globsr   patternr   r   r	   r5   V   s    ,zbuild_py.find_data_filesc       
      C   s   x |  j  D] \ } } } } x | D] } t j j | |  } |  j t j j |   t j j | |  } |  j | |  \ } }	 t j j |  } |	 r# | |  j j	 k r# |  j
 j |  q# q# Wq
 Wd S)z$Copy data files into build directoryN)r   r/   r0   r1   mkpathdirname	copy_fileabspathr   Zconvert_2to3_doctestsr   r"   )
r   r$   r7   r8   r9   filenametargetsrcfileoutfr&   r   r   r	   r   `   s    zbuild_py.build_package_datac             C   s\  i  |  _  } |  j j s d  Si  } x0 |  j p2 f  D] } | | t |  j |   <q3 W|  j d  |  j d  } x | j j	 D] } t
 j j t |   \ } } d  } | }	 xU | r| | k r| | k r| } t
 j j |  \ } }
 t
 j j |
 |  } q W| | k r | j d  r4| |	 k r4q n  | j | | g   j |  q q Wd  S)Negg_infoz.py)r<   r   Zinclude_package_datar   assert_relativer.   run_commandget_finalized_commandfilelistr   r/   r0   r3   r1   endswith
setdefaultr"   )r   ZmfZsrc_dirsr$   Zei_cmdr0   dfprevZoldfZdfr   r   r	   r-   l   s(    !zbuild_py.analyze_manifestc             C   s   d  S)Nr   )r   r   r   r	   get_data_files   s    zbuild_py.get_data_filesz2.4r(   c             C   s$   t  j |  |  d d   |  j D S)aj  Return complete list of files copied to the build directory

            This includes both '.py' files and data files, as well as '.pyc'
            and '.pyo' files if 'include_bytecode' is true.  (This method is
            needed for the 'install_lib' command to do its job properly, and to
            generate a correct installation manifest.)
            c             S   s>   g  |  ]4 \ } } } } | D] } t  j j | |   q q Sr   )r/   r0   r1   )r)   r$   r7   r8   r9   rE   r   r   r	   r,      s   	z(build_py.get_outputs.<locals>.<listcomp>)r   r   r   )r   r   r   r   r	   r      s    	zbuild_py.get_outputsc             C   s   y |  j  | SWn t k
 r# Yn Xt j |  | |  } | |  j  | <| sZ |  j j r^ | Sx; |  j j D]) } | | k s | j | d  rk Pqk qk W| St | d  } d j   | j	   k r d d l
 m } | d | f   n  | j   | S)z8Check namespace packages' __init__ for declare_namespacer'   ZrbUdeclare_namespacer   )DistutilsErrorzNamespace package problem: %s is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)
)packages_checkedKeyErrorr   check_packager   Znamespace_packages
startswithopenencodereaddistutils.errorsrU   close)r   r$   package_dirZinit_pypkgrQ   rU   r   r   r	   rX      s(    
zbuild_py.check_packagec             C   s   i  |  _  t j |   d  S)N)rV   r   initialize_options)r   r   r   r	   ra      s    	zbuild_py.initialize_optionsc             C   sA   t  j |  |  } |  j j d  k	 r= t j j |  j j |  S| S)N)r   r.   r   Zsrc_rootr/   r0   r1   )r   r$   resr   r   r	   r.      s    zbuild_py.get_package_dirc                s   |  j  j d g   |  j  j | g   } g    x< | D]4 }   j t j | t j j | t |     q5 Wt	 j
      i      f d d   | D S)z6Filter filenames for package's data files in 'src_dir'r:   c                s@   g  |  ]6 } |   k r |  k r  j  | d   r |  q S)r(   )rO   )r)   rQ   )badseenr   r	   r,      s   	 z/build_py.exclude_data_files.<locals>.<listcomp>)r   r;   r=   fnmatchfilterr/   r0   r1   r   dictfromkeys)r   r$   r7   r   r?   r@   r   )rc   rd   r	   r>      s    &zbuild_py.exclude_data_filesN)r   r   r   __doc__r   r   r   r!   r   r5   r   r-   rS   sysversionr   rX   ra   r.   r>   r   r   r   r	   r      s    
r   c             C   sO   t  j j |   s |  Sd d l m } t j d  j   |  } | |   d  S)Nr   )DistutilsSetupErrorz
        Error: setup script specifies an absolute path:

            %s

        setup() arguments must *always* be /-separated paths relative to the
        setup.py directory, *never* absolute paths.
        )r/   r0   isabsr]   rl   textwrapdedentlstrip)r0   rl   msgr   r   r	   rJ      s    rJ   )r/   rj   re   rn   Zdistutils.command.build_pyr   r   distutils.utilr   r   Zsetuptools.lib2to3_exr   ImportErrorrJ   r   r   r   r	   <module>   s   