U ,aW:@sxdZddlZddlmZmZmZmZmZmZddl m Z m Z m Z ddl mZddlmZddlmZGdd d e ZdS) zdistutils.bcppcompiler Contains BorlandCCompiler, an implementation of the abstract CCompiler class for the Borland C++ compiler. N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkErrorUnknownFileError) CCompilergen_preprocess_optionsgen_lib_options) write_file)newer)logc @seZdZdZdZiZdgZdddgZeeZdZ dZ d Z d Z Z d Zdd dZdddZdddZd ddZd!ddZd"ddZd#ddZdS)$ BCPPCompilerzConcrete class that implements an interface to the Borland C/C++ compiler, as defined by the CCompiler abstract class. Zbcppz.cz.ccz.cppz.cxxz.objz.libz.dllz%s%sz.exercCst||||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__cclinkerlibZpreprocess_optionscompile_optionscompile_options_debugldflags_sharedldflags_shared_debugZldflags_static ldflags_exeldflags_exe_debug)selfverboseZdry_runforcer;/opt/alt/python38/lib64/python3.8/distutils/bcppcompiler.pyr5s zBCPPCompiler.__init__Nc  Cs|||||||\}} }} } |p$g} | d|rB| |jn | |j| D]<} z| | \}}Wntk rYqRYnXtj|}tj| } | tj | |dkrqR|dkrz| dd| |gWqRt k r}z t |W5d}~XYqRXqR||jkrd}n||jkr*d}nd}d| }z,| |jg| | ||g||gWqRt k r}z t |W5d}~XYqRXqR| S) Nz-c.res.rcZbrcc32z-foz-P-o)Z_setup_compileappendextendrrKeyErrorospathnormpathmkpathdirnamespawnrr _c_extensions_cpp_extensionsr)rZsources output_dirmacros include_dirsdebug extra_preargsextra_postargsZdependsobjectspp_optsZbuildZ compile_optsobjsrcextmsgZ input_optZ output_optrrrcompileQsV            zBCPPCompiler.compilec Cs|||\}}|j||d}|||r~|dg|}|r:z||jg|Wqtk rz}z t|W5d}~XYqXn td|dS)N)r-z/uskipping %s (up-to-date)) _fix_object_argslibrary_filename _need_linkr*rrrr r0) rr3Zoutput_libnamer-r0 target_langoutput_filenameZlib_argsr8rrrcreate_static_libs   zBCPPCompiler.create_static_libc Cs|||\}}||||\}}}|r8tdt||dk rNtj||}|||r|t j krd}| r~|j dd}q|j dd}n&d}| r|j dd}n|jdd}|dkrd}ntj|\}}tj|\}}tj|d}tj|d|}dg}|pgD]}|d||fq|t||fd |ttjj|}|g}g}|D]>}tjtj|\}}|d kr||n ||q`|D]}|d tj|q|d |||d |g|d|D]4}|||| }|dkr||n ||q|d|d|d |g|d ||| rp| |dd<| r|| |tj|z||jg|Wn,tk r}z t|W5d}~XYnXn td|dS)Nz7I don't know what to do with 'runtime_library_dirs': %sZc0w32Zc0d32r rz%s.defZEXPORTSz %s=_%sz writing %srz/L%sz/L.,z,,Zimport32Zcw32mtr:) r;Z _fix_lib_argsr warnstrr%r&joinr=rZ EXECUTABLErrrrsplitsplitextr)r"Zexecuter mapr'normcaser#find_library_filer(r*rrrr0) rZ target_descr3r?r-Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsr0r1r2Z build_tempr>Z startup_objZld_argsZdef_fileheadtailmodnamer7Ztemp_dircontentsZsymZobjects2Z resourcesfilebaselrlibfiler8rrrlinks                zBCPPCompiler.linkc Csr|r"|d}|d|d||f}n |d|f}|D]:}|D]0}tj|||}tj|r:|Sq:q2dS)NZ_dZ_bcpp)r%r&rDr<exists) rdirsrr0ZdlibZ try_namesdirnamerQrrrrI4s   zBCPPCompiler.find_library_filer cCs|dkr d}g}|D]}tjtj|\}}||jddgkrRtd||f|rbtj|}|dkr|tj|||q|dkr|tj||dq|tj|||j q|S)Nr rrz"unknown file type '%s' (from '%s')) r%r&rFrHsrc_extensionsrbasenamer"rD obj_extension)rZsource_filenamesZ strip_dirr-Z obj_namesZsrc_namerOr7rrrobject_filenamesNs&  zBCPPCompiler.object_filenamesc Cs|d||\}}}t||}dg|} |dk r>| d||rN|| dd<|r\| || ||js~|dks~t||r|r|tj |z| | Wn2t k r} zt | t | W5d} ~ XYnXdS)Nz cpp32.exer!r)Z_fix_compile_argsr r"r#rr r(r%r&r)r*rprintr) rsourceZ output_filer.r/r1r2_r4Zpp_argsr8rrr preprocessis&      zBCPPCompiler.preprocess)rrr)NNNrNNN)NrN) NNNNNrNNNN)r)rr )NNNNN)__name__ __module__ __qualname____doc__Z compiler_typeZ executablesr+r,rWrYZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrr9r@rRrIrZr^rrrrrsb   D    r)rbr%Zdistutils.errorsrrrrrrZdistutils.ccompilerrr r Zdistutils.file_utilr Zdistutils.dep_utilr Z distutilsr rrrrrs