o _a.:@spdZddlZddlmZmZmZmZmZddlm Z m Z ddl m Z ddl mZddlmZGdd d e ZdS) zdistutils.bcppcompiler Contains BorlandCCompiler, an implementation of the abstract CCompiler class for the Borland C++ compiler. N)DistutilsExecError CompileErrorLibError LinkErrorUnknownFileError) CCompilergen_preprocess_options) write_file)newer)logc@seZdZdZdZiZdgZgdZeeZdZ dZ dZ dZ Z d Z dd d Z dddZ dddZ dddZdddZ d ddZ d!ddZd 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__cclinkerlibpreprocess_optionscompile_optionscompile_options_debugldflags_sharedldflags_shared_debugldflags_static ldflags_exeldflags_exe_debug)selfverbosedry_runforcer#D/usr/lib/python3/dist-packages/setuptools/_distutils/bcppcompiler.pyr5s     zBCPPCompiler.__init__Nc  Csn|||||||\}} }} } |pg} | d|r!| |jn| |j| D]} z| | \}}Wn ty<Yq)wtj|}tj| } | tj | |dkrWq)|dkrxz | dd| |gWnt yv}zt |d}~wwq)||jvrd}n ||jvrd}nd}d| }z| |jg| | ||g||gWq)t y}zt |d}~ww| S) Nz-c.res.rcbrcc32z-foz-P-o)_setup_compileappendextendrrKeyErrorospathnormpathmkpathdirnamespawnrr _c_extensions_cpp_extensionsr)rsources output_dirmacros include_dirsdebug extra_preargsextra_postargsdependsobjectspp_optsbuild compile_optsobjsrcextmsg input_opt output_optr#r#r$compileQs^          zBCPPCompiler.compilec Cs|||\}}|j||d}|||r;|dg|}|r z ||jg|WdSty:}zt|d}~wwtd|dS)N)r7z/uskipping %s (up-to-date)) _fix_object_argslibrary_filename _need_linkr3rrrr r:) rr>output_libnamer7r: target_langoutput_filenamelib_argsrEr#r#r$create_static_libs   zBCPPCompiler.create_static_libc Cs|||\}}||||\}}}|rtdt||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}|pgD] }|d||fq|t||fd |ttjj|}|g}g}|D]}tjtj|\}}|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}~wwtd|dS)Nz7I don't know what to do with 'runtime_library_dirs': %sc0w32c0d32r(rz%s.defEXPORTSz %s=_%sz writing %sr%z/L%sz/L.,z,,import32cw32mtrI) rJ _fix_lib_argsr warnstrr.r/joinrLr EXECUTABLErrrrsplitsplitextr2r+executer mapr0normcaser,find_library_filer1r3rrrr:) r target_descr>rOr7 libraries library_dirsruntime_library_dirsexport_symbolsr:r;r< build_temprN startup_objld_argsdef_fileheadtailmodnamerDtemp_dircontentssymobjects2 resourcesfilebaselrlibfilerEr#r#r$links                  zBCPPCompiler.linkc Csr|r|d}|d|d||f}n|d|f}|D]}|D]}tj|||}tj|r5|SqqdS)N_d_bcpp)r.r/r[rKexists) rdirsrr:dlib try_namesdirnamerwr#r#r$rb4s    zBCPPCompiler.find_library_filer(cCs|durd}g}|D]V}tjtj|\}}||jddgvr)td||f|r1tj|}|dkrB|tj|||q |dkrS|tj||dq |tj|||j q |S)Nr(r&r%z"unknown file type '%s' (from '%s')) r.r/r^rasrc_extensionsrbasenamer+r[ obj_extension)rsource_filenames strip_dirr7 obj_namessrc_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/r2r3rprintr) rsource output_filer8r9r;r<_r?pp_argsrEr#r#r$ preprocessis,      zBCPPCompiler.preprocess)rrr)NNNrNNN)NrN) NNNNNrNNNN)r)rr()NNNNN)__name__ __module__ __qualname____doc__ compiler_type executablesr4r5rrstatic_lib_extensionshared_lib_extensionstatic_lib_formatshared_lib_format exe_extensionrrHrQrxrbrrr#r#r#r$r sZ  D    r )rr.distutils.errorsrrrrrdistutils.ccompilerrrdistutils.file_utilr distutils.dep_utilr distutilsr r r#r#r#r$s