U Reo@@sddZddlZddlZddlZddlZddlmZddlTddl m Z ddl m Z GdddeZ dS) zHdistutils.command.build_py Implements the Distutils 'build_py' command.N)Command)*) convert_path)logc@seZdZdZdddddgZddgZd diZd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd2d'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1S)3build_pyz5"build" pure Python modules (copy to build directory))z build-lib=dzdirectory to "build" (copy) to)compileczcompile .py to .pyc) no-compileNz!don't compile .py files [default])z optimize=Ozlalso compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0])forcefz2forcibly build everything (ignore file timestamps)rr r cCs4d|_d|_d|_d|_d|_d|_d|_d|_dS)Nr) build_lib py_modulespackage package_data package_dirroptimizer selfr/builddir/build/BUILDROOT/alt-python38-setuptools-58.3.0-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/setuptools/_distutils/command/build_py.pyinitialize_options szbuild_py.initialize_optionsc Cs|ddd|jj|_|jj|_|jj|_i|_|jjr^|jjD]\}}t||j|<qF||_ t |j t sz,t |j |_ d|j krdksnt Wn tt fk rtdYnXdS)Nbuild)rr)r r rzoptimize must be 0, 1, or 2)set_undefined_options distributionpackagesrrritemsrget_data_files data_files isinstancerintAssertionError ValueErrorDistutilsOptionError)rnamepathrrrfinalize_options*s$       zbuild_py.finalize_optionscCs:|jr||jr$||||jdddS)Nr)include_bytecode)r build_modulesrbuild_packagesbuild_package_data byte_compile get_outputsrrrrrunCs z build_py.runcsg}|js|S|jD]h}||}tjj|jg|d}d|rPt|dfdd|||D}| ||||fq|S)z?Generate list of '(package,src_dir,build_dir,filenames)' tuples.rcsg|]}|dqSNr).0fileplenrr ssz+build_py.get_data_files..) rget_package_dirosr'joinrsplitlenfind_data_filesappend)rdatarsrc_dir build_dir filenamesrr5rras     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)r9r'isfile)r3fnfilesrrr7s z,build_py.find_data_files..) rgetglobr9r'r:escaperextend)rrr@ZglobspatternfilelistrrFrr=ys  zbuild_py.find_data_filescCs`d}|jD]P\}}}}|D]>}tj||}|tj||jtj|||ddqq dS)z$Copy data files into build directoryNF preserve_mode)r r9r'r:mkpathdirname copy_file)rZlastdirrr@rArBfilenametargetrrrr,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).r0rCrN)r;rr9r'r:KeyErrorinsertrH)rrr'tailZpdirrrrr8s(       zbuild_py.get_package_dircCsj|dkr8tj|s td|tj|s8td||rftj|d}tj|rZ|Std|dS)NrCz%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)) r9r'existsDistutilsFileErrorisdirr:rDrwarn)rrrinit_pyrrr check_packages&   zbuild_py.check_packagecCs&tj|std||dSdSdS)Nz!file %s (for module %s) not foundFT)r9r'rDrr\)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) r^rIr9r'r:rJabspathr script_namesplitextbasenamer> debug_print) rrrZ module_filesmodulesZ setup_scriptr Zabs_fr_rrrfind_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. r0rrUr1__init__.py) rr;r:rVr8r^r>r9r'ra) rrrgr_r'rZ module_basercheckedr]r`rrr 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.)rrKrlrr8rh)rrgrrmrrrfind_all_moduless    zbuild_py.find_all_modulescCsdd|DS)NcSsg|] }|dqS)rUr)r3r_rrrr7-sz-build_py.get_source_files..)rnrrrrget_source_files,szbuild_py.get_source_filescCs$|gt||dg}tjj|S)Nrj)listr9r'r:)rrArr_Z outfile_pathrrrget_module_outfile/szbuild_py.get_module_outfiler1cCs|}g}|D]p\}}}|d}||j||}|||r|jr^|tjj|dd|j dkr|tjj||j dq|dd|j D7}|S)Nr0rC) optimizationrcSs,g|]$\}}}}|D]}tj||qqSr)r9r'r:)r3rr@rArBrSrrrr7Bs z(build_py.get_outputs..) rnr;rqrr>r importlibutilcache_from_sourcerr )rr)rgoutputsrr_r`rSrrrr.3s*      zbuild_py.get_outputscCsbt|tr|d}nt|ttfs,td||j||}tj |}| ||j ||ddS)Nr0z:'package' must be a string (dot-separated), list, or tuplerrN) r!strr;rptuple TypeErrorrqrr9r'rQrPrR)rr_r`routfiledirrrr build_moduleJs    zbuild_py.build_modulecCs*|}|D]\}}}||||q dSr2)rlr|)rrgrr_r`rrrr*Yszbuild_py.build_modulescCsP|jD]D}||}|||}|D]$\}}}||ks:t||||q$qdSr2)rr8rhr#r|)rrrrgZpackage_r_r`rrrr+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-rU)rr prefixdry_run) sysdont_write_bytecoder\distutils.utilr-rr9seprr r~r)rrGr-r}rrrr-vs&    zbuild_py.byte_compileN)r1)__name__ __module__ __qualname__ description user_optionsboolean_options negative_optrr(r/rr=r,r8r^rarhrlrnrorqr.r|r*r+r-rrrrrs8    '4  r)__doc__r9importlib.utilrsrrIdistutils.corerdistutils.errorsrr distutilsrrrrrrs