o
    5‘ði“+  ã                   @  sF   d Z ddlmZ ddlZddlZddlm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.é    )ÚannotationsN)ÚIterablec                   @  s@   e Zd ZdZ														d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 : Iterable[string | os.PathLike]
        iterable of source filenames (except strings, which could be misinterpreted
        as a single filename), relative to the distribution root (where the setup
        script lives), in Unix form (slash-separated) for portability. Can be any
        non-string iterable (list, tuple, set, etc.) containing strings or
        PathLike objects. 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.
    NÚnameÚstrÚsourcesú Iterable[str | os.PathLike[str]]Úinclude_dirsúlist[str] | NoneÚdefine_macrosú#list[tuple[str, str | None]] | NoneÚundef_macrosÚlibrary_dirsÚ	librariesÚruntime_library_dirsÚextra_objectsÚextra_compile_argsÚextra_link_argsÚexport_symbolsÚ	swig_optsÚdependsÚlanguageú
str | NoneÚoptionalúbool | Nonec                 K  s   t |tƒs	tdƒ‚t |tƒrtdƒ‚ztttj|ƒƒ| _W n ty(   tdƒ‚w || _|p/g | _	|p4g | _
|p9g | _|p>g | _|pCg | _|pHg | _|	pMg | _|
pRg | _|pWg | _|p\g | _|pag | _|pfg | _|| _|| _t|ƒdkrŽdd„ |D ƒ}d t|ƒ¡}d|› �}t |¡ d S d S )	Nz'name' must be a stringzJ'sources' must be an iterable of strings or PathLike objects, not a stringz<'sources' must be an iterable of strings or PathLike objectsr   c                 S  s   g | ]}t |ƒ‘qS © )Úrepr)Ú.0Úoptionr   r   ú^/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/extension.pyÚ
<listcomp>“   s    z&Extension.__init__.<locals>.<listcomp>z, zUnknown Extension options: )Ú
isinstancer   Ú	TypeErrorÚlistÚmapÚosÚfspathr   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚlenÚjoinÚsortedÚwarningsÚwarn)Úselfr   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚkwÚoptionsÚmsgr   r   r   Ú__init__\   sD   

ÿÿÿ












üzExtension.__init__c              	   C  s.   d| j j› d| j j› d| j›dt| ƒd›d�	S )Nú<Ú.ú(z) at z#xú>)Ú	__class__Ú
__module__Ú__qualname__r   Úid)r,   r   r   r   Ú__repr__˜   s   .zExtension.__repr__)NNNNNNNNNNNNNN) r   r   r   r   r	   r
   r   r   r   r
   r   r
   r   r
   r   r
   r   r
   r   r
   r   r
   r   r
   r   r
   r   r
   r   r   r   r   )Ú__name__r6   r7   Ú__doc__r0   r9   r   r   r   r   r      s$    Hï<r   c                 C  s¶  ddl m}m}m} ddlm} ddlm} || ƒ}|| dddddd�}�z0g }	 | ¡ }	|	du r3�n| 	|	¡r9q(|	d |	d   krGd	krSn n
| 
d
|	› d�¡ q(||	|ƒ}	||	ƒ}
|
d }t|g ƒ}d}|
dd… D ]Û}|dur{| |¡ d}qmtj |¡d }|dd… }|dd… }|dv rš|j |¡ qm|dkr¥|j |¡ qm|dkrÎ| d¡}|dkr»|j |df¡ qm|j |d|… ||d d… f¡ qm|dkrÙ|j |¡ qm|dkrä|j |¡ qm|dkrï|j |¡ qm|dkrú|j |¡ qm|dk�r|j |¡ qm|dk�r|j}qm|dk�r|j}qm|dk�r!|j}qm|dk�r3|j |¡ |�s2|j}qm|dv �r?|j |¡ qm| 
d|› d
�¡ qm| |¡ q)W | ¡  |S | ¡  w )z3Reads a Setup file and returns Extension instances.r   )Ú_variable_rxÚexpand_makefile_varsÚparse_makefile)ÚTextFile)Úsplit_quotedT)Ústrip_commentsÚskip_blanksÚ
join_linesÚ	lstrip_wsÚ	rstrip_wsNéÿÿÿÿÚ*ú'z' lines not handled yeté   é   )z.cz.ccz.cppz.cxxz.c++z.mz.mmz-Iz-Dú=z-Uz-Cz-lz-Lz-Rz-rpathz-Xlinkerz
-Xcompilerz-u)z.az.soz.slz.oz.dylibzunrecognized argument ')Údistutils.sysconfigr<   r=   r>   Údistutils.text_filer?   Údistutils.utilr@   ÚreadlineÚmatchr+   r   Úappendr%   ÚpathÚsplitextr   r	   Úfindr   r   r   r   r   r   r   r   Úclose)Úfilenamer<   r=   r>   r?   r@   ÚvarsÚfileÚ
extensionsÚlineÚwordsÚmoduleÚextÚappend_next_wordÚwordÚsuffixÚswitchÚvalueÚequalsr   r   r   Úread_setup_fileœ   s–   ú
 



&




€

´K
þrd   )	r;   Ú
__future__r   r%   r*   Úcollections.abcr   r   rd   r   r   r   r   Ú<module>   s     