o
    h:                     @   s   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZmZmZ ddlmZ ejdkrCddlZG d	d
 d
e
ZdS )a9  distutils.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   e Zd ZdZddgdgdgddgdgddgddZejdd d	kr'd
ged
< g dZdZdZ	dZ
dZdZd Z ZZeZejdkrDdZ		d'ddZdd Z	d(ddZ				d)ddZdd Zdd  Zd!d" Zd#d$ Zd*d%d&ZdS )+UnixCCompilerunixNccz-sharedarz-cr)preprocessorcompilercompiler_socompiler_cxx	linker_so
linker_exearchiverranlib   r   r   )z.cz.Cz.ccz.cxxz.cppz.mz.oz.az.soz.dylibz.tbdzlib%s%scygwinz.exec              
   C   s   |  d ||}|\}}}t||}	| j|	 }
|r|
d|g |r'||
d d< |r.|
| |
| | js?|d u s?t||rc|rJ| tj	
| z| |
 W d S  tyb } zt|d }~ww d S )N-or   )Z_fix_compile_argsr   r   extendappendforcer   mkpathospathdirnamespawnr   r   )selfsourceZoutput_fileZmacrosinclude_dirsextra_preargsextra_postargs
fixed_argsignorepp_optsZpp_argsmsg r-   i/home/www/facesmatcher.com/frenv_dlib/lib/python3.10/site-packages/setuptools/_distutils/unixccompiler.py
preprocessU   s*   




zUnixCCompiler.preprocessc           	   
   C   sd   | j }tjdkrt||| }z| || |d|g |  W d S  ty1 } zt|d }~ww )Nr   r   )r   sysplatform_osx_supportcompiler_fixupr#   r   r   )	r$   objsrcextZcc_argsr(   r+   r   r,   r-   r-   r.   _compileo   s   
zUnixCCompiler._compiler   c              
   C   s   |  ||\}}| j||d}| ||rN| tj| | | j|g | | j	  | j
rLz| | j
|g  W d S  tyK } zt|d }~ww d S td| d S )N)
output_dirskipping %s (up-to-date))_fix_object_argslibrary_filename
_need_linkr   r    r!   r"   r#   r   objectsr   r   r	   r   debug)r$   r=   Zoutput_libnamer8   r>   target_langoutput_filenamer,   r-   r-   r.   create_static_libz   s*   	zUnixCCompiler.create_static_libc              
   C   s  |  ||\}}| |||}|\}}}t| |||}t|ttd fs(td|d ur3tj	||}| 
||r|| j | d|g }|	rMdg|d d< |
rU|
|d d< |r\|| | tj| zf|tjkrs| jd d  }n| jd d  }|dkr| jrd}tj|d dkrd}d|| v r|d7 }d|| v stj|| d	krd}nd}| j| ||| < tjd
krt||}| ||  W d S  ty } zt|d }~ww td| d S )Nz%'output_dir' must be a string or Noner   z-gr   zc++env   =Z	ld_so_aixr   r9   )r:   Z_fix_lib_argsr   
isinstancestrtype	TypeErrorr    r!   joinr<   r=   r   r   r"   r   Z
EXECUTABLEr   r   r   basenamer0   r1   r2   r3   r#   r   r
   r   r>   )r$   Ztarget_descr=   r@   r8   	librarieslibrary_dirsruntime_library_dirsexport_symbolsr>   r'   r(   
build_tempr?   r)   Zlib_optsZld_argsZlinkerioffsetr,   r-   r-   r.   link   s`   



zUnixCCompiler.linkc                 C      d| S )N-Lr-   )r$   dirr-   r-   r.   library_dir_option      z UnixCCompiler.library_dir_optionc                 C   s   d|v pd|v S )NZgcczg++r-   )r$   Zcompiler_namer-   r-   r.   _is_gcc   s   zUnixCCompiler._is_gccc                 C   s   t jttdd }tjd d dkr4ddl	m
}m} | }|r0||ddgkr0d| S d	| S tjd d
 dkrAd| S tjd d dkr[| |rUdd	| gS dd	| gS | |rotddkrkd| S d| S d| S )NCCr   r   r   )get_macosx_target_versplit_version
      z-Wl,-rpath,rT      Zfreebsdz-Wl,-rpath=zhp-uxz-Wl,+sz+sGNULDyesz-Wl,--enable-new-dtags,-Rz-Wl,-Rz-R)r    r!   rJ   shlexsplitr   get_config_varr0   r1   distutils.utilrZ   r[   rX   )r$   rU   r   rZ   r[   Zmacosx_target_verr-   r-   r.   runtime_library_dir_option   s$   

z(UnixCCompiler.runtime_library_dir_optionc                 C   rS   )Nz-lr-   )r$   libr-   r-   r.   library_option
  rW   zUnixCCompiler.library_optionc                 C   s  | j |dd}| j |dd}| j |dd}| j |dd}tjdkr8td}td|}	|	d u r3d	}
n|	d
}
|D ]}tj	
||}tj	
||}tj	
||}tj	
||}tjdkr|dsl|dr|dstj	
|
|d
d  |}tj	
|
|d
d  |}tj	
|
|d
d  |}tj	
|
|d
d  |}tj	|r|  S tj	|r|  S tj	|r|  S tj	|r|  S q:d S )Nshared)Zlib_typedylib
xcode_stubstaticr   CFLAGSz-isysroot\s*(\S+)/rC   z/System/z/usr/z/usr/local/)r;   r0   r1   r   rc   researchgroupr    r!   rI   
startswithexists)r$   dirsrf   r>   Zshared_fZdylib_fZxcode_stub_fZstatic_fcflagsmZsysrootrU   rh   ri   rk   rj   r-   r-   r.   find_library_file  sH   



zUnixCCompiler.find_library_file)NNNNN)Nr   N)
NNNNNr   NNNN)r   )__name__
__module____qualname__compiler_typeZexecutablesr0   r1   Zsrc_extensionsZobj_extensionZstatic_lib_extensionshared_lib_extensionZdylib_lib_extensionZxcode_stub_lib_extensionZstatic_lib_formatZshared_lib_formatZdylib_lib_formatZxcode_stub_lib_formatZexe_extensionr/   r7   rA   rR   rV   rX   re   rg   rv   r-   r-   r-   r.   r   -   sN    





B.r   )__doc__r    r0   rn   ra   	distutilsr   distutils.dep_utilr   distutils.ccompilerr   r   r   distutils.errorsr   r   r	   r
   r   r1   r2   r   r-   r-   r-   r.   <module>   s     
