
    wgv(                     2    d Z ddlZddlZ G d d      Zd Zy)zmdistutils.extension

Provides the Extension class, used to describe C/C++ extension
modules in setup scripts.    Nc                   :    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zy)	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 | os.PathLike]
        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                    t        |t              st        d      t        |t              rt	        d |D              st        d      || _        t        t        t        j                  |            | _	        |xs g | _
        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |	xs g | _        |
xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        || _        || _        t1        |      dkD  rM|D cg c]  }t3        |       }}dj5                  t7        |            }d| }t9        j:                  |       y y c c}w )Nz'name' must be a stringc              3   \   K   | ]$  }t        |t        t        j                  f       & y w)N)
isinstancestrosPathLike).0vs     d/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/setuptools/_distutils/extension.py	<genexpr>z%Extension.__init__.<locals>.<genexpr>o   s      G!Jq3"45Gs   *,z8'sources' must be a list of strings or PathLike objects.r   z, zUnknown Extension options: )r   r   AssertionErrorlistallnamemapr	   fspath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reprjoinsortedwarningswarn)selfr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   kwoptionoptionsmsgs                        r   __init__zExtension.__init__W   s\   ( $$ !:;;w%GwGG J  	C		734(.B*0b(.B(.B"b$8$>B!*0b"4":.4",2"b}"   r7Q;245tF|5G5iiw0G/y9CMM#	 5s   E&c           
          d| j                   j                   d| j                   j                   d| j                  dt	        |       dd	S )N<.(z) at z#x>)	__class__
__module____qualname__r   id)r*   s    r   __repr__zExtension.__repr__   sJ    4>>,,-Qt~~/J/J.K1TYYMY^_abf_ghj^kklmm    )NNNNNNNNNNNNNN)__name__r6   r7   __doc__r/   r9    r:   r   r   r      s@    >L !#4lnr:   r   c                 4   ddl m}m}m} ddlm} ddlm}  ||       } || ddddd      }	 g }	 |j                         }	|	n|j                  |	      r'|	d   |	d   cxk(  rd	k(  rn n|j                  d
|	 d       Q ||	|      }	 ||	      }
|
d   }t        |g       }d}|
dd D ]1  }||j                  |       d}t        j                  j                  |      d   }|dd }|dd }|dv r|j                   j                  |       f|dk(  r|j"                  j                  |       |dk(  r[|j%                  d      }|dk(  r|j&                  j                  |df       |j&                  j                  |d| ||dz   d f       |dk(  r|j(                  j                  |       	|dk(  r|j*                  j                  |       +|dk(  r|j,                  j                  |       M|dk(  r|j.                  j                  |       o|dk(  r|j0                  j                  |       |dk(  r|j0                  }|dk(  r|j2                  }|dk(  r|j*                  }|dk(  r-|j2                  j                  |       |r|j2                  }|dv r|j4                  j                  |       |j                  d| d
       4 |j                  |       	 |j7                          |S # |j7                          w xY 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@   rA   distutils.text_filerB   distutils.utilrC   readlinematchr)   r   appendr	   pathsplitextr   r   findr   r   r   r   r   r   r   r   close)filenamer?   r@   rA   rB   rC   varsfile
extensionslinewordsmoduleextappend_next_wordwordsuffixswitchvalueequalss                      r   read_setup_filerg      s    VV,+ (#D DQ
==?D|!!$'Aw$r()c)		AdV#:;<'d3D &E 1XFFB'C#ab	 2A#/$++D1'+$))$/2aQROO KK&&t,t^$$++E2t^"ZZ_F|))00%?))00%&/5RSCV1WXt^$$++E2t^**11$7t^MM((/t^$$++E2t^,,33E:X%'*'?'?$Z''*':':$\)'*'='=$t^''..t4 +.+>+>(CC
 %%,,T2II 7vQ?@e2Ah c"Y  V 	

 	

s   I(L AL L)r<   r	   r(   r   rg   r=   r:   r   <module>rh      s'   
 
 zn znzfr:   