3 e8@sdZddlZddlZddlZddlZddlmZddlmZddl m Z m Z m Z ddl mZmZmZmZddlmZejdkrddlZGd 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) CCompilergen_preprocess_optionsgen_lib_options)DistutilsExecError CompileErrorLibError LinkError)logdarwinc @seZdZdZddgdgdgddgdgddgddZejddd krNd ged <d d d dddgZdZdZ dZ dZ dZ dZ ZZeZejdkrdZd,ddZddZd-ddZd.d d!Zd"d#Zd$d%Zd&d'Zd(d)Zd/d*d+ZdS)0 UnixCCompilerunixNccz-sharedarz-cr) preprocessorcompiler compiler_so compiler_cxx linker_so linker_exearchiverranlibr rz.cz.Cz.ccz.cxxz.cppz.mz.oz.az.soz.dylibz.tbdzlib%s%scygwinz.exec Cs|jd||}|\}}}t||} |j| } |r>| jd|g|rN|| dd<|r\| j|| j||js~|dks~t||r|r|jtj j |y|j | Wn*t k r} zt | WYdd} ~ XnXdS)Nz-or)Z_fix_compile_argsrrextendappendforcermkpathospathdirnamespawnrr) selfsourceZ output_filemacros include_dirs extra_preargsextra_postargs fixed_argsignorepp_optsZpp_argsmsgr-I/tmp/pip-build-vlmub77e/setuptools/setuptools/_distutils/unixccompiler.py preprocessUs$      zUnixCCompiler.preprocessc Csp|j}tjdkr tj|||}y |j|||d|g|Wn*tk rj}zt|WYdd}~XnXdS)Nr z-o)rsysplatform _osx_supportcompiler_fixupr"rr) r#objsrcextZcc_argsr(r+rr,r-r-r._compileos   zUnixCCompiler._compilercCs|j||\}}|j||d}|j||r|jtjj||j|j|g||j |j ry|j|j |gWqt k r}zt |WYdd}~XqXn t jd|dS)N) output_dirzskipping %s (up-to-date))_fix_object_argslibrary_filename _need_linkrrr r!r"robjectsrrr r debug)r#r<Zoutput_libnamer8r= target_langoutput_filenamer,r-r-r.create_static_libzs zUnixCCompiler.create_static_libcCs|j||\}}|j|||}|\}}}t||||}t|ttdfsPtd|dk rftjj ||}|j ||r||j |d|g}| rdg|dd<| r| |dd<| r|j | |j tjj|y|tjkr|jdd}n|jdd}| dkrv|jrvd}tjj|ddkrDd}xd||krB|d7}q(Wtjj||d kr`d}nd}|j||||<tjd krtj||}|j||Wn,tk r}zt|WYdd}~XnXn tjd |dS) Nz%'output_dir' must be a string or Nonez-oz-grzc++env=Z ld_so_aixr zskipping %s (up-to-date))r9Z _fix_lib_argsr isinstancestrtype TypeErrorrr joinr;r<rrr!rZ EXECUTABLErrrbasenamer0r1r2r3r"rr r r=)r#Z target_descr<r?r8 libraries library_dirsruntime_library_dirsexport_symbolsr=r'r( build_tempr>r)Zlib_optsZld_argsZlinkerioffsetr,r-r-r.linksN      zUnixCCompiler.linkcCsd|S)Nz-Lr-)r#dirr-r-r.library_dir_optionsz UnixCCompiler.library_dir_optioncCsd|kpd|kS)Ngcczg++r-)r#Z compiler_namer-r-r._is_gccszUnixCCompiler._is_gcccCstjjtjtjdd}tjdddkrjddl m }m }|}|r`||ddgkr`d|Sd |SnNtjdd d krd |Stjddd kr|j |rdd |gSdd |gStjddkrd|Sd|SdS)NCCrrr )get_macosx_target_ver split_version z -Wl,-rpath,z-LZfreebsdz -Wl,-rpath=zhp-uxz-Wl,+sz+sGNULDyesz-Wl,--enable-new-dtags,-Rz-Wl,-R) rr rIshlexsplitrget_config_varr0r1distutils.utilrWrXrU)r#rRrrWrXZmacosx_target_verr-r-r.runtime_library_dir_options     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}tjdkrptjd}tjd|} | dkrfd } n | jd } x|D]} tj j | |} tj j | |} tj j | |}tj j | |}tjdko| j d s| j d o| j d  rBtj j | | d d|} tj j | | d d|} tj j | | d d|}tj j | | d d|}tj j | rT| Stj j |rf|Stj j | rx| Stj j |rx|SqxWdS)Nshared)Zlib_typedylib xcode_stubstaticr CFLAGSz-isysroot\s*(\S+)/rBz/System/z/usr/z /usr/local/) r:r0r1rr`researchgrouprr rH startswithexists)r#dirsrcr=Zshared_fZdylib_fZ xcode_stub_fZstatic_fcflagsmZsysrootrRrerfrhrgr-r-r.find_library_files>       zUnixCCompiler.find_library_file)NNNNN)NrN) NNNNNrNNNN)r)__name__ __module__ __qualname__ compiler_typeZ executablesr0r1Zsrc_extensionsZ obj_extensionZstatic_lib_extensionshared_lib_extensionZdylib_lib_extensionZxcode_stub_lib_extensionZstatic_lib_formatZshared_lib_formatZdylib_lib_formatZxcode_stub_lib_formatZ exe_extensionr/r7r@rQrSrUrbrdrsr-r-r-r.r -sD      >'r )__doc__rr0rkr^ distutilsrdistutils.dep_utilrdistutils.ccompilerrrrZdistutils.errorsrrr r r r1r2r r-r-r-r.s