�&ǐk�@'bJ�h�ۊL'}T� :��'2�Z#$��n�a��� �>a��`��_3d�Qpt�/�P -��#5�,�M��� �pA:©�q�����NW��ډ�A���� �9nʺج���� �TSM��{J6?7��r�@�\����D��� �׶���s�f�TJj?"��D��`?��̒� b�#�%�C*v�$�{�$����5Ծ�F�s��y�e/8��h-�f�̰&(����Gj�L:U� 2�� ����v�_k����Y��gp,�k�WF�R������_C�R��N@���R�@�ߔ?A�w9���F("iNa-S���Q�o�3tDMLh*�#4k�T/iQ��Y*�G��m����)��8�hBm/�I�,g�ﯖ���Z��}�Cz�q@´��d.����L�ŕ�,��1�Z�܌�: ̪���F+J-'��c�tvJ8��]Q-��b��y �6;*J`r_�d ��'�G ~p��)'�C,�%F��E(��2�k�����lР�z�!�=t ��_�0��f7��� ;�p�|�U �%ssz+build_py.get_data_files..) rget_package_dirosr$joinrsplitlenfind_data_filesappend)rdatarsrc_dir build_dir filenamesrr3rras     zbuild_py.get_data_filescsd|jdg|j|g}g|D]:}ttjt|t|}fdd|Dq$S)z6Return filenames for package's data files in 'src_dir'cs$g|]}|krtj|r|qSr)r6r$isfile)r1fnfilesrrr4s z,build_py.find_data_files..) rgetglobr6r$r7escaperextend)rrr=ZglobspatternZfilelistrrCrr:ys  zbuild_py.find_data_filescCs`d}|jD]P\}}}}|D]>}tj||}|tj||jtj|||ddqq dS)z$Copy data files into build directoryNFZ preserve_mode)rr6r$r7mkpathdirname copy_file)rZlastdirrr=r>r?filenametargetrrrr*szbuild_py.build_package_datacCs|d}|js&|r tjj|SdSng}|rz|jd|}Wn*tk rl|d|d|d=Yq*X|d|tjj|Sq*|jd}|dk r|d||rtjj|SdSdS)zReturn the directory, relative to the top of the source distribution, where package 'package' should be found (at least according to the 'package_dir' option, if any).r.r@rN)r8rr6r$r7KeyErrorinsertrE)rrr$tailZpdirrrrr5s(       zbuild_py.get_package_dircCsj|dkr8tj|s td|tj|s8td||rftj|d}tj|rZ|Std|dS)Nr@z%package directory '%s' does not existz>supposed package directory '%s' exists, but is not a directoryz __init__.pyz8package init file '%s' not found (or not a regular file)) r6r$existsZDistutilsFileErrorisdirr7rArwarn)rrrinit_pyrrr check_packages&   zbuild_py.check_packagecCs&tj|std||dSdSdS)Nz!file %s (for module %s) not foundFT)r6r$rArrV)rmodule module_filerrr check_modules zbuild_py.check_modulec Cs|||ttjt|d}g}tj|jj}|D]P}tj|}||krtj tj |d}| |||fq>| d|q>|S)Nz*.pyrz excluding %s) rXrFr6r$r7rGabspathrZ script_namesplitextbasenamer;Z debug_print) rrrZ module_filesmodulesZ setup_scriptrZabs_frYrrrfind_package_moduless  zbuild_py.find_package_modulesc Csi}g}|jD]}|d}d|dd}|d}z||\}}Wn"tk rh||}d}YnX|s|||} |df||<| r||d| ftj||d} | || sq|||| fq|S)aFinds individually-specified Python modules, ie. those listed by module name in 'self.py_modules'. Returns a list of tuples (package, module_base, filename): 'package' is a tuple of the path through package-space to the module; 'module_base' is the bare (no packages, no dots) module name, and 'filename' is the path to the ".py" file (relative to the distribution root) that implements the module. r.rrPr/__init__.py) rr8r7rQr5rXr;r6r$r[) rrr_rYr$rZ module_basercheckedrWrZrrr find_moduless*       zbuild_py.find_modulescCsNg}|jr|||jrJ|jD]$}||}|||}||q$|S)a4Compute the list of all modules that will be built, whether they are specified one-module-at-a-time ('self.py_modules') or by whole packages ('self.packages'). Return a list of tuples (package, module, module_file), just like 'find_modules()' and 'find_package_modules()' do.)rrHrdrr5r`)rr_rrmrrrfind_all_moduless    zbuild_py.find_all_modulescCsdd|DS)NcSsg|] }|dqS)rPr)r1rYrrrr4-sz-build_py.get_source_files..)rfrrrrget_source_files,szbuild_py.get_source_filescCs$|gt||dg}tjj|S)Nrb)listr6r$r7)rr>rrYZ outfile_pathrrrget_module_outfile/szbuild_py.get_module_outfiler/cCs|}g}|D]p\}}}|d}||j||}|||r|jr^|tjj|dd|j dkr|tjj||j dq|dd|j D7}|S)Nr.r@) optimizationrcSs,g|]$\}}}}|D]}tj||qqSr)r6r$r7)r1rr=r>r?rNrrrr4Bs z(build_py.get_outputs..) rfr8rirr;r importlibutilcache_from_sourcerr)rr'r_ZoutputsrrYrZrNrrrr,3s*      zbuild_py.get_outputscCsbt|tr|d}nt|ttfs,td||j||}tj |}| ||j ||ddS)Nr.z:'package' must be a string (dot-separated), list, or tuplerrJ) rstrr8rhtuple TypeErrorrirr6r$rLrKrM)rrYrZrZoutfiledirrrr build_moduleJs    zbuild_py.build_modulecCs*|}|D]\}}}||||q dSr0)rdrr)rr_rrYrZrrrr(Yszbuild_py.build_modulescCsD|jD]8}||}|||}|D]\}}}||||q$qdSr0)rr5r`rr)rrrr_Zpackage_rYrZrrrr)bs   zbuild_py.build_packagescCstjr|ddSddlm}|j}|dtjkr>|tj}|jrZ||d|j ||j d|j dkr||||j |j ||j ddS)Nz%byte-compiling is disabled, skipping.r)r+rP)rr prefixdry_run) sysdont_write_bytecoderVdistutils.utilr+rr6sepr r rtr)rrDr+rsrrrr+vs&    zbuild_py.byte_compileN)r/)__name__ __module__ __qualname__Z descriptionZ user_optionsZboolean_optionsZ negative_optrr%r-rr:r*r5rXr[r`rdrfrgrir,rrr(r)r+rrrrrs8    '4  rc@seZdZddZddZdS) build_py_2to3cCsLg|_|jr||jr*||||j||jdddSr&) updated_filesrr(rr)r*Zrun_2to3r+r,rrrrr-s zbuild_py_2to3.runcCs,t||||}|dr(|j|d|S)Nr/r)rrrr}r;)rrYrZrresrrrrrszbuild_py_2to3.build_moduleN)ryrzr{r-rrrrrrr|sr|)__doc__r6importlib.utilrkrurFZdistutils.corerZdistutils.errorsrwrrZ distutilsrrr|rrrrs  }