a ¨5€aT ã@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 úL/opt/alt/python39/lib/python3.9/site-packages/setuptools/command/build_py.pyÚ make_writablesrc@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|jvr6|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) Z py_modulesÚpackagesZ build_modulesZbuild_packagesÚbuild_package_dataZ byte_compilerrZ get_outputsrr 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 |¡||fSr)rrÚ build_modulerÚappend)rÚmoduleZ module_fileÚpackageZoutfileÚ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_filesrrr 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 Ú Nsÿz0build_py._get_pkg_data_files..)Úget_package_dirrr*ÚjoinZ build_libÚsplitÚfind_data_files)rr#Ú build_dirÚ filenamesr r.r 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#r/ÚpatternsZglobs_expandedZ globs_matchesZ glob_filesÚfilesr r r r4Tsý   þzbuild_py.find_data_filesc Cst|jD]h\}}}}|D]V}tj ||¡}| tj |¡¡tj ||¡}| ||¡\}} t|ƒtj |¡}qqdS)z$Copy data files into build directoryN) rrr*r2ZmkpathÚdirnameZ copy_filerÚabspath) rr#r/r5r6Úfilenamer ZsrcfileZoutfr$r r r reszbuild_py.build_package_datac Csèi|_}|jjsdSi}|jp"dD]}||t| |¡ƒ<q$| d¡| d¡}|jj D]Š}t j   t|ƒ¡\}}d}|} |r°||kr°||vr°|}t j   |¡\}} t j   | |¡}qx||vrX| d¡rÌ|| krÌqX| ||g¡ |¡qXdS)Nr Zegg_infoz.py)r=rZinclude_package_datarÚassert_relativer1Z run_commandZget_finalized_commandZfilelistrArr*r3r2ÚendswithÚ setdefaultr!) rZmfZsrc_dirsr#Zei_cmdr*ÚdÚfÚprevZoldfZdfr r r r%ps(    zbuild_py.analyze_manifestcCsdSrr rr r r Úget_data_filesˆszbuild_py.get_data_filescCsÈz |j|WStyYn0tj |||¡}||j|<|rF|jjsJ|S|jjD]}||ksl| |d¡rRqvqR|St  |d¡}|  ¡}Wdƒn1s 0Yd|vrÄ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ÚerrorsZDistutilsError)rr#Z package_dirZinit_pyZpkgrIÚcontentsr r r rO‹s*     &ýÿzbuild_py.check_packagecCsi|_tj |¡dSr)rMrrÚinitialize_optionsrr r r rW©szbuild_py.initialize_optionscCs0tj ||¡}|jjdur,tj |jj|¡S|Sr)rrr1rZsrc_rootrr*r2)rr#Úresr r r r1­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 ˆ|¡VqdSr)Úfnmatchr;©r,Úpattern)rAr r Ú »óz.build_py.exclude_data_files..c3s|]}|ˆvr|VqdSrr )r,Úfn)Úbadr r r\¿r])r&r7rr8r9r:Úsetr)rr#r/rAr@Z match_groupsZmatchesZkeepersr )r_rAr r?³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|ƒ¡VqdSr)rr*r2rrZr.r r r\Ïsÿz2build_py._get_platform_patterns..)r8r9r>)Úspecr#r/Z raw_patternsr r.r r7Ãs  þ ýzbuild_py._get_platform_patternsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr rr(r4rr%rKrOrWr1r?Ú staticmethodr7r 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.errorsrhÚtextwrapÚdedentÚlstrip)r*rhÚmsgr r r rEÖs  ÿ öÿ rE)rZdistutils.utilrZdistutils.command.build_pyZcommandrrrrYrkrQrjrTr8rZ setuptools.extern.more_itertoolsrrrEr r r r Ús   E