B ŒÛ™\¥;ã@s’dZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZmZmZddlmZejdkr~ddlZGd d „d e ƒZdS) a9distutils.unixccompiler Contains the UnixCCompiler class, a subclass of CCompiler that handles the "typical" Unix-style command-line C compiler: * macros defined with -Dname[=value] * macros undefined with -Uname * include search directories specified with -Idir * libraries specified with -lllib * library search directories specified with -Ldir * compile handled by 'cc' (or similar) executable with -c option: compiles .c to .o * link static library handled by 'ar' command (possibly with 'ranlib') * link shared library handled by 'cc -shared' éN)Ú sysconfig)Únewer)Ú CCompilerÚgen_preprocess_optionsÚgen_lib_options)ÚDistutilsExecErrorÚ CompileErrorÚLibErrorÚ LinkError)ÚlogÚdarwinc @säeZdZdZddgdgdgddgdgddgddœZejdd…d krNd ged <d d d dddgZdZdZ dZ dZ dZ dZ ZZeZejdkrdZd,dd„Zdd„Zd-dd„Zd.d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd/d*d+„ZdS)0Ú UnixCCompilerZunixNZccz-sharedZarz-cr)Ú preprocessorÚcompilerÚ compiler_soÚ compiler_cxxÚ linker_soÚ linker_exeÚarchiverÚranlibér rz.cz.Cz.ccz.cxxz.cppz.mz.oz.az.soz.dylibz.tbdzlib%s%sÚcygwinz.exec CsÒ| d||¡}|\}}}t||ƒ} |j| } |r>|  d|g¡|rN|| dd…<|r\|  |¡|  |¡|js~|dks~t||ƒrÎ|r”| tj   |¡¡y|  | ¡Wn*t k rÌ} z t | ƒ‚Wdd} ~ XYnXdS)Nz-or)Z_fix_compile_argsrrÚextendÚappendZforcerÚmkpathÚosÚpathÚdirnameÚspawnrr) ÚselfÚsourceZ output_fileZmacrosZ include_dirsÚ extra_preargsÚextra_postargsÚ fixed_argsÚignoreÚpp_optsZpp_argsÚmsg©r'ú-/usr/lib/python3.7/distutils/unixccompiler.pyÚ preprocessUs$      zUnixCCompiler.preprocessc Csp|j}tjdkr t |||¡}y | |||d|g|¡Wn*tk rj}z t|ƒ‚Wdd}~XYnXdS)Nr z-o)rÚsysÚplatformÚ _osx_supportÚcompiler_fixuprrr) rÚobjÚsrcZextZcc_argsr"r%rr&r'r'r(Ú_compileos   zUnixCCompiler._compilerc Cs²| ||¡\}}|j||d}| ||¡r¢| tj |¡¡| |j|g||j ¡|j r®y| |j |g¡Wq®t k rž}z t |ƒ‚Wdd}~XYq®Xn t  d|¡dS)N)Ú output_dirzskipping %s (up-to-date))Ú_fix_object_argsÚlibrary_filenameÚ _need_linkrrrrrrÚobjectsrrr r Údebug)rr5Zoutput_libnamer1r6Ú target_langÚoutput_filenamer&r'r'r(Úcreate_static_libzs zUnixCCompiler.create_static_libc s8| ||¡\}}| |||¡}|\}}}ddddg‰t d¡}|rXˆ d|d|g¡‡fdd „|Dƒ}‡fd d „|Dƒ}t||||ƒ}t|ttdƒfƒs¤t d ƒ‚|dk rºt j   ||¡}|  ||¡r(||j|d |g}| rðd g|dd…<| r| |dd…<| r| | ¡| t j  |¡¡yÔ|tjkrB|jdd…}n|jdd…}| dkrÐ|jrÐd}t j  |d¡dkržd}xd||krœ|d7}q‚Wt j  ||¡dkrºd}nd}|j||||<tjdkrèt ||¡}| ||¡Wn,tk r$}z t|ƒ‚Wdd}~XYnXn t d|¡dS)Nz/libz/lib64z/usr/libz /usr/lib64Z MULTIARCHz/lib/%sz /usr/lib/%scsg|]}|ˆkr|‘qSr'r')Ú.0Údir)Úsystem_libdirsr'r(ú ¤sz&UnixCCompiler.link..csg|]}|ˆkr|‘qSr'r')r:r;)r<r'r(r=¦sz%'output_dir' must be a string or Nonez-oz-grzc++Úenvéú=Z ld_so_aixr zskipping %s (up-to-date)) r2Z _fix_lib_argsrÚget_config_varrrÚ isinstanceÚstrÚtypeÚ TypeErrorrrÚjoinr4r5rrrZ EXECUTABLErrrÚbasenamer*r+r,r-rrr r r6)rZ target_descr5r8r1Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsr6r!r"Z build_tempr7r#Z multiarchZlib_optsZld_argsZlinkerÚiÚoffsetr&r')r<r(Úlink”sZ        zUnixCCompiler.linkcCsd|S)Nz-Lr')rr;r'r'r(Úlibrary_dir_optionász UnixCCompiler.library_dir_optioncCsd|kpd|kS)NZgcczg++r')rZ compiler_namer'r'r(Ú_is_gccäszUnixCCompiler._is_gcccCs°tj t d¡¡}tjdd…dkr,d|Stjdd…dkrFd|Stjdd…d krz| |¡rnd d|gSd d|gS| |¡r¤t d ¡d kršd|Sd|Snd|SdS)NZCCrr z-LéZfreebsdz -Wl,-rpath=ézhp-uxz-Wl,+sz+sZGNULDZyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)rrrGrrAr*r+rL)rr;rr'r'r(Úruntime_library_dir_optionçs     z(UnixCCompiler.runtime_library_dir_optioncCsd|S)Nz-lr')rÚlibr'r'r(Úlibrary_optionszUnixCCompiler.library_optioncCs’|j|dd}|j|dd}|j|dd}|j|dd}tjdkrpt d¡}t d|¡} | dkrfd } n |  d ¡} x|D]} tj   | |¡} tj   | |¡} tj   | |¡}tj   | |¡}tjdkrD|   d ¡sä|   d ¡rD|   d ¡sDtj   | | d d…|¡} tj   | | d d…|¡} tj   | | d d…|¡}tj   | | d d…|¡}tj   | ¡rV| Stj   |¡rh|Stj   | ¡rz| Stj   |¡rx|SqxWdS)NÚshared)Zlib_typeÚdylibÚ xcode_stubÚstaticr ZCFLAGSz-isysroot\s+(\S+)ú/r?z/System/z/usr/z /usr/local/) r3r*r+rrAÚreÚsearchÚgrouprrrFÚ startswithÚexists)rÚdirsrPr6Zshared_fZdylib_fZ xcode_stub_fZstatic_fZcflagsÚmZsysrootr;rRrSrUrTr'r'r(Úfind_library_files>       zUnixCCompiler.find_library_file)NNNNN)NrN) NNNNNrNNNN)r)Ú__name__Ú __module__Ú __qualname__Z compiler_typeZ executablesr*r+Zsrc_extensionsZ obj_extensionZstatic_lib_extensionZshared_lib_extensionZdylib_lib_extensionZxcode_stub_lib_extensionZstatic_lib_formatZshared_lib_formatZdylib_lib_formatZxcode_stub_lib_formatZ exe_extensionr)r0r9rJrKrLrOrQr^r'r'r'r(r -sD      I*r )Ú__doc__rr*rWZ distutilsrZdistutils.dep_utilrZdistutils.ccompilerrrrZdistutils.errorsrrr r r r+r,r r'r'r'r(Ús