Vc!)csBdZddlZddlZddlZGddZdZdS)zmdistutils.extension Provides the Extension class, used to describe C/C++ extension modules in setup scripts.Ncs<eZdZdZ ddZdZdS) 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 st|tstdt|trt d|Dstd||_||_|pg|_|pg|_|pg|_ |pg|_ |pg|_ |pg|_ | pg|_ | pg|_| pg|_| pg|_| pg|_|pg|_||_||_t+|dkrId|D}dt/|}d|z}t1j|dSdS)Nz'name' must be a stringc3s@K|]}t|tVdS)N) isinstancestr).0Zv ,/usr/lib64/python3.11/distutils/extension.pyz z%Extension.__init__..ks,881Jq#&&888888z#'sources' must be a list of stringsrcs,g|]}t|S)Zrepr)rZoptionrrz z&Extension.__init__..s555tF||555rz, zUnknown Extension options: %s)rrZAssertionErrorZlistZallnamesources include_dirs define_macros undef_macros library_dirs librariesruntime_library_dirs extra_objectsextra_compile_argsextra_link_argsexport_symbols swig_optsdependslanguageoptionalZlenZjoinZsortedwarningswarn)selfr r r r r rrrrrrrrrrrZkwZoptionsZmsgs r__init__zExtension.__init__Ws"$$$ < !:;; ;7D)) H8888888 H !FGG G  (.B*0b(.B(.B"b$8$>B!*0b"4":.4",2"b}"      r77Q; 55"555Giiw00G1G;C M#        rcs`d|jj|jj|jt |fzS)Nz<%s.%s(%r) at %#x>)Z __class__ __module__ __qualname__r Zid)rs r__repr__zExtension.__repr__s2# N % N ' I tHH ' r)NNNNNNNNNNNNNN)Z__name__rr__doc__rrrrrrrso>>F $ $## '+ $%)"&!%"----^rrcsddlm}m}m}ddlm}ddlm}||}||ddddd} g} |} | ntj || r/| d| d cxkrd krnn| d | zd|| |} || } | d} t| g} d} | ddD]?}| | |d} tj|d}|dd }|d d}|d vr| j |u|dkr| j ||dkri|d}|d kr| j |df| j |d|||d zdf|dkr| j |'|dkr| j |I|dkr| j |k|dkr| j ||dkr| j ||dkr | j} |dkr | j} |dkr | j} |dkr%| j ||s| j} |dvr| j |'| d|zA| |  |n#|wxYw|S)z3Reads a Setup file and returns Extension instances.r)parse_makefileexpand_makefile_vars _variable_rx)TextFile) split_quotedi)Zstrip_commentsZ skip_blanksZ join_linesZ lstrip_wsZ rstrip_wsTNiZ*z'%s' lines not handled yeti)z.cz.ccz.cppz.cxxz.c++z.mz.mmz-Iz-Dz=z-Uz-Cz-lz-Lz-Rz-rpathz-Xlinkerz -Xcompilerz-u)z.az.soz.slz.oz.dylibzunrecognized argument '%s')Zdistutils.sysconfigr!r"r#Zdistutils.text_filer$Zdistutils.utilr%ZreadlinereZmatchrrZappendosZpathZsplitextr r Zfindr r rrrrrrZclose)Zfilenamer!r"r#r$r%ZvarsZfileZ extensionsZlineZwordsZmoduleZextZappend_next_wordZwordZsuffixZswitchZvalueZequalss rread_setup_filer(s3333333333-,,,,,++++++ >( # #D 8H#$!1 . . .DQ L #==??D x d++ Aw$r(    c      6=>>>''d33D L&&E1XFFB''C# abb 2 C2 C#$++D111'+$))$//2acT!""XUOO)CK&&t,,,,t^$C$++E2222t^"C"ZZ__F|E)00%????)00%&/27q 2B2DEEEEt^C$++E2222t^C*11$7777t^CM((////t^C$++E2222t^C,33E::::X%C'*'?$$Z'C'*':$$\) C'*'=$$t^ C'..t444 ?+.+>(CCC %,,T2222II:TABBBB   c " " "YL #V  s K9MM)r r'r&rrr(rrrr)s{  wwwwwwwwtcccccr