o ?Og“{ã@s´ ddlZddlZddlZddlZddlmZddlTddlmZm Z ddlm Z ddl m Z ddl mZddlmZdd lmZdd lmZe d ¡Zd d „ZGdd„deƒZdS)é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úB/opt/alt/python310/lib64/python3.10/distutils/command/build_ext.pyr s  r c@seZdZdZdejZdddddeƒfdd d d efd d ddddefddddddddddgZgd¢Z ddde fgZ d d!„Z d"d#„Z d$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zejd2d3„ƒZd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Zd@dA„ZdBdC„ZdS)DÚ 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 rpath)rrr 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 ¡|jdur|jj|_|jj|_| ¡}|jd d }|j dur7|jj p5g|_ t |j t ƒrE|j   t j¡|_ tjtjkrW|j  t j tjd ¡¡|j  |  t jj¡¡||krq|j  |  t jj¡¡| d¡| d¡|jdurƒg|_|jdurŒg|_nt |jt ƒrš|j  t j¡|_|jdur£g|_nt |jt ƒr±|j  t j¡|_t jdkr-|j t j tjd¡¡tjtjkrÕ|j t j tjd¡¡|jrât j |jd¡|_n t j |jd¡|_|j  t j tƒ¡¡t tddƒ}|r|j |¡|j!dkrd}n|j!dd…}t j tjd¡}|r't j ||¡}|j |¡tj"dd…dkr\tj# $t j tjd¡¡rV|j t j tjddt%ƒd¡¡n|j d¡| &d¡rv|j'sp|j | &d ¡¡n|j d¡|j(rˆ|j(  d!¡}d"d#„|Dƒ|_(|j)r“|j)  d!¡|_)|j*durg|_*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óz t/|j.ƒ|_.WdSt0yòt1d%ƒ‚wdS)&Nr)Ú sysconfigZbuild)r'r')r)r))r2r2)rr)r r )r6r6)r(r(é)Z plat_specificZincluder.r1ÚntZlibsZDebugZReleaseÚ_homeÚwin32éZPCbuildéÚcygwinÚbinÚlibÚpythonZconfigÚ.ÚPy_ENABLE_SHAREDZLIBDIRú,cSsg|]}|df‘qS)Ú1r)Ú.0ZsymbolrrrÚ ùsz.build_ext.finalize_options..ú zparallel should be an integer)2Ú distutilsr:Zset_undefined_optionsr*Ú distributionZ ext_packageZ ext_modulesr&Zget_python_incr+Ú isinstanceÚstrÚsplitÚosÚpathsepÚsysÚ exec_prefixÚbase_exec_prefixÚappendÚpathÚjoinÚextendZensure_string_listr.r/r0ÚnameÚprefixrr)ÚdirnamerÚgetattrr(ÚplatformÚ executableÚ startswithrÚget_config_varZ python_buildr,r-r5r%r Úisdirr6ÚintÚ ValueErrorZDistutilsOptionError) r8r:Z py_includeZplat_py_includeZ _sys_homeÚsuffixZnew_libZdefinesZ user_includeZuser_librrrÚfinalize_options‚s´ ù       ÿ             þ        ÿýzbuild_ext.finalize_optionscCsbddlm}|js dS|j ¡r&| d¡}|j | ¡pg¡|j   |j ¡||j |j |j|jd|_ t|j ƒtjdkrJ|jtƒkrJ|j  |j¡|jdurV|j  |j¡|jdurj|jD] \}}|j  ||¡q^|jdur{|jD]}|j  |¡qr|jdur‡|j  |j¡|j dur“|j  |j ¡|jdurŸ|j  |j¡|j dur«|j  !|j ¡| "¡dS)Nr)Ú new_compilerÚ build_clib)r2ÚverboseÚdry_runr r<)#rrgr&rMZhas_c_librariesÚget_finalized_commandr.rYZget_library_namesr/rVrhr2rirjr rrQrZr(r Z initializer+Zset_include_dirsr,Z define_macror-Zundefine_macroZ set_librariesZset_library_dirsr0Zset_runtime_library_dirsr1Zset_link_objectsÚbuild_extensions)r8rgrhrZÚvalueÚmacrorrrÚruns@   ý          z build_ext.runc Csj t|tƒs tdƒ‚t|ƒD]¤\}}t|tƒrqt|tƒr#t|ƒdkr'tdƒ‚|\}}t d|¡t|t ƒr;t   |¡s?tdƒ‚t|t ƒsHtdƒ‚t||dƒ}dD]}|  |¡}|durbt|||ƒqQ|  d ¡|_d |vrrt d ¡|  d ¡}|r®g|_g|_|D],} t| tƒrŽt| ƒd vs’tdƒ‚t| ƒdkr¡|j | d¡qt| ƒdkr­|j | ¡q|||<qdS)Nz:'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_argsr0Zdef_filez9'def_file' element of build info dict no longer supportedÚmacros)r;rpz9'macros' element of build info dict must be 1- or 2-tupler;r)rNÚlistÚDistutilsSetupErrorÚ enumeraterÚtupleÚlenr ÚwarnrOÚextension_name_reÚmatchÚdictÚgetÚsetattrÚruntime_library_dirsÚ define_macrosÚ undef_macrosrV) r8r&rÚextÚext_nameZ build_infoÚkeyÚvalrurnrrrÚcheck_extensions_listVsf ÿ ÿþ ÿÿ ÿ  €   ÿ   € Âzbuild_ext.check_extensions_listcCs,| |j¡g}|jD]}| |j¡q |S©N)rˆr&rYrq)r8Ú filenamesr„rrrÚget_source_files¤s  zbuild_ext.get_source_filescCs2| |j¡g}|jD] }| | |j¡¡q |Sr‰)rˆr&rVÚget_ext_fullpathrZ)r8Zoutputsr„rrrÚ get_outputs­s  zbuild_ext.get_outputscCs*| |j¡|jr| ¡dS| ¡dSr‰)rˆr&r6Ú_build_extensions_parallelÚ_build_extensions_serialr7rrrrl»s   zbuild_ext.build_extensionsc sâˆj}ˆjdur t ¡}zddlm}Wn tyd}Ynw|dur*ˆ ¡dS||d8‰‡‡fdd„ˆjDƒ}tˆj|ƒD]\}}ˆ  |¡ |  ¡Wdƒn1sYwYqAWdƒdS1sjwYdS)NTr)ÚThreadPoolExecutor)Z max_workerscsg|] }ˆ ˆj|¡‘qSr)ZsubmitÚbuild_extension)rIr„©Zexecutorr8rrrJÑsÿz8build_ext._build_extensions_parallel..) r6rQÚ cpu_countZconcurrent.futuresrÚ ImportErrorrr&ÚzipÚ_filter_build_errorsÚresult)r8ZworkersrZfuturesr„Zfutrr’rrŽÃs,  ÿ  ÿ  ÿ€ÿ"ýz$build_ext._build_extensions_parallelc CsD|jD]}| |¡ | |¡Wdƒn1swYqdSr‰)r&r–r‘)r8r„rrrr×s   ÿ€ÿz"build_ext._build_extensions_serialc csXzdVWdStttfy+}z|js‚| d|j|f¡WYd}~dSd}~ww)Nz"building extension "%s" failed: %s)ZCCompilerErrorZDistutilsErrorZ CompileErrorZoptionalr{rZ)r8r„Úerrrr–Üs€ ÿ€ýzbuild_ext._filter_build_errorsc CsL|j}|dust|ttfƒstd|jƒ‚t|ƒ}| |j¡}||j}|j s6t ||dƒs6t   d|j¡dSt   d|j¡| ||¡}|jpGg}|jdd…}|jD]}| |f¡qR|jj||j||j|j ||jd}|dd…|_|jr|| |j¡|jp€g}|jp‰|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 filenamesZnewerz$skipping '%s' extension (up-to-date)zbuilding '%s' extension)Z output_dirrur+rÚextra_postargsÚdepends)r.r/rr™Úexport_symbolsrr)Z target_lang)"rqrNrvryrwrZÚsortedrŒršr rr rÚinfoÚ swig_sourcesrsr‚rƒrVr2Úcompiler)r+Z_built_objectsrrrYrtÚlanguageZdetect_languageZlink_shared_objectÚ get_librariesr/rÚget_export_symbols) r8r„rqÚext_pathršZ extra_argsrur-Zobjectsr rrrr‘æsVþÿ     ú    ÷zbuild_ext.build_extensioncCs& g}g}i}|jrt d¡|jsd|jvsd|jvrd}nd}|D](}tj |¡\}} | dkrF| |d|¡| |¡|d||<q#| |¡q#|sP|S|jpV|  ¡} | dg} |   |j¡|jri|  d¡|jsw|jD]} |  | ¡qo|D]}||} t  d || ¡|  | d | |g¡qy|S) Nz/--swig-cpp is deprecated - use --swig-opts=-c++z-c++z.cppz.cz.iÚ_wrapéÿÿÿÿz-pythonzswigging %s to %sz-o) r4r r{r5rQrWÚsplitextrVr3Ú find_swigrYrZspawn)r8rqÚ extensionZ new_sourcesržZ swig_targetsZ target_extÚsourceÚbaser„r3Zswig_cmdÚoÚtargetrrrrž2s@        zbuild_ext.swig_sourcescCs\ tjdkrdStjdkr'dD]}tj d|d¡}tj |¡r$|SqdStdtjƒ‚)NÚposixr3r<)z1.3z1.2z1.1z c:\swig%szswig.exez>I don't know how to find (much less run) SWIG on platform '%s')rQrZrWrXÚisfileZDistutilsPlatformError)r8ZversÚfnrrrr§hs   ÿÿÿzbuild_ext.find_swigcCs | |¡}| d¡}| |d¡}|js*tjj|dd…|gŽ}tj |j|¡Sd |dd…¡}| d¡}tj  |  |¡¡}tj ||¡S)NrEr¥rÚbuild_py) Úget_ext_fullnamerPÚget_ext_filenamerrQrWrXr'rkÚabspathZget_package_dir)r8r…ÚfullnameÚmodpathÚfilenamer*r°Z package_dirrrrrŒ€s   zbuild_ext.get_ext_fullpathcCs |jdur|S|jd|S)NrE)r*)r8r…rrrr±›s zbuild_ext.get_ext_fullnamecCs0 ddlm}| d¡}|dƒ}tjj|Ž|S)Nr©rarEZ EXT_SUFFIX)Údistutils.sysconfigrarPrQrWrX)r8r…rar£Z ext_suffixrrrr²¤s   zbuild_ext.get_ext_filenamecCsx d|j d¡d}z| d¡Wnty)d| d¡ dd¡ d¡}Ynwd |}||jvr9|j |¡|jS) NÚ_rEr¥ÚasciirZpunycodeó-ó_ZPyInit)rZrPÚencodeÚUnicodeEncodeErrorÚreplaceÚdecoder›rV)r8r„reZ initfunc_namerrrr¢®s  ÿ  zbuild_ext.get_export_symbolscCsê tjdkr2ddlm}t|j|ƒs/d}|jr|d}|tjd?tjd?d@f}|j|gS|jSdd l m }d }|d ƒrdt td ƒrFd }ntjdkrNd }ndt j vrd|dƒdkr\d }n|dƒdkrdd }|rr|dƒ}|jd|gS|jS)Nr>r)Ú MSVCCompilerz python%d%dZ_déééÿr·FrFZgetandroidapilevelTrAZ_PYTHON_HOST_PLATFORMZANDROID_API_LEVELZMACHDEPZ LDVERSIONrD)rSr^Zdistutils._msvccompilerrÁrNr2rÚ hexversionr.r¸raÚhasattrrQÚenviron)r8r„rÁÚtemplateZ pythonlibraZlink_libpythonZ ldversionrrrr¡Ás8  ÿ  í     zbuild_ext.get_libraries) Ú__name__Ú __module__Ú __qualname__Ú descriptionrQrRZsep_byr Z user_optionsZboolean_optionsr Z help_optionsr9rfrorˆr‹rrlrŽrÚ contextlibÚcontextmanagerr–r‘ržr§rŒr±r²r¢r¡rrrrr!sp ÿÿÿÿÙ+ÿÿ@N   L6  r)rÍrQÚrerSZdistutils.corerZdistutils.errorsr¸rrrZdistutils.dep_utilrZdistutils.extensionrZdistutils.utilr rLr Zsiter rŸr|r rrrrrÚs&       ÿ