
    e                      d dl mZ d dlZd dlZd dlZd dlZd dlmc m	Z
 d dlZd dlZd dlmZmZmZ d dlZd dlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$ ddlm%Z% ejL                  rddl'm(Z( ddl)m*Z* ejV                  e,ee,e!f   Z-ddZ.ddZ/ddZ0ddZ1ddZ2ddZ3	 	 	 	 	 	 d dZ4 G d dejj                        Z6y)!    )annotationsN)PathPurePathPureWindowsPath)Counter   )backends   )build)mlog)	compilers)mesonlib)FileMesonBugExceptionMesonExceptionreplace_if_different	OptionKeyversion_compareMachineChoice)Environmentbuild_filename)coredata)CompilerArgs)Interpreterc                   t        j                  dd       }t        j                  dd       }|st        d      |dk(  sd|v rddlm}  || |      S |dk(  sd	|v rdd
lm}  || |      S |dk(  sd|v rddlm}  || |      S |dk(  sd|v sd|v rddl	m
}  || |      S |dk(  sd|v sd|v rddlm}  || |      S |dk(  sd|v sd|v rddlm}	  |	| |      S d|v rt        | |      S t        dj!                  ||            )NVisualStudioVersionVSINSTALLDIRzCould not detect Visual Studio: Environment variable VSINSTALLDIR is not set!
Are you running meson from the Visual Studio Developer Command Prompt?z11.0zVisual Studio 11r   )Vs2012Backendz12.0zVisual Studio 12)Vs2013Backendz14.0zVisual Studio 14)Vs2015Backend15.0zVisual Studio 17zVisual Studio\2017)Vs2017Backendz16.0zVisual Studio 19zVisual Studio\2019)Vs2019Backendz17.0zVisual Studio 22zVisual Studio\2022)Vs2022BackendzVisual Studio 10.0z~Could not detect Visual Studio using VisualStudioVersion: {!r} or VSINSTALLDIR: {!r}!
Please specify the exact backend to use.)osgetenvr    mesonbuild.backend.vs2012backendr    mesonbuild.backend.vs2013backendr    mesonbuild.backend.vs2015backendr     mesonbuild.backend.vs2017backendr"    mesonbuild.backend.vs2019backendr#    mesonbuild.backend.vs2022backendr$   Vs2010Backendformat)
r   interpreter
vs_versionvs_install_dirr   r   r    r"   r#   r$   s
             B/usr/lib/python3/dist-packages/mesonbuild/backend/vs2010backend.pyautodetect_vs_versionr3   ,   sL   0$7JYY~t4N f g 	g V1^CBUK00V1^CBUK00V1^CBUK00V1^C.BUK00V1^C.BUK00V1^C.BUK00~-UK00
 DDJF:WeDfh h    c                    g }| D ]N  }|j                  d      st        |dd       }d|v r|j                  |       9||D cg c]  }d|z   	 c}z  }P |S c c}w )z
    Splits any /O args and returns them. Does not take care of flags overriding
    previous ones. Skips non-O flag arguments.

    ['/Ox', '/Ob1'] returns ['/Ox', '/Ob1']
    ['/Oxj', '/MP'] returns ['/Ox', '/Oj']
    z/Or
   Nb)
startswithlistappend)argso_flagsargflagsfs        r2   split_o_flags_argsr?   O   sp     G 	1~~d#SW %<NN3%0Qq00G	1 N 1s   Ac           	         t        t        j                  t        j                  d|z   dz   t        |       z               j	                         S )Nz	meson-vs-:)struuiduuid5NAMESPACE_URLupper)path	path_types     r2   generate_guid_from_pathrI   d   s;    tzz$,,kI.E.KcRVi.WXY__aar4   c                L    t        j                  d| t         j                        S )Nz1Gaming\.(Desktop|Xbox.XboxOne|Xbox.Scarlett)\.x64)rematch
IGNORECASE)platforms    r2   detect_microsoft_gdkrO   g   s    88H(TVTaTabbr4   c              #     K   | D ]U  }|j                  d      d   }t        j                  j                  |      s7t        j                  j                  |    W y w)N.)splitr   is_source_suffixSUFFIX_TO_LANG)sourcessrcexts      r2   filtered_src_langs_generatorrY   j   sR      :iinR //4%%44S99:s
   9A"Ac                D   t        | D cg c]S  }t        j                  j                  |j                        s-t        j                  j                  |j                     U c}      }|t        t        |            z  }|j                  d      }|r|d   d   S d S c c}w )Nr   r   )r   r   rT   suffixrU   rY   most_common)target_sourcescustom_sourcesrW   lang_countsmost_common_lang_lists        r2   get_primary_source_langra   v   s    Uc  Ycgpgzgz  hL  hL  MP  MW  MW  hX9..==cjjI  Y  ZK77GHHK'33A6 +@ #A&ITI Ys
   .B)Bc                   i }t        j                         D ]b  }| |   |   }|j                         D cg c]  \  }}||k7  s||f }}}|D ])  \  }	}
|	|vri ||	<   t        j	                  |
      ||	   |<   + d |S c c}}w N)r    get_genvs_default_buildtype_listitemsr-   _extract_nmake_fields)
vslite_ctx	target_idprimary_src_lang&defs_paths_opts_per_lang_and_buildtype	buildtypecaptured_build_argslang
build_args#non_primary_build_args_per_src_langsrc_lang	args_lists              r2   (get_non_primary_lang_intellisense_fieldsrr      s     .0*>>@ y	(3I>ZmZsZsZu  /SFVdJy}  BR  zRj/A  /S+  /S#F 	yHiEECE6x@JWJmJmnwJx28<YG	yy 21 /Ss   A>A>c                  h    e Zd ZdZd;d< fdZd Zd=dZd Z	 	 d>	 	 	 	 	 d?dZe	d@d       Z
e	d@d	       Zd
 Zd Zd;dAdZdBdZdCdZdDdEdZd Zd Zd Zd;dFdZdGdZdddd	 dHdZdIdZdJdZdKdZed        Zd Zd Zd Zd Z d  Z!d! Z"dLd"Z#d# Z$d$ Z%e	dMd%       Z&e	dNd&       Z'e	d'        Z(d( Z)dOd)Z*d* Z+e	dPd+       Z,e	dQd,       Z-e	dRd-       Z.	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd.Z/	 	 	 	 	 	 	 	 dTd/Z0dUd0Z1dDdVd1Z2d2 Z3d3 Z4d4 Z5d5 Z6	 	 dW	 	 	 	 	 	 	 dXd6Z7e	dYd7       Z8dZd8Z9d[d9Z:d\d:Z; xZ<S )]r-   vs2010c                    t         |   ||       d| _        d| _        d| _        d | _        d| _        d | _        i | _        i | _	        || _
        y )Nz10.0.30319.1z11.002010)super__init__project_file_versionsln_file_versionsln_version_commentplatform_toolsetr0   windows_target_platform_versionsubdirshandled_target_depsgen_lite)selfr   r/   r   	__class__s       r2   rx   zVs2010Backend.__init__   sW    ,$2! '#)  $ /3,#%  r4   c                |    t         j                  j                  | j                  |      |j	                               S rc   )r%   rG   joinget_target_dirget_id)r   targets     r2   get_target_private_dirz$Vs2010Backend.get_target_private_dir   s(    ww||D//7IIr4   c           	     J   t        |t        j                        r'|j                  D ]  }| j	                  |||g g g         | j                  | j                  |      | j                  |            }| j                  |      }	t        |t        j                  t        j                  f      r|j                         D ]C  }
t        j                  j                  |	| j                  |      |
      }|j                  |       E | j                  | j                  |      | j                  |            }||vr|j                  |       y y |j!                         }|j#                         }|j%                         }|j                         }t        j                  j                  |	| j&                  |j(                        }t+        j,                  |d      }t/        |      t/        |      k(  }t1        |      D ]  \  }
}|r$t        j                  j                  |||
         }nd}t        j                  j                  |	|j3                  | j&                  |            }| j5                  |d      }|j7                  |      }|j9                  |      }|D cg c]"  }t        j                  j                  ||      $ }}||z  }|D cg c]$  }|j;                  d|      j;                  d|      & }}| j=                  |||      }|D cg c]<  }|j;                  d| j>                  jA                               j;                  d|      > }}|D cg c]  }|j;                  d|       }}|D cg c]T  }|j;                  d	| j>                  jA                               j;                  d
| j>                  jC                               V }}|D cg c]  }|j;                  dd       }}t        j                  j                  | j>                  jC                         | j                  |            }| jE                  || jG                  ||      ||jH                  r|d   nd d|jJ                        \  }}|dd  |z   }t        j                  j                  | j>                  jC                         | j                  |            } t        jL                  | d       t+        j,                  |d|      }!dj                  | jO                  |            t+        j,                  |!d      _(        dj                  |      t+        j,                  |!d      _(        dj                  |      t+        j,                  |!d      _(         y c c}w c c}w c c}w c c}w c c}w c c}w )N	ItemGroup Tz@INPUT@z@OUTPUT@z@SOURCE_DIR@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@z@SOURCE_ROOT@z@BUILD_ROOT@\/r   )workdircaptureforce_serializeenvrR   )exist_okCustomBuildInclude Command;OutputsAdditionalInputs))
isinstancer   GeneratedListdependsgenerate_genlist_for_targetrelpathr   r   target_to_build_rootCustomTargetCustomTargetIndexget_outputsr%   rG   r   r9   get_generatorget_exe
get_inputsbuild_to_srcsubdirET
SubElementlen	enumeraterel_to_builddirget_target_depend_filesget_arglistget_outputs_forreplacereplace_outputsenvironmentget_source_dirget_build_diras_meson_exe_cmdlinereplace_extra_argsr   r   makedirsquote_argumentstext)"r   genlistr   parent_nodegenerator_output_filescustom_target_include_dirscustom_target_output_filesxtarget_private_dirdowniipathidir	generatorexe
infilelistoutfilelist
source_diridgroupsamelencurfilesole_output
infilenamedeps	base_argsoutfiles_relofoutfilesr:   tdir_abscmd_abs_pdircbss"                                     r2   r   z)Vs2010Backend.generate_genlist_for_target   s   gu223__ U00FKRQSTU!\\$*E*Ef*MtObObciOjk((0g 2 2E4K4KLM((* 9T4+>+>w+GK*11%89 << 3 3G <d>Q>QRX>YZD55*11$7 6  --/I##%C ++-J!--/KdD,=,=w~~NJmmK=G*o[)99G'
3 'M
7"$'',,/A;q>"RK"$KWW\\$0G0GHYHY[m0no
33GTB%11*=	&66w?KWXRBGGLL);R@XX&(2&!*, 		)Z8@@[Y , ,++D2DlS "&' 		.$2B2B2Q2Q2ST 0BCD ' ' PTT!		"8*ETT "&' 		/43C3C3R3R3TU 1A1A1O1O1QRS ' ' 7;;		$,;; 77<<(8(8(F(F(H$J]J]^dJef22++D':$+4+<+<HQK$$( 3 Q 23x$77<<(8(8(F(F(H$J]J]^dJefHt4mmG]JO58XXd>R>RSV>W5Xc9-258XXh5Gc9-2>Ahhtnc#56;O'M Y,' U' <s&   'V
)VAVV2AVV c           	     n    g }g }g }|j                         D ]  }| j                  ||||||        |||fS rc   )get_generated_sourcesr   )r   r   r   r   r   r   r   s          r2   "generate_custom_generator_commandsz0Vs2010Backend.generate_custom_generator_commands   s_    !#%'"%'"335 	[G,,WfkKac}  @Z  [	[%'AC]]]r4   Nc                   |rt        d      | j                  j                  d   j                  d d       }|dv rD| j                  j                  d   j	                  d d       }t        |      r|| _        nd| _        nw|dk(  rd| _        nj|dv r>| j                  j                  d   j                  d d       }|dk(  rd| _        n0d	| _        n(d
|j                         v rd| _        nt        d|z         | j                  j                  d   j                  d d       }|dv rd| _
        nw|dk(  rd| _
        nj|dv r>| j                  j                  d   j                  d d       }|dk(  rd| _
        n0d	| _
        n(d
|j                         v rd| _
        nt        d|z         | j                  j                  j                  t        d            | _        | j                  j                  j                  t        d            | _        | j                  j                  j                  t        d            | _        	 | j                  j                  j                  t        d            | _        t&        j(                  j+                  | j                  j-                         | j.                  j0                  dz         }| j3                  |      }| j5                          | j7                          | j9                          | j;                  ||       | j=                          t>        jA                  | j                  j-                                y # t        $ r
 d| _        Y w xY w)NzAWe do not expect any vs backend to generate with 'capture = True'target_machine>   64x86_64x64x86Win32>   arm64aarch64arm64ecr   armARMz$Unsupported Visual Studio platform: build_machinerk   optimizationdebug
b_sanitizenonez.sln)!r   r/   builtincpu_family_methodsystem_methodrO   rN   
cpu_methodlowerr   build_platformr   r   
get_optionr   rk   r   r   sanitizer%   rG   r   r   r   project_namegenerate_projectsgen_testprojgen_installprojgen_regenprojgenerate_solutiongenerate_regen_infor-   touch_regen_timestamp)	r   r   rg   r   target_system
target_cpur   sln_filenameprojlists	            r2   generatezVs2010Backend.generate   s    #$ijj))112BCUUVZ\`a-- ,,445EFTTUY[_`M#M2 - %u$#DM33))112BCNNtUYZJY& ) 'n**,,!DM !G.!XYY((00ASSTXZ^_,,"'De#")D22))11/BMMdTXYJY&&/#&-#m))++"'D !G-!WXX))22==i>TU ,,55@@>AZ[%%..99)G:LM
	# ,,55@@<AXYDM ww||D$4$4$B$B$DdjjF]F]`fFfg))*5|X6  "++D,<,<,J,J,LM  	#"DM	#s   <3M M"!M"c                    t         j                  j                  t         j                  j                  | t        j                        d      S )Nzregen.stamp)r%   rG   r   r   private_dir	build_dirs    r2   get_regen_stampfilez!Vs2010Backend.get_regen_stampfile'  s,    ww||BGGLLK4K4KLm\\r4   c                r    t        t        j                  |       dd      5  	 d d d        y # 1 sw Y   y xY w)Nwutf-8encoding)openr-   r  r  s    r2   r   z#Vs2010Backend.touch_regen_timestamp+  s1    -33I>gV 		 	 	s   -6c                   dt         j                  v xr dt         j                  v }dt         j                  v rdt         j                  v rt         j                  d   nd }||dk\  rdnd}t         j                  d   |z   dz   }t         j                  j                  |      rb|r't         j                  d   }t         j                  d   }n"t         j                  j	                  d	d
      }|}||k7  r|dz   |z   n|}d| d| S dt         j                  v rd|rbt         j                  d   dz   }t         j                  j                  |      r-d|dt         j                  d   dt         j                  d   S y)NVSCMD_ARG_TGT_ARCHVSCMD_ARG_HOST_ARCHVCINSTALLDIRr   r!   zAuxiliary\Build\r   zvcvarsall.batPlatformr   r   "z" VS150COMNTOOLSzVsDevCmd.batz" -arch=z -host_arch=)r%   environrG   existsget)r   has_arch_valuesr0   relative_pathscript_pathtarget_arch	host_archarchs           r2   get_vcvars_commandz Vs2010Backend.get_vcvars_command0  sT   ."**<dAVZ\ZdZdAd RZZ'(BJJ6 $9:<@ 4>4Jz]cOc0ikM**^4}DVKww~~k*""$**-A"BK "

+@ AI"$**..U"CK +I8A[8Py34Va;-r$00 rzz)o**%56GKww~~k* "**-A"BBJJOdDeg gr4   c                    i }|D ]D  }t        |t        j                        s|j                  ||j                  j	                         <   F |j                         S rc   )r   r   ExtractedObjectsr   r   re   )r   obj_listresultos       r2   get_obj_target_depsz!Vs2010Backend.get_obj_target_depsK  sM     	5A!U334,-HHqxx()	5 ||~r4   c                   i }|j                         D ]  }t        |t        j                        rE|j	                         D ]0  }t        |t        j
                        s|||j                         <   2 nt        |t        j                        r*|j                         D ]  }|||j                         <    nwt        |t        j                        rN|j                  D ]M  }t        |t        j                        r|j                  ||j                         <   ;|||j                         <   O |j                  D ]M  }t        |t        j                        r|j                  ||j                         <   ;|||j                         <   O |j                  D ]^  }t        |t        j                        r|j                  ||j                         <   ;t        |t              rL|||j                         <   ` | j!                  |j"                        D ]
  \  }}|||<    nt%        d|       |j'                         D ]U  }	t        |	t        j                        r|	||	j                         <   2t        |	t        j                        r(|	j                  ||	j                  j                         <   t|	j)                         }
|
j+                         }t        |t        j,                        r|||j                         <   t/        j0                  |
j2                  |	j2                        D ]h  }t        |t        j                        r|j                  ||j                         <   ;t        |t        j
                        sV|||j                         <   j X  |r|s|S | j5                  ||      }|j7                  |       |S )NzUnknown target type for target )valuesr   r   r   get_target_dependenciesTargetr   	RunTargetget_dependenciesBuildTargetlink_targetsr   r   link_whole_targetslink_dependsr   r$  objectsr   r   r   r   
Executable	itertoolschainr   get_target_depsupdate)r   t	recursiveall_depsr   dldepobj_idobjdepgendepr   gen_exerets                r2   r3  zVs2010Backend.get_target_depsR  s   .0hhj 2	5F&%"4"45779 1A "!U\\2/0,	1
 FEOO4002 -A+,HQXXZ(-FE$5$56"// 7D!$(?(?@26++/26/	7
 #55 7D!$(?(?@26++/26/	7 #// 7D!$(?(?@26++/#D$/26/7 '+&>&>v~~&N .NFF'-HV$. %'Fvh%OPP 668 5fe&8&8906HV]]_-(?(?@7=}}HV]]1134 & 4 4 6I'//1G!'5+;+;<5<!12&__Y->->O 5%a)@)@A3488HQXXZ0'5<<834HQXXZ0	55I2	5l 	O""8Y7

8
r4   c                   d}t        |      }t        |       |D ]  }|| j                  vs|j                  }t	        |d      }|j
                  }|t        d      k7  r| j                  |   d   nd }	||	f| j                  |<   || j                  j                  j                  d   ||| j                  |   d   fz  }
|j                  |
       |j                  d        y )N%Project("{%s}") = "%s", "%s", "{%s}"
r   rQ   r   	directoryEndProject
)reversednextr~   namerI   parentr   r   r   
lang_guidswrite)r   ofileparents	prj_templ	iterpathsrG   basename
identifier
parent_dirparent_identifierprj_lines              r2   generate_solution_dirsz$Vs2010Backend.generate_solution_dirs  s    <	W%	Y 	,D4<<'994T8D
![[
!Xc]2 %)LL$<Q$?8< "&02C%DT"$$$--88EhT(:1(=(? ? H%N+	,r4   c                   | j                         }|j                  | j                                |dz   }t        |dd      5 }|j	                  d| j
                  z         |j	                  d| j                  z         d}|D ]J  }| j                  j                  j                  t        d            d	k(  r| j                  ||d
   j                         | j                  j                  |d      }d}	t        |d      r.|j                   r"|j                   j#                         D ]  }
|
}	 n || j                  j                  j$                  |	   |d   |d
   |d   fz  }|j	                  |       |j'                         |i}| j)                  |d      }|j	                  d       |j+                         D ]  \  }}|d   |v s|||<    M || j                  j                  j$                  d   dd| j                  j                  j,                  fz  }|j	                  |       |j	                  d       | j.                  rd}d}nd}d}|| j                  j                  j$                  d   ||| j                  j                  j0                  fz  }|j	                  |       |j	                  d       || j                  j                  j$                  d   dd| j                  j                  j2                  fz  }|j	                  |       |j	                  d       |j	                  d       |j	                  d       | j.                  rt        j4                         n| j6                  g}|D ]4  }|j	                  d|d| j8                  d|d| j8                  d	       6 |j	                  d        |j	                  d!       |D ]  }|j	                  d"| j                  j                  j0                  d#|d| j8                  d$|d| j8                  d       | j.                  rc|j	                  d"| j                  j                  j0                  d#|d| j8                  d%|d| j8                  d        t;        |      D ]  \  }}|d&   t<        j>                  u r| j@                  }n| j8                  }|D ]  }|j	                  d"|d   d#|d| j8                  d$|d|d       | j.                  r|dk(  sC|d   |v sKtC        | j                  j                  |d      t        jD                        r|j	                  d"|d   d#|d| j8                  d%|d|d         |D ]  }|j	                  d"| j                  j                  j,                  d#|d| j8                  d$|d| j8                  d       |j	                  d"| j                  j                  j2                  d#|d| j8                  d$|d| j8                  d        |j	                  d        |j	                  d'       |j	                  d(       |j	                  d        | jF                  r|j	                  d)       |D ]_  }|d
   jH                  tK        d*      k7  s|j	                  d+jM                  |d   | jF                  |d
   jH                     d                a | jF                  jO                         D ]/  }|d
   s	|j	                  d+jM                  |d   |d
                1 |j	                  d        |j	                  d,       d d d        tQ        ||       y # 1 sw Y   xY w)-N~r	  z	utf-8-sigr  z:
Microsoft Visual Studio Solution File, Format Version %s
z# Visual Studio %s
r@  layoutmirrorr   r   defaultr   r
   T)r6  rB  	RUN_TESTSzRUN_TESTS.vcxprojRECONFIGURERECONFIGURE.vcxprojREGENREGEN.vcxprojRUN_INSTALLzRUN_INSTALL.vcxprojzGlobal
z=	GlobalSection(SolutionConfigurationPlatforms) = preSolution
z		|z = 
z	EndGlobalSection
z=	GlobalSection(ProjectConfigurationPlatforms) = postSolution
z		{z}.z.ActiveCfg = z.Build.0 =    z1	GlobalSection(SolutionProperties) = preSolution
z		HideSolutionNode = FALSE
z-	GlobalSection(NestedProjects) = preSolution
rQ   z		{{{}}} = {{{}}}
z
EndGlobal
))get_build_by_default_targetsr4  get_testlike_targetsr  rH  rz   r{   r   r   r   r   rR  rJ  r   targetshasattrr   keysrG  r   r3  re   	test_guidr   
regen_guidinstall_guidrd   rk   rN   r   r   BUILDr   r   r)  r~   rF  r   r.   r&  r   )r   r   r  default_projlistsln_filename_tmprI  rK  prjr   rm   lang_outrQ  target_dictrecursive_depsdep	test_lineregen_proj_nameregen_proj_fname
regen_lineinstall_linemulti_config_buildtype_listrk   project_indexpconfig_platformr   s                             r2   r   zVs2010Backend.generate_solution  s   <<> 9 9 ;<'#- "C+> q	'%KKVY]YnYnnoKK.1I1IIJ@I 7##,,77	(8KLPXX//s1v~~F++CF3 6;/F4D4D$*$4$4$9$9$; ' %$$--88>FCFCF(, , H%%}}7!%!5!54 "6 "1N+#1#7#7#9 7KC1v!1106(-7%7, "T%5%5%>%>%I%I)%T%02E%)%5%5%>%>%H%H%J JI KK	"KK'}}"/#8 ")#2 "d&6&6&?&?&J&J9&U&57G&*&6&6&?&?&J&J&L LJ KK
#KK'$(8(8(A(A(L(LY(W(57L(,(8(8(A(A(N(N(P PL KK%KK'KK
#KK ( )Y]YfYf(*S*S*Umqm{m{l|'8 -	&y!]], -- KK./KK ) * 9 N	!--66AA9 $y$--I J }}KK!%!1!1!:!:!E!Ey$(MM9dmm!M NN %.h$7 B qQ4=...&*&9&9O&*mmO!< BIKK!"1y$--!*O!= > !MM]a-?t//%djj&8&81&>P%&qT9dmm%.%A BBB0 9 G	!--66@@)!]]It}}F G !--66CCY!]]It}}F G	G KK./KKMNKK89KK./|| , -! hAt{{hsm3$;$B$B1Q4VWXYVZVaVaIbcdIe$fgh #ll113 ZFay$;$B$B6!9fUVi$XYZ 23KK&cq	'd 	\+;<eq	' q	's<   F]1I+]14C]1]14]1
E ]1+A%]1A]11]:c                    | j                   j                  j                  t        d         j                  }g }d}t        | j                  j                  j                               D ]  \  }\  }}|r||j                         k(  r|}t        | j                   j                         | j                  |            }|j                  dd       |dz   }	t        | j                  |            }
|
|	z  }||	z  }| j                   j                  j                  |   }| j!                  |t#        |      ||      }|s|j%                  ||||j&                  f        |r!|j)                  d|j+                  |             |S )Nbackend_startup_projectr   T)r   rJ  .vcxproj)r   r   optionsr   valuer   r   rc  re   get_basenamer   r   r   mkdirr   target_guidsgen_vcxprojrB   r9   for_machineinsertpop)r   rg   startup_projectr  startup_idxr   rE  r   outdirfname
target_dirrelnameprojfile_path	proj_uuid	generateds                  r2   r   zVs2010Backend.generate_projects  sc   **33;;IF_<`agg$&#,TZZ-?-?-E-E-G#H 	PQv?f6I6I6K#K  ..0##F+F LL$L5:%E!$"5"5f"=>J 5(G"UNM((11>>tDI((]1CYPZ[Iw	6;M;M NO	P$ OOAx||K89r4   c                   g }g }g }g }|D ]  }| j                   j                  |      r|j                  |       0| j                   j                  |      r|j                  |       ]| j                   j	                  |      r9|j                  |       | j                  |      }||vs|j                  |       | j                   j                  |      r|j                  |        ||||fS rc   )r   	is_headerr9   	is_object	is_sourcelang_from_source_file
is_library)r   srclistrV   headersr/  	languagesr   rm   s           r2   split_sourceszVs2010Backend.split_sources9  s    	 	"A))!,q!!!++A.q!!!++A.q!11!4y($$T*!!,,Q/ q!	" )33r4   c                   | j                  |      dk(  ryt        j                  j                  | j                  |            j	                  t        j
                        }t        j
                  j                  dgt        |      z        S )Nr   ..)r   r%   rG   normpathrS   sepr   r   )r   r   directoriess      r2   r   z"Vs2010Backend.target_to_build_rootO  se    v&",gg&&t':':6'BCII"&&Qvv{{D6C$4455r4   c                2    |D cg c]  }d|z  	 c}S c c}w )N"%s" )r   arrr   s      r2   r   zVs2010Backend.quote_argumentsV  s    $'(q
(((s   c                    t        j                  |d      }t        j                  |d|      }d|z  t        j                  |d      _        |sdt        j                  |d      _        y y )Nr   ProjectReferencer   {%s}ProjectfalseLinkLibraryDependenciesr   r   r   )r   rootincludeprojidlink_outputsigprefs          r2   add_project_referencez#Vs2010Backend.add_project_referenceY  s\    ]]4-}}R!3WE.4vodI&+ CJBMM$ 9:?	 r4   c                   |j                         |i}| j                  |      j                         D ]  }|j                         | j                  |j                            v r1| j	                  ||      }t
        j                  j                  ||j                         dz         }| j                  j                  j                  |j                            }| j                  |||        y )Nr|  )r   r3  r&  r   get_target_dir_relative_tor%   rG   r   r   r   r  r  )r   r  r   rn  rp  r   vcxprojtids           r2   add_target_depszVs2010Backend.add_target_depsc  s    }}/''4;;= 	;Czz|t77HH55c6BGggll7CJJL:,EFG""++88FC&&tWc:	;r4   Utility)conftype
target_exttarget_platformc                  t        j                  ddddd      }t        j                  |dddi      }|s| j                  }| j                  rt        j                         n| j                  g}	|	D ]W  }
t        j                  |d	d
|
dz   |z   i      }|
t        j                  |d      _        |t        j                  |d      _        Y t        j                  |dd      }t        j                  |d      }d|z  |_        t        j                  |d      }| j                  dz   |_        t        j                  |dd       t        j                  |dd      }|t        j                  |d      _        | j                  r%| j                  t        j                  |d      _        t        j                  |dd       t        j                  |d      }||_        | j                  spt        j                  |d      }||_        t        j                  |d      }||_        | j                  r%| j                  t        j                  |d      _        dt        j                  |d      _        d t        j                  |d!      _        d"t        j                  |d#      _        t        j                  |d      }t        j                  |d$      }| j                  |_        t        j                  |d%      }d&|_        t        j                  |d'      }|d(z   |_        t        j                  |d)      }||_        |r|t        j                  |d*      _        ||fS )+Nr  Build4.03http://schemas.microsoft.com/developer/msbuild/2003)DefaultTargetsToolsVersionxmlnsr   LabelProjectConfigurationsProjectConfigurationr   r^  Configurationr  PropertyGroupGlobalsr  ProjectGuidr  KeywordProjImportz,$(VCTargetsPath)\Microsoft.Cpp.Default.propsr  ConfigurationTypePlatformToolsetz$$(VCTargetsPath)\Microsoft.Cpp.propsProjectNameRootNamespaceWindowsTargetPlatformVersiontrueUseMultiToolTask	MultiByteCharacterSetr  UseOfMfc_ProjectFileVersionOutDirz.\IntDirr   
TargetName	TargetExt)r   Elementr   rN   r   r   rd   rk   r   r|   r}   ry   )r   target_nametemp_dirguidr  r  r  r  	confitemsrv  rk   prjconfglobalgroupguidelemkwtype_configpnamensrx  direlemfverr  intdirtnames                           r2   create_basic_projectz"Vs2010Backend.create_basic_projectn  s    zz)6;/d&f g MM$g?V5WX	"mmOUYUbUbh&O&O&Qimiwiwhx#4 	FImmI/E%.	C/0Q$RTG;DBMM'?386EBMM':.3		F mmD/K==m<]];	2--&(
dH.]^ mmD/Q?Gk#67<  AEAVAVBMM+'89> 	dH.UV k=9 
}}{O<B!BGk:6A$AF33RVRvRvk+IJOBHBMM+'9:?>IBMM+~6;:ABMM+z27 mmD/:G==*?@D11DI]]7H5FFK]]7H5F"T/FKMM'<8E$EJ;Eg{38k""r4   c           	        | j                  |j                  |j                         |      \  }}| j                  |      }|j                  s,t        |t        j                        sJ t        |      dk(  sJ t        |t        j                        rJ | j                  |      }| j                  |      \  }}}	| j                  |j                  d   |	dd  d|d      \  }
}| j                  |ddj                  | j                  |
            |       t        j                   |d	d
       | j#                  |       | j%                  ||       | j'                  t        j(                  |      |       y )Nr  r  r   r   T)r   r   verbose
run_targetr   )r   r  &$(VCTargetsPath)\Microsoft.Cpp.targetsr  )r  rE  r   r   commandr   r   AliasTargetr   get_run_target_enveval_custom_target_commandr   add_custom_buildr   r   r   r   add_regen_dependencyr  _prettyprint_vcxproj_xmlElementTree)r   r   ofnamer  r  r  depend_files
target_envr   cmd_rawwrapper_cmds              r2   gen_run_target_vcxprojz$Vs2010Backend.gen_run_target_vcxproj  sd   "77AG=A 8 C{ 33F;~~ fe&7&7888|$)))!&%*;*;<<<008J ;;FCMAq'!66v~~a7H'RSRT+GKQ[?C 7 ENK !!$chht?S?ST_?`6a'3 " 5
 	dH.WX!!$'T6*%%bnnT&:FCr4   c                   |j                   t        j                  u r| j                  }n| j                  }| j                  |j                  |j                         ||      \  }}d|_        | j                  |d      \  }}}	| j                  |d      }
t        j                  j                  | j                  j                         | j!                  |            }|j#                         }| j%                  |j&                  d   |	dd  |||j(                  r|d   nd |j*                  r|d   nd d|j,                  |j.                  	      \  }}|j0                  rK|| j3                  t        j                  j                  | j                  j5                         d            gz  }| j7                  |ddj                  | j9                  |            |d	d  |z   |
z   ||j0                   
       t;        j<                  |dd       | j?                  ||       | jA                  |       | jC                  ||       | jE                  t;        jF                  |      |       y )Nr  r  r  Tr   r   )r   extra_bdepsr   feedr   r   r  outofdate.filecustom_targetr   rR   )r   outputsverify_filesr  r  r  )$r  r   ri  r   rN   r  rE  r   absolute_pathsr  r   r%   rG   r   r   r   r    get_transitive_build_target_depsr   r  r   r  r   consolebuild_always_stalenonexistent_fileget_scratch_dirr  r   r   r   r   r  r  r  r  )r   r   r  r  rN   r  r  srcs
ofilenamesr   r  r   r  r  r   s                  r2   gen_custom_target_vcxprojz'Vs2010Backend.gen_custom_target_vcxproj  s,   !4!44**H}}H"77AG=AHP 8 R{ !%"&"A"A&$"Oz333FDA 77<< 0 0 > > @$BUBUV\B]^==?226>>!3Dc!"g;C?JLRNN:a=`dCI;;QTXCG7=zz;A>> 3 KQ $$400d>N>N>^>^>`1A2C D E EJdOSXXd>R>RS^>_5`#.rs#3d#:\#IS]/5/H/H+H 	 	J 	dH.WX//=!!$'T6*%%bnnT&:FCr4   c                   |j                   t        j                  u r| j                  }n| j                  }| j                  |j                  |j                         ||      \  }}t        j                  |dd       | j                  |      g|_        g |_        | j                  ||       | j                  |       | j                  ||       | j!                  t        j"                  |      |       y )Nr   r  r  r  )r  r   ri  r   rN   r  rE  r   r   r   compile_target_to_generatorr  rV   r   r  r  r  r  )r   r   r  r  rN   r  r  s          r2   gen_compile_target_vcxprojz(Vs2010Backend.gen_compile_target_vcxproj  s    !4!44**H}}H"77AG=AHP 8 R{ 	dH.WX <<VDE//=!!$'T6*%%bnnT&:FCr4   c                    |j                  d      d   }|t        j                  v ry|t        j                  v ryt	        d| d      )NrQ   rR   ccppz*Could not guess language from source file )rS   r   
c_suffixescpp_suffixesr   )clsrW   rX   s      r2   r  z#Vs2010Backend.lang_from_source_file  sK    iinR )&&&)(((I#aPQQr4   c                4    ||v r| j                  |||       y y rc   )use_pch)r   pch_sourcesrm   inc_cls       r2   add_pchzVs2010Backend.add_pch  s    ;LLdF3 r4   c                d    t        j                  |d      }d|_        | j                  |||       y )NPrecompiledHeaderCreater   r   r   add_pch_files)r   r  rm   r  pchs        r2   
create_pchzVs2010Backend.create_pch   s,    mmF$78;f5r4   c                    t        j                  |d      }d|_        | j                  |||      }t        j                  |d      }|dz   |_        y )Nr  UseForcedIncludeFilesz;%(ForcedIncludeFiles)r!  )r   r  rm   r  r#  headerpch_includes          r2   r  zVs2010Backend.use_pch%  sM    mmF$78##Kv>mmF,@A!$<<r4   c                   t         j                  j                  ||   d         }t        j                  |d      }||_        t        j                  |d      }d| d|_        t        j                  |d      }d| d|_        |S )Nr   PrecompiledHeaderFilePrecompiledHeaderOutputFilez$(IntDir)$(TargetName)-z.pchProgramDataBaseFileName.pdb)r%   rG   rM  r   r   r   )r   r  rm   r  r(  pch_filepch_outpch_pdbs           r2   r"  zVs2010Backend.add_pch_files,  s    !!+d"3A"67==)@A --(EF0d;
 --(AB0d;r4   c                T    |dd  j                  d      ry|dd  j                  d      S )Nr   	fsanitizeTMr7   )r   entrys     r2   "is_argument_with_msbuild_xml_entryz0Vs2010Backend.is_argument_with_msbuild_xml_entryC  s2     9,QRy##C((r4   c                   g }||   j                         D ]K  }| j                  |      r|dk(  r|j                  |       ,|j                  | j                  |             M dj	                  |      t        j                  |d      _        y )N%(AdditionalOptions)r   AdditionalOptions)	to_nativer7  r9   escape_additional_optionr   r   r   r   )r   rm   r   	file_argsr:   r<   s         r2   add_additional_optionsz$Vs2010Backend.add_additional_optionsK  s    T?,,. 	@C66s;,,C D99#>?	@ @Cxx~k#67<r4   c                R   |j                  d      d   }t        j                  j                  j                  |d       }||j	                         v rt        j                         D ]n  }||   |   \  }}	}
d| d| d}|t        j                  |d|      _	        |	t        j                  |d|      _	        |
t        j                  |d	|      _	        p y d
t        j                  |d      _	        dt        j                  |d      _	        dt        j                  |d	      _	        y )NrQ   rR   !'$(Configuration)|$(Platform)'=='r^  'PreprocessorDefinitions	ConditionAdditionalIncludeDirectoriesr:  z$(NMakePreprocessorDefinitions)z$(NMakeIncludeSearchPath)z$(AdditionalOptions))
rS   r   rU   r  re  r   rd   r   r   r   )r   r   rW   rj   rN   rX   rm   rk   defspathsopts	conditions               r2   $add_project_nmake_defs_incs_and_optsz2Vs2010Backend.add_project_nmake_defs_incs_and_optsW  s    iinR ""1155c4@9>>@@ &FFH a	&LT&RS\&]#udB9+QxjXZ[	bfk+DPYZ_glk+IU^_d\`k+>)TYa JkBMM+'@AFNiBMM+'EFKCYBMM+':;@r4   c                    g }||   D ]9  }|dk(  r|j                  |       |j                  | j                  |             ; dj                  |      t        j                  |d      _        y )N%(PreprocessorDefinitions)r   rB  )r9   escape_preprocessor_definer   r   r   r   )r   rm   r   file_definesdefinesdefines         r2   add_preprocessor_definesz&Vs2010Backend.add_preprocessor_definest  sj    "4( 	HF55v&t>>vFG		H
 FIXXgEVk#<=Br4   c                b    ||   }dj                  |      t        j                  |d      _        y )Nr   rE  )r   r   r   r   )r   rm   r   file_inc_dirsdirss        r2   add_include_dirszVs2010Backend.add_include_dirs}  s)    T"JM((SW.k#ABGr4   c                `    t         j                  ddddddddd	      }| j                  |      S )
N%25%24%40%27%3B%3F%2Az\\)%$@rA  r   ?*r   )rB   	maketrans	translate)rP  tables     r2   rM  z(Vs2010Backend.escape_preprocessor_define  s>     EE$)E &,- . &&r4   c                    t         j                  ddddddddd	      }| j                  |      } | j                  d
      r| d
z  } d|  dS )NrW  rX  rY  rZ  r[  r\  r]  z%20)r^  r_  r`  rA  r   ra  rb  r   r   r  )rB   rc  rd  endswith)optionre  s     r2   r<  z&Vs2010Backend.escape_additional_option  s`     EE$)ETY[ \!!%(
 ??4 dNF6(!}r4   c                z   g }g }g }| D ]  }|j                  d      r,|dd }||v r|j                  |       |j                  |       @|j                  d      r|j                  |       c|j                  d      s|j                  d      r||vs|j                  |       |j                  |        |||fS )z
        Split a list of link arguments into three lists:
        * library search paths
        * library filenames (or paths)
        * other link arguments
        z	/LIBPATH:	   N)r   -z.libz.a)r7   remover9   rg  )r:   lpathslibsotherr<   lpaths         r2   split_link_argszVs2010Backend.split_link_args  s      	"C~~k*AB
 F?MM%(e$
+S! f%d);d?KK$S!'	"( tU""r4   c                2   |j                   j                         D ]  \  }}|dv s|c S  t        |j                        dkD  rK| j                  j
                  j                   |j                     j                         D ]  \  }}|dv s|c S  t        d      )N>   r  r  r   zGCould not find a C or C++ compiler. MSVC can only build C/C++ projects.)r   re   r   r/  r   r   r  r   )r   r   rm   r  s       r2   _get_cl_compilerzVs2010Backend._get_cl_compiler  s    ''--/ 	GD!|#	
 v~~"++44>>v?Q?QRXXZ a<'H fggr4   c                $   |dz   }|j                  |dd       t        j                  j                  j	                  |      }t        |dd      5 }|j                  |j                                d d d        t        ||       y # 1 sw Y   xY w)NrT  r
  T)r  xml_declarationr	  r  )rH  xmldomminidomparser  toprettyxmlr   )r   treer  
ofname_tmpdocr   s         r2   r  z&Vs2010Backend._prettyprint_vcxproj_xml  sw    c\


:
F ggoo##J/*cG4 	(HHS__&'	(VZ0	( 	(s    BBc                V   g }g }g }	|j                   j                         D 
ci c]  \  }
}|
|j                          }}
}|j                   D 
ci c]  }
|
g  }}
|j                   D 
ci c]  }
|
g  }}
|j                   j                         D ]c  \  }
}|
|v s||
xx   t        j                  |j	                         |      z  cc<   ||
xx   |j                  |j	                               z  cc<   e | j                  j                  |j                     j                  |j                  i       j                         D ]  \  }
}|
|v s||
xx   |z  cc<    | j                  j                  |j                     j                         D ]  \  }
}|
|v s||
xx   |z  cc<    |j                         D ]4  }
||
xx   |j                  t        d|j                  |
            z  cc<   6 |j                         D ]^  }|g dz  }||D cg c]  }d|z   	 c}z  }t!        |j#                               D ]!  }t!        |j%                               D ]  }t&        j(                  j+                  |j-                         |      }	 |j/                  dt&        j(                  j+                  ||      z          |j/                  d| j1                  ||j2                        z           |j9                         D ]^  }t&        j(                  j+                  |j-                         |      }|j/                  d| j1                  ||j2                        z          ` $ a |j:                  j                         D ]  \  }
}|
|v s||
xx   |z  cc<    |j                         D ]\  }| j1                  | j=                  |      | j?                  |            g}|j@                  r|d|gz  }||D cg c]  }d|z   	 c}z  }^ |j                         D ]  \  }
}|d d  D ]  }|jC                  d      s|dk(  r>||
   jE                  |       |dk(  r|}n|dd  }|||
   vsB||
   j/                  |       W|jC                  d	      s|d
k(  sn||
   jE                  |       |d
k(  r|}n|dd  }|||
   vr||
   j/                  |       ||	vs|	j/                  |         t!        |jG                               D ]  }|jH                  dk7  s|jK                  |jM                               }|D ]}  }|jC                  d      r,|dd  }||v r|jE                  |       |j/                  |       @|jC                  d	      r|dd  }||	vs[|	j/                  |       m|j/                  |         d|v r|j/                  d       ||f||f|	|ffS c c}}
w c c}
w c c}
w c c}w # t4        $ r5 |j/                  dt&        j(                  j7                  |      z          Y w xY wc c}w )Nr:   machinerm   )r9  rL  %(AdditionalIncludeDirectories)-IrQ   z-Dz/DrL  r
   )r  /Ir  openmpz/Gw)'r   re   compiler_argsget_base_compile_argsget_optionsget_option_compile_argsr   projects_argsr  r  
subprojectglobal_argsre  r   r   r&  rC  get_include_dirsget_incdirsr%   rG   r   
get_curdirr9   r   r   
ValueErrorr  get_extra_build_dirs
extra_argsr   r   implicit_include_directoriesr7   rl  get_external_depsrE  unix_args_to_nativeget_compile_args)r   r   compilergenerated_files_include_dirsproj_to_src_rootproj_to_src_dirrn   target_argstarget_definestarget_inc_dirslr  r=  rN  rS  compr:   r<   r8  r   curdir
t_inc_dirsrP  inc_dird_compile_argss                            r2   get_args_defines_and_inc_dirsz+Vs2010Backend.get_args_defines_and_inc_dirs  s    RXQaQaQgQgQi/jA1??3D0D/j	/j'-'7'78!288(.(8(891B99 ''--/ 	*GAtI~!	 ? ?&&($!0 0! < <&&(!* *		* zz//0B0BCGGHYHY[]^ddf 	%GAtI~!$	%
 zz--f.@.@AGGI 	%GAtI~!$	%
 ! 	eAaLF--iHZHZab.cddL	e$$& !	LD mmD +GHCTCZHHD f5578 L!!--/2 EAWW\\!,,.!<FED277<<8H&+Q$QRD4<<+N$NOE //1 LAWW\\!,,.!<FKKt||FFMM'J JKLL)!	LH ((..0 	%GAtI~!$	%
 $$& 	7D,,t'B'B6'J'+':':6'BD EJ22sO44
:6CTCZ66D	7 !( 	8GAtAw 8>>,/3:V3VaL'',::!$!$QR\!_4$Q..v6^^L1S<]5]aL'',??"%"%ab'mA&66%a(//8o5'..w7/8	88 &2245 	0A vv!!)!=!=a>P>P>R!S) 0C~~l3!$QR!^3*11&9&--f55"%ab'"/9+227;#**3/0	0( Ju%Y'.,)G/[hIiii} 0k89< I* & ED277+;+;F+C$CDE$ 7s0   W
W*
WW A W%/X&%:X#	"X#	c                    | j                  |      }|| j                  |      z  }|| j                  |      z  }|| j                  |      z  }|S rc   )get_buildtype_argsget_optimization_argsget_debug_argssanitizer_compile_args)r  rk   optimization_levelr   r   rn   s         r2   get_build_argszVs2010Backend.get_build_args\  sX    00;
h445GHH
h--e44
h55h??
r4   c                    g d}d}d}d}| D ]e  j                  d      r|dd  dz   z  } t        fd|D        d       }|r|t        |      d  dz   z  }Lj                  d      s^|d	z   z  }g |||fS )
N)r  r  z-isystemz/clang:-isystemz/imsvcz/external:Ir   z,$(VC_IncludePath);$(WindowsSDK_IncludePath);r  r
   r   c              3  F   K   | ]  }j                  |      s|  y wrc   r5  ).0optr<   s     r2   	<genexpr>z6Vs2010Backend._extract_nmake_fields.<locals>.<genexpr>  s     !\#WZH[#!\s   !!)rk  r   r   )r7   rD  r   )rl   include_dir_optionsrF  rG  additional_opts	opt_matchr<   s         @r2   rf   z#Vs2010Backend._extract_nmake_fieldsn  s    
 >& 	1C~~l+AB#% !\1D!\^bc	SY1C77E^^J/#sSy0O	1 e_--r4   c                    t        j                         } t        |       dk(  st        |       dk(  sJ t        j                  j                  | d         }t        j                  j                  | d         }t        |       dk7  r6|d| d   z   dz   z  }|dt        j                  j                  | d         z   z  }|dz  }||fS )Nr   r
   r   z "r  r   z;C:\Windows\system32;C:\Windows)r   get_meson_commandr   r%   rG   dirnamerM  )meson_cmd_listexe_search_pathsnmake_base_meson_commands      r2   1get_nmake_base_meson_command_and_exe_search_pathsz?Vs2010Backend.get_nmake_base_meson_command_and_exe_search_paths  s    !335N#q(c..AQ.FGG 77??>!+<=#%77#3#3N14E#F ~!#
 %q0A(AD(HH$bggoonQ6G&H HH& 	@@ )*:;;r4   c           
        t        j                  |dd       t        j                  |dd       t        j                  |dd      }t        j                  |dddd	d
       t        j                  |dd       t        j                         \  }	}
t        j
                  j                  |d      }t        j                         }|D ]  }t        j                  |dd| d| d      }t        j
                  j                  | j                        \  }}|d d |z   }t        t        j
                  j                  ||            }| dt        j                  |d      _        | dt        j                  |d      _        |	 d| dt        j                  |d      _        d|j                   | t        j                  |d      _        ||   |j                            }|	 d| d|	 d| dt        j                  |d      _        |	 d| dt        j                  |d      _        |
t        j                  |d      _        |ro||   }t        j                  |      \  }}}|t        j                  |d       _        |t        j                  |d!      _        |t        j                  |d"      _        t        j                  |d#       t        j                  |d$       t        j                  |d%       t        j                  |d&       t        j                  |d'       t        j                  |d(       t        j                  |d)        y )*NImportGroupExtensionSettingsr  SharedPropertySheetsr  z3$(UserRootDir)\Microsoft.Cpp.$(Platform).user.propsz=exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')LocalAppDataPlatform)r  rD  r  r  
UserMacrosr  r@  r^  rA  rC  r   r  r  z compile -C "r  NMakeBuildCommandLine	$(OutDir)NMakeOutputz" --clean && NMakeReBuildCommandLinez	" --cleanNMakeCleanCommandLineExecutablePathNMakePreprocessorDefinitionsNMakeIncludeSearchPathr:  IncludePathExternalIncludePathReferencePathLibraryPathLibraryWPath
SourcePathExcludePath)r   r   r-   r  r%   rG   r   r   rd   rS   src_to_buildrB   r   rE  r   rf   )r   r  rN   r  rg   r   proj_to_build_rootri   prop_sheets_grpr  r  )proj_to_multiconfigured_builds_parent_dirrv  rk   per_config_prop_groupr   build_dir_tailmeson_build_dir_for_buildtypeproj_to_build_dir_for_buildtyperl   primary_src_type_build_argspreproc_defs	inc_pathsother_compile_optss                           r2   &add_gen_lite_makefile_vcxproj_elementsz4Vs2010Backend.add_gen_lite_makefile_vcxproj_elements  s    	dM1DE
dM:--mCST
ox=s?;Q24 	5 	dO<@7D7v7v7x4	!#3 57GGLLASUY4Z1 '/&O&O&Q#4 '	@I$&MM$Uy  {D  zE  EF  GO  FP  PR  TS  %T!"$''--0A0A"BQ,:3B,?),K).1"'',,?h  kH  3I  /J+EdDeegBhBMM/:?EdDeegBhBMM/:?TlSmmz  |[  {\  \]  R^BMM/1HINIRSYS^S^R_`j_kGlBMM/?D",Y"7"H WoUoo|  ~]  }^  ^k  lD  kE  ER  Sr  Rs  st  TuBMM/1JKPTlSmmz  |[  {\  \e  RfBMM/1HINJZBMM/1ABG.ABR.S+>K>a>ab}>~;i);\h35STYV_35MNSQc35HIN MM/?MM/1FGMM/AMM/?MM/@MM/>MM/?O'	@r4   c           
         | j                  |      }|j                  | j                        }| j                  |      }dt	        j
                  |d      _        dt	        j
                  |d      _        d|v rdt	        j
                  |d      _        t	        j
                  |d      }t	        j
                  |d      }d	d
 |j                         D        v rdt	        j
                  |d      _        |j                  t        d            }|j                  || j                        }|dk(  r7dt	        j
                  |d      _        dt	        j
                  |d      _        n|dk(  r7dt	        j
                  |d      _        dt	        j
                  |d      _        nr|dk(  r7dt	        j
                  |d      _        dt	        j
                  |d      _        n6dt	        j
                  |d      _        dt	        j
                  |d      _        d|v rdt	        j
                  |d      _        d|v rdt	        j
                  |d      _        n[d|v rdt	        j
                  |d      _        n;d|v rdt	        j
                  |d      _        nd t	        j
                  |d      _        d!|v rd"t	        j
                  |d      _        n?d#|v rd$t	        j
                  |d      _        nd%|v rd&t	        j
                  |d      _        d'|j                  v r|j                  t        d(|j                  d')            }|d*k(  rd+t	        j
                  |d,      _        n]|d-k(  rd.t	        j
                  |d,      _        n<|d/k(  rdt	        j
                  |d,      _        nd0t	        j
                  |d,      _        t        |      d1kD  r;|j                  d2       d3j                  |      t	        j
                  |d4      _        d5j                  |	      t	        j
                  |d6      _        |j                  d7       d5j                  |      t	        j
                  |d8      _        dt	        j
                  |d9      _        t!        j"                  d:|j                  t        d;                  }|d<k(  rd=nd>t%        d?t'        |      z         z   }|t	        j
                  |d@      _        |j                  t        dA            rdt	        j
                  |dB      _        t)        |      }dC|v rdDt	        j
                  |dE      _        n_dF|v rdGt	        j
                  |dE      _        n?dH|v rdIt	        j
                  |dE      _        ndJ|v rdKt	        j
                  |dE      _        dL|v rdt	        j
                  |dM      _        dN|v rdOt	        j
                  |dP      _        ndQ|v rdRt	        j
                  |dP      _        dS|v sdH|v rdTt	        j
                  |dU      _        ndJ|vrdVt	        j
                  |dU      _        | j+                  |
|       t	        j
                  |dW      }t	        j
                  |d8       t	        j
                  |dX      }|j-                         }||j                  | j                        z  }| j.                  r| j1                  |       ndt	        j
                  |dY      _        t3        |t4        j6                        st3        |t4        j8                        r"||j;                  |j=                               z  }|| j4                  j?                  ||j@                  |j                        z  }|| j4                  jC                  ||j                        z  }|| jD                  jF                  jI                  |j                  |jK                               z  }||jL                  z  }|j                         D ]L  }|jN                  dZk(  rdt	        j
                  |d      _        .|jQ                  |jS                                N |jU                         D ]|  }t3        |t4        j6                        s|j                         D ]L  }|jN                  dZk(  rdt	        j
                  |d      _        .|jQ                  |jS                                N ~ ||jW                  |j=                               z  }| jY                  |j[                               \  }}}|jU                         D ]  }t3        |t4        j\                        r|}n'| j4                  j^                  |ja                            }tb        jd                  j                  || jg                  |            }||jh                  v rr|jj                  d[k(  rtm        |jn                  d\      rr|jq                  d]      }|jr                  D ]  } | ju                         D ]z  }!| jD                  jw                  |!      s| jy                  || |!      }"d^tb        jd                  j{                  |"      d?   d?d  z   }#|j                  |"d t        |#        d_z          |  |j|                  D ]  }!d }$| jD                  jw                  |!      s!| j                  ||!      }$| j                  | j                  |      | j                  |            }%tb        jd                  j                  |%|$      }&|j                  |&        |j                  | j                  |             n||j                  |      z  }| j                  ||      }'tb        jd                  j                  |'|ja                         d`z         }(| jD                  jF                  j                  |ja                            })| j                  ||(|)d	a       | j                  |ja                            j                  |ja                                ||vs|j                  |        | j                  |      D ]2  }*|j                  | j                  |*| j                  |                   4 t        |      d1kD  r;|j                  d2       d3j                  |      t	        j
                  |d4      _        t        |      d1kD  r<|j                  d1db       d5j                  |      t	        j
                  |dc      _        t        |      d1kD  r;|j                  dd       d5j                  |      t	        j
                  |de      _        t	        j
                  |df      }+dg|j                          |+_        t	        j
                  |dh      },||,_        t3        |t4        j                  t4        j                  f      r9|j                         r)|j                         t	        j
                  |di      _        t3        |t4        j                  t4        j                  f      rj|j                  r^tb        jd                  j                  ||j                  j                  | j                              }-|-t	        j
                  |dj      _        | j.                  r+t	        j
                  |dk      }.dg|jN                   dl|._        t	        j
                  |dm      }/|j                  t        j                  u r|j                         }0n| j                  j                         }0|0dnk(  rdo|/_        nM|0dpk(  st        |0      rdq|/_        n5|0drk(  rds|/_        n(|0dtk(  rdu|/_        n|0dvk(  rdw|/_        nt        dx|0z         dt	        j
                  |dy      _        |j                  t        dz            sdt	        j
                  |d{      _        y y )|Nr  WholeProgramOptimizationDefaultBasicRuntimeChecksz/INCREMENTAL:NOLinkIncrementalItemDefinitionGroup	ClCompileTc              3  :   K   | ]  }|j                   d k(    yw)r  N)rE  )r  rp  s     r2   r  zBVs2010Backend.add_non_makefile_vcxproj_elements.<locals>.<genexpr>  s     QsSXX)Qs   r  OpenMPSupportb_vscrtmddUseDebugLibrariesMultiThreadedDebugDLLRuntimeLibrarymtMultiThreadedmtdMultiThreadedDebugMultiThreadedDLLz/fsanitize=address
EnableASANz/ZIEditAndContinueDebugInformationFormatz/ZiProgramDatabasez/Z7OldStyleNonez/RTC1EnableFastChecksz/RTCuUninitializedLocalUsageCheckz/RTCsStackFrameRuntimeCheckr  ehr  aAsyncExceptionHandlings
SyncCThrowr   Syncr   r9  r   r:  r   rE  rL  rB  FunctionLevelLinkingrB   warning_level
everythingEnableAllWarningsLevelr   WarningLevelwerrorTreatWarningAsErrorz/OxFullOptimizationz/O2MaxSpeedz/O1MinSpacez/OdDisabledz/OiIntrinsicFunctionsz/Ob1OnlyExplicitInlineInlineFunctionExpansionz/Ob2AnySuitablez/OsSizeFavorSizeOrSpeedSpeedResourceCompileLinkGenerateDebugInformationr  msvcz<19.00.23918FrQ   .objr|  )r  z%(AdditionalLibraryDirectories)AdditionalLibraryDirectoriesz%(AdditionalDependencies)AdditionalDependencies
OutputFiler  	SubSystemImportLibraryModuleDefinitionFiler-  r.  TargetMachinewin32
MachineX86r   
MachineX64r   
MachineARMr   MachineARM64r   MachineARM64ECz*Unsupported Visual Studio target machine: SuppressStartupBannerr   SetChecksum)Yrs  get_buildtype_linker_argsrk   r   r   r   r   r  r   r   get_crt_valr   r  r   r9   r   TcastrB   intr?   generate_lang_standard_infor  r   generate_debug_informationr   r   StaticLibrarySharedModuleget_std_shared_module_link_argsr  get_project_link_argsr  get_global_link_argsr   r   get_external_link_argsget_language	link_argsrE  extend_directget_link_argsr*  get_option_link_argsrq  r;  r   rc  r   r%   rG   get_target_filename_for_linkingr-  idr   versionextract_all_objectsr   r   r  get_target_generated_dirsplitextr  object_filename_from_sourcer   r   r   extendflatten_object_listget_link_whole_forr  r  r  r   $get_custom_target_provided_librariesr  get_filenameSharedLibraryr0  get_import_filenamevs_module_defsr   r   r   ri  r   rN   rO   r   )1r   r  r  r   rN   	subsystemrn   r  r  r  r=  r  buildtype_link_argsr   compilesclconf
vscrt_type	vscrt_valr  r  r;   resourcecompilelinkextra_link_argsrp  r8  additional_libpathsadditional_linksr5  lobjlinknamer  genrW   rG   gen_src_extobj_basenamer   rel_objtrelpathtvcxprojr  librI  subsysr   pdbtargetmachinetargetplatforms1                                                    r2   !add_non_makefile_vcxproj_elementsz/Vs2010Backend.add_non_makefile_vcxproj_elements  s`    ((0&@@P ((0 GNk#=>C@Ik#78= 33AHBMM+'89> =='<=x5Qf6N6N6PQQ:@BMM&/27&&y';<
((T^^D	CIBMM+':;@;RBMM&"238$CJBMM+':;@;JBMM&"238%CIBMM+':;@;OBMM&"238CJBMM+':;@;MBMM&"238:-<BBMM+|49JCTBMM&":;@j CTBMM&":;@j CMBMM&":;@CIBMM&":;@j ?QBMM&"67<
"?]BMM&"67<
"?WBMM&"67< F$$$""9T6;M;MTY#Z[BSyBIf&9:?sBNf&9:?vBIf&9:?BHf&9:?{a56>Ahh{>SBMM&"56;EHXXoE^f<=B:;@C@Xf78==Cf45:uf&7&7	/8R&ST/</L+RY\_`adghudv`v\wRw5Bfn-2Yx01@FBMM&"78=$Z0G9?BMM&.16g9CBMM&.16g9CBMM&.16g9CBMM&.16G?EBMM&"67<WDXBMM&";<AwDQBMM&";<AGu/=CBMM&"45:'!=DBMM&"45:((F;--2CD
o'@A }}Xv."002 	8==dnnMM::++D1CJBMM$ :;@&%"5"56&%"4"458#K#KFL^L^L`#aatzz??&J[J[]c]o]oppO tzz>>xI[I[\\O t//88OO""H$9$9$; = =O v///O//1 G 88x'BHBMM&/:?#11#2C2C2EFG ,,. Oa!4!45 224 O88x/JPBMM&/BG+99#:K:K:MN	OO 	8889K9K9MNNCGCWCWXgXqXqXsCt@	. ((* 0	6A!U445zz))!((*5ww||D$*N*Nt*TUHF---;;&(_X=M=M~-^--e4A  !yy Z#&??#4 ZC#//99#>'+'D'DQS'Q.1BGG4D4DT4J14Mab4Q.Q / 6 6t<Nc+>N=N7ORX7X Y	ZZ  !yy <'+++55c:+/+K+KAs+SL15d>Y>YZ[>\>B>Q>QRS>T2V.&(ggll3E|&TG+227;< $**4+C+CA+FG $x'B'B8'LLO  ::1fE77<<!((*z2IJ&&//<<QXXZH**43T*R ((9@@L #33$++H5a0	6b <<VD 	TC##DLLd6I6I&6Q$RS	T !#""#9:<?HH_<UBMM$ 349"#a'&&q*KLGJxxPcGdBMM$ >?D 1$##$?@ADJZA[BMM$ 89>dL1 !4!4!6 78
t[1fu22E4D4DEF6KeKeKg 9?8R8R8TBMM$05fu22E4D4DEF$$'',,tV-B-B-R-RSWSdSd-efCJd$:;@::--&?@C"6;;-t4CHdO<!4!44%^^-N!]]002NW$!-Mu$(<^(L!-Mu$!-Mw&!/My(!1M !MP^!^__<Bd349  7!346<BMM$.3 5r4   c                   t         j                  j                  | j                        \  }}|d d t	        j
                         d   z   }| j                  |      }t         j                  j                  |d      }t        t         j                  j                  ||            }t         j                  j                  t         j                  j                  || j                  |                  }	t        |      D ]E  \  }
}t         j                  j                  t         j                  j                  |	|            ||
<   G y )Nr  r   r  )r%   rG   rS   r  r   rd   r   r   rB   r  r   r   )r   	gen_filesr   r   r  r  r  r  r  $relocate_to_concrete_builddir_targetidx	file_paths               r2   3relocate_generated_file_paths_to_concrete_build_dirzAVs2010Backend.relocate_generated_file_paths_to_concrete_build_dir  s    ggmmD,=,=>N(6s(;h>g>g>ijk>l(l%!66v>46GGLLASUY4Z1*-bggll;d  gD  /E  +F'/1ww/?/?Mlnr  oB  oB  CI  oJ  AK  0L,'	2 	mNCWW--bggll;_aj.klIcN	mr4   c                H   t        j                  d|j                   d       d}g | j                  |j	                         <   | j
                  rt        |t        j                        syd}nt        |t        j                        r!d}|j                  j                  d      d   }nt        |t        j                        rd	}nt        |t        j                        rd
}nt        |t        j                        r| j                  |||       yt        |t        j                         r| j#                  |||       yt        |t        j$                        r| j'                  |||       yt)        d|j+                                | j-                  |j.                        \  }}}	}
|j0                  r| j3                  ||      }|j4                  t6        j8                  u r| j:                  }n| j<                  }t>        j@                  jC                  |jE                               }| jG                  |d   |j	                         |||d   |      \  }}| jI                  ||      \  }}}| j-                  |      \  }}}}| j-                  |      \  }}}}||z  }||z  }| jK                  |      }tL        jO                  || jP                  | jR                  | j                  | jT                        }t        |t        j                  t        j                  t        j                  t        jV                  f      sJ d       | jY                  |      }t>        j@                  j[                  || j\                        }t>        j@                  j[                  || j_                  |            }| ja                  ||||||      \  \  }} \  }!}"\  }#}$| j
                  r5|J tc        |j.                  |      }%| je                  |||d   ||||%       n| jg                  ||||||||!|#| 
       ti        jj                  |d      }&ti        jj                  |&dt>        j@                  j[                  |tl                     d }'i }(| jo                  |      rdD ]  })|jq                  |)      }*|*s|jr                  dk(  rtu        |*      dk(  rut>        j@                  j[                  || jw                  ||)|*d               }+t>        j@                  jy                  t>        j@                  j[                  ||*d               },n%t>        j@                  j[                  ||*d         }+d },|*d   |+|)|,g|(|)<   |*d   d |)d g|(|)<    g }-tu        |      tu        |      z   tu        |jz                        z   tu        |(      z   dkD  r| j
                  r|r| j}                  ||       ti        jj                  |d      }.|D ]]  }/t>        j@                  j[                  ||/j                  | j\                              }0 |'|0|-      sFti        jj                  |.d|0       _ |D ]$  }/ |'|/|-      sti        jj                  |.d|/       & |jz                  D ]]  }/t>        j@                  j[                  ||/j                  | j\                              }0 |'|0|-      sFti        jj                  |.d|0       _ |(j                         D ]G  }t>        j@                  j[                  ||d         }1 |'|1|-      s0ti        jj                  |.d|1       I g }2tu        |      tu        |      z   tu        |(      z   dkD  r?| j
                  r/t        ||j	                         %      }3|r| j}                  ||       ti        jj                  |d      }4|D ]  }5t>        j@                  j[                  ||5j                  | j\                              }0 |'|0|2      sGti        jj                  |4d|0      }6| j
                  r| j                  |6|03|       tL        j                  |5      })| j                  |(|)|6       | j                  |)|6|        | j                  |)|6|"       | j                  |)|6|$       d| j                  ||5      z   ti        jj                  |6d      _I         |D ]  }5 |'|5|2      sti        jj                  |4d|5      }6| j
                  r| j                  |6|53|       FtL        j                  |5      })| j                  |(|)|6       | j                  |)|6|        | j                  |)|6|"       | j                  |)|6|$       t        j                  |j                         |5      }5d| j                  ||5      z   ti        jj                  |6d      _I         |(j                         D ]  \  })}|d   }7|7s |'|7|2      sti        jj                  |4d|7      }6| j                  |(|)|6       | j
                  r| j                  |6|73|       d| j                  |)|6|        | j                  |)|6|"       |(|)   d   },|,r"t        j                  |$      }8|,g|8|)   z   |8|)<   n|$}8| j                  |)|6|8        g }9| j                  ||      d   D ]%  }:t        |:t              sJ |9j                  |:       ' |D ]  }:|9j                  |:        |D ;cg c]  };|;j                  d      r|; }<};g }=tu        |	      tu        |9      z   tu        |<      z   dkD  rti        jj                  |d      }>|	D ]]  }5t>        j@                  j[                  ||5j                  | j\                              }0 |'|0|=      sFti        jj                  |>d|0       _ |9|<z   D ]$  }5 |'|5|=      sti        jj                  |>d|5       & ti        jj                  |dd       | j                  |       | j
                  s| j                  ||       | j                  ti        j                  |      |       | j                  j                  j                  t        d             d!k(  r| j                  ||       yc c};w )"NzGenerating vcxproj rQ   WindowsFMakefileApplication,r   r1  DynamicLibraryTzUnknown target type for r   )r  r  r  r  r  zfor mypyr   r  r   c                    t         j                  j                  t         j                  j                  |             }||vr|j	                  |       yy)NTF)r%   rG   normcaser  r9   )rG   lis
normalizeds      r2   path_normalize_addz5Vs2010Backend.gen_vcxproj.<locals>.path_normalize_adds  s?    ))"''*:*:4*@AJ$

:&r4   )r  r  r  	CLInclude	CLCompile	$(IntDir)ObjectFileNamer`  )r  z.resObjectr  r  r  rU  rV  )^r   r   rE  r   r   r   r   r   r+  r0  win_subsystemrS   r1  rH  r   r  r)  r  CompileTargetr  r   r  r  rV   is_unitygenerate_unity_filesr  r   ri  r   rN   r%   rG   rA  rG  r  r   rs  r-   r  rk   r   r   r2  r   r   r   r   r  ra   r  rc  r   r   r   target_uses_pchget_pchr=  r   create_msvc_pch_implementationr  extra_filesri  r   r&  rr   rJ  r  r  r>  rQ  rU  rB  r   r   from_built_file
get_subdirre   r$  copydeepcopyrD  rB   r9   rg  r  r  r  r  r   r   r   r   gen_vcxproj_filters)?r   r   r  r  rg   rK  r  rV   r  r/  
_languagesrN   	tfilenamer  r  generated_filesr   r  gen_srcgen_hdrsgen_objs
_gen_langs
custom_srccustom_hdrscustom_objs_custom_langsr  rn   r  r  r  r  r=  r  rN  r  rS  ri   meson_file_grouprt  r  rm   r#  rW   pch_header_dirprevious_includesinc_hdrshr   rG   previous_sourcesrj   inc_srcr  r  implinc_dirsadditional_objectsr#  objexplicit_link_gen_objsprevious_objectsinc_objss?                                                                  r2   r  zVs2010Backend.gen_vcxproj  s   

(Q78	46  1==fe&7&78
 !H 0 01$H ,,2237:I 3 34&H 3 34'H 2 23**664@0''= 3 34++FFDA #;F<O<O<Q;R!STT262D2DV^^2T/'7J??//@G!4!44**H}}HGG$$V%8%8%:;	"77	!AG=AAICLQ<HP 8 R{ UYT{T{DUQ35Q484F4F4W1(Hj@D@R@RSm@n=[+}:K((0"11(DNNDL]L]_c_i_ikokxkxy
&5#3#3U5H5H%J]J]_d_q_q"rsus!66v>77<<(:D<M<MN'',,'79L9LV9TUei  fH  fHH:<Lo_ifkb i"@><Bb?Ta ==)))6v~~zR77h	RSV`bhj|  O  P224fhXacmoz  }K  M\  ^g  h=={;
&_Vd8ef	 '$ CnnT*;;&(3x1} ggll+=t?b?bcikoqtuvqw?xy)+oWZ[\W]9^)_ ggll?CFC)-),QdN(KK% *-QtT(BK%!C$ w<#h-'#f.@.@*AACDTTWXX}} HHSYZ}}T;7H J'',,'91;L;LTM^M^;_`%g/@AMM(KIJ  D%a):;MM(KCD '' J'',,'91;L;LTM^M^;_`%g/@AMM(KIJ '--/ Gww||OWQZ@%d,=>MM(KFG
 w<#g,&[)99A=}}9aMMO$:&6  LLWV\]mmD+6G H'',,'91;L;LTM^M^;_`%g/?@]]7KQF}}AA&'Sy  |D  E,BB1E[$?33D&)L55dFLQ--dFMJGR <<VQGHHf.>?DH  H%a)9:]]7KKF}}AA&!Msu}~,BB1E[$?33D&)L55dFLQ--dFMJ 001B1B1DaHGR <<VQGHHf.>?DH "-!2!2!4 Fgqz.t5EF]]7KNFOOKv>}}AA&$Pv  yA  B33D&)L55dFLQ)4T):1)=)'+}}]'CH.<-=-NHTN'4H--dFHE!F&  ))&2DEaH 	)Aa%%%%%a(	)  	)A%%a(	)
 2:!`#N^A_#!`!`w<#011C8N4OORSS}}T;7H G'',,'91;L;LTM^M^;_`%g/?@MM(HgFG (*@@ A%a)9:MM(Ha@A 	dH.WX!!$'}}   v.%%bnnT&:FC$$//	(0CDP$$VV4/ "as   rrc                2    t        j                  dddd      }t        j                  |d      }t        j                  |d      t        j                  dj
                   d        fdi j                  j                  z   }|D ]<  }t        j                  j                  |j                        r- |      }|s8d	|<   > D ]  }|}d	}	|rWt        j                  j                  |      }
|	d	k(  r|
}	n|
|v rd
ndz   |	z   }	t        j                  j                  |      }|rW|	d	k7  sf|	|<   t        j                  |dd|	i      }t        j                  |d      }dt        t        j                                j#                         z   dz   |_          j'                  |      \  }}}} j)                         fd} |d|        |d|        |d|        j+                  t        j,                  |      |dz          y )Nr  r  r  )r  r  r   zGenerating vcxproj filters rQ   c                    t         j                  j                  j                  t	        | j
                  | j                        j                                    S rc   )r%   rG   r  r   r   r   r  r   )filer   r   s    r2   relative_to_defined_inzAVs2010Backend.gen_vcxproj_filters.<locals>.relative_to_defined_in  s=    77??4<<TZZ0XZ^ZmZmntZu#vwwr4   r   r   r   Filterr   UniqueIdentifier{}c                l   |D ]  }t         j                  j                  |j                        r- 
|      }|s8|	v s=t         j                  j	                  |j                  j                              }t        j                  | d|i      }t        j                  |d      }	|   |_	         y )Nr   r  )
r%   rG   isabsr  r   r   r   r   r   r   )	type_nameelementsr   r  r   target_elementfilter_elementr   filter_itemsfound_folders_to_filterr  r   s          r2   add_elementz6Vs2010Backend.gen_vcxproj_filters.<locals>.add_element7  s     Oww}}QWW-4Q7G7.E#E"$'',,tQ5F5FtGXGX5Y"Z)+|YQZ\cPd)e)+~x)P.Eg.N+Or4   r  	ClIncludery  z.filters)r   r  r   r   r   rE  rV   r  r%   rG   r  r  rM  r  rB   rC   uuid4rF   r   r  r   r  r  )r   r   r  r  filter_folders	all_filesr   r  folderfilterrM  r  uuid_elementrV   r  r/  r   r  r   r  r  r  s   ``                @@@@r2   r  z!Vs2010Backend.gen_vcxproj_filters  s   zz)e/d&f gt[9}}T;7

0Q?@	x #%NNV%7%77	  	:A77==)0379+G4		: . 	JFGF77++G4R<%F &<S1SY\]`ffF''//'2  |28'/!#~x)U[I\!]!}}^=OP$'#djjl*;*A*A*C$Cc$I!)	J, (,'9'9)'D$'1((0		O 		O 	K)K)Hg&%%bnnT&:FZ<OPr4   c           
        | j                   r=d}t        j                  j                  | j                  j                         d      }d}n<d}t        j                  j                  | j                  j                         d      }d}| j                  j                  j                  }| j                  |d||      \  }}| j                   r1t        j                         \  }}t        j                  |d	      }	t        j                         }
t        j                  j                  | j                        \  }}d
}| j                   }d}|
D ]A  }|d d |z   }t#        t        j                  j                  ||            }|| d| d| dz  }C |t        j                  |	d      _        |t        j                  |	d      _        dt        j                  |	d      _        |t        j                  |	d      _        n}t        j                  |d      }t        j                  |d      }dt        j                  |d      _        dt        j                  |d      _        dt        j                  |d      _        dt        j                  |d      _        dt        j                  |d      _        d t        j                  |d!      _        | j                  j'                         d"d#gz   }d$}|| j)                         dj                  |      | j                  j+                         fz  }| j-                  |d%|| j/                         t        j1                  | j                  j                               gd&'       t        j                  |d(d)*       t        j                  |d+d,-       | j3                  t        j4                  |      |       y ).NrY  rZ  rl  r[  r\  r  z
regen-tempr  r  r  r  r  r   r  z setup --reconfigure "" "z"
r  r  r  r  r  Midlr  rE  rw  OutputDirectory%(Filename).hHeaderFileName%(Filename).tlbTypeLibraryName%(Filename)_i.cInterfaceIdentifierFilename%(Filename)_p.cProxyFileNamez
--internal
regencheckzcall %s > NUL
"%s" "%s"regenz2Checking whether solution needs to be regenerated.)r   r  msgr  r  r  r  ExtensionTargetsr  )r   r%   rG   r   r   r   r   rg  r  r-   r  r   r   rd   rS   r  r   rB   r   get_build_commandr  r  r  get_regen_filelistr  r  r  )r   r   r  r  r  r  r  r  r  all_configs_prop_grouprv  r   r  r  r  reconfigure_all_cmdrk   r  r  actionmidlregen_command	cmd_templs                          r2   r   zVs2010Backend.gen_regenprojH  so    ==(LWW\\$"2"2"@"@"BDYZF!H #LWW\\$"2"2"@"@"BOTF H((33"77AM=AAI 8 :{ ==;H;z;z;|8%'7%']]4%I" +3*S*S*U'"$''--0A0A"BQ8<5"//O"$8 S	0>s0Ci0O-25bggllCl  oL  7M  3N/#*B)CCYZyYzz}  N  ~O  OR  (S  S#S SfBMM02IJOTgBMM02KLQRTBMM02IJO L\BMM02BCH]]4)>?F==0DGhBMM$ >?D:EBMM$ 1279HBMM$ 016:KBMM$ 127FWBMM$ =>C8IBMM$05 ,,>>@LR^C__MI%((*EJJ},EtGWGWGgGgGijkM!!$TE\E\E^+8+L+LTM]M]MkMkMm+n*o&Z " \ 	dH.WX
dM1CD%%bnnT&:FCr4   c                   d}t         j                  j                  | j                  j	                         | d      }| j                  j
                  j                  }| j                  r|| j                  |d|d      \  }}t        j                         \  }}t        j                         }t         j                  j                  | j                        \  }	}
d}|D ]  }|
d d |z   }t        t         j                  j                  ||            }| d| d	}| j                  j
                  j                  t!        d
            s|dz  }| j                  j
                  j                  t!        d            r|dz  }d| d| j"                   d}t%        j&                  |d|      }|t%        j&                  |d      _        |t%        j&                  |d      _         n| j                  |d|      \  }}t%        j&                  |d      }t%        j&                  |d      }dt%        j&                  |d      _        dt%        j&                  |d      _        dt%        j&                  |d      _        dt%        j&                  |d       _        d!t%        j&                  |d"      _        d#t%        j&                  |d$      _        | j                  j+                         d%d&gz   }| j                  j
                  j                  t!        d
            s|d'gz  }| j                  j
                  j                  t!        d            r|d(gz  }| j-                          | j/                  |d)d*d+j                  |      z         t%        j&                  |d,d-.       | j1                  |       | j3                  t%        j4                  |      |       y )/NrX  r|  install-temprl  r  r  r  z
 test -C "" --no-rebuildstdsplitz --no-stdsplit	errorlogsz --print-errorlogsr@  r^  rA  r  rC  r  r  z	test-tempr  r  r  r  rE  rw  r  r  r  r  r  r  r  r  r  test--no-rebuildz--no-stdsplitz--print-errorlogs	run_testsr  r  r  r  r  )r%   rG   r   r   r   r   rf  r   r  r-   r  rd   rS   r  rB   r   r   rN   r   r   r   r  serialize_testsr  r  r  r  )r   r   r  r  r  r  r  r  rv  r   r  r  rk   r  r  test_cmdrI  
prop_groupr  r  test_commands                        r2   r   zVs2010Backend.gen_testproj  s_   "d..<<><.PX@YZ((22=="&";";LESAEEO #< #>T;
 <I;z;z;|8%'7*2*S*S*U'"$''--0A0A"BQ8<58 T	0>s0Ci0O-25bggllCl  oL  7M  3N/67zBaAbbpq''00;;Ij<QR 00H##,,77	+8NO 44HB9+Qt}}o]_`	]]4IV
JRj*ABGCSj*:;@T #'";";LEPAE #< #GT; ]]4)>?F==0DGhBMM$ >?D:EBMM$ 1279HBMM$ 016:KBMM$ 127FWBMM$ =>C8IBMM$05++==?6>BZZL##,,77	*8MN 11((33Ik4JK!4 55  "!!$Vuzz,?W5XY
dH.WX!!$'%%bnnT&:FCr4   c                   d}t         j                  j                  | j                  j	                         | d      }| j                  j
                  j                  }| j                  r| j                  |d|d      \  }}t        j                         \  }}t        j                         }t         j                  j                  | j                        \  }	}
d}|D ]  }|
d d |z   }t        t         j                  j                  ||            }| d| d	}d
| d| j                   d}t!        j"                  |d|      }|t!        j"                  |d      _        |t!        j"                  |d      _         n9| j'                          | j                  |d|      \  }}t!        j"                  |d      }t!        j"                  |d      }dt!        j"                  |d      _        dt!        j"                  |d      _        dt!        j"                  |d      _        dt!        j"                  |d      _        dt!        j"                  |d      _        dt!        j"                  |d      _        | j                  j)                         d d!gz   }| j+                  |d"d#d$j                  |      z         t!        j"                  |d%d&'       | j-                  |       | j/                  t!        j0                  |      |       y )(Nr]  r|  r  rl  r  r  r  z install -C "r  r@  r^  rA  r  rC  r  r  r  r  r  r  rE  rw  r  r  r  r  r  r  r  r  r  installr  run_installr  r  r  r  r  )r%   rG   r   r   r   r   rh  r   r  r-   r  rd   rS   r  rB   rN   r   r   r   create_install_data_filesr  r  r  r  r  )r   r   r  r  r  r  r  r  rv  r   r  r  rk   r  r  install_cmdrI  r  r  r  install_commands                        r2   r   zVs2010Backend.gen_installproj  s   $d..<<><.PX@YZ((55=="&";";LESAEEO #< #>T;
 <I;z;z;|8%'7*2*S*S*U'"$''--0A0A"BQ8<58 T	0>s0Ci0O-25bggllCl  oL  7M  3N/!9 :-HgGhhvwB9+Qt}}o]_`	]]4IV
JUj*ABGCSj*:;@T **,"&";";LESAE #< #GT; ]]4)>?F==0DGhBMM$ >?D:EBMM$ 1279HBMM$ 016:KBMM$ 127FWBMM$ =>C8IBMM$05"..@@BiQ_E``O!!$vOA\7]^
dH.WX!!$'%%bnnT&:FCr4   c                t   t        j                  |d      }t        j                  j	                  | j
                  j                         |dz         }	t        j                  j                  |	      s(t        |	dd      5 }
|
j                  d       d d d        t        j                  |d|	      }|rt        j                  |d	      }||_
        |sd
t        j                  |d      _
        | dt        j                  |d      _
        |sH| j                  t        j                  j	                  | j
                  j                         d            g}dj	                  |      t        j                  |d      _
        |r+dj	                  |      t        j                  |d      _
        y y # 1 sw Y   xY w)Nr   z.ruler	  r
  r  z# Meson regen file.r   r   Messager  VerifyInputsAndOutputsExistr_  r   r  r   r   r   )r   r   r%   rG   r   r   r  r  r  rH  r   r  )r   noderulenamer  r   r  r  r  igrouprulefiler>   custombuildmessages                r2   r  zVs2010Backend.add_custom_build  sW   t[177<< 0 0 @ @ BHwDVWww~~h'hg6 /!-./mmFM8LmmK;GGLMTBMM+'DEJ 9@y^k9-2,,RWW\\$:J:J:Z:Z:\:J.L M NG58XXg5Fk9-2BE((4.BMM+'9:? -/ /s   ?F--F7c                    d}| }t         j                  j                  |      r'd| |fz  }t         j                  j                  |      r'|S )Nr   z%s%d)r%   rG   r  )prefixr   r  s      r2   r  zVs2010Backend.nonexistent_file  sA    ggnnT"VQK'D ggnnT"r4   c                :    dt        j                  |d      _        y )Nr  r  r  )r   rR  s     r2   r0  z(Vs2010Backend.generate_debug_information"  s    ?Ed67<r4   c                    | j                   sjt        j                  j                  | j                  j                         d      }| j                  ||| j                  j                  j                         y y )Nr\  )	r   r%   rG   r   r   r   r  r   rg  )r   r  regen_vcxprojs      r2   r  z"Vs2010Backend.add_regen_dependency&  sW     }}GGLL)9)9)G)G)I?[M&&t]D<L<L<U<U<`<`a r4   c                     y rc   r  )r   r=  rN  s      r2   r/  z)Vs2010Backend.generate_lang_standard_info-  s    r4   )F)r   T.Optional[build.Build]r/   T.Optional[Interpreter]r   bool)r   zIT.Union[build.GeneratedList, build.CustomTarget, build.CustomTargetIndex]r   build.BuildTargetr   
ET.Elementr   T.List[str]r   r  r   r  returnr  )FN)r   r  rg   dictr  zT.Optional[dict])r  rB   r  r  )r5  zT.Dict[T.Any, build.Target])rI  rB   rJ  zT.Sequence[Path]r  r  )r   rB   r  T.List[Project]r  r  rc   )rg   r  r  r  )
r  r  r  rB   r  rB   r  r  r  r  )r  r  )r  zT.Tuple[ET.Element, ET.Element])r   zbuild.RunTargetr  rB   r  rB   r  r  )r   zbuild.CustomTargetr  rB   r  rB   r  r  )r   zbuild.CompileTargetr  rB   r  rB   r  r  )rW   rB   rj   r  rN   rB   )rP  rB   r  rB   )rh  rB   r  rB   )r{  zET.ElementTreer  rB   r  r  )
rk   rB   r  rB   r   r  r   rB   r  r  )rl   z	list[str]r  zT.Tuple[str, str, str])r  zT.Tuple[str, str])r  r  rN   rB   r  rB   rg   r  r  rB   ri   T.Optional[str]r  r  )r  r  r  r  rN   rB   r  r  )re  r  r   z.T.Union[build.Target, build.CustomTargetIndex]r  r  )
r   r  r  rB   r  rB   rg   r  r  r  )NNNT)r  r  r  rB   r  rB   r   T.Optional[T.List[str]]r  r  r  r  r  r  r  r  )r  rB   r  rB   )rR  r  r  r  )r  r  r  r  )r=  zT.Dict[str, CompilerArgs]rN  r  r  r  )=__name__
__module____qualname__rE  rx   r   r   r   r  staticmethodr  r   r  r$  r3  rR  r   r   r  r   r   r  r  r  r  r  r  classmethodr  r  r$  r  r"  r7  r>  rJ  rQ  rU  rM  r<  rq  rs  r  r  r  rf   r  r  rc  ri  r  r  r   r   r   r  r  r0  r  r/  __classcell__)r   s   @r2   r-   r-      s   D
!J=M~^ "'$(<N<N!<N-=<N| ] ]  6<|,(x=t64,6)J	; '0(,-1L#
 7VL#\D<&DPD" R R46
=.)	NZ:WY ' '   # #@
h1HjT  " . .0 '< '<R@@5?@@9<@@ <?@@ <@	@@ DG@@ BQ@@ VZ@@DR=R= $R=
 R= R=|	meN@QDND`4Dl,D\ ostxQ"9QGVQmqQ ~BQ<  Fbr4   r-   )r   r  r/   r  r  zbackends.Backend)r:   r  r  r  )r  rB   )rN   rB   r  r  )rV   r  )r]   zT.List[File]r^   r  r  r  )rg   r  rh   rB   ri   rB   r  z0T.Dict[str, T.Dict[str, T.Tuple[str, str, str]]])7
__future__r   r  r1  r%   xml.dom.minidomrv  xml.etree.ElementTreeetreer  r   rC   typingr,  pathlibr   r   r   rK   collectionsr   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TYPE_CHECKINGarglistr   r/   r   TuplerB   r  r3   r?   rI   rO   rY   ra   rr   Backendr-   r  r4   r2   <module>r     s    #   	  " "   3 3 	         6 ??&)ggc4m34G hF*bc:J28;2?B2Gw2_H$$ _r4   