ó
8Þ	Pc           @   s„   d  Z  d Z d d l Z d d l Z d d l Z d d l Ty d d l Z Wn e k
 rc d Z n Xd d d „  ƒ  YZ	 d „  Z
 d S(	   sm   distutils.extension

Provides the Extension class, used to describe C/C++ extension
modules in setup scripts.s   $Id$iÿÿÿÿN(   t   *t	   Extensionc           B   s>   e  Z d  Z d d d d d d d d d d d d d d „ Z RS(   s4  Just a collection of attributes that describes an extension
    module and everything needed to build it (hopefully in a portable
    way, but there are hooks that let you be as unportable as you need).

    Instance attributes:
      name : string
        the full name of the extension, including any packages -- ie.
        *not* a filename or pathname, but Python dotted name
      sources : [string]
        list of source filenames, relative to the distribution root
        (where the setup script lives), in Unix form (slash-separated)
        for portability.  Source files may be C, C++, SWIG (.i),
        platform-specific resource files, or whatever else is recognized
        by the "build_ext" command as source for a Python extension.
      include_dirs : [string]
        list of directories to search for C/C++ header files (in Unix
        form for portability)
      define_macros : [(name : string, value : string|None)]
        list of macros to define; each macro is defined using a 2-tuple,
        where 'value' is either the string to define it to or None to
        define it without a particular value (equivalent of "#define
        FOO" in source or -DFOO on Unix C compiler command line)
      undef_macros : [string]
        list of macros to undefine explicitly
      library_dirs : [string]
        list of directories to search for C/C++ libraries at link time
      libraries : [string]
        list of library names (not filenames or paths) to link against
      runtime_library_dirs : [string]
        list of directories to search for C/C++ libraries at run time
        (for shared extensions, this is when the extension is loaded)
      extra_objects : [string]
        list of extra files to link with (eg. object files not implied
        by 'sources', static library that must be explicitly specified,
        binary resource files, etc.)
      extra_compile_args : [string]
        any extra platform- and compiler-specific information to use
        when compiling the source files in 'sources'.  For platforms and
        compilers where "command line" makes sense, this is typically a
        list of command-line arguments, but for other platforms it could
        be anything.
      extra_link_args : [string]
        any extra platform- and compiler-specific information to use
        when linking object files together to create the extension (or
        to create a new static Python interpreter).  Similar
        interpretation as for 'extra_compile_args'.
      export_symbols : [string]
        list of symbols to be exported from a shared extension.  Not
        used on all platforms, and not generally necessary for Python
        extensions, which typically export exactly one symbol: "init" +
        extension_name.
      swig_opts : [string]
        any extra options to pass to SWIG if a source file has the .i
        extension.
      depends : [string]
        list of files that the extension depends on
      language : string
        extension language (i.e. "c", "c++", "objc"). Will be detected
        from the source extensions if not provided.
    c         K   s¥  t  | ƒ t k s t d ‚ t  | ƒ t k rO t t  | ƒ t g t | ƒ k sX t d ‚ | |  _ | |  _ | ps g  |  _ | p‚ g  |  _	 | p‘ g  |  _
 | p  g  |  _ | p¯ g  |  _ | p¾ g  |  _ |	 pÍ g  |  _ |
 pÜ g  |  _ | pë g  |  _ | pú g  |  _ | p	g  |  _ | pg  |  _ | |  _ t | ƒ r¡| j ƒ  } | j ƒ  t t | ƒ } d t j | d ƒ } t d  k	 rŠt j | ƒ q¡t j j | d ƒ n  d  S(   Ns   'name' must be a strings#   'sources' must be a list of stringss   Unknown Extension options: s   , s   
(    t   typet
   StringTypet   AssertionErrort   ListTypet   mapt   lent   namet   sourcest   include_dirst   define_macrost   undef_macrost   library_dirst	   librariest   runtime_library_dirst   extra_objectst   extra_compile_argst   extra_link_argst   export_symbolst	   swig_optst   dependst   languaget   keyst   sortt   reprt   stringt   joint   warningst   Nonet   warnt   syst   stderrt   write(   t   selfR   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   t   kwt   Lt   msg(    (    s)   /usr/lib/python2.7/distutils/extension.pyt   __init__Z   s6    %			 
N(   t   __name__t
   __module__t   __doc__R   R&   (    (    (    s)   /usr/lib/python2.7/distutils/extension.pyR      s   <c         C   sä  d d l  m } m } m } d d l m } d d l m } | |  ƒ } | |  d d d d d d d	 d d
 d ƒ} z`g  } xS| j ƒ  }	 |	 d  k rš Pn  | j
 |	 ƒ rê q~ |	 d |	 d k oË d k n rê | j d |	 ƒ q~ qê n  | |	 | ƒ }	 | |	 ƒ }
 |
 d } t | g  ƒ } d  } xš|
 d D]Ž} | d  k	 rZ| j | ƒ d  } q/n  t j j | ƒ d } | d d !} | d } | d( k r¦| j j | ƒ q/| d k rÅ| j j | ƒ q/| d k r0t j | d ƒ } | d k r| j j | d  f ƒ q½| j j | d | !| | d f ƒ q/| d k rO| j j | ƒ q/| d k rn| j j | ƒ q/| d k r| j j | ƒ q/| d k r¬| j j | ƒ q/| d k rË| j j | ƒ q/| d k rã| j } q/| d k rû| j } q/| d  k r| j } q/| d! k rD| j j | ƒ | s½| j } q½q/| d  k r\| j } q/| d! k r| j j | ƒ | s½| j } q½q/| d) k r¬| j j | ƒ q/| j d' | ƒ q/W| j | ƒ q~ Wd  | j ƒ  X| S(*   Niÿÿÿÿ(   t   parse_makefilet   expand_makefile_varst   _variable_rx(   t   TextFile(   t   split_quotedt   strip_commentsi   t   skip_blankst
   join_linest	   lstrip_wst	   rstrip_wsi    R    s   '%s' lines not handled yeti   s   .cs   .ccs   .cpps   .cxxs   .c++s   .ms   .mms   -Is   -Dt   =s   -Us   -Cs   -ls   -Ls   -Rs   -rpaths   -Xlinkers
   -Xcompilers   -us   .as   .sos   .sls   .os   .dylibs   unrecognized argument '%s'(   s   .cs   .ccs   .cpps   .cxxs   .c++s   .ms   .mm(   s   .as   .sos   .sls   .os   .dylib(   t   distutils.sysconfigR*   R+   R,   t   distutils.text_fileR-   t   distutils.utilR.   t   readlineR   t   matchR   R   t   appendt   ost   patht   splitextR	   R
   R   t   findR   R   R   R   R   R   R   R   t   close(   t   filenameR*   R+   R,   R-   R.   t   varst   filet
   extensionst   linet   wordst   modulet   extt   append_next_wordt   wordt   suffixt   switcht   valuet   equals(    (    s)   /usr/lib/python2.7/distutils/extension.pyt   read_setup_file‹   s’    	$		
 
(    (   R)   t   __revision__R;   R   R   t   typesR   t   ImportErrorR   R   RN   (    (    (    s)   /usr/lib/python2.7/distutils/extension.pyt   <module>   s   $

q