B ‘–ReT ã@s”ddlmZddlmZddlmmZddlZddlZddl Z ddl Z ddl Z ddl Z ddlZddlmZdd„ZGdd„dejƒZd d „ZdS) é)Úglob)Ú convert_pathN)Úunique_everseencCst |t |¡jtjB¡dS)N)ÚosÚchmodÚstatÚst_modeÚS_IWRITE)Útarget©r ú‘/builddir/build/BUILDROOT/alt-python37-setuptools-58.3.0-4.el8.x86_64/opt/alt/python37/lib/python3.7/site-packages/setuptools/command/build_py.pyÚ make_writablesr c@sŒeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zedd„ƒZd S)!Úbuild_pyaXEnhanced 'build_py' command that includes data files with packages The data files are specified via a 'package_data' argument to 'setup()'. See 'setuptools.dist.Distribution' for more details. Also, this version of the 'build_py' command allows you to specify both 'py_modules' and 'packages' in the same setup operation. cCs@tj |¡|jj|_|jjp i|_d|jkr6|jd=g|_dS)NÚ data_files)ÚorigrÚfinalize_optionsÚ distributionÚ package_dataÚexclude_package_dataÚ__dict__Ú_build_py__updated_files)Úselfr r r rs    zbuild_py.finalize_optionscCsN|js|jsdS|jr| ¡|jr4| ¡| ¡| tjj|dd¡dS)z?Build modules, packages, and copy data files to build directoryNr)Zinclude_bytecode) Ú py_modulesÚpackagesZ build_modulesZbuild_packagesÚbuild_package_dataÚ byte_compilerrÚ get_outputs)rr r r Úrun$s z build_py.runcCs&|dkr| ¡|_|jStj ||¡S)zlazily compute data filesr)Ú_get_data_filesrrrÚ __getattr__)rÚattrr r r r4s zbuild_py.__getattr__cCs.tj ||||¡\}}|r&|j |¡||fS)N)rrÚ build_modulerÚappend)rÚmoduleZ module_fileÚpackageÚoutfileÚcopiedr r r r!;s zbuild_py.build_modulecCs| ¡tt|j|jpdƒƒS)z?Generate list of '(package,src_dir,build_dir,filenames)' tuplesr )Úanalyze_manifestÚlistÚmapÚ_get_pkg_data_filesr)rr r r rAszbuild_py._get_data_filescsJ| |¡‰tjj|jg| d¡Ž}‡fdd„| |ˆ¡Dƒ}|ˆ||fS)NÚ.csg|]}tj |ˆ¡‘qSr )rÚpathÚrelpath)Ú.0Úfile)Úsrc_dirr r ú Osz0build_py._get_pkg_data_files..)Úget_package_dirrr,ÚjoinÚ build_libÚsplitÚfind_data_files)rr$Ú build_dirÚ filenamesr )r0r r*Fs   zbuild_py._get_pkg_data_filescCsX| |j||¡}tt|ƒ}tj |¡}ttj j |ƒ}t |j   |g¡|¡}|  |||¡S)z6Return filenames for package's data files in 'src_dir')Ú_get_platform_patternsrr)rÚ itertoolsÚchainÚ from_iterableÚfilterrr,ÚisfileÚmanifest_filesÚgetÚexclude_data_files)rr$r0ÚpatternsZglobs_expandedZ globs_matchesZ glob_filesÚfilesr r r r6Ts   zbuild_py.find_data_filesc Cs|xv|jD]l\}}}}x^|D]V}tj ||¡}| tj |¡¡tj ||¡}| ||¡\}} t|ƒtj |¡}qWqWdS)z$Copy data files into build directoryN) rrr,r3ÚmkpathÚdirnameÚ copy_filer Úabspath) rr$r0r7r8Úfilenamer ÚsrcfileÚoutfr&r r r res zbuild_py.build_package_datac Csôi|_}|jjsdSi}x$|jp$dD]}||t| |¡ƒ<q&W| d¡| d¡}xš|jj D]Ž}t j   t|ƒ¡\}}d}|} x:|r¸||kr¸||kr¸|}t j   |¡\}} t j   | |¡}q€W||kr^| d¡rÖ|| krÖq^| ||g¡ |¡q^WdS)Nr Úegg_infoz.py)r?rZinclude_package_datarÚassert_relativer2Ú run_commandÚget_finalized_commandÚfilelistrCrr,r5r3ÚendswithÚ setdefaultr") rZmfZsrc_dirsr$Zei_cmdr,ÚdÚfÚprevZoldfZdfr r r r'ps(   zbuild_py.analyze_manifestcCsdS)Nr )rr r r Úget_data_filesˆszbuild_py.get_data_filesc Cs¶y |j|Stk rYnXtj |||¡}||j|<|rF|jjsJ|Sx,|jjD]}||ksn| |d¡rTPqTW|St  |d¡}|  ¡}WdQRXd|kr²t j   d|f¡‚|S)z8Check namespace packages' __init__ for declare_namespacer+ÚrbNsdeclare_namespacezÁNamespace package problem: %s is a namespace package, but its __init__.py does not call declare_namespace()! Please fix it. (See the setuptools manual under "Namespace Packages" for details.) ")Úpackages_checkedÚKeyErrorrrÚ check_packagerZnamespace_packagesÚ startswithÚioÚopenÚreadÚ distutilsÚerrorsÚDistutilsError)rr$Ú package_dirZinit_pyÚpkgrSÚcontentsr r r rY‹s&    zbuild_py.check_packagecCsi|_tj |¡dS)N)rWrrÚinitialize_options)rr r r rd©szbuild_py.initialize_optionscCs0tj ||¡}|jjdk r,tj |jj|¡S|S)N)rrr2rZsrc_rootrr,r3)rr$Úresr r r r2­s zbuild_py.get_package_dircs\tˆƒ‰| |j||¡}‡fdd„|Dƒ}tj |¡}t|ƒ‰‡fdd„ˆDƒ}tt|ƒƒS)z6Filter filenames for package's data files in 'src_dir'c3s|]}t ˆ|¡VqdS)N)Úfnmatchr=)r.Úpattern)rCr r ú »sz.build_py.exclude_data_files..c3s|]}|ˆkr|VqdS)Nr )r.Úfn)Úbadr r rh¿s)r(r9rr:r;r<Úsetr)rr$r0rCrBZ match_groupsÚmatchesZkeepersr )rjrCr rA³s zbuild_py.exclude_data_filescs.t | dg¡| |g¡¡}‡fdd„|DƒS)zÜ yield platform-specific path patterns (suitable for glob or fn_match) from a glob-based spec (such as self.package_data or self.exclude_package_data) matching package in src_dir. Úc3s |]}tj ˆt|ƒ¡VqdS)N)rr,r3r)r.rg)r0r r rhÑsz2build_py._get_platform_patterns..)r:r;r@)Úspecr$r0Z raw_patternsr )r0r r9Ãs   zbuild_py._get_platform_patternsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr!rr*r6rr'rUrYrdr2rAÚ staticmethodr9r r r r rs  rcCs:tj |¡s|Sddlm}t d¡ ¡|}||ƒ‚dS)Nr)ÚDistutilsSetupErrorzÓ Error: setup script specifies an absolute path: %s setup() arguments must *always* be /-separated paths relative to the setup.py directory, *never* absolute paths. )rr,ÚisabsÚdistutils.errorsrtÚtextwrapÚdedentÚlstrip)r,rtÚmsgr r r rLÖs  rL)rÚdistutils.utilrZdistutils.command.build_pyÚcommandrrrrfrwr[rvr^r:rZ setuptools.extern.more_itertoolsrr rLr r r r Ús   E