a 9êdg=3ã@shddlZddlZddlmZddlmZddlmZddlm Z dddœZ Gd d „d eƒZ d d d „Z dS)éN)ÚCommand)ÚDistutilsExecError)Úcustomize_compiler)Úlogz.cz.cxx)Úczc++c@s¸eZdZdZgd¢Zdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z d(dd„Zd)dd„Zd*dd„Zd+dd„Zd,dd „Zd-d"d#„Zdddgfd$d%„Zd.d&d'„ZdS)/Úconfigzprepare to build) )z compiler=Nzspecify the compiler type)zcc=Nzspecify the compiler executable)z 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 with)z library-dirs=ÚLz.directories to search for external C libraries)ÚnoisyNz1show every action (compile, link, run, ...) taken)z dump-sourceNz=dump generated source files before attempting to compile themcCs4d|_d|_d|_d|_d|_d|_d|_g|_dS)Né)ÚcompilerZccÚ include_dirsÚ librariesÚ library_dirsr Ú dump_sourceÚ temp_files©Úself©rú4/usr/local/lib/python3.9/distutils/command/config.pyÚinitialize_options3szconfig.initialize_optionscCs|jdur|jjpg|_nt|jtƒr6|j tj¡|_|jdurHg|_nt|jtƒr^|jg|_|jdurpg|_nt|jtƒrŒ|j tj¡|_dS©N) rZ distributionÚ isinstanceÚstrÚsplitÚosÚpathseprrrrrrÚfinalize_optionsBs       zconfig.finalize_optionscCsdSrrrrrrÚrunRsz config.runcCszddlm}m}t|j|ƒsv||j|jdd|_t|jƒ|jrN|j |j¡|j rb|j  |j ¡|j rv|j  |j ¡dS)Nr)Ú CCompilerÚ new_compilerr)rÚdry_runÚforce) Údistutils.ccompilerr"r#rrr$rrZset_include_dirsrZ set_librariesrZset_library_dirs)rr"r#rrrÚ_check_compilerYs ÿ zconfig._check_compilercCs€dt|}t|dƒV}|r>|D]}| d|¡q | d¡| |¡|ddkr^| d¡Wdƒn1sr0Y|S)NZ _configtestÚwz#include <%s> Ú éÿÿÿÿ)ÚLANG_EXTÚopenÚwrite)rÚbodyÚheadersÚlangÚfilenameÚfileÚheaderrrrÚ_gen_temp_sourcefileks     (zconfig._gen_temp_sourcefilecCs<| |||¡}d}|j ||g¡|jj|||d||fS)Nz _configtest.i©r)r4rÚextendrZ preprocess)rr.r/rr0ÚsrcÚoutrrrÚ _preprocessws zconfig._preprocesscCs\| |||¡}|jr"t|d|ƒ|j |g¡\}|j ||g¡|jj|g|d||fS)Nzcompiling '%s':r5)r4rÚ dump_filerZobject_filenamesrr6Úcompile)rr.r/rr0r7ÚobjrrrÚ_compile~szconfig._compilec Csr| ||||¡\}}tj tj |¡¡d} |jj|g| |||d|jjdur\| |jj} |j  | ¡||| fS)Nr)rrZ target_lang) r=rÚpathÚsplitextÚbasenamerZlink_executableZ exe_extensionrÚappend) rr.r/rrrr0r7r<ÚprogrrrÚ_link‡s ý   z config._linkc GsR|s|j}g|_t dd |¡¡|D]&}zt |¡Wq&tyJYq&0q&dS)Nz removing: %sú )rrÚinfoÚjoinrÚremoveÚOSError)rÚ filenamesr1rrrÚ_clean–s z config._cleanNrcCsPddlm}| ¡d}z| ||||¡Wn|yBd}Yn0| ¡|S)Nr©Ú CompileErrorTF)r&rLr'r9rJ©rr.r/rr0rLÚokrrrÚtry_cpp¬s   zconfig.try_cppc CsŒ| ¡| ||||¡\}}t|tƒr0t |¡}t|ƒ8}d} | ¡} | dkrPqb| | ¡r>d} qbq>Wdƒn1sv0Y|  ¡| S)NFÚT) r'r9rrÚrer;r,ÚreadlineÚsearchrJ) rÚpatternr.r/rr0r7r8r2ÚmatchÚlinerrrÚ search_cpp¾s     "zconfig.search_cppcCsbddlm}| ¡z| ||||¡d}Wn|yBd}Yn0t |rPdpRd¡| ¡|S)NrrKTFúsuccess!úfailure.)r&rLr'r=rrErJrMrrrÚ try_compileÚs   zconfig.try_compilec Csnddlm}m}| ¡z| ||||||¡d} Wn||fyNd} Yn0t | r\dp^d¡| ¡| S©Nr)rLÚ LinkErrorTFrXrY)r&rLr\r'rCrrErJ) rr.r/rrrr0rLr\rNrrrÚtry_linkês ÿ zconfig.try_linkc Cs‚ddlm}m}| ¡z.| ||||||¡\} } } | | g¡d} Wn||tfybd} Yn0t | rpdprd¡|  ¡| Sr[) r&rLr\r'rCÚspawnrrrErJ) rr.r/rrrr0rLr\r7r<ZexerNrrrÚtry_runýs ÿ   zconfig.try_runrc Cst| ¡g}|r| d|¡| d¡|r<| d|¡n| d|¡| d¡d |¡d}| |||||¡S)Nz int %s ();z int main () {z %s();z %s;ú}r))r'rArFr]) rÚfuncr/rrrZdeclÚcallr.rrrÚ check_funcs   ÿzconfig.check_funccCs | ¡| d|||g||¡S)Nzint main (void) { })r'r])rZlibraryrr/rZother_librariesrrrÚ check_lib4s   ÿzconfig.check_libcCs|jd|g|dS)Nz /* No body */)r.r/r)rO)rr3rrr0rrrÚ check_headerBs ÿzconfig.check_header)NNNr)NNNr)NNr)NNNNr)NNNNr)NNNNrr)NNr)Ú__name__Ú __module__Ú __qualname__Ú descriptionZ user_optionsrr r!r'r4r9r=rCrJrOrWrZr]r_rcrdrerrrrrs>   ÿ  ÿ ÿ ÿ ÿ ÿrcCsR|durt d|¡n t |¡t|ƒ}zt | ¡¡W| ¡n | ¡0dS)Nz%s)rrEr,ÚreadÚclose)r1Úheadr2rrrr:Ks r:)N) rrQZdistutils.corerZdistutils.errorsrZdistutils.sysconfigrZ distutilsrr+rr:rrrrÚ s     8