o
    Wªod:D ã                   @  s  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  m	Z
 d dlZd dlZd dl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mZmZmZmZmZ ddlm Z m!Z! ej"rrddl#m$Z$ d!dd„Z%dd„ Z&dd„ Z'd"dd„Z(G dd „ d ej)ƒZ*dS )#é    )ÚannotationsN)ÚPathÚPurePathé   )Úbackendsé   )Úbuild)Údependencies)Úmlog)Ú	compilers)ÚFileÚMesonExceptionÚreplace_if_differentÚ	OptionKeyÚversion_compareÚMachineChoice)ÚEnvironmentÚbuild_filename)ÚInterpreterr   úT.Optional[build.Build]ÚinterpreterúT.Optional[Interpreter]Úreturnúbackends.Backendc           
      C  sB  t  dd ¡}t  dd ¡}|stdƒ‚|dksd|v r%ddlm} || |ƒS |dks-d	|v r8dd
lm} || |ƒS |dks@d|v rKddlm} || |ƒS |dksWd|v sWd|v rbddl	m
} || |ƒS |dksnd|v snd|v ryddlm} || |ƒS |dks…d|v s…d|v rddlm}	 |	| |ƒS d|v r™t| |ƒS td ||¡ƒ‚)NÚVisualStudioVersionZVSINSTALLDIRz”Could 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   Z mesonbuild.backend.vs2012backendr   Z mesonbuild.backend.vs2013backendr   Z mesonbuild.backend.vs2015backendr   Z mesonbuild.backend.vs2017backendr   Z mesonbuild.backend.vs2019backendr    Z mesonbuild.backend.vs2022backendr!   ÚVs2010BackendÚformat)
r   r   Ú
vs_versionZvs_install_dirr   r   r   r   r    r!   © r'   úhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/backend/vs2010backend.pyÚautodetect_vs_version(   sB   


ÿ
ÿ
ÿ

ÿr)   c                 C  sT   g }| D ]#}|  d¡sqt|dd… ƒ}d|v r| |¡ q|dd„ |D ƒ7 }q|S )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']
    ú/Or   NÚbc                 S  ó   g | ]}d | ‘qS )r*   r'   )Ú.0Úfr'   r'   r(   Ú
<listcomp>]   ó    z&split_o_flags_args.<locals>.<listcomp>)Ú
startswithÚlistÚappend)ÚargsÚo_flagsÚargÚflagsr'   r'   r(   Úsplit_o_flags_argsK   s   
r8   c                 C  s&   t t tjd| d t | ƒ ¡ƒ ¡ S )Nz	meson-vs-ú:)ÚstrÚuuidZuuid5ZNAMESPACE_URLÚupper)ÚpathÚ	path_typer'   r'   r(   Úgenerate_guid_from_patha   s   &r?   Úplatformr:   Úboolc                 C  s   t  d| t j¡S )Nz1Gaming\.(Desktop|Xbox.XboxOne|Xbox.Scarlett)\.x64)ÚreÚmatchÚ
IGNORECASE)r@   r'   r'   r(   Údetect_microsoft_gdkd   s   rE   c                      sÄ  e Zd ZdZdm‡ fdd„Zdd	„ Zd
d„ Zdd„ Zedndd„ƒZ	edndd„ƒZ
dd„ Zdd„ Zdodpdd„Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zdod+d,„Zd-d.„ Zd/d0d0d1œd2d3„Zd4d5„ Zd6d7„ Zd8d9„ Zed:d;„ ƒZd<d=„ Zd>d?„ Zd@dA„ ZdBdC„ ZdDdE„ Z dFdG„ Z!dHdI„ Z"dJdK„ Z#edLdM„ ƒZ$edNdO„ ƒZ%edPdQ„ ƒZ&edRdS„ ƒZ'edTdU„ ƒZ(dVdW„ Z)dXdY„ Z*dZd[„ Z+d\d]„ Z,d^d_„ Z-d`da„ Z.dqdcdd„Z/ededf„ ƒZ0dgdh„ Z1didj„ Z2dkdl„ Z3‡  Z4S )rr$   Zvs2010r   r   r   r   c                   sB   t ƒ  ||¡ d| _d| _d| _d | _d| _d | _i | _i | _	d S )Nz10.0.30319.1z11.00Z2010)
ÚsuperÚ__init__Úproject_file_versionÚsln_file_versionÚsln_version_commentÚplatform_toolsetr&   Úwindows_target_platform_versionÚsubdirsÚhandled_target_deps)Úselfr   r   ©Ú	__class__r'   r(   rG   k   s   
zVs2010Backend.__init__c                 C  s   t j |  |¡| ¡ ¡S ©N)r"   r=   ÚjoinÚget_target_dirÚget_id)rO   Útargetr'   r'   r(   Úget_target_private_dirv   s   z$Vs2010Backend.get_target_private_dirc              	     sº  g }g }g }ˆ  ˆ |¡ˆ |¡¡‰ˆ |¡}| ¡ D ];}t|tjtjfƒrT| 	¡ D ]}t
j |ˆ |¡|¡}	| |	¡ q+ˆ  ˆ |¡ˆ |¡¡}
|
|vrS| |
¡ q| ¡ }| ¡ }| ¡ }| 	¡ }t
j |ˆj|j¡‰t |d¡}t|ƒD ]Þ\}}t|ƒt|ƒkrŽt
j ˆ|| ¡‰nd‰t
j || ˆj¡¡‰ ˆ |d¡}| ˆ ¡}| |¡}‡fdd„|D ƒ}||7 }‡ ‡fdd„|D ƒ}ˆ |ˆ|¡}‡‡fdd„|D ƒ}‡fdd„|D ƒ}‡fd	d„|D ƒ}d
d„ |D ƒ}t
j ˆj ¡ ˆ |¡¡}ˆj|ˆ ||¡||j r
|d nd dd\}}|dd … | }t
j ˆj ¡ ˆ |¡¡}t
j!|dd tj|dˆ d}d ˆ "|¡¡t |d¡_#d |¡t |d¡_#d |¡t |d¡_#qxq|||fS )NÚ	ItemGroupÚ Tc                   s   g | ]	}t j ˆ |¡‘qS r'   )r"   r=   rS   )r-   Úof)Útarget_private_dirr'   r(   r/   ˜   ó    zDVs2010Backend.generate_custom_generator_commands.<locals>.<listcomp>c                   s    g | ]}|  d ˆ ¡  dˆ¡‘qS )z@INPUT@z@OUTPUT@©Úreplace©r-   Úx)Ú
infilenameÚsole_outputr'   r(   r/   š   s    ÿc                   s&   g | ]}|  d ˆ j ¡ ¡  dˆ¡‘qS )z@SOURCE_DIR@z@BUILD_DIR@)r^   ÚenvironmentÚget_source_dirr_   )rO   r[   r'   r(   r/      s
    þÿc                   s   g | ]}|  d ˆ ¡‘qS )z@CURRENT_SOURCE_DIR@r]   r_   )Ú
source_dirr'   r(   r/       ó    c                   s,   g | ]}|  d ˆ j ¡ ¡  dˆ j ¡ ¡‘qS )z@SOURCE_ROOT@z@BUILD_ROOT@)r^   rc   rd   Úget_build_dirr_   )rO   r'   r(   r/   ¡   s
    þÿc                 S  s   g | ]}|  d d¡‘qS )ú\ú/r]   r_   r'   r'   r(   r/   ¤   rf   r   )ÚworkdirÚcaptureÚforce_serializeéÿÿÿÿ)Úexist_okÚCustomBuild©ÚIncludeú ÚCommandú;ÚOutputsÚAdditionalInputs)$ÚrelpathrW   rT   Útarget_to_build_rootÚget_generated_sourcesÚ
isinstancer   ÚCustomTargetÚCustomTargetIndexÚget_outputsr"   r=   rS   r3   Úget_generatorÚget_exeÚ
get_inputsÚbuild_to_srcÚsubdirÚETÚ
SubElementÚ	enumerateÚlenÚrel_to_builddirÚget_custom_target_depend_filesZget_arglistZget_outputs_forZreplace_outputsrc   rg   Úas_meson_exe_cmdlineZreplace_extra_argsrk   ÚmakedirsÚquote_argumentsÚtext)rO   rV   Úparent_nodeZgenerator_output_filesZcustom_target_include_dirsÚcustom_target_output_filesÚdownÚgenlistÚiZipathZidirÚ	generatorÚexeZ
infilelistZoutfilelistZidgroupZcurfileÚdepsZ	base_argsZoutfiles_relÚoutfilesr4   Útdir_absÚcmdÚ_Zabs_pdirZcbsr'   )ra   rO   rb   re   r[   r(   Ú"generate_custom_generator_commandsy   sv   

€

ÿþ
þ

ûÚ
'z0Vs2010Backend.generate_custom_generator_commandsc                 C  sB  | j jd  d d ¡}|dv r$| j jd  d d ¡}t|ƒr || _n6d| _n2|dkr,d| _n*|dv rF| j jd  d d ¡}|dkrBd| _nd| _nd	| ¡ v rPd
| _ntd| ƒ‚| j jd  d d ¡}|dv rhd| _	n2|dkrpd| _	n*|dv rŠ| j jd  d d ¡}|dkr†d| _	nd| _	nd	| ¡ v r”d
| _	ntd| ƒ‚| j
j tdƒ¡| _| j
j tdƒ¡| _| j
j tdƒ¡| _z| j
j tdƒ¡| _W n tyÐ   d| _Y nw tj | j
 ¡ | jjd ¡}|  ¡ }|  dtj | j
 ¡ d¡¡ |  dtj | j
 ¡ d¡¡ |  dtj | j
 ¡ d¡¡ |  ||¡ |  ¡  t | j
 ¡ ¡ d S )NÚtarget_machine>   Úx86_64Z64Úx64Úx86ZWin32>   Úarm64Úaarch64Úarm64ecrž   ÚarmZARMz$Unsupported Visual Studio platform: Úbuild_machineÚ	buildtypeÚoptimizationÚdebugZ
b_sanitizeÚnonez.slnÚ	RUN_TESTSúRUN_TESTS.vcxprojÚRUN_INSTALLúRUN_INSTALL.vcxprojÚREGENúREGEN.vcxproj) r   ÚbuiltinZcpu_family_methodZsystem_methodrE   r@   Z
cpu_methodÚlowerr   Úbuild_platformrc   ÚcoredataÚ
get_optionr   r£   r¤   r¥   Úsanitizer"   r=   rS   rg   r   Úproject_nameÚgenerate_projectsÚgen_testprojÚgen_installprojÚgen_regenprojÚgenerate_solutionZgenerate_regen_infor$   Útouch_regen_timestamp)rO   rš   Ztarget_systemÚ
target_cpur¢   Úsln_filenameÚprojlistr'   r'   r(   Úgenerate¸   sZ   
ÿzVs2010Backend.generateÚ	build_dirr:   r   ÚNonec                 C  s   t j t j | tj¡d¡S )Nzregen.stamp)r"   r=   rS   r   Zprivate_dir©r¾   r'   r'   r(   Úget_regen_stampfileñ   s   z!Vs2010Backend.get_regen_stampfilec                 C  s:   t t | ¡ddd	 W d   ƒ d S 1 sw   Y  d S )NÚwúutf-8©Úencoding)Úopenr$   rÁ   rÀ   r'   r'   r(   r¹   õ   s   "ÿz#Vs2010Backend.touch_regen_timestampc                 C  s  dt jv o	dt jv }dt jv r`dt jv rt jd nd }|d ur%|dkr%dnd}t jd | d }t j |¡r`|rCt jd }t jd }n	t j d	d
¡}|}||krV|d | n|}d|› d|› S dt jv r|rt jd d }t j |¡rd|t jd t jd f S dS )NÚVSCMD_ARG_TGT_ARCHZVSCMD_ARG_HOST_ARCHZVCINSTALLDIRr   r   zAuxiliary\Build\rY   zvcvarsall.batÚPlatformr   r˜   ú"z" ZVS150COMNTOOLSzVsDevCmd.batz"%s" -arch=%s -host_arch=%s)r"   Úenvironr=   ÚexistsÚget)rO   Zhas_arch_valuesr&   Zrelative_pathZscript_pathZtarget_archZ	host_archÚarchr'   r'   r(   Úget_vcvars_commandú   s.   
ÿÿ
ÿz Vs2010Backend.get_vcvars_commandc                 C  s2   i }|D ]}t |tjƒr|j||j ¡ < q| ¡ S rR   )rz   r   ZExtractedObjectsrV   rU   Úitems)rO   Zobj_listÚresultÚor'   r'   r(   Úget_obj_target_deps  s   €z!Vs2010Backend.get_obj_target_depsFÚtúT.Dict[T.Any, build.Target]c                 C  s4  i }|  ¡ D ]þ}t|tjƒr"| ¡ D ]}t|tjƒr ||| ¡ < qn…t|tjƒr6| ¡ D ]}||| ¡ < q,nqt|tj	ƒr |j
D ]}t|tjƒrO|j|| ¡ < q?||| ¡ < q?|jD ]}t|tjƒri|j|| ¡ < qY||| ¡ < qY|jD ]}t|tjƒrƒ|j|| ¡ < qst|tƒr‰qs||| ¡ < qs|  |j¡D ]\}}|||< q–ntd|› ƒ‚| ¡ D ]X}	t|	tjƒrº|	||	 ¡ < q«t|	tjƒrÉ|	j||	j ¡ < q«|	 ¡ }
|
 ¡ }t|tjƒrÝ||| ¡ < t |
j|	j¡D ]}t|tjƒrõ|j|| ¡ < qåt|tjƒr||| ¡ < qåq«q|r|s|S |  ||¡}| |¡ |S )NzUnknown target type for target )Úvaluesrz   r   r{   Zget_target_dependenciesÚTargetrU   Ú	RunTargetÚget_dependenciesZBuildTargetZlink_targetsr|   rV   Úlink_whole_targetsZlink_dependsr   rÒ   Úobjectsr   ry   r~   r   Ú
ExecutableÚ	itertoolsÚchainÚdependsÚget_target_depsÚupdate)rO   rÓ   Ú	recursiveZall_depsrV   ÚdZldepZobj_idZobjdepZgendepr’   Zgen_exeÚretr'   r'   r(   rß     sj   €üÿ




ÿ€üö
zVs2010Backend.get_target_depsc                 C  s¦   d}t |ƒ}t|ƒ |D ]D}|| jvrP|j}t|dƒ}|j}|tdƒkr+| j| d nd }	||	f| j|< || jjj	d ||| j| d f }
| 
|
¡ | 
d¡ qd S )Nú%Project("{%s}") = "%s", "%s", "{%s}"
r‚   Ú.r   Ú	directoryúEndProject
)ÚreversedÚnextrM   Únamer?   Úparentr   rc   r°   Ú
lang_guidsÚwrite)rO   ÚofileÚparentsÚ	prj_templZ	iterpathsr=   ÚbasenameÚ
identifierÚ
parent_dirZparent_identifierÚprj_liner'   r'   r(   Úgenerate_solution_dirsZ  s*   


ÿÿþ

€óz$Vs2010Backend.generate_solution_dirsc              
   C  sD  |   ¡ }| |  ¡ ¡ |d }t|dddû}| d| j ¡ | d| j ¡ d}|D ]q}| jj}| 	t
dƒ¡d	krD|  ||d
 j¡ | jj|d  }	d}
t|	dƒr`|	jr`|	j ¡ D ]}|}
 || jjj|
 |d |d
 |d f }| |¡ |	 ¡ |	i}| j|dd}| d¡ | ¡ D ]\}}	|d |v rœ|	||< qŽq,|| jjjd dd| jjjf }| |¡ | d¡ || jjjd dd| jjjf }| |¡ | d¡ || jjjd dd| jjjf }| |¡ | d¡ | d¡ | d¡ | d| j| j| j| jf ¡ | d¡ | d¡ | d| jjj| j| j| j| jf ¡ | d| jjj| j| j| j| jf ¡ |D ]H}|d tju rE| j}n| j}| d|d | j| j| j|f ¡ |d |v r~t| jj|d  tjƒs~| d|d | j| j| j|f ¡ q7| d| jjj| j| j| j| jf ¡ | d| jjj| j| j| j| jf ¡ | d¡ | d ¡ | d!¡ | d¡ | j r| d"¡ |D ] }|d
 j!t"d#ƒkrä| d$ #|d | j |d
 j! d ¡¡ qÅ| j  $¡ D ]}|d
 rÿ| d$ #|d |d
 ¡¡ që| d¡ | d%¡ W d   ƒ n	1 sw   Y  t%||ƒ d S )&Nú~rÂ   z	utf-8-sigrÄ   z:
Microsoft Visual Studio Solution File, Format Version %s
z# Visual Studio %s
rä   ZlayoutZmirrorr   r   Údefaultr   r   T)rá   rç   r§   r¨   r«   r¬   r©   rª   zGlobal
z=	GlobalSection(SolutionConfigurationPlatforms) = preSolution
z		%s|%s = %s|%s
z	EndGlobalSection
z=	GlobalSection(ProjectConfigurationPlatforms) = postSolution
z		{%s}.%s|%s.ActiveCfg = %s|%s
z		{%s}.%s|%s.Build.0 = %s|%s
é   z1	GlobalSection(SolutionProperties) = preSolution
z		HideSolutionNode = FALSE
z-	GlobalSection(NestedProjects) = preSolution
rå   z		{{{}}} = {{{}}}
z
EndGlobal
)&Zget_build_by_default_targetsrà   Zget_testlike_targetsrÆ   rí   rI   rJ   rc   r°   r±   r   rõ   rï   r   ÚtargetsÚhasattrr   Úkeysrì   rU   rß   rÏ   Ú	test_guidÚ
regen_guidÚinstall_guidr£   r@   r   ÚBUILDr¯   rz   r×   rM   rë   r   r%   rÕ   r   )rO   r»   r¼   Zdefault_projlistZsln_filename_tmprî   rð   Zprjr°   rV   ÚlangZlang_outrô   Útarget_dictZrecursive_depsÚdepÚ	test_lineZ
regen_lineZinstall_lineÚpZconfig_platformr‚   r'   r'   r(   r¸   n  sæ   þ
ÿ
€þþ

þ

þ



ÿÿ

ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ




&€
€
£^zVs2010Backend.generate_solutionc                 C  sæ   | j jjtdƒ j}g }d}t| jj ¡ ƒD ]O\}\}}|r&|| 	¡ kr&|}t
| j  ¡ |  |¡ƒ}|jddd |d }t|  |¡ƒ}	|	| }
|| }| j jj| }|  |t|ƒ|¡ | ||
||jf¡ q|rq| d| |¡¡ |S )NZbackend_startup_projectr   T)rn   rï   ú.vcxproj)rc   r°   Úoptionsr   Úvaluer…   r   rù   rÏ   Úget_basenamer   rg   rT   Úmkdirr   Útarget_guidsÚgen_vcxprojr:   r3   Úfor_machineÚinsertÚpop)rO   Zstartup_projectr¼   Zstartup_idxr‘   rê   rV   ÚoutdirÚfnameÚ
target_dirZrelnameZprojfile_pathZ	proj_uuidr'   r'   r(   r´   Ô  s*   þzVs2010Backend.generate_projectsc                 C  s¢   g }g }g }g }|D ]@}| j  |¡r| |¡ q
| j  |¡r$| |¡ q
| j  |¡r>| |¡ |  |¡}||vr=| |¡ q
| j  |¡rEq
| |¡ q
||||fS rR   )rc   Z	is_headerr3   Z	is_objectÚ	is_sourceÚlang_from_source_fileZ
is_library)rO   ÚsrclistÚsourcesÚheadersrÚ   Ú	languagesr‘   r   r'   r'   r(   Úsplit_sourcesî  s&   


€zVs2010Backend.split_sourcesc                 C  sB   |   |¡dkr	dS tj |   |¡¡ tj¡}tj dgt|ƒ ¡S )NrY   z..)rT   r"   r=   ÚnormpathÚsplitÚseprS   r†   )rO   rV   Zdirectoriesr'   r'   r(   rx     s   z"Vs2010Backend.target_to_build_rootc                 C  s   dd„ |D ƒS )Nc                 S  s   g | ]}d | ‘qS )ú"%s"r'   )r-   r‘   r'   r'   r(   r/     r0   z1Vs2010Backend.quote_arguments.<locals>.<listcomp>r'   )rO   Zarrr'   r'   r(   r‹     s   zVs2010Backend.quote_argumentsc                 C  sH   t  |d¡}t j|d|d}d| t  |d¡_|s"dt  |d¡_d S d S )NrX   ZProjectReferencerp   ú{%s}ÚProjectÚfalseZLinkLibraryDependencies©rƒ   r„   rŒ   )rO   ÚrootÚincludeZprojidÚlink_outputsZigZprefr'   r'   r(   Úadd_project_reference  s   üz#Vs2010Backend.add_project_referencec                 C  s~   |  ¡ |i}|  |¡ ¡ D ]/}|  ¡ | j|  ¡  v rq|  ||¡}tj ||  ¡ d ¡}| jj	j
|  ¡  }|  |||¡ qd S )Nr  )rU   rß   rÕ   rN   Úget_target_dir_relative_tor"   r=   rS   rc   r°   r
  r$  )rO   r!  rV   r  r  rw   ZvcxprojÚtidr'   r'   r(   Úadd_target_deps  s   ùzVs2010Backend.add_target_depsZUtilityN)ÚconftypeÚ
target_extÚtarget_platformc                C  sî  t  dddddœ¡}t  |dddi¡}|s| j}t  |d	d
| jd | i¡}	t  |	d¡}
| j|
_t  |	d¡}||_t j|ddd}t  |d¡}d| |_t  |d¡}| jd |_t  |d¡}||_t  |d¡}
||
_t  |d¡}||_| jr~| jt  |d¡_dt  |d¡_t j|ddd t j|ddd}|t  |d¡_dt  |d¡_d t  |d!¡_| jrµ| jt  |d"¡_t j|dd#d t  |d¡}t  |d$¡}| j|_t  |d%¡}d&|_t  |d'¡}|d( |_t  |d)¡}||_|ró|t  |d*¡_||fS )+Nr  ÚBuildz4.0z3http://schemas.microsoft.com/developer/msbuild/2003)ZDefaultTargetsZToolsVersionZxmlnsrX   ÚLabelZProjectConfigurationsZProjectConfigurationrq   ú|ZConfigurationrÈ   ZPropertyGroupZGlobals©r,  ZProjectGuidr  ÚKeywordZProjZRootNamespaceZProjectNameZWindowsTargetPlatformVersionÚtrueZUseMultiToolTaskÚImportz,$(VCTargetsPath)\Microsoft.Cpp.Default.props©r  ZConfigurationTypeZ	MultiByteZCharacterSetr  ZUseOfMfcZPlatformToolsetz$$(VCTargetsPath)\Microsoft.Cpp.propsZ_ProjectFileVersionZOutDirz.\ZIntDirrh   Z
TargetNameZ	TargetExt)	rƒ   ZElementr„   r@   r£   rŒ   rL   rK   rH   )rO   Útarget_nameÚtemp_dirÚguidr(  r)  r*  r!  Z	confitemsZprjconfr  ÚplZglobalgroupZguidelemÚkwÚnsZpnameÚtype_configZdirelemZfverr  ZintdirZtnamer'   r'   r(   Úcreate_basic_project#  s`   þÿ

z"Vs2010Backend.create_basic_projectc                 C  sö   | j |j| ¡ |d\}}|  |¡}|js&t|tjƒsJ ‚t|ƒdks%J ‚n7t|tjƒr.J ‚|  	|¡}|  
|¡\}}}	| j|jd |	dd … d|dd\}
}| j|dd |  |
¡¡|d tj|d	d
d |  |¡ |  ||¡ |  t |¡|¡ d S )N©r4  r5  r   r   T)rl   ÚenvÚverboseZ
run_targetrr   )r”   r1  ú&$(VCTargetsPath)\Microsoft.Cpp.targetsr2  )r:  rê   rU   rˆ   Úcommandrz   r   ZAliasTargetr†   Zget_run_target_envÚeval_custom_target_commandr‰   Úadd_custom_buildrS   r‹   rƒ   r„   Úadd_regen_dependencyr'  Ú_prettyprint_vcxproj_xmlÚElementTree)rO   rV   Úofnamer5  r!  r9  Údepend_filesZ
target_envr˜   Zcmd_rawÚwrapper_cmdr'   r'   r(   Úgen_run_target_vcxprojh  s,   
þ


þÿ
z$Vs2010Backend.gen_run_target_vcxprojc                 C  sn  |j tju r
| j}n| j}| j|j| ¡ ||d\}}d|_|  	|d¡\}}}	|  
|d¡}
tj | j ¡ |  |¡¡}| ¡ }| j|jd |	dd … |||jrR|d nd |jrZ|d nd d|j|jd	\}}|jrx||  tj | j ¡ d¡¡g7 }| j|dd |  |¡¡|d	d … | |
 ||j d
 tj|ddd |  ||¡ |   |¡ |  !||¡ |  "t #|¡|¡ d S )N©r4  r5  r*  Tr   r   )rj   Úextra_bdepsrk   Úfeedrl   r<  r=  úoutofdate.fileZcustom_targetrr   rm   )r”   ÚoutputsÚverify_filesr1  r>  r2  )$r  r   rÿ   r¯   r@   r:  rê   rU   Zabsolute_pathsr@  rˆ   r"   r=   rS   rc   rg   rT   Z get_transitive_build_target_depsr‰   r?  rk   rK  r<  ZconsoleZbuild_always_staleÚnonexistent_fileÚget_scratch_dirrA  r‹   rƒ   r„   r™   rB  r'  rC  rD  )rO   rV   rE  r5  r@   r!  r9  ZsrcsZ
ofilenamesr—   rF  r–   rJ  rG  r˜   r'   r'   r(   Úgen_custom_target_vcxproj†  sF   
ý
ø	
ÿþ
z'Vs2010Backend.gen_custom_target_vcxprojc                 C  s’   |j tju r
| j}n| j}| j|j| ¡ ||d\}}tj	|ddd |  
|¡g|_g |_|  ||¡ |  |¡ |  ||¡ |  t |¡|¡ d S )NrI  r1  r>  r2  )r  r   rÿ   r¯   r@   r:  rê   rU   rƒ   r„   Zcompile_target_to_generatorZ	generatedr  r™   rB  r'  rC  rD  )rO   rV   rE  r5  r@   r!  r9  r'   r'   r(   Úgen_compile_target_vcxproj®  s   
ý
z(Vs2010Backend.gen_compile_target_vcxprojc                 C  s:   |  d¡d }|tjv rdS |tjv rdS td|› dƒ‚)Nrå   rm   ÚcÚcppz*Could not guess language from source file )r  r   Z
c_suffixesZcpp_suffixesr   )ÚclsÚsrcÚextr'   r'   r(   r  ¿  s   

z#Vs2010Backend.lang_from_source_filec                 C  s   ||v r|   |||¡ d S d S rR   )Úuse_pch)rO   Úpch_sourcesr   Úinc_clr'   r'   r(   Úadd_pchÈ  s   ÿzVs2010Backend.add_pchc                 C  s$   t  |d¡}d|_|  |||¡ d S )NÚPrecompiledHeaderZCreate©rƒ   r„   rŒ   Úadd_pch_files)rO   rY  r   rZ  Úpchr'   r'   r(   Ú
create_pchÌ  s   zVs2010Backend.create_pchc                 C  s:   t  |d¡}d|_|  |||¡}t  |d¡}|d |_d S )Nr\  ZUseZForcedIncludeFilesz;%(ForcedIncludeFiles)r]  )rO   rY  r   rZ  r_  ÚheaderZpch_includer'   r'   r(   rX  Ñ  s
   zVs2010Backend.use_pchc                 C  s^   t j || d ¡}t |d¡}||_t |d¡}d|› d|_t |d¡}d|› d|_|S )Nr   ZPrecompiledHeaderFileZPrecompiledHeaderOutputFilez$(IntDir)$(TargetName)-z.pchÚProgramDataBaseFileNameú.pdb)r"   r=   rñ   rƒ   r„   rŒ   )rO   rY  r   rZ  ra  Zpch_fileZpch_outZpch_pdbr'   r'   r(   r^  Ø  s   	zVs2010Backend.add_pch_filesc                 C  s(   |dd …   d¡rdS |dd …   d¡S )Nr   Z	fsanitizeTÚM)r1   )rO   Úentryr'   r'   r(   Ú"is_argument_with_msbuild_xml_entryï  s   z0Vs2010Backend.is_argument_with_msbuild_xml_entryc                 C  s^   g }||   ¡ D ]}|  |¡rq|dkr| |¡ q| |  |¡¡ qd |¡t |d¡_d S )Nú%(AdditionalOptions)rr   ÚAdditionalOptions)Ú	to_nativerf  r3   Úescape_additional_optionrS   rƒ   r„   rŒ   )rO   r   r   Ú	file_argsr4   r6   r'   r'   r(   Úadd_additional_options÷  s   
z$Vs2010Backend.add_additional_optionsc                 C  sN   g }|| D ]}|dkr|  |¡ q|  |  |¡¡ qd |¡t |d¡_d S )Nú%(PreprocessorDefinitions)rt   ÚPreprocessorDefinitions)r3   Úescape_preprocessor_definerS   rƒ   r„   rŒ   )rO   r   r   Úfile_definesZdefinesÚdefiner'   r'   r(   Úadd_preprocessor_defines  s   z&Vs2010Backend.add_preprocessor_definesc                 C  s    || }d  |¡t |d¡_d S )Nrt   ÚAdditionalIncludeDirectories)rS   rƒ   r„   rŒ   )rO   r   r   Úfile_inc_dirsÚdirsr'   r'   r(   Úadd_include_dirs  s   zVs2010Backend.add_include_dirsc                 C  s   t | ƒt |ƒ dkS )Nr   )r†   )rÚ   Úadditional_objectsÚgenerated_objectsr'   r'   r(   Úhas_objects  s   zVs2010Backend.has_objectsc                 C  ó   d S rR   r'   )Únoderx  r'   r'   r(   Úadd_generated_objects  s   z#Vs2010Backend.add_generated_objectsc                 C  s&   t  ddddddddd	œ¡}|  |¡S )
Nú%25ú%24ú%40ú%27ú%3Bú%3Fú%2Az\\)ú%ú$ú@ú'rt   ú?Ú*rh   )r:   Ú	maketransÚ	translate)rq  Útabler'   r'   r(   ro    s
   
û
z(Vs2010Backend.escape_preprocessor_definec                 C  sD   t  ddddddddd	œ¡}|  |¡} |  d
¡r| d
7 } d| › dS )Nr}  r~  r  r€  r  r‚  rƒ  z%20)r„  r…  r†  r‡  rt   rˆ  r‰  rr   rh   rÉ   )r:   rŠ  r‹  Úendswith)ÚoptionrŒ  r'   r'   r(   rj  &  s   

ÿ

z&Vs2010Backend.escape_additional_optionc                 C  sœ   g }g }g }| D ]@}|  d¡r$|dd… }||v r| |¡ | |¡ q|  d¡r/| |¡ q| d¡s9| d¡rC||vrB| |¡ q| |¡ q|||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)ri   ú-z.libz.a)r1   Úremover3   r  )r4   ZlpathsZlibsÚotherr6   Zlpathr'   r'   r(   Úsplit_link_args4  s"   



€
zVs2010Backend.split_link_argsc                 C  sh   |j  ¡ D ]\}}|dv r|  S qt|jƒdkr0| jjj |j  ¡ D ]\}}|dv r/|  S q#tdƒ‚)N>   rS  rT  r   zGCould not find a C or C++ compiler. MSVC can only build C/C++ projects.)r   rÏ   r†   rÚ   rc   r°   r  r   )rO   rV   r   rS  r'   r'   r(   Ú_get_cl_compilerU  s   ÿÿzVs2010Backend._get_cl_compilerc                 C  sp   |d }|j |ddd tjj |¡}t|ddd}|  | ¡ ¡ W d   ƒ n1 s,w   Y  t||ƒ d S )Nrö   rÃ   T)rÅ   Zxml_declarationrÂ   rÄ   )rí   ÚxmlÚdomZminidomÚparserÆ   Ztoprettyxmlr   )rO   ÚtreerE  Z
ofname_tmpÚdocrZ   r'   r'   r(   rC  a  s   ÿz&Vs2010Backend._prettyprint_vcxproj_xmlc           f      C  sV  t  d|j› d¡ d}g | j| ¡ < t|tjƒr/d}|jd ur&|js%d}nK|j	 
d¡d }nBt|tjƒr8d}n9t|tjƒrAd	}n0t|tjƒrN|  |||¡S t|tjƒr[|  |||¡S t|tjƒrh|  |||¡S td
| ¡ › ƒ‚|  |¡}tj || j¡}tj ||  |¡¡}|  |j¡\}	}
}}|jr›|  ||	¡}	|  |¡}|  | j!¡}|| "| j#¡7 }|| $| j¡7 }|| %| j&¡7 }| '| j!¡}| j(j)j*t+dƒ }|j}|j,t-j.u rÚ| j/}n| j0}tj 1| 2¡ ¡}| j3|d | ¡ |||d |d\}}dt4 5|d¡_6dt4 5|d¡_6d|v rdt4 5|d¡_6t4 5|d¡}t4 5|d¡}|j7dkrH| j!dkr9dt4 5|d¡_6dt4 5|d¡_6n†dt4 5|d¡_6dt4 5|d¡_6nw|j7dkrr| j!dkrcdt4 5|d¡_6dt4 5|d¡_6n\dt4 5|d¡_6dt4 5|d¡_6nM|j7d kr‡dt4 5|d¡_6dt4 5|d¡_6n8|j7d!krœdt4 5|d¡_6dt4 5|d¡_6n#|j7d"kr±dt4 5|d¡_6dt4 5|d¡_6ndt4 5|d¡_6dt4 5|d¡_6d#|v rËdt4 5|d$¡_6d%|v rØd&t4 5|d'¡_6n!d(|v råd)t4 5|d'¡_6nd*|v ròd+t4 5|d'¡_6nd,t4 5|d'¡_6d-|v rd.t4 5|d¡_6nd/|v rd0t4 5|d¡_6nd1|v rd2t4 5|d¡_6d3|j8v rc| j(j)j*t+d4|j,d3d5 }|j7d6kr@d7t4 5|d8¡_6n#|j7d9krNd:t4 5|d8¡_6n|j7d;kr\dt4 5|d8¡_6nd<t4 5|d8¡_6|  9||¡\}}}|  |¡\}}}}|  |¡\} }!}"}#|| 7 }||!7 }||#7 }g }$g }%g }&d=d>„ |j8 :¡ D ƒ}'d?d>„ |j8D ƒ}(d@d>„ |j8D ƒ})|j8 :¡ D ]%\}*}+|*|'v rÓ|'|*  t8 ;| <¡ |+¡7  < |'|*  |+ =| <¡ ¡7  < q¯| jj>|j,  ?|j@i ¡ :¡ D ]\}*},|*|'v rô|'|*  |,7  < qã| jjA|j,  :¡ D ]\}*},|*|'v r|'|*  |,7  < qÿ|' B¡ D ]}*| j(j)j*t+dA|j,|*d5 }-|'|*  |-j77  < q|' C¡ D ]|},|,g dB¢7 },|,dCdD„ |D ƒ7 },tD| E¡ ƒD ]c}.tD|. F¡ ƒD ]<}/tj |. G¡ |/¡}0z|, HdEtj ||0¡ ¡ |, HdE|  I|0|jJ¡ ¡ W qS tKy   |, HdEtj L|0¡ ¡ Y qSw |. M¡ D ]}/tj |. G¡ |/¡}0|, HdE|  I|0|jJ¡ ¡ q”qKq4|jN :¡ D ]\}*},|*|'v rÇ|'|*  |,7  < q¶|' C¡ D ]#},|  I|  O|¡|  |¡¡g}1|jPræ|1d|g7 }1|,dFdD„ |1D ƒ7 },qÍ|' :¡ D ]w\}*},|,d d … D ]k}2|2 QdG¡s|2dHkr1|'|*  R|2¡ |2dHkr|2}3n|2dId … }3|3|(|* vr/|(|*  H|3¡ qÿ|2 QdJ¡s<|2dKkri|'|*  R|2¡ |2dKkrK|2}4n|2dId … }4|4|)|* vr_|)|*  H|4¡ |4|&vri|& H|4¡ qÿqõtD| S¡ ƒD ]Z}.t|.tTjUƒr…dt4 5|dL¡_6qs| V|. W¡ ¡}5|5D ]=}2|2 QdG¡r­|2dId … }3|3|%v r¦|% R|3¡ |% H|3¡ qŽ|2 QdJ¡rÅ|2dId … }4|4|&vrÃ|& H|4¡ qŽ|$ H|2¡ qŽqs||7 }dM|v rÜ|$ HdM¡ tX|$ƒdkrò|$ HdN¡ dO |$¡t4 5|dP¡_6dQ |&¡t4 5|dR¡_6|% HdH¡ dQ |%¡t4 5|dS¡_6dt4 5|dT¡_6| Yt+dUƒ¡}6dVtZdt[|6ƒ ƒ t4 5|dW¡_6| Yt+dXƒ¡r7dt4 5|dY¡_6t\|ƒ}7dZ|7v rHd[t4 5|d\¡_6n&d]|7v rUd^t4 5|d\¡_6nd_|7v rbd`t4 5|d\¡_6nda|7v rndbt4 5|d\¡_6dc|7v rzdt4 5|dd¡_6de|7v r‡dft4 5|dg¡_6ndh|7v r“dit4 5|dg¡_6dj|7v r dkt4 5|dl¡_6nda|7vr¬dmt4 5|dl¡_6|  ]|'|¡ i }8| j(j)j* ?t+dnƒ¡rdoD ]W}9| ^|9¡}:|:sÍqÁ|j_dpkrtX|:ƒdkrötj ||  `||9|:d ¡¡};tj atj ||:d ¡¡}<ntj ||:d ¡};d }<|:d |;|9|<g|8|9< qÁ|:d d |9d g|8|9< qÁt4 5|dq¡}=t4 5|=dS¡ t4 5|dr¡}>| b¡ }?|?| '| j!¡7 }?| jrA|  c|>¡ ndt4 5|>ds¡_6t|tjƒs×t|tjdƒrb| j(j)j*}@|?| e|@¡7 }?|?| j f||j@|j,¡7 }?|?| j g||j,¡7 }?|?| j(j) h|j,| i¡ ¡7 }?|?|jj7 }?| S¡ D ]}At|AtTjUƒr dt4 5|dL¡_6qŽ|? k|A l¡ ¡ qŽ| m¡ D ])}.t|.tjƒrÕ|. S¡ D ]}At|AtTjUƒrÌdt4 5|dL¡_6qº|? k|A l¡ ¡ qºq­|?| n| j(j)j*¡7 }?|  o|? p¡ ¡\}B}C}?| m¡ D ]é}Dt|Dtjqƒrû|D}En| jjr|D ¡  }Etj ||  s|E¡¡}F|D|jtv rÍ|j_dpkr•tu|jvdtƒr•|D wdu¡}*|*jxD ]5}G|G y¡ D ]-};| j( z|;¡rZ|  {|D|G|;¡}Hdtj 1|H¡d dd …  }I|? H|Hd tX|Iƒ … dv ¡ q.q(|*j|D ]*};d }J| j( z|;¡rŠ|  }|D|;¡}J|  I|  O|D¡|  |D¡¡}Ktj |K|J¡}L|? H|L¡ qa|? ~|  |D¡¡ n|?| €|F¡7 }?|  |D|¡}Mtj |M|D ¡ dw ¡}N| j(j)j‚|D ¡  }O| jƒ||N|Odxdy | j| ¡   H|D ¡ ¡ qï|F|Cvr×|C H|F¡ qï|  „|¡D ]}P|C H|  I|P|  |¡¡¡ qÞg }Q|  ||¡d D ]}Rt|RtZƒsJ ‚|Q H|R¡ qø|"D ]}R|Q H|R¡ qtX|?ƒdkr*|? HdN¡ dO |?¡t4 5|>dP¡_6tX|BƒdkrA|B …ddz¡ dQ |B¡t4 5|>d{¡_6tX|CƒdkrW|C Hd|¡ dQ |C¡t4 5|>d}¡_6t4 5|>d~¡}Sd| 2¡ › |S_6t4 5|>d€¡}T||T_6t|tjtjfƒr†| †¡ r†| †¡ t4 5|>d¡_6t|tjƒr¤|j‡r¤tj ||j‡ ˆ| j¡¡}U|Ut4 5|>d‚¡_6| jrµt4 5|>dƒ¡}Vd|› d„|V_6t4 5|>d…¡}W|j,t-j.u rÇ| ‰¡ }Xn| j0 ‰¡ }X|Xd†krÕd‡|W_6n/|XdˆksßtŠ|Xƒrãd‰|W_6n!|XdŠkrìd‹|W_6n|XdŒkrõd|W_6n|XdŽkrþd|W_6ntd|X ƒ‚dt4 5|>d‘¡_6| j(j) Yt+dƒ¡	sdt4 5|>d’¡_6t4 5|d“¡}Yt4j5|Yd,tj |t‹¡d” d•d–„ }Zg }[tX|
ƒtX|ƒ tX|jŒƒ tX|8ƒ dk	rÁt4 5|d“¡}\|
D ]}]tj ||] ˆ| j¡¡}U|Z|U|[ƒ	rlt4j5|\d—|Ud” 	qQ|D ]}]|Z|]|[ƒ	r€t4j5|\d—|]d” 	qp|jŒD ]}]tj ||] ˆ| j¡¡}U|Z|U|[ƒ	r t4j5|\d—|Ud” 	q…|8 C¡ D ]}
tj ||
d ¡}H|Z|H|[ƒ	r¿t4j5|\d—|Hd” 	q¦g }^tX|	ƒtX|ƒ tX|8ƒ dk
rÄt4 5|d“¡}_|	D ]J}`tj ||` ˆ| j¡¡}U|Z|U|^ƒ
r#t4j5|_d˜|Ud”}at Ž|`¡}9|  |8|9|a¡ |  |9|a|'¡ |  ‘|9|a|(¡ |  ’|9|a|)¡ d™|  }||`¡ t4 5|adš¡_6	qÚ|D ]G}`|Z|`|^ƒ
rmt4j5|_d˜|`d”}at Ž|`¡}9|  |8|9|a¡ |  |9|a|'¡ |  ‘|9|a|(¡ |  ’|9|a|)¡ t“ ”| •¡ |`¡}`d™|  }||`¡ t4 5|adš¡_6
q'|8 :¡ D ]P\}9}
|
d }b|b
rÂ|Z|b|^ƒ
rÂt4j5|_d˜|bd”}a|  –|8|9|a¡ |  |9|a|'¡ |  ‘|9|a|(¡ |8|9 d› }<|<
r¹t— ˜|)¡}c|<g|c|9  |c|9< n|)}c|  ’|9|a|c¡ 
qsg }d|  ™||Q|¡rt4 5|d“¡}e|D ]}`tj ||` ˆ| j¡¡}U|Z|U|dƒ
rñt4j5|edœ|Ud” 
qÖ|QD ]}`|Z|`|dƒrt4j5|edœ|`d” 
qõ|  š|e|¡ t4j5|ddždŸ |  ›|¡ |  œ||¡ |  t4 ž|¡|¡ d S ) NzGenerating vcxproj rå   ÚWindowsZApplicationZConsoleú,r   ÚStaticLibraryZDynamicLibraryzUnknown target type for Zb_vscrtr   )r4  r5  r(  r)  r*  r  ZWholeProgramOptimizationZDefaultZBasicRuntimeChecksz/INCREMENTAL:NOZLinkIncrementalÚItemDefinitionGroupZ	ClCompileZfrom_buildtyper¥   r0  ZUseDebugLibrariesZMultiThreadedDebugDLLZRuntimeLibraryZMultiThreadedDLLZstatic_from_buildtypeZMultiThreadedDebugZMultiThreadedZmddÚmtZmtdz/fsanitize=addressZ
EnableASANz/ZIZEditAndContinueZDebugInformationFormatz/ZiZProgramDatabasez/Z7ZOldStyler¿   z/RTC1ZEnableFastChecksz/RTCuZUninitializedLocalUsageCheckz/RTCsZStackFrameRuntimeCheckrT  Úeh)Úmachiner   ÚaZAsyncZExceptionHandlingÚsZ
SyncCThrowr¦   ZSyncc                 S  s   i | ]	\}}||  ¡ “qS r'   )Úcompiler_args)r-   ÚlrS  r'   r'   r(   Ú
<dictcomp>þ  r\   z-Vs2010Backend.gen_vcxproj.<locals>.<dictcomp>c                 S  ó   i | ]}|g “qS r'   r'   ©r-   r¤  r'   r'   r(   r¥  ÿ  ó    c                 S  r¦  r'   r'   r§  r'   r'   r(   r¥     r¨  r4   )rg  rm  ú%(AdditionalIncludeDirectories)c                 S  r,   ©ú-Ir'   ©r-   r6   r'   r'   r(   r/     r0   z-Vs2010Backend.gen_vcxproj.<locals>.<listcomp>r«  c                 S  r,   rª  r'   r¬  r'   r'   r(   r/   F  r0   )z-Dz/Drm  r   )r«  z/Ir©  ZOpenMPSupportz/Gwrg  rr   rh  rt   rs  rn  ZFunctionLevelLinkingÚwarning_levelZLevelZWarningLevelZwerrorZTreatWarningAsErrorz/OxÚFullZOptimizationz/O2ZMaxSpeedz/O1ZMinSpacez/OdZDisabledz/OiZIntrinsicFunctionsz/Ob1ZOnlyExplicitInlineZInlineFunctionExpansionz/Ob2ZAnySuitablez/OsÚSizeZFavorSizeOrSpeedZSpeedZb_pch)rS  rT  ÚmsvcZResourceCompileZLinkÚGenerateDebugInformationz<19.00.23918Fz.objr  T)r#  z%(AdditionalLibraryDirectories)ZAdditionalLibraryDirectoriesz%(AdditionalDependencies)ZAdditionalDependenciesZ
OutputFilez	$(OutDir)Z	SubSystemZImportLibraryZModuleDefinitionFilerb  rc  ZTargetMachineÚwin32Z
MachineX86rœ   Z
MachineX64r¡   Z
MachineARMrž   ZMachineARM64r    ZMachineARM64ECz*Unsupported Visual Studio target machine: ZSuppressStartupBannerZSetChecksumrX   rp   c                 S  s.   t j t j | ¡¡}||vr| |¡ dS dS )NTF)r"   r=   Únormcaser  r3   )r=   ZlisÚ
normalizedr'   r'   r(   Úpath_normalize_add]  s
   
z5Vs2010Backend.gen_vcxproj.<locals>.path_normalize_addZ	CLIncludeZ	CLCompileú	$(IntDir)ZObjectFileNamerø   ZObjectr1  r>  r2  )Ÿr
   r¥   rê   rN   rU   rz   r   rÛ   Zgui_appZwin_subsystemr  rœ  ZSharedLibraryr{   rQ  r×   rH  ZCompileTargetrR  r   r  rx   r"   r=   rS   r   rT   r  r  Zis_unityZgenerate_unity_filesr”  Zget_buildtype_argsr£   Zget_optimization_argsr¤   Zget_debug_argsZsanitizer_compile_argsr²   Zget_buildtype_linker_argsrc   r°   r  r   r  r   rÿ   r¯   r@   ÚsplitextÚget_filenamer:  rƒ   r„   rŒ   r  r   r™   rÏ   Zget_base_compile_argsZget_optionsZget_option_compile_argsZprojects_argsrÌ   Z
subprojectZglobal_argsrû   rÕ   rè   Zget_include_dirsZget_incdirsZ
get_curdirr3   rw   r‚   Ú
ValueErrorr  Zget_extra_build_dirsÚ
extra_argsrW   Zimplicit_include_directoriesr1   r‘  Zget_external_depsr	   ZOpenMPDependencyZunix_args_to_nativeZget_compile_argsr†   r±   r:   Úintr8   Úgenerate_lang_standard_infoZget_pchÚidZcreate_msvc_pch_implementationÚdirnamer£  Úgenerate_debug_informationZSharedModuleZget_std_shared_module_link_argsZget_project_link_argsZget_global_link_argsZget_external_link_argsZget_languageZ	link_argsZextend_directZget_link_argsrØ   Zget_option_link_argsr“  ri  r|   rù   Zget_target_filename_for_linkingrÙ   r   ÚversionZextract_all_objectsr   r}   r  Zget_target_generated_dirr  Zobject_filename_from_sourceÚextendZflatten_object_listZget_link_whole_forr%  r
  r$  Z$get_custom_target_provided_librariesr  Zget_import_filenameZvs_module_defsr‡   r®   rE   r   Zextra_filesr$   r  r[  rl  rr  rv  r   Zfrom_built_fileZ
get_subdirr`  ÚcopyÚdeepcopyry  r|  rB  r'  rC  rD  )frO   rV   rE  r5  Z	subsystemr(  r   Zproj_to_src_rootZproj_to_src_dirr  r  rÚ   r  ÚcompilerZ
build_argsZbuildtype_link_argsZ
vscrt_typer3  r@   Z	tfilenamer!  r9  ZcompilesÚclconfrŸ  Zgenerated_filesrŽ   Zgenerated_files_include_dirsZgen_srcZgen_hdrsZgen_objsZ	gen_langsZ
custom_srcZcustom_hdrsZcustom_objsZcustom_langsZtarget_argsZtarget_definesZtarget_inc_dirsrk  rp  rt  r¤  Úcompr4   Úoptsrâ   r‘   ÚcurdirZ
t_inc_dirsr6   rq  Úinc_dirZd_compile_argsr­  r5   rY  r   r_  rV  Zpch_header_dirZresourcecompileÚlinkÚextra_link_argsr  r  Zadditional_libpathsZadditional_linksrÓ   ZlobjZlinknameÚgenr=   Zgen_src_extZobj_basenamer[   Zrel_objZtrelpathZtvcxprojr&  Úlibrw  rÑ   rî   Zsubsysrw   ÚpdbZtargetmachineZtargetplatformZmeson_file_grouprµ  Zprevious_includesZinc_hdrsÚhZprevious_sourcesZinc_srcr¢  rZ  ÚimplZinc_dirsZprevious_objectsZinc_objsr'   r'   r(   r  k  s~  
€



û








ÿ
ÿÿ€$
€
€þþõ
€ÿ
€


€é



€ó
















ÿ
€

€ü
ÿ
€

€







(€€
€€

ÿ€

ÿ€
€€€
zVs2010Backend.gen_vcxprojc           
   	   C  s  | j jj}| j|d|d\}}t |d¡}t |d¡}dt |d¡_dt |d¡_d	t |d
¡_dt |d¡_dt |d¡_dt |d¡_| j  ¡ ddg }d}	|	|  ¡ d 	|¡| j  
¡ f }| j|d||  ¡ t | j  ¡ ¡gdd tj|ddd tj|ddd |  t |¡|¡ d S )Nz
regen-tempr;  r  ÚMidlr©  rs  r¶  ÚOutputDirectoryú%(Filename).hÚHeaderFileNameú%(Filename).tlbÚTypeLibraryNameú%(Filename)_i.cÚInterfaceIdentifierFilenameú%(Filename)_p.cÚProxyFileNamez
--internalZ
regencheckzcall %s > NUL
"%s" "%s"ú" "Zregenz2Checking whether solution needs to be regenerated.)r”   rM  Úmsgr1  r>  r2  ZImportGroupZExtensionTargetsr.  )rc   r°   rý   r:  rƒ   r„   rŒ   Úget_build_commandrÎ   rS   rP  rA  Zget_regen_filelistr$   rÁ   rg   rC  rD  )
rO   r³   rE  r5  r!  r9  ÚactionÚmidlZregen_commandZ	cmd_templr'   r'   r(   r·   ²  s2   

þÿþzVs2010Backend.gen_regenprojc           	      C  s$  | j jj}| j|d|d\}}t |d¡}t |d¡}dt |d¡_dt |d¡_d	t |d
¡_dt |d¡_dt |d¡_dt |d¡_| j  ¡ ddg }| j j t	dƒ¡s\|dg7 }| j j t	dƒ¡rj|dg7 }|  
¡  |  |ddd |¡ ¡ tj|ddd |  |¡ |  t |¡|¡ d S )Nz	test-tempr;  r  rÑ  r©  rs  r¶  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  Útestú--no-rebuildZstdsplitz--no-stdsplitZ	errorlogsz--print-errorlogsÚ	run_testsr  rÛ  r1  r>  r2  )rc   r°   rü   r:  rƒ   r„   rŒ   rÝ  r±   r   Zserialize_testsrA  rS   rB  rC  rD  )	rO   r3  rE  r5  r!  r9  rÞ  rß  Ztest_commandr'   r'   r(   rµ   Ì  s.   

þ


zVs2010Backend.gen_testprojc           	      C  sì   |   ¡  | jjj}| j|d|d\}}t |d¡}t |d¡}dt |d¡_dt |d¡_d	t |d
¡_dt |d¡_dt |d¡_dt |d¡_| j ¡ ddg }|  	|ddd 
|¡ ¡ tj|ddd |  |¡ |  t |¡|¡ d S )Nzinstall-tempr;  r  rÑ  r©  rs  r¶  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  Úinstallrá  Zrun_installr  rÛ  r1  r>  r2  )Zcreate_install_data_filesrc   r°   rþ   r:  rƒ   r„   rŒ   rÝ  rA  rS   rB  rC  rD  )	rO   r3  rE  r5  r!  r9  rÞ  rß  Zinstall_commandr'   r'   r(   r¶   æ  s&   

þ
zVs2010Backend.gen_installprojTc                 C  s  t  |d¡}tj | j ¡ |d ¡}	tj |	¡s4t|	ddd}
|
 	d¡ W d   ƒ n1 s/w   Y  t j|d|	d}|rGt  |d	¡}||_
|sPd
t  |d¡_
|› dt  |d¡_
|sj|  tj | j ¡ d¡¡g}d |¡t  |d¡_
|r‚d |¡t  |d¡_
d S d S )NrX   z.rulerÂ   rÃ   rÄ   z# Meson regen file.ro   rp   ÚMessager  ZVerifyInputsAndOutputsExistÚ
rs   rL  rt   ru   rv   )rƒ   r„   r"   r=   rS   rc   rP  rË   rÆ   rí   rŒ   rO  )rO   r{  Zrulenamer?  r”   rM  rÜ  rN  ZigroupZrulefiler.   ZcustombuildÚmessager'   r'   r(   rA  ü  s*   ÿÿÿzVs2010Backend.add_custom_buildc                 C  s0   d}| }t j |¡rd| |f }t j |¡s
|S )Nr   z%s%d)r"   r=   rË   )Úprefixr‘   Úfiler'   r'   r(   rO    s   ÿzVs2010Backend.nonexistent_filec                 C  s   dt  |d¡_d S )Nr0  r±  r   )rO   rÊ  r'   r'   r(   r¿  !  s   z(Vs2010Backend.generate_debug_informationc                 C  s,   t j | j ¡ d¡}|  ||| jjj¡ d S )Nr¬   )r"   r=   rS   rc   rg   r$  r°   rý   )rO   r!  Zregen_vcxprojr'   r'   r(   rB  %  s   z"Vs2010Backend.add_regen_dependencyc                 C  rz  rR   r'   )rO   rk  rÅ  r'   r'   r(   r¼  )  s   z)Vs2010Backend.generate_lang_standard_info)r   r   r   r   )r¾   r:   r   r¿   )F)rÓ   rÔ   )NNNT)5Ú__name__Ú
__module__Ú__qualname__rê   rG   rW   r™   r½   ÚstaticmethodrÁ   r¹   rÎ   rÒ   rß   rõ   r¸   r´   r  rx   r‹   r$  r'  r:  rH  rQ  rR  Úclassmethodr  r[  r`  rX  r^  rf  rl  rr  rv  ry  r|  ro  rj  r“  r”  rC  r  r·   rµ   r¶   rA  rO  r¿  rB  r¼  Ú__classcell__r'   r'   rP   r(   r$   g   s€    ?9>f

ûE(
	





 
    K

r$   )r   r   r   r   r   r   )r@   r:   r   rA   )+Ú
__future__r   rÂ  rÜ   r"   Zxml.dom.minidomr•  Zxml.etree.ElementTreeÚetreerD  rƒ   r;   ÚtypingÚTÚpathlibr   r   rB   rY   r   r   r	   r
   r   Zmesonlibr   r   r   r   r   r   rc   r   r   ÚTYPE_CHECKINGr   r   r)   r8   r?   rE   ZBackendr$   r'   r'   r'   r(   Ú<module>   s0    
#
