3 \ Cã@szddlZddlZddlZddlmZddlmZddlTddlm Z m Z ddl m Z Gdd„deƒZ Gd d „d e e ƒZdS) éN)Úglob)ÚCommand)Ú*)Ú convert_pathÚ Mixin2to3)Úlogc@sÈeZdZdZd8d9d:d;dÚbuild_pyz5"build" pure Python modules (copy to build directory)ú build-lib=Údúdirectory to "build" (copy) toÚcompileÚcúcompile .py to .pycú no-compileNú!don't compile .py files [default]ú optimize=ÚOúlalso compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0]ÚforceÚfú2forcibly build everything (ignore file timestamps)cCs4d|_d|_d|_d|_d|_d|_d|_d|_dS)Nr)Ú build_libÚ py_modulesÚpackageÚ package_dataÚ package_dirr Úoptimizer)Úself©rú2/usr/lib64/python3.6/distutils/command/build_py.pyÚinitialize_options szbuild_py.initialize_optionsc Cs®|jdddƒ|jj|_|jj|_|jj|_i|_|jjrbx&|jjjƒD]\}}t|ƒ|j|<qHW|jƒ|_ t |j t ƒsªyt |j ƒ|_ Wn t tfk r¨tdƒ‚YnXdS)NZbuildrrzoptimize must be 0, 1, or 2)rr)rr)Zset_undefined_optionsÚ distributionÚpackagesrrrÚitemsrÚget_data_filesÚ data_filesÚ isinstancerÚintÚ ValueErrorÚAssertionErrorZDistutilsOptionError)rÚnameÚpathrrrÚfinalize_options*s"      zbuild_py.finalize_optionscCs:|jr|jƒ|jr$|jƒ|jƒ|j|jdd�ƒdS)Nr)Úinclude_bytecode)rÚ build_modulesr"Úbuild_packagesÚbuild_package_dataÚ byte_compileÚ get_outputs)rrrrÚrunCs z build_py.runcs†g}|js|Sxr|jD]h}|j|ƒ}tjj|jg|jdƒŽ}d‰|rRt|ƒd‰‡fdd„|j||ƒDƒ}|j ||||fƒqW|S)NÚ.récsg|]}|ˆd…‘qS)Nr)Ú.0Úfile)Úplenrrú tsz+build_py.get_data_files..) r"Úget_package_dirÚosr+ÚjoinrÚsplitÚlenÚfind_data_filesÚappend)rÚdatarÚsrc_dirÚ build_dirÚ filenamesr)r8rr$as   zbuild_py.get_data_filescs`|jjdgƒ|jj|gƒ}g‰x:|D]2}ttjj|t|ƒƒƒ}ˆj‡fdd„|Dƒƒq&WˆS)NÚcs$g|]}|ˆkrtjj|ƒr|‘qSr)r;r+Úisfile)r6Úfn)Úfilesrrr9‚s z,build_py.find_data_files..)rÚgetrr;r+r<rÚextend)rrrBZglobsÚpatternZfilelistr)rHrr?ys  zbuild_py.find_data_filescCshd}x^|jD]T\}}}}xF|D]>}tjj||ƒ}|jtjj|ƒƒ|jtjj||ƒ|dd�qWq WdS)NF)Ú preserve_mode)r%r;r+r<ÚmkpathÚdirnameÚ copy_file)rZlastdirrrBrCrDÚfilenameÚtargetrrrr0†s zbuild_py.build_package_datac CsÄ|jdƒ}|js&|r tjj|ŽSdSnšg}x”|rŠy|jdj|ƒ}Wn*tk rn|jd|dƒ|d=Yq,X|jd|ƒtjj|ŽSq,W|jjdƒ}|dk r¬|jd|ƒ|r¼tjj|ŽSdSdS)Nr4rErr5éÿÿÿÿrR)r=rr;r+r<ÚKeyErrorÚinsertrI)rrr+ÚtailZpdirrrrr:�s(       zbuild_py.get_package_dircCsj|dkr8tjj|ƒs td|ƒ‚tjj|ƒs8td|ƒ‚|rftjj|dƒ}tjj|ƒrZ|Stjd|ƒdS)NrEz%package directory '%s' does not existz>supposed package directory '%s' exists, but is not a directoryz __init__.pyz!package init file '%s' not found z(or not a regular file)z8package init file '%s' not found (or not a regular file)) r;r+ÚexistsZDistutilsFileErrorÚisdirr<rFrÚwarn)rrrÚinit_pyrrrÚ check_package·s    zbuild_py.check_packagecCs&tjj|ƒstjd||ƒdSdSdS)Nz!file %s (for module %s) not foundFT)r;r+rFrrX)rÚmoduleÚ module_filerrrÚ check_moduleÒs zbuild_py.check_modulec Cs�|j||ƒttjj|dƒƒ}g}tjj|jjƒ}xX|D]P}tjj|ƒ}||krztjjtjj |ƒƒd}|j |||fƒq8|j d|ƒq8W|S)Nz*.pyrz excluding %s) rZrr;r+r<Úabspathr!Z script_nameÚsplitextÚbasenamer@Z debug_print) rrrZ module_filesÚmodulesZ setup_scriptrZabs_fr[rrrÚfind_package_modulesÙs   zbuild_py.find_package_modulesc CsÔi}g}xÆ|jD]¼}|jdƒ}dj|dd…ƒ}|d}y||\}}Wn"tk rj|j|ƒ}d}YnX|sœ|j||ƒ} |df||<| rœ|j|d| fƒtjj||dƒ} |j || ƒs¼q|j||| fƒqW|S)Nr4rr5Ú__init__z.pyrRrR) rr=r<rSr:rZr@r;r+r]) rr"rar[r+rZ module_baserZcheckedrYr\rrrÚ find_modulesès*       zbuild_py.find_modulescCsRg}|jr|j|jƒƒ|jrNx.|jD]$}|j|ƒ}|j||ƒ}|j|ƒq&W|S)N)rrJrdr"r:rb)rrarrÚmrrrÚfind_all_moduless   zbuild_py.find_all_modulescCsdd„|jƒDƒS)NcSsg|] }|d‘qS)r5rRr)r6r[rrrr9-sz-build_py.get_source_files..)rf)rrrrÚget_source_files,szbuild_py.get_source_filescCs$|gt|ƒ|dg}tjj|ŽS)Nz.py)Úlistr;r+r<)rrCrr[Z outfile_pathrrrÚget_module_outfile/szbuild_py.get_module_outfiler5cCsž|jƒ}g}xx|D]p\}}}|jdƒ}|j|j||ƒ}|j|ƒ|r|jr`|jtjj|dd�ƒ|j dkr|jtjj||j d�ƒqW|dd„|j Dƒ7}|S)Nr4rE)Ú optimizationrcSs,g|]$\}}}}|D]}tjj||ƒ‘qqSr)r;r+r<)r6rrBrCrDrPrrrr9Cs z(build_py.get_outputs..) rfr=rirr@r Ú importlibÚutilÚcache_from_sourcerr%)rr-raZoutputsrr[r\rPrrrr23s"       zbuild_py.get_outputscCsbt|tƒr|jdƒ}nt|ttfƒs,tdƒ‚|j|j||ƒ}tj j |ƒ}|j |ƒ|j ||dd�S)Nr4z:'package' must be a string (dot-separated), list, or tupler)rL) r&Ústrr=rhÚtupleÚ TypeErrorrirr;r+rNrMrO)rr[r\rZoutfileÚdirrrrÚ build_moduleJs    zbuild_py.build_modulecCs.|jƒ}x |D]\}}}|j|||ƒqWdS)N)rdrr)rrarr[r\rrrr.Yszbuild_py.build_modulescCsLxF|jD]<}|j|ƒ}|j||ƒ}x |D]\}}}|j|||ƒq(WqWdS)N)r"r:rbrr)rrrraZpackage_r[r\rrrr/bs   zbuild_py.build_packagescCs€tjr|jdƒdSddlm}|j}|dtjkr>|tj}|jrZ||d|j ||j d�|j dkr||||j |j ||j d�dS)Nz%byte-compiling is disabled, skipping.r)r1r5)rrÚprefixÚdry_runrR) ÚsysÚdont_write_bytecoderXÚdistutils.utilr1rr;Úsepr rrtr)rrHr1rsrrrr1vs    zbuild_py.byte_compile)r r r )r r r)rNr)rrr)rrr)r5)Ú__name__Ú __module__Ú __qualname__Z descriptionZ user_optionsZboolean_optionsZ negative_optr r,r3r$r?r0r:rZr]rbrdrfrgrir2rrr.r/r1rrrrrs8   '4  rc@seZdZdd„Zdd„ZdS)Ú build_py_2to3cCsLg|_|jr|jƒ|jr*|jƒ|jƒ|j|jƒ|j|jdd�ƒdS)Nr)r-) Ú updated_filesrr.r"r/r0Zrun_2to3r1r2)rrrrr3‹s zbuild_py_2to3.runcCs,tj||||ƒ}|dr(|jj|dƒ|S)Nr5r)rrrr}r@)rr[r\rÚresrrrrr›szbuild_py_2to3.build_moduleN)ryrzr{r3rrrrrrr|Šsr|)r;Úimportlib.utilrkrurZdistutils.corerZdistutils.errorsrwrrZ distutilsrrr|rrrrÚs   }