
    0hS                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SK
Jr  SSKJr  S rS	 rSS
 jr/ SQr " S S\5      rg)    N)UnixCCompiler)Mingw32CCompiler)get_config_vars)customize_compiler   )utilsc                     SR                  [        R                  " U 5       Vs/ s H!  nUS:w  d  M  [        R                  " U5      PM#     sn5      $ s  snf )zJFilter out -Wl,--as-needed from the shell-quoted arguments in linker.
     z-Wl,--as-needed)joinshlexsplitquote)linkerargs     1/lib/gobject-introspection/giscanner/ccompiler.pyno_as_neededr   %   sR     88KK'	&'S$$ 
S	'	& 	&s
   
AAc           
          [         R                  R                  5       n[        U5        U R                  S:X  GaT  [        SSSSSS5      u  p#pEpgS[        R                  ;   aO  [        R                  S   nS[        R                  ;  a&  UR                  U5      (       a  X[        U5      S -   nUnS[        R                  ;   a  [        R                  S   nS[        R                  ;   a  [        R                  S   nS	[        R                  ;   a  [        R                  S	   n	OUS
-   n	S[        R                  ;   a  US-   [        R                  S   -   nS[        R                  ;   a-  [        R                  S   n
US-   [        R                  S   -   nOSn
S[        R                  ;   aK  U	S-   [        R                  S   -   n	U
S-   [        R                  S   -   n
US-   [        R                  S   -   nS[        R                  ;   a  [        R                  S   nS[        R                  ;   a  US-   [        R                  S   -   nOUS-   U-   nUS-   U
-   nU R                  U	UUU[        U5      [        U5      US9  XPl        gg)zThis is a version of distutils.sysconfig.customize_compiler, without
any macOS specific bits and which tries to avoid using any Python specific
defaults if alternatives through env vars are given.
unixCCCXXLDSHAREDSHLIB_SUFFIXARARFLAGSNCPPz -ELDFLAGSr
   CFLAGS CPPFLAGS)preprocessorcompilercompiler_socompiler_cxx	linker_so
linker_exearchiver)	distutils	ccompilernew_compilerorig_customize_compilercompiler_typer   osenviron
startswithlenset_executablesr   shared_lib_extension)r!   dummycccxxldsharedshlib_suffixarar_flagsnewcccppcflagsr&   cc_cmds                r   r   r   0   s5    ,,.EE"'D%^T9U 	8(" 2::JJt$E+0C0CB0G0G CGH#55BBJJ**U#C#zz*-HBJJ**U#Cu*C

"#~

9(==Hrzz!ZZ)F#~

8(<<HF#)bjj44Cc\BJJz$::F#~

:(>>H2::D!B

"Cx"**Y"77HCx(*HcF"  "8,#B' 	! 	 )5%[ (    c                 :   / nU(       a"  UR                  U5        UR                  S5        [        R                  R	                  SS5      n[
        R                  " U/[
        R                  [
        R                  SS9R                  nSU;   nU(       d8  X#S/-   n[
        R                  " X`/-   SS9nUR                  5        H  nUs  $    g[
        R                  " US	U /-   SS9nUR                  5        H   nUR                  S
5      (       d  M  USS s  $    g)zaReturns a DLL name given a path to an import lib

/full/path/to/libgtk-3.dll.a -> libgtk-3-0.dll
z--mode=executeDLLTOOLzdlltool.exeT)stdoutstderruniversal_newlineszllvm-dlltoolz
--identify)rB   nm:N)extendappendr,   r-   get
subprocessrunPIPESTDOUTr@   check_output
splitlinesendswith)	impliblibtoolargsdlltooldlltool_outputis_llvmdlltool_argsoutputlines	            r   resolve_mingw_librY   l   s    DG$% jjnnY6G^^		*//  ! "(  .G55(()@UYZ%%'DK ( 	 ((v)>SWX%%'D}}S!!CRy  ( r=   )z-g3z-ggdb3z-gstabs3z-gcoff3z-gxcoff3z-gvms3c                       \ rS rSrSrSrSr\R                  \R                  S4S jr
S rS rS rS rS	 r\S
 5       rS rS rSrg)	CCompiler   r   Nc                 ^   US:X  ay  Uc[  UR                  SS5      nUR                  S5      (       a  UR                  S5      c  SnO[        R                  R	                  5       nUS:w  a  US:w  a  [        SU-  5      eO!Uc  [        R                  R	                  5       nUS:X  a  S	S
KJn  UR                  5       U l	        O"[        R                  R                  US9U l	        [        U R                  5        [        U R                  [        5      (       al  U R                  R                  S/:w  a  / U R                  l        U R                  R                  c)  U R                  R                  S/-   U R                  l        U R!                  5       (       Ga$  S["        R$                  S'   S["        R$                  ;  a  S["        R$                  ;   a1  ["        R$                  R                  S5      ["        R$                  S'   OT["        R$                  R                  S5      (       a0  ["        R$                  R                  S5      ["        R$                  S'   U R                  R'                  5       (       a6  ["        R$                  R                  S5      R)                  5       S   U l        g SU l        SU l        g [        U R                  [        5      (       a  U R                  R                  S   U l        O*SR/                  U R                  R                  5      U l        SU l        g )NntMSYSTEMr   )MINGWCLANGUCRTVCINSTALLDIRmingw32msvcz'Specified Compiler '%s' is unsupported.r   )msvccompiler)r!   msvcrtz-E1DISTUTILS_USE_SDKMSSdkWindowsSDKDirVCInstallDirr   r   zcl.exez-wd4996r
   z-Wno-deprecated-declarations)rH   r.   r'   r(   get_default_compiler
SystemExitr   rf   get_msvc_compilerr!   r)   r   
isinstancer   dll_librariesr    check_is_msvcr,   r-   check_is_clang_clr   compiler_cmd_cflags_no_deprecation_warningsr   )selfr-   osnamecompiler_namemingwrf   s         r   __init__CCompiler.__init__   sU   
 T>
 $Ir2##$>??GKKP^D_Dg$-M$-$7$7$L$L$NM&	) !L}!\]]$ !* 3 3 H H J F" '(::<DM%//<<m<TDM4==) dmm%566}}**xj8.0+}}))1-1]]-C-Ctf-L* /2BJJ*+bjj("bjj0*,**..*IBJJw'ZZ^^N33*,**..*HBJJw'}}..00$&JJNN4$8$>$>$@$C!$,!7@44==*:;;$(MM$:$:1$=!$'HHT]]-C-C$D!3QD0r=   c                 B   / n/ n[         R                  S:X  a  SS/nO\U(       d  SS/OU/nUR                  S5        U(       d  UR                  S5        [        R                  S:w  a  UR                  S	5        U H  n	U R                  5       (       a'  U	R                  S
S5      n	UR                  SU	-   5        OUR                  SU	-   5        [         R                  S:w  ab  [         R                  R                  U	5      (       a>  U(       a#  UR                  S5        UR                  U	5        OUR                  SU	-   5        UR                  U	5        M     X4-    H  n
[         R                  R                  U
5      (       a  UR                  U
5        M:  U R                  5       (       a  U
S:w  a  UR                  U
S-   5        Mk  Mm  U
R                  S5      (       a  UR                  U
5        M  UR                  SU
-   5        M     U H  nU[         R                  ;   aG  [         R                  R                  U[         R                  U   /-   5      [         R                  U'   M^  [         R                  R                  U5      [         R                  U'   M     g )Nr^   LIBPATHLD_LIBRARY_PATHDYLD_FALLBACK_LIBRARY_PATHz-L.z-Wl,-rpath,.darwin-Wl,--no-as-needed/\z	-libpath:z-Lz-rpathz-Wl,-rpath,m.lib.la-l)r,   namerG   sysplatformrr   replacepathisabsisfilerO   r-   pathsepr   )rv   rR   rQ   	librariesextra_librarieslibpathslib_dirs_envvarruntime_path_envvarruntime_pathslibrary_pathlibraryenvvars               r   get_internal_link_flags!CCompiler.get_internal_link_flags   s    !77d?#(&/[j#46R"S  rA  qB KKN+ ||x'01$L !!##+33C>K,67D</077d?rww}}\'B'BH-L1ML$@A  . %" !2Gww~~g&&G$##%%c>KK& 01 " ##E**KK(KKw/ 3 *F#JJOOMRZZ5G4H$HI 

6" &(ZZ__]%C

6" *r=   c                    [         R                  S:w  a%  [        R                  S:w  a  UR	                  S5        U H  n[         R
                  R                  U5      (       a  UR	                  U5        M:  U R                  5       (       a  US:w  a  UR	                  US-   5        Mk  Mm  UR                  S5      (       a  UR	                  U5        M  UR	                  SU-   5        M     g )Nr^   r   r   r   r   r   r   )	r,   r   r   r   rG   r   r   rr   rO   )rv   rR   r   r   s       r   get_external_link_flags!CCompiler.get_external_link_flags   s     77d?s||x7KK,- Gww~~g&&G$##%%c>KK& 01 " ##E**KK(KKw/ !r=   c                    S/nU R                  U5      u  pVnS/nUR                  U5        UR                  U5        U R                  5       (       ac  U R                  R	                  5       (       dD  UR                  S5        UR                  S5        UR                  S5        UR                  S5        U R                  R                  UUUUUS9  g )Nz-C.)_USE_DECLSPECS_FOR_SALN)_CRT_SECURE_NO_WARNINGSN)_CRT_NONSTDC_NO_WARNINGSN)SAL_NO_ATTRIBUTE_DECLARATIONSN)sourceoutput_filemacrosinclude_dirsextra_postargs)_set_cpp_optionsrF   rr   r!   rs   rG   
preprocess)	rv   r   rW   cpp_optionsr   include_pathsr   postargsr   s	            r   r   CCompiler.preprocess8  s    ,0,A,A+,N) uM*h'
 (G(G(I(IMM:;MM;<MM<=MMAB  -3(..:0>	 	! 	@r=   c           	      P   / n/ nU R                  U5      u  pxn	U H  n
UR                  U
5        M     [        U R                  [        5      (       a  [
        R                  R                  S5      nU(       a  [        [        R                  " U5      5       H`  u  pUR                  S5      (       d  M  UR                  S5      nUS:  a  USU XS-   S  4nOUSS  S 4nX;  d  MO  UR                  U5        Mb     U R                  S:X  a  U(       d  UR                  S5        UR                  U R                  5        UR                  U5        UR                  U	5        U R                  R!                  UUUU[
        R"                  R%                  [
        R&                  5      S	9$ )
Nr   -D=rE      r   gccz-Wall)sourcesr   r   r   
output_dir)r   rG   rp   r!   r   r,   r-   rH   	enumerater   r   r.   findrt   ru   rF   compiler   abspathsep)rv   pkg_config_cflagscpp_includesr   init_sectionsr   includesr   r   
extra_argsincluder;   icflagstridxmacrosets                   r   r   CCompiler.compileQ  sn   !!"34 	,
 $GOOG$ $ dmm]33ZZ^^H-F )%++f*= >HA''--!&C!B;(-a(-qjk(:(<H ).ab	4'8H#1"MM(3 !? %m!!'*dBBC&j)}}$$V,22:4B020G	 % I 	Ir=   c                 0   / n/ nU R                  5       (       aS  [        R                  R                  S5      nUR	                  S5      nUR                  S5        UR                  S5        O[        R                  " U5      n[        R                  " U R                  S/[        R                  S9nUR                  5       u  pUR                  nUR                  S5      R                  5        HH  n
U
R!                  S5      (       d  M  XJ[#        S5      S  R	                  [        R$                  5      -  nMJ     / n/ nU GH  nS	nS
U-  SU-  SU-  SU-  SU-  SU-  /nU GH  nU(       a    GOUR!                  S5      (       a  USS  nU GH  nU(       a    M9  [        R&                  R)                  UU5      n[        R&                  R+                  U5      (       d  MT  U R                  5       (       Ga  [,        R.                  " SS9u  nn[        R0                  " U5        SU-   /n[        R2                  " UU/-   U-   [        R                  S9n[5        USSS9 nUR7                  5       R                  5        HV  n
SU
;   d  M  U
R	                  5       nU H5  nUR!                  S5      (       d  M  UR                  USS  S-   5        Sn  MT     MX     S S S 5        WR1                  5         [        R8                  " U5        GM|  [;        UW5      nUc  GM  UR                  U5        SnGM     GM     U(       a  GM  UR                  U5        GM     [#        U5      S:  a  [=        SSR)                  U5      -   5      eU$ ! , (       d  f       N= f)Nr}   ;zdumpbin.exez-symbolsz-print-search-dirs)r@   asciizlibraries: Fzlib%s.dll.azlib%s.dll.libzlib%s.az%s.dll.az%s.az%s.libr   r   zg-ir-win32-resolve-lib-)prefixz-out:rzutf-8)encoding__IMPORT_DESCRIPTOR_   z.dllTr   z4ERROR: can't resolve libraries to shared libraries: z, )rr   r,   r-   rH   r   rG   r   get_libtool_commandrI   Popenrt   rK   communicatelibrary_pathsdecoderN   r.   r/   r   r   r   existstempfilemkstempclosecallopenreadunlinkrY   rn   )rv   r   optionsrR   	libsearchlibpathrQ   procoerX   shlibsnot_resolvedlibfound
candidateslcrP   tmp_fdtmp_filenameoutput_flagtmp_fileobjline_tokensitemshlibs                             r   resolve_windows_libsCCompiler.resolve_windows_libsx  s&   	  jjnnU+Gc*I KK&KK
# //8G##T%6%68L$M+5??<D##%DA--I)446??=11c-&8&9!:!@!@!LLI 7 CE##%CS 3J <<$$!"A#AWW\\!Q/Fww~~f----// ( 0 08Q R 1FL HHV,+2\+A*BK#-??46(?[3P:D//$KD!%lC'!Jk,7,<,<,>,I,I,KD'='E6:jjl4?D/3?U/V/V06d23i&>P0Q8<05	 5@	 -L "K (--/IIl3$5fg$FE$0 &e 4(,E $ P 5##C(g h |q F		,'() ) / "K!Js    &N	
)N	7"N	
Nc                     U R                  5       (       aL  U R                  R                  (       d  U R                  R                  5         U R                  R                  /$ U R                  R
                  $ N)rr   r!   initialized
initializer   r%   rv   s    r   
linker_cmdCCompiler.linker_cmd  sQ    ==,,((*MM(())==+++r=   c                 4    U R                   R                  S:H  $ )Nre   )r!   r+   r   s    r   rr   CCompiler.check_is_msvc  s    }}**f44r=   c                 z   / n/ n/ nU GH+  n[         R                  " U5      nUR                  S5      (       a  UR                  U[	        S5      S  5        MO  UR                  S5      (       aq  U[	        S5      S  nUR                  S5      nUS:X  a  Un	S n
O3US U n	XxS-   S  n
U R                  5       (       a  U
R                  SS5      n
UR                  X45        M  UR                  S5      (       a!  UR                  U[	        S5      S  45        GM  U[        ;  d  GM  UR                  U5        GM.     X#U4$ )	Nz-Ir   r   rE   r   "z\"z-U)	r   cflag_real_include_pathr.   rG   r/   r   rr   r   FLAGS_RETAINING_MACROS)rv   r   r   r   other_optionsr   optionmacromacro_index
macro_namemacro_values              r   r   CCompiler._set_cpp_options  s1   A2215F  &&s4yz 23""4((s4yz*#jjo"$!&J"&K!&|!4J"'a(8"9K ))++&1&9&9$&Gz78""4((vc$ij134 !77!((07 8 -00r=   )ru   r!   rt   )__name__
__module____qualname____firstlineno__rt   r!   ru   r,   r-   r   rz   r   r   r   r   r   propertyr   rr   r   __static_attributes__ r=   r   r[   r[      sk    LH&(# #FRP=D~00@2%IN[z , ,5!1r=   r[   r   )r,   r   rI   r   r   r'   distutils.unixccompilerr   distutils.cygwinccompilerr   distutils.sysconfigr   r   r*   r   r   r   rY   r   objectr[   r  r=   r   <module>r     sP   * 
    
  1 6 / M 95x H X p1 p1r=   