1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
U
G=®d“{ã@s¶dZddlZddlZddlZddlZddlmZddlTddlm    Z    m
Z
ddlm Z ddl m Z ddlmZdd    lmZdd
lmZdd lmZe d ¡Zd d„ZGdd„deƒZdS)z¶distutils.command.build_ext
 
Implements the Distutils 'build_ext' command, for building extension
modules (currently limited to C extensions, should accommodate C++
extensions ASAP).éN)ÚCommand)Ú*)Úcustomize_compilerÚget_python_version)Úget_config_h_filename)Ú newer_group)Ú    Extension)Ú get_platform)Úlog)Ú    USER_BASEz3^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$cCsddlm}|ƒdS)Nr©Úshow_compilers)Údistutils.ccompilerr r ©rú^D:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\setuptools/_distutils/command/build_ext.pyr s r c@seZdZdZdejZdddddeƒfdd    d
d efd d ddddefddddddddddgZddddd gZ    d!d"d#e
fgZ d$d%„Z d&d'„Z d(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zejd6d7„ƒZd8d9„Zd:d;„Zd<d=„Zd>d?„Zd@dA„ZdBdC„ZdDdE„ZdFdG„Zd"S)HÚ    build_extz8build C/C++ extensions (compile/link to build directory)z (separated by '%s'))z
build-lib=Úbz(directory for compiled extension modules)z build-temp=Útz1directory for temporary files (build by-products)z
plat-name=Úpz>platform name to cross-compile for, if supported (default: %s))ÚinplaceÚiziignore build-lib and put compiled extensions into the source directory alongside your pure Python modulesz include-dirs=ÚIz.list of directories to search for header files)zdefine=ÚDzC preprocessor macros to define)zundef=ÚUz!C preprocessor macros to undefine)z
libraries=Úlz!external C libraries to link withz library-dirs=ÚLz.directories to search for external C libraries)zrpath=ÚRz7directories to search for shared C libraries at runtime)z link-objects=ÚOz2extra explicit link objects to include in the link)ÚdebugÚgz'compile/link with debugging information)ÚforceÚfz2forcibly build everything (ignore file timestamps))z    compiler=Úczspecify the compiler type)z    parallel=Újznumber of parallel build jobs)úswig-cppNz)make SWIG create C++ files (default is C))z
swig-opts=Nz!list of SWIG command line options)zswig=Nzpath to the SWIG executable)ÚuserNz#add user include, library and rpathrrr r$r%z help-compilerNzlist available compilerscCs‚d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_    d|_
d|_ d|_ d|_ d|_d|_d|_d|_d|_d|_d|_dS)Nr)Ú
extensionsÚ    build_libÚ    plat_nameÚ
build_temprÚpackageÚ include_dirsÚdefineÚundefÚ    librariesÚ library_dirsÚrpathÚ link_objectsrr ÚcompilerÚswigÚswig_cppÚ    swig_optsr%Úparallel©ÚselfrrrÚinitialize_optionsjs*zbuild_ext.initialize_optionsc
 
Csüddlm}| ddddddd    d
¡|jdkr8|jj|_|jj|_| ¡}|jd d }|j    dkrn|jj    pjg|_    t
|j    t ƒrŠ|j      t j¡|_    tjtjkr®|j     t j tjd ¡¡|j     |  t jj¡¡||krâ|j     |  t jj¡¡| d¡| d¡|jdkrg|_|jdkrg|_nt
|jt ƒr:|j  t j¡|_|jdkrNg|_nt
|jt ƒrl|j  t j¡|_t jdkrh|j t j tjd¡¡tjtjkr¶|j t j tjd¡¡|jrÒt j |jd¡|_nt j |jd¡|_|j     t j tƒ¡¡t tddƒ}|r|j |¡|j!dkr*d}n|j!dd…}t j tjd¡}|r\t j ||¡}|j |¡tj"dd…dkrÆtj# $t j tjd¡¡rº|j t j tjddt%ƒd¡¡n |j d¡| &d¡rú|j'sî|j | &d ¡¡n |j d¡|j(r|j(  d!¡}d"d#„|Dƒ|_(|j)r4|j)  d!¡|_)|j*dkrHg|_*n|j*  d$¡|_*|j+rºt j t,d ¡}t j t,d¡}    t j -|¡r”|j     |¡t j -|    ¡rº|j |    ¡|j |    ¡t
|j.t ƒrøzt/|j.ƒ|_.Wnt0k
röt1d%ƒ‚YnXdS)&Nr)Ú    sysconfigÚbuild)r'r')r)r))r2r2)rr)r r )r6r6)r(r(é)Ú plat_specificÚincluder.r1ÚntZlibsZDebugZReleaseÚ_homeÚwin32éÚPCbuildéÚcygwinÚbinÚlibÚpythonÚconfigÚ.ÚPy_ENABLE_SHAREDZLIBDIRú,cSsg|] }|df‘qS)Ú1r)Ú.0ÚsymbolrrrÚ
<listcomp>ùsz.build_ext.finalize_options.<locals>.<listcomp>ú zparallel should be an integer)2Ú    distutilsr:Úset_undefined_optionsr*Ú distributionÚ ext_packageÚ ext_modulesr&Úget_python_incr+Ú
isinstanceÚstrÚsplitÚosÚpathsepÚsysÚ exec_prefixÚbase_exec_prefixÚappendÚpathÚjoinÚextendÚensure_string_listr.r/r0ÚnameÚprefixrr)ÚdirnamerÚgetattrr(ÚplatformÚ
executableÚ
startswithrÚget_config_varÚ python_buildr,r-r5r%r Úisdirr6ÚintÚ
ValueErrorÚDistutilsOptionError)
r8r:Z
py_includeZplat_py_includeÚ    _sys_homeÚsuffixZnew_libZdefinesZ user_includeZuser_librrrÚfinalize_options‚s° ù
 
 
 
 
   ÿ
 
        þ        zbuild_ext.finalize_optionscCsjddlm}|jsdS|j ¡rL| d¡}|j | ¡p:g¡|j     
|j ¡||j |j |j|jd|_ t|j ƒtjdkr”|jtƒkr”|j  |j¡|jdk    r¬|j  |j¡|jdk    rÔ|jD]\}}|j  ||¡q¼|jdk    rö|jD]}|j  |¡qä|jdk    r|j  |j¡|j    dk    r*|j  |j    ¡|jdk    rD|j  |j¡|j dk    r^|j  !|j ¡| "¡dS)Nr)Ú new_compilerÚ
build_clib)r2ÚverboseÚdry_runr r?)#rrur&rTÚhas_c_librariesÚget_finalized_commandr.rcZget_library_namesr/r`rvr2rwrxr rr[rer(r    Z
initializer+Zset_include_dirsr,Z define_macror-Zundefine_macroZ set_librariesZset_library_dirsr0Zset_runtime_library_dirsr1Zset_link_objectsÚbuild_extensions)r8rurvreÚvalueÚmacrorrrÚruns@ 
 
ý
 
 
 
 
    z build_ext.runc
Csvt|tƒstdƒ‚t|ƒD]T\}}t|tƒr0qt|tƒrFt|ƒdkrNtdƒ‚|\}}t d|¡t|t    ƒrvt
  |¡s~tdƒ‚t|t ƒstdƒ‚t||dƒ}dD]"}|  |¡}|d    k    r¢t|||ƒq¢|  d
¡|_d |krät d ¡|  d ¡}|rhg|_g|_|D]b}    t|    tƒr"t|    ƒdks*tdƒ‚t|    ƒdkrJ|j |    d¡nt|    ƒdkr|j |    ¡q|||<qd    S)a¬Ensure that the list of extensions (presumably provided as a
        command option 'extensions') is valid, i.e. it is a list of
        Extension objects.  We also support the old-style list of 2-tuples,
        where the tuples are (ext_name, build_info), which are converted to
        Extension instances here.
 
        Raise DistutilsSetupError if the structure is invalid anywhere;
        just returns otherwise.
        z:'ext_modules' option must be a list of Extension instancesézMeach element of 'ext_modules' option must be an Extension instance or 2-tuplezvold-style (ext_name, build_info) tuple found in ext_modules for extension '%s' -- please convert to Extension instancezRfirst element of each tuple in 'ext_modules' must be the extension name (a string)zOsecond element of each tuple in 'ext_modules' must be a dictionary (build info)Úsources)r+r/r.Ú extra_objectsÚextra_compile_argsÚextra_link_argsNr0Zdef_filez9'def_file' element of build info dict no longer supportedÚmacros)r<rz9'macros' element of build info dict must be 1- or 2-tupler<r)rXÚlistÚDistutilsSetupErrorÚ    enumeraterÚtupleÚlenr
ÚwarnrYÚextension_name_reÚmatchÚdictÚgetÚsetattrÚruntime_library_dirsÚ define_macrosÚ undef_macrosr`)
r8r&rÚextÚext_nameZ
build_infoÚkeyÚvalr„r}rrrÚcheck_extensions_listVs^
 
ÿ
ÿþ
ÿÿ
ÿ
 
 
ÿzbuild_ext.check_extensions_listcCs,| |j¡g}|jD]}| |j¡q|S©N)r—r&rcr€)r8Ú    filenamesr“rrrÚget_source_files¤s
 
zbuild_ext.get_source_filescCs2| |j¡g}|jD]}| | |j¡¡q|Sr˜)r—r&r`Úget_ext_fullpathre)r8Úoutputsr“rrrÚ get_outputs­s
 
zbuild_ext.get_outputscCs(| |j¡|jr| ¡n| ¡dSr˜)r—r&r6Ú_build_extensions_parallelÚ_build_extensions_serialr7rrrr{»s 
zbuild_ext.build_extensionsc sºˆj}ˆjdkrt ¡}zddlm}Wntk
r@d}YnX|dkrVˆ ¡dS||dP‰‡‡fdd„ˆjDƒ}tˆj|ƒD]&\}}ˆ     |¡| 
¡W5QRXq„W5QRXdS)NTr)ÚThreadPoolExecutor)Ú max_workerscsg|]}ˆ ˆj|¡‘qSr)ZsubmitÚbuild_extension)rNr“©Úexecutorr8rrrPÑsÿz8build_ext._build_extensions_parallel.<locals>.<listcomp>) r6r[Ú    cpu_countÚconcurrent.futuresr Ú ImportErrorrŸr&ÚzipÚ_filter_build_errorsÚresult)r8Úworkersr Zfuturesr“Zfutrr£rržÃs"
 
  ÿ z$build_ext._build_extensions_parallelc
Cs0|jD]$}| |¡| |¡W5QRXqdSr˜)r&r©r¢)r8r“rrrrŸ×s
 z"build_ext._build_extensions_serialc
csTz
dVWnDtttfk
rN}z |js*‚| d|j|f¡W5d}~XYnXdS)Nz"building extension "%s" failed: %s)ÚCCompilerErrorÚDistutilsErrorÚ CompileErrorÚoptionalrŠre)r8r“Úerrrr©Üs
ÿzbuild_ext._filter_build_errorsc
CsP|j}|dkst|ttfƒs*td|jƒ‚t|ƒ}| |j¡}||j}|j    slt
||dƒslt   d|j¡dSt   d|j¡| ||¡}|jpŽg}|jdd…}|jD]}| |f¡q¤|jj||j||j|j ||jd}|dd…|_|jrø| |j¡|jpg}|jp|j |¡}    |jj||| |¡|j|j || !|¡|j |j|    d
dS)Nzjin 'ext_modules' option (extension '%s'), 'sources' must be present and must be a list of source filenamesÚnewerz$skipping '%s' extension (up-to-date)zbuilding '%s' extension)Ú
output_dirr„r+rÚextra_postargsÚdepends)r.r/rr³Úexport_symbolsrr)Z target_lang)"r€rXr…rˆr†reÚsortedr›r´r rr
rÚinfoÚ swig_sourcesr‚r‘r’r`r2Úcompiler)r+Z_built_objectsrrcrƒÚlanguageZdetect_languageZlink_shared_objectÚ get_librariesr/rÚget_export_symbols)
r8r“r€Úext_pathr´Ú
extra_argsr„r-Zobjectsrºrrrr¢æsXþÿ 
 
 
ú
  ÷zbuild_ext.build_extensioncCs$g}g}i}|jrt d¡|js6d|jks6d|jkr<d}nd}|D]P}tj |¡\}}    |    dkrŠ| |d|¡| |¡|d||<qD| |¡qD|sž|S|jpª|     ¡}
|
dg} |  
|j¡|jrÐ|  d¡|jsì|jD]} |  | ¡qÜ|D].}||} t  d    || ¡|  | d
| |g¡qð|S) züWalk the list of source files in 'sources', looking for SWIG
        interface (.i) files.  Run SWIG on all that are found, and
        return a modified 'sources' list with SWIG source files replaced
        by the generated C (or C++) files.
        z/--swig-cpp is deprecated - use --swig-opts=-c++z-c++z.cppz.cz.iÚ_wrapéÿÿÿÿz-pythonzswigging %s to %sz-o) r4r
rŠr5r[raÚsplitextr`r3Ú    find_swigrcr·Úspawn)r8r€Ú    extensionZ new_sourcesr¸Z swig_targetsZ
target_extÚsourceÚbaser“r3Zswig_cmdÚoÚtargetrrrr¸2s@
ÿ
 
 
 zbuild_ext.swig_sourcescCs^tjdkrdStjdkrLdD]*}tj d|d¡}tj |¡r|SqdStdtjƒ‚dS)    z›Return the name of the SWIG executable.  On Unix, this is
        just "swig" -- it should be in the PATH.  Tries a bit harder on
        Windows.
        Úposixr3r?)z1.3z1.2z1.1z    c:\swig%szswig.exez>I don't know how to find (much less run) SWIG on platform '%s'N)r[rerarbÚisfileÚDistutilsPlatformError)r8ÚversÚfnrrrrÂhs
 
 
ÿÿzbuild_ext.find_swigcCsŽ| |¡}| d¡}| |d¡}|jsRtjj|dd…|gŽ}tj |j|¡Sd |dd…¡}| d¡}tj     | 
|¡¡}tj ||¡S)z¡Returns the path of the filename for a given extension.
 
        The file is located in `build_lib` or directly in the package
        (inplace option).
        rJrÀNrÚbuild_py) Úget_ext_fullnamerZÚget_ext_filenamerr[rarbr'rzÚabspathZget_package_dir)r8r”ÚfullnameÚmodpathÚfilenamer*rÎÚ package_dirrrrr›€s
 
 
zbuild_ext.get_ext_fullpathcCs |jdkr|S|jd|SdS)zSReturns the fullname of a given extension name.
 
        Adds the `package.` prefixNrJ)r*)r8r”rrrrϛs
zbuild_ext.get_ext_fullnamecCs.ddlm}| d¡}|dƒ}tjj|Ž|S)z¦Convert the name of an extension (eg. "foo.bar") into the name
        of the file from which it will be loaded (eg. "foo/bar.so", or
        "foo\bar.pyd").
        r©rlrJÚ
EXT_SUFFIX)Údistutils.sysconfigrlrZr[rarb)r8r”rlr½Z
ext_suffixrrrrФs 
zbuild_ext.get_ext_filenamecCsxd|j d¡d}z| d¡Wn0tk
rRd| d¡ dd¡ d¡}YnXd    |}||jkrr|j |¡|jS)
aReturn the list of symbols that a shared extension has to
        export.  This either uses 'ext.export_symbols' or, if it's not
        provided, "PyInit_" + module_name.  Only relevant on Windows, where
        the .pyd file (DLL) must export the module "PyInit_" function.
        Ú_rJrÀÚasciirÚpunycodeó-ó_ZPyInit)rerZÚencodeÚUnicodeEncodeErrorÚreplaceÚdecoderµr`)r8r“rsZ initfunc_namerrrr¼®s"
 zbuild_ext.get_export_symbolscCsätjdkr^ddlm}t|j|ƒsÞd}|jr4|d}|tjd?tjd?d@f}|j|gSn€dd    l    m
}d
}|d ƒrÂt td ƒr†d }n<tjdkr–d }n,dt j krÂ|dƒdkr²d }n|dƒdkrÂd }|rÞ|dƒ}|jd|gS|jS)zÓReturn the list of libraries to link against when building a
        shared extension.  On most platforms, this is just 'ext.libraries';
        on Windows, we add the Python library (eg. python20.dll).
        rAr)Ú MSVCCompilerz
python%d%dZ_déééÿrÖFrKZgetandroidapilevelTrEÚ_PYTHON_HOST_PLATFORMZANDROID_API_LEVELZMACHDEPZ    LDVERSIONrH)r]riZdistutils._msvccompilerrârXr2rÚ
hexversionr.rØrlÚhasattrr[Úenviron)r8r“râÚtemplateZ    pythonlibrlZlink_libpythonZ    ldversionrrrr»Ás4
 
  ÿ
 
 
 
  zbuild_ext.get_libraries) Ú__name__Ú
__module__Ú __qualname__Ú descriptionr[r\Zsep_byr    Ú user_optionsÚboolean_optionsr Ú help_optionsr9rtr~r—ršrr{ržrŸÚ
contextlibÚcontextmanagerr©r¢r¸rÂr›rÏrÐr¼r»rrrrr!sp
ÿÿÿÿÙ+ÿÿ@N    
    L6    
r)Ú__doc__ròr[Úrer]Údistutils.corerÚdistutils.errorsrØrrrÚdistutils.dep_utilrÚdistutils.extensionrÚdistutils.utilr    rRr
Úsiter r¹r‹r rrrrrÚ<module>s$       ÿ