U Qab2 @sddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddl mZddlmZddlmZdd lmZejrddlZd d eDZn dd lmZzddlmZed Wnek reZYnXe dddl mZddZ dZ!dZ"dZ#ej$dkrdZ"n>ej%dkrTzddl&Z&e'e&dZ"Z!Wnek rRYnXddZ(ddZ)GdddeZe"sej%dkrd"ddZ*nd Z#d#d!dZ*dS)$N) build_ext) copy_file) new_compiler)customize_compilerget_config_var)DistutilsError)log)Library)sixcCs g|]\}}}|tjkr|qS)impZ C_EXTENSION).0s_tpr r @/usr/lib/python3.8/site-packages/setuptools/command/build_ext.py s rEXTENSION_SUFFIXESzCython.Compiler.MainLDSHARED) _config_varsc CsZtjdkrNt}z$dtd<dtd<dtd<t|W5tt|Xnt|dS)Ndarwinz0gcc -Wl,-x -dynamiclib -undefined dynamic_lookuprz -dynamiclibZCCSHAREDz.dylibZSO)sysplatform _CONFIG_VARScopyclearupdater)compilerZtmpr r r_customize_compiler_for_shlib#s  rFZsharedrTntRTLD_NOWcCs tr|SdS)N) have_rtld)rr r rDr$cCs.tD]$}d|kr|S|dkr|SqdS)z;Return the file extension for an abi3-compliant Extension()z.abi3z.pydNr)suffixr r rget_abi3_suffixGs r'c@sveZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdddZdS)rcCs.|jd}|_t|||_|r*|dS)z;Build extensions in build directory, then copy if --inplacerN)Zinplace _build_extruncopy_extensions_to_source)selfZ old_inplacer r rr)Qs  z build_ext.runc Cs|d}|jD]}||j}||}|d}d|dd}||}tj |tj |}tj |j |} t | ||j |jd|jr||ptj|dqdS)Nbuild_py.)verbosedry_runT)get_finalized_command extensionsget_ext_fullnamenameget_ext_filenamesplitjoinZget_package_dirospathbasename build_librr/r0 _needs_stub write_stubcurdir) r+r,extfullnamefilenamemodpathpackageZ package_dirZ dest_filenameZ src_filenamer r rr*Ys&       z#build_ext.copy_extensions_to_sourcecCst||}||jkr|j|}tjo4t|do4t}|r^td}|dt| }|t}t |t rt j |\}}|j|tStr|jrt j |\}}t j |d|S|S)NZpy_limited_apiZ EXT_SUFFIXzdl-)r(r5ext_mapr ZPY3getattrr'rlen isinstancer r8r9splitextshlib_compilerlibrary_filenamelibtype use_stubs_links_to_dynamicr6r7)r+r@rAr?Zuse_abi3Zso_extfndr r rr5os&      zbuild_ext.get_ext_filenamecCs t|d|_g|_i|_dSN)r(initialize_optionsrIshlibsrDr+r r rrQs zbuild_ext.initialize_optionscCs,t||jpg|_||jdd|jD|_|jrB||jD]}||j|_qH|jD]}|j}||j |<||j | dd<|jr| |pd}|ot ot |t }||_||_||}|_tjtj|j|}|r||jkr|j||rbt rbtj|jkrb|jtjqbdS)NcSsg|]}t|tr|qSr )rGr r r?r r rrs z.build_ext.finalize_options..r-r.F)r(finalize_optionsr2Zcheck_extensions_listrRsetup_shlib_compilerr3r4 _full_namerDr6links_to_dynamicrLrGr rMr<r5 _file_namer8r9dirnamer7r; library_dirsappendr>runtime_library_dirs)r+r?r@ZltdnsrAZlibdirr r rrUs,       zbuild_ext.finalize_optionscCst|j|j|jd}|_t||jdk r8||j|jdk r^|jD]\}}| ||qH|j dk r~|j D]}| |qn|j dk r| |j |jdk r||j|jdk r||j|jdk r||jt||_dS)N)rr0force)rrr0r_rIrZ include_dirsZset_include_dirsZdefineZ define_macroZundefZundefine_macro librariesZ set_librariesr[Zset_library_dirsZrpathZset_runtime_library_dirsZ link_objectsZset_link_objectslink_shared_object__get__)r+rr4valueZmacror r rrVs.               zbuild_ext.setup_shlib_compilercCst|tr|jSt||SrP)rGr export_symbolsr(get_export_symbolsr+r?r r rres zbuild_ext.get_export_symbolscCs\||j}z@t|tr"|j|_t|||jrL|dj }| ||W5||_XdS)Nr,) Z_convert_pyx_sources_to_langrrGr rIr(build_extensionr<r1r;r=)r+r?Z _compilercmdr r rrgs   zbuild_ext.build_extensioncsPtdd|jDd|jddddgtfdd|jDS) z?Return true if 'ext' links to a dynamic lib in the same packagecSsg|] }|jqSr )rW)r libr r rrsz.build_ext.links_to_dynamic..r-Nr.r"c3s|]}|kVqdSrPr )r ZlibnameZlibnamesZpkgr r sz-build_ext.links_to_dynamic..)dictfromkeysrRr7rWr6anyr`rfr rjrrXs zbuild_ext.links_to_dynamiccCst||SrP)r( get_outputs_build_ext__get_stubs_outputsrSr r rroszbuild_ext.get_outputscs6fddjD}t|}tdd|DS)Nc3s0|](}|jrtjjjf|jdVqdS)r-N)r<r8r9r7r;rWr6rTrSr rrksz0build_ext.__get_stubs_outputs..css|]\}}||VqdSrPr )r baseZfnextr r rrks)r2 itertoolsproduct!_build_ext__get_output_extensionslist)r+Z ns_ext_basesZpairsr rSrZ__get_stubs_outputss  zbuild_ext.__get_stubs_outputsccs"dVdV|djrdVdS)N.pyz.pycr,z.pyo)r1optimizerSr r rZ__get_output_extensionss z!build_ext.__get_output_extensionsFcCs,td|j|tjj|f|jdd}|rJtj|rJt|d|j st |d}| dddd t d d tj |jd d dt ddddt dddt ddddg||r(ddlm}||gdd|j d|dj}|dkr||g|d|j dtj|r(|j s(t|dS)Nz writing stub loader for %s to %sr-rvz already exists! Please delete.w zdef __bootstrap__():z- global __bootstrap__, __file__, __loader__z% import sys, os, pkg_resources, impz, dlz: __file__ = pkg_resources.resource_filename(__name__,%r)z del __bootstrap__z if '__loader__' in globals():z del __loader__z# old_flags = sys.getdlopenflags()z old_dir = os.getcwd()z try:z( os.chdir(os.path.dirname(__file__))z$ sys.setdlopenflags(dl.RTLD_NOW)z( imp.load_dynamic(__name__,__file__)z finally:z" sys.setdlopenflags(old_flags)z os.chdir(old_dir)z__bootstrap__()r"r) byte_compileT)rwr_r0Z install_lib)rinforWr8r9r7r6existsrr0openwriteif_dlr:rYcloseZdistutils.utilrzr1rwunlink)r+ output_dirr?compileZ stub_filefrzrwr r rr=sb        zbuild_ext.write_stubN)F)__name__ __module__ __qualname__r)r*r5rQrUrVrergrXrorprtr=r r r rrPs   rc Cs(||j||||||||| | | | dSrP)linkZSHARED_LIBRARY) r+objectsoutput_libnamerr`r[r]rddebug extra_preargsextra_postargs build_temp target_langr r rra#sraZstaticc CsRtj|\}} tj| \}}|ddr<|dd}|||||| dS)Nxri)r8r9r6rHrJ startswithZcreate_static_lib)r+rrrr`r[r]rdrrrrrrAr:r?r r rra2s  ) NNNNNrNNNN) NNNNNrNNNN)+r8rrrZdistutils.command.build_extrZ _du_build_extZdistutils.file_utilrZdistutils.ccompilerrZdistutils.sysconfigrrZdistutils.errorsrZ distutilsrZsetuptools.extensionr Zsetuptools.externr ZPY2r Z get_suffixesrZimportlib.machineryZCython.Distutils.build_extr( __import__ ImportErrorrrrr#rLrKrr4Zdlhasattrrr'rar r r rsz               Q