509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \)  ã               @   s.   d Z ddlZddlZG dd„ dƒZdd„ ZdS )zmdistutils.extension

Provides the Extension class, used to describe C/C++ extension
modules in setup scripts.é    Nc               @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú	Extensionaß  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.
      optional : boolean
        specifies that a build failure in the extension should not abort the
        build process, but simply not install the failing extension.
    Nc             K   s  t |tƒstdƒ‚t |tƒo,tdd„ |D ƒƒs6tdƒ‚|| _|| _|pHg | _|pRg | _|p\g | _	|pfg | _
|ppg | _|pzg | _|	p„g | _|
pŽg | _|p˜g | _|p¢g | _|p¬g | _|p¶g | _|| _|| _t|ƒdk�rdd„ |D ƒ}djt|ƒƒ}d	| }tj|ƒ d S )
Nz'name' must be a stringc             s   s   | ]}t |tƒV  qd S )N)Ú
isinstanceÚstr)Ú.0Úv© r   ú+/usr/lib64/python3.6/distutils/extension.pyú	<genexpr>j   s    z%Extension.__init__.<locals>.<genexpr>z#'sources' must be a list of stringsr   c             S   s   g | ]}t |ƒ‘qS r   )Úrepr)r   Zoptionr   r   r   ú
<listcomp>€   s    z&Extension.__init__.<locals>.<listcomp>z, zUnknown Extension options: %s)r   r   ÚAssertionErrorÚlistÚallÚnameÚsourcesÚinclude_dirsÚdefine_macrosÚundef_macrosÚlibrary_dirsÚ	librariesÚruntime_library_dirsÚextra_objectsÚextra_compile_argsÚextra_link_argsÚexport_symbolsÚ	swig_optsÚdependsÚlanguageÚoptionalÚlenÚjoinÚsortedÚwarningsÚwarn)Úselfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚkwZoptionsÚmsgr   r   r   Ú__init__V   s4    













zExtension.__init__c             C   s   d| j j| j j| jt| ƒf S )Nz<%s.%s(%r) at %#x>)Ú	__class__Ú
__module__Ú__qualname__r   Úid)r$   r   r   r   Ú__repr__…   s
    zExtension.__repr__)NNNNNNNNNNNNNN)Ú__name__r)   r*   Ú__doc__r'   r,   r   r   r   r   r      s    ?             
!r   c             C   sÂ  ddl m}m}m} ddlm} ddlm} || ƒ}|| dddddd�}�zhg }�x\|jƒ }	|	dkrfP |j	|	ƒrrqT|	d |	d$   koŒdkn  r¢|j
d	|	 ƒ qT||	|ƒ}	||	ƒ}
|
d }t|g ƒ}d}�xÔ|
dd… D �]Â}|dk	rø|j|ƒ d}qÚtjj|ƒd }|dd
… }|d
d… }|d%k�r8|jj|ƒ qÚ|dk�rP|jj|ƒ qÚ|dk�r¦|jdƒ}|d&k�r€|jj|dfƒ n$|jj|d|… ||d
 d… fƒ qÚ|dk�r¾|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j|ƒ qÚ|dk�r0|j}qÚ|dk�rB|j}qÚ|dk�rT|j}qÚ|dk�rx|jj|ƒ |�sž|j}qÚ|d'k�r�|jj|ƒ qÚ|j
d#| ƒ qÚW |j|ƒ qTW W d|jƒ  X |S )(z3Reads a Setup file and returns Extension instances.r   )Úparse_makefileÚexpand_makefile_varsÚ_variable_rx)ÚTextFile)Úsplit_quotedé   )Zstrip_commentsZskip_blanksZ
join_linesZ	lstrip_wsZ	rstrip_wsNÚ*z'%s' lines not handled yeté   ú.cú.ccú.cppú.cxxú.c++ú.mú.mmz-Iz-Dú=z-Uz-Cz-lz-Lz-Rz-rpathz-Xlinkerz
-Xcompilerz-uú.aú.soú.slú.oú.dylibzunrecognized argument '%s'éÿÿÿÿ)r7   r8   r9   r:   r;   r<   r=   rD   )r?   r@   rA   rB   rC   )Zdistutils.sysconfigr/   r0   r1   Zdistutils.text_filer2   Zdistutils.utilr3   ÚreadlineÚmatchr#   r   ÚappendÚosÚpathÚsplitextr   r   Úfindr   r   r   r   r   r   r   r   Úclose)Úfilenamer/   r0   r1   r2   r3   ÚvarsÚfileÚ
extensionsÚlineZwordsÚmoduleZextZappend_next_wordZwordÚsuffixZswitchÚvalueZequalsr   r   r   Úread_setup_file�   s†    

 


 















rU   )r.   rH   r"   r   rU   r   r   r   r   Ú<module>   s   z