3 \W:ã@stddlZddlmZmZmZmZmZmZddlm Z m Z m Z ddl m Z ddlmZddlmZGdd„de ƒZdS) éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ LinkErrorÚUnknownFileError)Ú CCompilerÚgen_preprocess_optionsÚgen_lib_options)Ú write_file)Únewer)Úlogc @sŠeZdZdZiZdgZdddgZeeZdZdZ dZ d Z Z d Z dd d „Zddd„Zddd„Zddd„Zd dd„Zd!dd„Zd"dd„ZdS)#Ú BCPPCompilerZbcppz.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exercCs„tj||||ƒd|_d|_d|_d|_ddddg|_ddddg|_d d dd g|_d d dd g|_ g|_ d dd g|_ d dd d g|_ dS) Nz bcc32.exez ilink32.exeztlib.exez/tWMz/O2z/qz/g0z/Odz/Tpdz/Gnz/xz/r) rÚ__init__ÚccÚlinkerÚlibZpreprocess_optionsÚcompile_optionsÚcompile_options_debugÚldflags_sharedÚldflags_shared_debugZldflags_staticÚ ldflags_exeÚldflags_exe_debug)ÚselfÚverboseZdry_runÚforce©rú./usr/lib64/python3.6/distutils/bcppcompiler.pyr5s zBCPPCompiler.__init__Nc Csš|j||||||ƒ\}} }} } |p$g} | jdƒ|rB| j|jƒn | j|jƒ�xD| D�]:} y| | \}}Wntk r‚wVYnXtjj|ƒ}tjj| ƒ} |j tjj | ƒƒ|dkr¸qV|dk�ry|j dd| |gƒWqVt k �r}zt |ƒ‚WYdd}~XqVXqV||jk�rd}n||jk�r,d}nd}d| }y,|j |jg| | ||g||gƒWqVt k �r�}zt |ƒ‚WYdd}~XqVXqVW| S) Nz-cz.resz.rcZbrcc32z-foÚz-Pz-o)Z_setup_compileÚappendÚextendrrÚKeyErrorÚosÚpathÚnormpathÚmkpathÚdirnameÚspawnrrÚ _c_extensionsÚ_cpp_extensionsr)rZsourcesÚ output_dirÚmacrosÚ include_dirsÚdebugÚ extra_preargsÚextra_postargsZdependsÚobjectsÚpp_optsZbuildZ compile_optsÚobjÚsrcÚextÚmsgZ input_optZ output_optrrrÚcompileQsF        (zBCPPCompiler.compilec CsŽ|j||ƒ\}}|j||d�}|j||ƒr~|dg|}|r:y|j|jg|ƒWqŠtk rz}zt|ƒ‚WYdd}~XqŠXn tjd|ƒdS)N)r*z/uzskipping %s (up-to-date)) Ú_fix_object_argsÚlibrary_filenameÚ _need_linkr'rrrr r-) rr0Zoutput_libnamer*r-Ú target_langÚoutput_filenameZlib_argsr5rrrÚcreate_static_lib’s  zBCPPCompiler.create_static_libc Csø|j||ƒ\}}|j|||ƒ\}}}|r8tjdt|ƒƒ|dk rNtjj||ƒ}|j||ƒ�rè|t j krŽd}| r~|j dd…}q´|j dd…}n&d}| r¦|j dd…}n|jdd…}|dkrÂd}n†tjj|ƒ\}}tjj|ƒ\}}tjj|dƒ}tjj|d|ƒ}dg}x&|�pgD]}|jd||fƒ�qW|jt||fd |ƒttjj|ƒ}|g}g}xF|D]>}tjjtjj|ƒƒ\}}|d k�r˜|j|ƒn |j|ƒ�qfWx$|D]}|jd tjj|ƒƒ�q®W|jd ƒ|j|ƒ|jd |gƒ|jdƒx<|D]4}|j||| ƒ}|dk�r(|j|ƒn |j|ƒ�qW|jdƒ|jdƒ|jd |gƒ|jd ƒ|j|ƒ| �r€| |dd…<| �r�|j| ƒ|jtjj|ƒƒy|j|jg|ƒWn,tk �rä}zt|ƒ‚WYdd}~XnXn tjd|ƒdS)Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32rrz%s.defZEXPORTSz %s=_%sz writing %sz.resz/L%sz/L.ú,z,,Zimport32Zcw32mtzskipping %s (up-to-date)) r7Z _fix_lib_argsr ÚwarnÚstrr"r#Újoinr9rZ EXECUTABLErrrrÚsplitÚsplitextr&rZexecuter Úmapr$Únormcaser Úfind_library_filer%r'rrrr-) rZ target_descr0r;r*Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsr-r.r/Z build_tempr:Z startup_objZld_argsZdef_fileÚheadÚtailÚmodnamer4Ztemp_dirÚcontentsZsymZobjects2Z resourcesÚfileÚbaseÚlrÚlibfiler5rrrÚlink«s|                    zBCPPCompiler.linkc Csv|r"|d}|d|d||f}n |d|f}xB|D]6}x0|D](}tjj||j|ƒƒ}tjj|ƒr>|Sq>Wq4WdSdS)NZ_dZ_bcpp)r"r#r@r8Úexists) rÚdirsrr-ZdlibZ try_namesÚdirÚnamerMrrrrE4s      zBCPPCompiler.find_library_filercCsÊ|dkr d}g}x´|D]¬}tjjtjj|ƒƒ\}}||jddgkrTtd||fƒ‚|rdtjj|ƒ}|dkr†|jtjj|||ƒƒq|dkr¨|jtjj||dƒƒq|jtjj|||j ƒƒqW|S)Nrz.rcz.resz"unknown file type '%s' (from '%s')) r"r#rBrDÚsrc_extensionsrÚbasenamerr@Ú obj_extension)rZsource_filenamesZ strip_dirr*Z obj_namesZsrc_namerKr4rrrÚobject_filenamesNs"    zBCPPCompiler.object_filenamesc CsÚ|jd||ƒ\}}}t||ƒ}dg|} |dk r>| jd|ƒ|rN|| dd…<|r\| j|ƒ| j|ƒ|js~|dks~t||ƒrÖ|r”|jtjj |ƒƒy|j | ƒWn2t k rÔ} zt | ƒt | ƒ‚WYdd} ~ XnXdS)Nz cpp32.exez-or)Z_fix_compile_argsr rr rr r%r"r#r&r'rÚprintr) rÚsourceZ output_filer+r,r.r/Ú_r1Zpp_argsr5rrrÚ preprocessis$      zBCPPCompiler.preprocess)rrr)NNNrNNN)NrN) NNNNNrNNNN)r)rr)NNNNN)Ú__name__Ú __module__Ú __qualname__Z compiler_typeZ executablesr(r)rSrUZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrr6r<rNrErVrZrrrrrsH   B  |  r)r"Zdistutils.errorsrrrrrrZdistutils.ccompilerrr r Zdistutils.file_utilr Zdistutils.dep_utilr Z distutilsr rrrrrÚs