o Šbc.:ã@spdZddlZddlmZmZmZmZmZddlm Z m Z ddl m Z ddl mZddlmZGdd „d e ƒZdS) zƒdistutils.bcppcompiler Contains BorlandCCompiler, an implementation of the abstract CCompiler class for the Borland C++ compiler. éN)ÚDistutilsExecErrorÚ CompileErrorÚLibErrorÚ LinkErrorÚUnknownFileError)Ú CCompilerÚgen_preprocess_options)Ú write_file)Únewer)Úlogc@s¾eZdZdZdZiZdgZgd¢ZeeZdZ dZ dZ dZ Z d Z dd d „Z ddd„Z ddd„Z ddd„Zddd„Z d dd„Z d!dd„Zd S)"Ú BCPPCompilerzConcrete class that implements an interface to the Borland C/C++ compiler, as defined by the CCompiler abstract class. Úbcppz.c)z.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exercCsnt ||||¡d|_d|_d|_d|_gd¢|_gd¢|_gd¢|_gd¢|_ g|_ gd¢|_ gd¢|_ dS) Nz bcc32.exez ilink32.exeztlib.exe)ú/tWMz/O2ú/qú/g0)rz/Odrr)z/Tpdú/Gnrú/x)rrr)rrrz/r) rÚ__init__ÚccÚlinkerÚlibÚpreprocess_optionsÚcompile_optionsÚcompile_options_debugÚldflags_sharedÚldflags_shared_debugÚldflags_staticÚ ldflags_exeÚldflags_exe_debug)ÚselfÚverboseÚdry_runÚforce©r#ú-/usr/lib/python3.10/distutils/bcppcompiler.pyr5s     zBCPPCompiler.__init__Nc  Csn| ||||||¡\}} }} } |pg} |  d¡|r!|  |j¡n|  |j¡| D]‹} z| | \}}Wn ty<Yq)wtj |¡}tj | ¡} |  tj  | ¡¡|dkrWq)|dkrxz |  dd| |g¡Wnt yv}zt |ƒ‚d}~wwq)||jvr€d}n ||jvrˆd}nd}d| }z|  |jg| | ||g||g¡Wq)t y´}zt |ƒ‚d}~ww| S) Nz-cú.resú.rcÚbrcc32z-foÚz-Pú-o)Ú_setup_compileÚappendÚextendrrÚKeyErrorÚosÚpathÚnormpathÚmkpathÚdirnameÚspawnrrÚ _c_extensionsÚ_cpp_extensionsr)rÚsourcesÚ output_dirÚmacrosÚ include_dirsÚdebugÚ extra_preargsÚextra_postargsÚdependsÚobjectsÚpp_optsÚbuildÚ compile_optsÚobjÚsrcÚextÚmsgÚ input_optÚ output_optr#r#r$ÚcompileQs^ ÿ ÿ   ÿ  €ÿ  ÿþ þ€ÿzBCPPCompiler.compilec Cs†| ||¡\}}|j||d}| ||¡r;|dg|}|r z | |jg|¡WdSty:}zt|ƒ‚d}~wwt d|¡dS)N)r7z/uúskipping %s (up-to-date)) Ú_fix_object_argsÚlibrary_filenameÚ _need_linkr3rrrr r:) rr>Úoutput_libnamer7r:Ú target_langÚoutput_filenameÚlib_argsrEr#r#r$Úcreate_static_lib’s ÿ  €ÿzBCPPCompiler.create_static_libc CsÒ| ||¡\}}| |||¡\}}}|rt dt|ƒ¡|dur'tj ||¡}| ||¡ra|t j krGd}| r?|j dd…}n|j dd…}nd}| rS|j dd…}n|jdd…}|durad}n?tj |¡\}}tj |¡\}}tj |d¡}tj |d|¡}dg}|pˆgD] }| d||f¡q‰| t||fd |¡ttjj|ƒ}|g}g}|D]}tj tj |¡¡\}}|d krÆ| |¡q®| |¡q®|D] }| d tj |¡¡qÎ| d ¡| |¡| d |g¡| d¡|D]}| ||| ¡}|dur| |¡qô| |¡qô| d¡| d¡| d |g¡| d ¡| |¡| r2| |dd…<| r:| | ¡| tj |¡¡z | |jg|¡WdSty`}zt|ƒ‚d}~wwt d|¡dS)Nz7I don't know what to do with 'runtime_library_dirs': %sÚc0w32Úc0d32r(rz%s.defÚEXPORTSz %s=_%sz writing %sr%z/L%sz/L.ú,z,,Úimport32Úcw32mtrI) rJÚ _fix_lib_argsr ÚwarnÚstrr.r/ÚjoinrLrÚ EXECUTABLErrrrÚsplitÚsplitextr2r+Úexecuter Úmapr0Únormcaser,Úfind_library_filer1r3rrrr:) rÚ target_descr>rOr7Ú librariesÚ library_dirsÚruntime_library_dirsÚexport_symbolsr:r;r<Ú build_temprNÚ startup_objÚld_argsÚdef_fileÚheadÚtailÚmodnamerDÚtemp_dirÚcontentsÚsymÚobjects2Ú resourcesÚfileÚbaseÚlrÚlibfilerEr#r#r$Úlink«s† ÿÿ   ÿ              €ÿzBCPPCompiler.linkc Csr|r|d}|d|d||f}n|d|f}|D]}|D]}tj || |¡¡}tj |¡r5|SqqdS)NÚ_dÚ_bcpp)r.r/r[rKÚexists) rÚdirsrr:ÚdlibÚ try_namesÚdirÚnamerwr#r#r$rb4s    ÿþzBCPPCompiler.find_library_filer(cCsÆ|durd}g}|D]V}tj tj |¡¡\}}||jddgvr)td||fƒ‚|r1tj |¡}|dkrB| tj |||¡¡q |dkrS| tj ||d¡¡q | tj |||j ¡¡q |S)Nr(r&r%z"unknown file type '%s' (from '%s')) r.r/r^raÚsrc_extensionsrÚbasenamer+r[Ú obj_extension)rÚsource_filenamesÚ strip_dirr7Ú obj_namesÚsrc_namerurDr#r#r$Úobject_filenamesNs$ ÿ  ÿzBCPPCompiler.object_filenamesc CsÒ| d||¡\}}}t||ƒ}dg|} |dur|  d|¡|r'|| dd…<|r.|  |¡|  |¡|js?|dus?t||ƒrg|rJ| tj  |¡¡z|  | ¡WdSt yf} zt | ƒt | ƒ‚d} ~ wwdS)Nz cpp32.exer)r)Ú_fix_compile_argsrr+r,r"r r1r.r/r2r3rÚprintr) rÚsourceÚ output_filer8r9r;r<Ú_r?Úpp_argsrEr#r#r$Ú preprocessis, ÿ     €þûzBCPPCompiler.preprocess)rrr)NNNrNNN)NrN) NNNNNrNNNN)r)rr()NNNNN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú compiler_typeÚ executablesr4r5rrƒÚstatic_lib_extensionÚshared_lib_extensionÚstatic_lib_formatÚshared_lib_formatÚ exe_extensionrrHrQrxrbrˆrr#r#r#r$r sZ ý þD û ó  ýúr )r“r.Údistutils.errorsrrrrrÚdistutils.ccompilerrrÚdistutils.file_utilr Údistutils.dep_utilr Ú distutilsr r r#r#r#r$Ús