3 K”Re|%ã @sÒddlmZddlmZddljjZddlZddlZddl Z ddl Z ddl Z ddl Z ddlmZddlmZmZmZyddlmZWn"ek r¦Gdd„dƒZYnXGd d „d ejeƒZdd d „Zd d„ZdS)é)Úglob)Ú convert_pathN)Úsix)ÚmapÚfilterÚ filterfalse)Ú Mixin2to3c@seZdZddd„ZdS)rTcCsdS)z do nothingN©)ÚselfÚfilesZdoctestsr r ú‘/builddir/build/BUILDROOT/alt-python36-setuptools-38.5.2-7.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/setuptools/command/build_py.pyÚrun_2to3szMixin2to3.run_2to3N)T)Ú__name__Ú __module__Ú __qualname__r r r r r rsrc@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. cCsFtjj|ƒ|jj|_|jjp i|_d|jkr6|jd=g|_g|_dS)NÚ data_files) ÚorigrÚfinalize_optionsÚ distributionÚ package_dataÚexclude_package_dataÚ__dict__Ú_build_py__updated_filesÚ_build_py__doctests_2to3)r r r r r!s   zbuild_py.finalize_optionscCs||j r|j rdS|jr"|jƒ|jr8|jƒ|jƒ|j|jdƒ|j|jdƒ|j|jdƒ|jt j j |dd�ƒdS)z?Build modules, packages, and copy data files to build directoryNFTr)Zinclude_bytecode) Ú py_modulesÚpackagesZ build_modulesZbuild_packagesÚbuild_package_datar rrÚ byte_compilerrÚ get_outputs)r r r r Úrun+sz build_py.runcCs&|dkr|jƒ|_|jStjj||ƒS)zlazily compute data filesr)Ú_get_data_filesrrrÚ __getattr__)r Úattrr r r r"?s zbuild_py.__getattr__cCsJtjrt|tjƒr|jdƒ}tjj||||ƒ\}}|rB|jj |ƒ||fS)NÚ.) rÚPY2Ú isinstanceÚ string_typesÚsplitrrÚ build_modulerÚappend)r ÚmoduleZ module_fileÚpackageÚoutfileÚcopiedr r r r)Fs    zbuild_py.build_modulecCs|jƒtt|j|jpfƒƒS)z?Generate list of '(package,src_dir,build_dir,filenames)' tuples)Úanalyze_manifestÚlistrÚ_get_pkg_data_filesr)r r r r r!Pszbuild_py._get_data_filescsJ|j|ƒ‰tjj|jg|jdƒŽ}‡fdd„|j|ˆƒDƒ}|ˆ||fS)Nr$csg|]}tjj|ˆƒ‘qSr )ÚosÚpathÚrelpath)Ú.0Úfile)Úsrc_dirr r ú ^sz0build_py._get_pkg_data_files..)Úget_package_dirr2r3ÚjoinÚ build_libr(Úfind_data_files)r r,Ú build_dirÚ filenamesr )r7r r1Us   zbuild_py._get_pkg_data_filescCsX|j|j||ƒ}tt|ƒ}tjj|ƒ}ttj j |ƒ}tj|j j |gƒ|ƒ}|j |||ƒS)z6Return filenames for package's data files in 'src_dir')Ú_get_platform_patternsrrrÚ itertoolsÚchainÚ from_iterablerr2r3ÚisfileÚmanifest_filesÚgetÚexclude_data_files)r r,r7ÚpatternsZglobs_expandedZ globs_matchesZ glob_filesr r r r r<cs   zbuild_py.find_data_filesc Cs�xŠ|jD]€\}}}}xr|D]j}tjj||ƒ}|jtjj|ƒƒtjj||ƒ}|j||ƒ\}} tjj|ƒ}| r||jj kr|j j |ƒqWqWdS)z$Copy data files into build directoryN) rr2r3r:ÚmkpathÚdirnameÚ copy_fileÚabspathrZconvert_2to3_doctestsrr*) r r,r7r=r>ÚfilenameÚtargetÚsrcfileÚoutfr.r r r rts   zbuild_py.build_package_datac Csôi|_}|jjsdSi}x$|jp$fD]}||t|j|ƒƒ<q&W|jdƒ|jdƒ}xš|jj D]Ž}t j j t|ƒƒ\}}d}|} x:|r¸||kr¸||kr¸|}t j j |ƒ\}} t j j | |ƒ}q€W||kr^|jdƒrÖ|| krÖq^|j||gƒj|ƒq^WdS)NÚegg_infoz.py)rDrZinclude_package_datarÚassert_relativer9Ú run_commandÚget_finalized_commandÚfilelistr r2r3r(r:ÚendswithÚ setdefaultr*) r ZmfZsrc_dirsr,Zei_cmdr3ÚdÚfÚprevZoldfZdfr r r r/�s(   zbuild_py.analyze_manifestcCsdS)Nr )r r r r Úget_data_files™szbuild_py.get_data_filescCsºy |j|Stk rYnXtjj|||ƒ}||j|<| sJ|jj rN|Sx,|jjD]}||ksr|j|dƒrXPqXW|Stj |dƒ�}|j ƒ}WdQRXd|kr¶t j 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)r r,Ú package_dirZinit_pyÚpkgrXÚcontentsr r r r^œs&   zbuild_py.check_packagecCsi|_tjj|ƒdS)N)r\rrÚinitialize_options)r r r r riºszbuild_py.initialize_optionscCs0tjj||ƒ}|jjdk r,tjj|jj|ƒS|S)N)rrr9rZsrc_rootr2r3r:)r r,Úresr r r r9¾s zbuild_py.get_package_dircs\tˆƒ‰|j|j||ƒ}‡fdd„|Dƒ}tjj|ƒ}t|ƒ‰‡fdd„ˆDƒ}tt|ƒƒS)z6Filter filenames for package's data files in 'src_dir'c3s|]}tjˆ|ƒVqdS)N)Úfnmatchr)r5Úpattern)r r r ú Ísz.build_py.exclude_data_files..c3s|]}|ˆkr|VqdS)Nr )r5Úfn)Úbadr r rmÔs)r0r?rr@rArBÚsetÚ_unique_everseen)r r,r7r rGZ match_groupsÚmatchesZkeepersr )ror r rFÄs   zbuild_py.exclude_data_filescs.tj|jdgƒ|j|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 |]}tjjˆt|ƒƒVqdS)N)r2r3r:r)r5rl)r7r r rmész2build_py._get_platform_patterns..)r@rArE)Úspecr,r7Z raw_patternsr )r7r r?Ûs   zbuild_py._get_platform_patternsN)rrrÚ__doc__rr r"r)r!r1r<rr/rZr^rir9rFÚ staticmethodr?r r r r rs    rccsjtƒ}|j}|dkr:xPt|j|ƒD]}||ƒ|Vq"Wn,x*|D]"}||ƒ}||kr@||ƒ|Vq@WdS)zHList unique elements, preserving order. Remember all elements ever seen.N)rpÚaddrÚ __contains__)ÚiterableÚkeyÚseenZseen_addÚelementÚkr r r rqïs  rqcCs:tjj|ƒs|Sddlm}tjdƒjƒ|}||ƒ‚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. )r2r3ÚisabsÚdistutils.errorsr~ÚtextwrapÚdedentÚlstrip)r3r~Úmsgr r r rQs   rQ)N)rÚdistutils.utilrZdistutils.command.build_pyÚcommandrrr2rkr�r`r€rcr@Zsetuptools.externrZsetuptools.extern.six.movesrrrZsetuptools.lib2to3_exrÚ ImportErrorrqrQr r r r Ús$    Y