o
    ºùŠemÛ ã                   @  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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j&r‘ddl'm(Z( ddl)m*Z* ej+e,ee,e!f Z-d6dd„Z.d7dd„Z/d8dd„Z0d9d"d#„Z1d:d%d&„Z2d;d+d,„Z3d<d2d3„Z4G d4d5„ d5ej5ƒZ6dS )=é    )Ú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)Ú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,   úE/usr/lib/python3.10/site-packages/mesonbuild/backend/vs2010backend.pyÚautodetect_vs_version,   s<   






ÿr.   ÚargsúT.List[str]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 )r1   r,   )Ú.0Úfr,   r,   r-   Ú
<listcomp>a   ó    z&split_o_flags_args.<locals>.<listcomp>)Ú
startswithÚlistÚappend)r/   Úo_flagsÚargÚflagsr,   r,   r-   Úsplit_o_flags_argsO   s   
r>   Ústrc                 C  s&   t t tjd| d t | ƒ ¡ƒ ¡ S )Nz	meson-vs-ú:)r?   ÚuuidZuuid5ZNAMESPACE_URLÚupper)ÚpathÚ	path_typer,   r,   r-   Úgenerate_guid_from_pathd   s   &rE   ÚplatformÚboolc                 C  s   t  d| t j¡S )Nz1Gaming\.(Desktop|Xbox.XboxOne|Xbox.Scarlett)\.x64)ÚreÚmatchÚ
IGNORECASE)rF   r,   r,   r-   Údetect_microsoft_gdkg   s   rK   Úsourcesc                 c  s8    | D ]}|  d¡d }tj |¡rtjj| V  qd S )NÚ.éÿÿÿÿ)Úsplitr   Úis_source_suffixÚSUFFIX_TO_LANG)rL   ÚsrcÚextr,   r,   r-   Úfiltered_src_langs_generatorj   s   €€ýrT   Útarget_sourcesúT.List[File]Úcustom_sourcesúT.Optional[str]c                 C  s@   t dd„ | D ƒƒ}|t t|ƒƒ7 }| d¡}|r|d d S d S )Nc                 S  s(   g | ]}t j  |j¡rt j j|j ‘qS r,   )r   rP   ÚsuffixrQ   )r4   rR   r,   r,   r-   r6   w   s   ( z+get_primary_source_lang.<locals>.<listcomp>r   r   )r   rT   Úmost_common)rU   rW   Zlang_countsZmost_common_lang_listr,   r,   r-   Úget_primary_source_langv   s   
r[   Ú
vslite_ctxÚdictÚ	target_idÚprimary_src_langú0T.Dict[str, T.Dict[str, T.Tuple[str, str, str]]]c           	        sh   i }t  ¡ D ]+}| | | }‡ fdd„| ¡ D ƒ}|D ]\}}||vr'i ||< t |¡|| |< qq|S )Nc                   s    g | ]\}}|ˆ kr||f‘qS r,   r,   )r4   ÚlangÚ
build_args©r_   r,   r-   r6   ˆ   s     z<get_non_primary_lang_intellisense_fields.<locals>.<listcomp>)r   Ú get_genvs_default_buildtype_listÚitemsr)   Ú_extract_nmake_fields)	r\   r^   r_   Ú&defs_paths_opts_per_lang_and_buildtypeÚ	buildtypeÚcaptured_build_argsZ#non_primary_build_args_per_src_langZsrc_langZ	args_listr,   rc   r-   Ú(get_non_primary_lang_intellisense_fields‚   s   ýrj   c                      sN  e Zd ZdZdÀdÁ‡ fd	d
„Zdd„ ZdÂdd„Zdd„ Z		dÃdÄd"d#„Ze	dÅd&d'„ƒZ
e	dÅd(d)„ƒZd*d+„ Zd,d-„ ZdÀdÆd0d1„ZdÇd5d6„ZdÈd:d;„ZdÉdÊd<d=„Zd>d?„ Zd@dA„ ZdBdC„ ZdÀdËdHdI„ZdÌdJdK„ZdLdddMœdÍdOdP„ZdÎdTdU„ZdÏdWdX„ZdÐdZd[„Zed\d]„ ƒZd^d_„ Zd`da„ Zdbdc„ Zddde„ Z dfdg„ Z!dhdi„ Z"dÑdmdn„Z#dodp„ Z$dqdr„ Z%e	dÒdtdu„ƒZ&e	dÓdwdx„ƒZ'e	dydz„ ƒZ(d{d|„ Z)dÔdd€„Z*dd‚„ Z+e	dÕd‡dˆ„ƒZ,e	dÖdŒd„ƒZ-e	d×dd„ƒZ.dØd•d–„Z/dÙd˜d™„Z0dÚdœd„Z1dÉdÛdždŸ„Z2d d¡„ Z3d¢d£„ Z4d¤d¥„ Z5d¦d§„ Z6		¨dÜdÝd±d²„Z7e	dÞd´dµ„ƒZ8dßd·d¸„Z9dàd¹dº„Z:dád¾d¿„Z;‡  Z<S )âr)   Zvs2010Fr
   r   r   r   Úgen_literG   c                   sH   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_depsrk   )Úselfr
   r   rk   ©Ú	__class__r,   r-   rm   “   s   
zVs2010Backend.__init__c                 C  s   t j |  |¡| ¡ ¡S ©N)r'   rC   ÚjoinÚget_target_dirÚget_id©ru   Útargetr,   r,   r-   Úget_target_private_dirŸ   s   z$Vs2010Backend.get_target_private_dirÚgenlistúIT.Union[build.GeneratedList, build.CustomTarget, build.CustomTargetIndex]r}   úbuild.BuildTargetÚparent_nodeú
ET.ElementÚgenerator_output_filesr0   Úcustom_target_include_dirsÚcustom_target_output_filesr   ÚNonec              	     sÔ  t |tjƒr|jD ]}ˆ |||g g g ¡ q	ˆ ˆ |¡ˆ |¡¡‰ˆ |¡}t |tj	tj
fƒr`| ¡ D ]}	tj |ˆ |¡|	¡}
| |
¡ q4ˆ ˆ |¡ˆ |¡¡}||vr^| |¡ d S d S | ¡ }| ¡ }| ¡ }| ¡ }tj |ˆj|j¡‰t |d¡}t|ƒt|ƒk}t|ƒD ]Û\}	}|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|j#d\}}|dd … | }tj ˆj ¡ ˆ |¡¡}tj$|dd tj|dˆ d}d ˆ %|¡¡t |d¡_&d |¡t |d¡_&d |¡t |d¡_&qŒd S )NÚ	ItemGroupÚ Tc                   s   g | ]	}t j ˆ |¡‘qS r,   )r'   rC   ry   )r4   Úof)Útarget_private_dirr,   r-   r6   Á   ó    z=Vs2010Backend.generate_genlist_for_target.<locals>.<listcomp>c                   s    g | ]}|  d ˆ ¡  dˆ¡‘qS )z@INPUT@z@OUTPUT@©Úreplace©r4   Úx)Ú
infilenameÚsole_outputr,   r-   r6   Ã   s    ÿc                   s&   g | ]}|  d ˆ j ¡ ¡  dˆ¡‘qS )z@SOURCE_DIR@z@BUILD_DIR@)rŽ   ÚenvironmentÚget_source_dirr   )ru   r‹   r,   r-   r6   Æ   s
    þÿc                   s   g | ]}|  d ˆ ¡‘qS )z@CURRENT_SOURCE_DIR@r   r   )Ú
source_dirr,   r-   r6   É   ó    c                   s,   g | ]}|  d ˆ j ¡ ¡  dˆ j ¡ ¡‘qS )z@SOURCE_ROOT@z@BUILD_ROOT@)rŽ   r“   r”   Úget_build_dirr   )ru   r,   r-   r6   Ê   s
    þÿc                 S  s   g | ]}|  d d¡‘qS )ú\ú/r   r   r,   r,   r-   r6   Í   r–   r   )ÚworkdirÚcaptureÚforce_serializeÚenvrN   )Úexist_okÚCustomBuild©ÚIncludeú ÚCommandú;ÚOutputsÚAdditionalInputs)'Ú
isinstancer
   ZGeneratedListÚdependsÚgenerate_genlist_for_targetÚrelpathr~   rz   Útarget_to_build_rootÚCustomTargetÚCustomTargetIndexÚget_outputsr'   rC   ry   r:   Úget_generatorÚget_exeÚ
get_inputsÚbuild_to_srcÚsubdirÚETÚ
SubElementÚlenÚ	enumerateÚrel_to_builddirÚget_target_depend_filesZget_arglistZget_outputs_forZreplace_outputsr“   r—   Úas_meson_exe_cmdlineZreplace_extra_argsr›   r   ÚmakedirsÚquote_argumentsÚtext)ru   r   r}   r‚   r„   r…   r†   r   ÚdownÚiZipathZidirÚ	generatorÚexeZ
infilelistZoutfilelistZidgroupZsamelenZcurfileÚdepsZ	base_argsZoutfiles_relÚoutfilesr/   Útdir_absÚcmdÚ_Zabs_pdirZcbsr,   )r‘   ru   r’   r•   r‹   r-   r©   ¢   sv   

ÿ

ÿþ
þ

úÙz)Vs2010Backend.generate_genlist_for_targetc              	   C  s8   g }g }g }|  ¡ D ]}|  ||||||¡ q
|||fS rx   )Úget_generated_sourcesr©   )ru   r}   r‚   r„   r…   r†   r   r,   r,   r-   Ú"generate_custom_generator_commandsá   s   
z0Vs2010Backend.generate_custom_generator_commandsNr›   r\   r]   úT.Optional[dict]c           	      C  s  |rt dƒ‚| jjd  d d ¡}|dv r*| jjd  d d ¡}t|ƒr&|| _n6d| _n2|dkr2d| _n*|dv rL| jjd  d d ¡}|dkrHd| _nd	| _nd
| ¡ v rVd| _nt	d| ƒ‚| jjd  d d ¡}|dv rnd| _
n2|dkrvd| _
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 ¡}|  |¡}|  ¡  |  ¡  |  ¡  |  ||¡ |  ¡  t  | j ¡ ¡ d S )NzAWe do not expect any vs backend to generate with 'capture = True'Útarget_machine>   Z64Úx86_64Úx64Úx86ZWin32>   Úarm64Úaarch64Úarm64ecrÎ   ÚarmZARMz$Unsupported Visual Studio platform: Úbuild_machinerh   ÚoptimizationÚdebugZ
b_sanitizeÚnonez.sln)!r   r   ÚbuiltinZcpu_family_methodZsystem_methodrK   rF   Z
cpu_methodÚlowerr   Úbuild_platformr“   r   Ú
get_optionr   rh   rÓ   rÔ   Úsanitizer'   rC   ry   r—   r
   Úproject_nameÚgenerate_projectsÚgen_testprojÚgen_installprojÚgen_regenprojÚgenerate_solutionZgenerate_regen_infor)   Útouch_regen_timestamp)	ru   r›   r\   rÊ   Ztarget_systemÚ
target_cpurÒ   Úsln_filenameÚprojlistr,   r,   r-   Úgenerateé   s^   
ÿ
zVs2010Backend.generateÚ	build_dirr?   c                 C  s   t j t j | tj¡d¡S )Nzregen.stamp)r'   rC   ry   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\r‰   zvcvarsall.batÚPlatformrÍ   rÆ   ú"z" ZVS150COMNTOOLSzVsDevCmd.batz"%s" -arch=%s -host_arch=%s)r'   ÚenvironrC   ÚexistsÚget)ru   Zhas_arch_valuesr+   Zrelative_pathZscript_pathZtarget_archZ	host_archÚarchr,   r,   r-   Úget_vcvars_command0  s.   


ÿÿ
ÿz Vs2010Backend.get_vcvars_commandc                 C  s2   i }|D ]}t |tjƒr|j||j ¡ < q| ¡ S rx   )r§   r
   ZExtractedObjectsr}   r{   re   )ru   Zobj_listÚresultÚor,   r,   r-   Úget_obj_target_depsK  s   €z!Vs2010Backend.get_obj_target_depsÚ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 )Úvaluesr§   r
   r¬   Zget_target_dependenciesÚTargetr{   Ú	RunTargetÚget_dependenciesÚBuildTargetZlink_targetsr­   r}   Úlink_whole_targetsZlink_dependsr   rø   Úobjectsr   rÇ   r¯   r°   Ú
ExecutableÚ	itertoolsÚchainr¨   Úget_target_depsÚupdate)ru   rù   Ú	recursiveZall_depsr}   ÚdZldepZobj_idZobjdepZgendeprÀ   Zgen_exeÚretr,   r,   r-   r  R  sj   €üÿ




ÿ€üö
zVs2010Backend.get_target_depsÚofileÚparentsúT.Sequence[Path]c                 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³   rM   r   Ú	directoryúEndProject
)ÚreversedÚnextrs   ÚnamerE   Úparentr   r“   r   Ú
lang_guidsÚwrite)ru   r
  r  Ú	prj_templZ	iterpathsrC   ÚbasenameÚ
identifierÚ
parent_dirZparent_identifierÚprj_liner,   r,   r-   Úgenerate_solution_dirs  s*   

ÿÿþ

€óz$Vs2010Backend.generate_solution_dirsrã   rä   úT.List[Project]c                 C  s”  |   ¡ }| |  ¡ ¡ |d }t|ddd#}| d| j ¡ | d| j ¡ d}|D ]o}| jj 	t
dƒ¡d	krB|  ||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r¾d}d}nd}d}|| jjjd ||| jjjf }| |¡ | d¡ || jjjd dd| jjjf }| |¡ | d¡ | d¡ | d¡ | jrt ¡ n| jg}|D ]}| d|| j|| jf ¡ q| d¡ | d¡ |D ])}| d| jjj|| j|| jf ¡ | jsS| d | jjj|| j|| jf ¡ q+|D ]N}|d! tju re| j}n| j}|D ]9}| d|d || j||f ¡ | js¢|d |v r¢t | jj|d  tj!ƒs¢| d |d || j||f ¡ qjqW|D ]%}| d| jjj|| j|| jf ¡ | d| jjj|| j|| jf ¡ q¨| 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  ÚlayoutÚmirrorr   r   Údefaultr   r	   T)r  r  Ú	RUN_TESTSzRUN_TESTS.vcxprojÚRECONFIGUREúRECONFIGURE.vcxprojÚREGENúREGEN.vcxprojÚRUN_INSTALLzRUN_INSTALL.vcxprojz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
rM   z		{{{}}} = {{{}}}
z
EndGlobal
)(Zget_build_by_default_targetsr  Zget_testlike_targetsrí   r  ro   rp   r“   r   rÙ   r   r  r  r
   ÚtargetsÚhasattrr   Úkeysr  r{   r  re   Ú	test_guidrk   Ú
regen_guidÚinstall_guidrd   rh   rF   r   ÚBUILDrØ   r§   rý   rs   r  r   r*   rû   r   )ru   rã   rä   Zdefault_projlistZsln_filename_tmpr
  r  Zprjr}   ra   Zlang_outr  Útarget_dictZrecursive_depsÚdepÚ	test_lineZregen_proj_nameZregen_proj_fnameZ
regen_lineZinstall_lineÚmulti_config_buildtype_listrh   ÚpZconfig_platformr³   r,   r,   r-   rà   ¤  s   þ
ÿ
€þþ

þ

þ



ÿ
ÿ



ÿÿ

ÿÿ€ÿÿ
ÿÿÿ€ò

ÿÿ

ÿ
ÿ




&€
€
rzVs2010Backend.generate_solutionc                 C  sì   | j jjtdƒ j}g }d}t| jj ¡ ƒD ]R\}\}}|r&|| 	¡ kr&|}t
| j  ¡ |  |¡ƒ}|jddd |d }	t|  |¡ƒ}
|
|	 }||	 }| j jj| }|  |t|ƒ||¡}|rh| ||||jf¡ q|rt| d| |¡¡ |S )NZbackend_startup_projectr   T)rž   r  ú.vcxproj)r“   r   Úoptionsr   Úvaluer·   r
   r(  re   Úget_basenamer   r—   rz   Úmkdirr   Útarget_guidsÚgen_vcxprojr?   r:   Úfor_machineÚinsertÚpop)ru   r\   Zstartup_projecträ   Zstartup_idxr¿   r  r}   ÚoutdirÚfnameÚ
target_dirZrelnameZprojfile_pathZ	proj_uuidÚ	generatedr,   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 rx   )r“   Z	is_headerr:   Z	is_objectÚ	is_sourceÚlang_from_source_fileZ
is_library)ru   ÚsrclistrL   Úheadersr  Ú	languagesr¿   ra   r,   r,   r-   Úsplit_sources9  s&   


€zVs2010Backend.split_sourcesc                 C  sB   |   |¡dkr	dS tj |   |¡¡ tj¡}tj dgt|ƒ ¡S )Nr‰   ú..)rz   r'   rC   ÚnormpathrO   Úsepry   r¶   )ru   r}   Zdirectoriesr,   r,   r-   r«   O  s   z"Vs2010Backend.target_to_build_rootc                 C  s   dd„ |D ƒS )Nc                 S  s   g | ]}d | ‘qS )ú"%s"r,   )r4   r¿   r,   r,   r-   r6   W  r7   z1Vs2010Backend.quote_arguments.<locals>.<listcomp>r,   )ru   Zarrr,   r,   r-   r¼   V  s   zVs2010Backend.quote_argumentsÚrootÚincludeÚprojidÚlink_outputsc                 C  sH   t  |d¡}t j|d|d}d| t  |d¡_|s"dt  |d¡_d S d S )Nrˆ   ZProjectReferencer    ú{%s}ÚProjectÚfalseZLinkLibraryDependencies©r´   rµ   r½   )ru   rL  rM  rN  rO  ZigZprefr,   r,   r-   Úadd_project_referenceY  s   üz#Vs2010Backend.add_project_referencec                 C  s~   |  ¡ |i}|  |¡ ¡ D ]/}|  ¡ | j|  ¡  v rq|  ||¡}tj ||  ¡ d ¡}| jj	j
|  ¡  }|  |||¡ qd S )Nr4  )r{   r  rû   rt   Úget_target_dir_relative_tor'   rC   ry   r“   r   r9  rT  )ru   rL  r}   r/  r0  rª   ZvcxprojÚtidr,   r,   r-   Úadd_target_depsc  s   ùzVs2010Backend.add_target_depsÚUtility)ÚconftypeÚ
target_extÚtarget_platformúT.Tuple[ET.Element, ET.Element]c                C  s  t  dddddœ¡}t  |dddi¡}|s| j}| jrt ¡ n| jg}	|	D ]}
t  |d	d
|
d | i¡}|
t  |d¡_|t  |d¡_q%t j|ddd}t  |d¡}d| |_t  |d¡}| jd |_t j|ddd t j|ddd}|t  |d¡_| j	r„| j	t  |d¡_t j|ddd | jst  |d¡}||_t  |d¡}||_t  |d¡}||_| j
r¶| j
t  |d¡_dt  |d¡_d t  |d!¡_d"t  |d#¡_t  |d¡}t  |d$¡}| j|_t  |d%¡}d&|_t  |d'¡}|d( |_t  |d)¡}||_|r|t  |d*¡_||fS )+NrQ  ÚBuildú4.0ú3http://schemas.microsoft.com/developer/msbuild/2003)ZDefaultTargetsÚToolsVersionÚxmlnsrˆ   ÚLabelZProjectConfigurationsZProjectConfigurationr¡   ú|ZConfigurationrï   ÚPropertyGroupZGlobals©rb  ZProjectGuidrP  ÚKeywordZProjÚImportz,$(VCTargetsPath)\Microsoft.Cpp.Default.props©rQ  ZConfigurationTypeZPlatformToolsetz$$(VCTargetsPath)\Microsoft.Cpp.propsZRootNamespaceZProjectNameZWindowsTargetPlatformVersionÚtrueZUseMultiToolTaskZ	MultiByteZCharacterSetrR  ZUseOfMfcZ_ProjectFileVersionÚOutDirz.\ÚIntDirr˜   Z
TargetNameZ	TargetExt)r´   ÚElementrµ   rF   rk   r   rd   rh   r½   rq   rr   rn   )ru   Útarget_nameÚtemp_dirÚguidrY  rZ  r[  rL  Z	confitemsr2  rh   ZprjconfZglobalgroupZguidelemÚkwÚtype_configÚnsr3  ZpnameZdirelemZfverr>  ZintdirZtnamer,   r,   r-   Úcreate_basic_projectn  sb   þÿ

z"Vs2010Backend.create_basic_projectúbuild.RunTargetÚofnamero  c                 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©rn  ro  r   r   T)rœ   r   ÚverboseZ
run_targetr¢   )rÂ   rg  ú&$(VCTargetsPath)\Microsoft.Cpp.targetsrh  )rs  r  r{   r¹   Úcommandr§   r
   ZAliasTargetr¶   Zget_run_target_envÚeval_custom_target_commandrº   Úadd_custom_buildry   r¼   r´   rµ   Úadd_regen_dependencyrW  Ú_prettyprint_vcxproj_xmlÚElementTree)ru   r}   ru  ro  rL  rq  Údepend_filesZ
target_envrÆ   Zcmd_rawÚwrapper_cmdr,   r,   r-   Úgen_run_target_vcxprojº  s,   
þ


þÿ
z$Vs2010Backend.gen_run_target_vcxprojúbuild.CustomTargetc                 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©rn  ro  r[  Tr   r   )rš   Úextra_bdepsr›   Úfeedrœ   r   rw  úoutofdate.fileZcustom_targetr¢   rN   )rÂ   ÚoutputsÚverify_filesrg  rx  rh  )$r;  r   r.  rØ   rF   rs  r  r{   Zabsolute_pathsrz  r¹   r'   rC   ry   r“   r—   rz   Z get_transitive_build_target_depsrº   ry  r›   r…  r   ZconsoleZbuild_always_staleÚnonexistent_fileÚget_scratch_dirr{  r¼   r´   rµ   rÈ   r|  rW  r}  r~  )ru   r}   ru  ro  rF   rL  rq  ZsrcsZ
ofilenamesrÅ   r  rÄ   r„  r€  rÆ   r,   r,   r-   Úgen_custom_target_vcxprojØ  sF   
ý
ø	
ÿþ
z'Vs2010Backend.gen_custom_target_vcxprojúbuild.CompileTargetc                 C  s’   |j tju r
| j}n| j}| j|j| ¡ ||d\}}tj	|ddd |  
|¡g|_g |_|  ||¡ |  |¡ |  ||¡ |  t |¡|¡ d S )Nrƒ  rg  rx  rh  )r;  r   r.  rØ   rF   rs  r  r{   r´   rµ   Zcompile_target_to_generatorrA  rL   rÈ   r|  rW  r}  r~  )ru   r}   ru  ro  rF   rL  rq  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ƒ‚)NrM   rN   ÚcÚcppz*Could not guess language from source file )rO   r   Z
c_suffixesZcpp_suffixesr   )ÚclsrR   rS   r,   r,   r-   rC    s   

z#Vs2010Backend.lang_from_source_filec                 C  s   ||v r|   |||¡ d S d S rx   )Úuse_pch)ru   Úpch_sourcesra   Ú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)ru   r’  ra   r“  Ú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–  )ru   r’  ra   r“  r˜  ÚheaderZpch_includer,   r,   r-   r‘  #  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'   rC   r  r´   rµ   r½   )ru   r’  ra   r“  rš  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©r8   )ru   Úentryr,   r,   r-   Ú"is_argument_with_msbuild_xml_entryA  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)r¢   ÚAdditionalOptions)Ú	to_nativer   r:   Úescape_additional_optionry   r´   rµ   r½   )ru   ra   r‚   Ú	file_argsr/   r<   r,   r,   r-   Úadd_additional_optionsI  s   
z$Vs2010Backend.add_additional_optionsrR   rg   rF   c                 C  sÄ   |  d¡d }tjj |d ¡}|| ¡ v rKt ¡ D ]/}|| | \}}	}
d|› d|› d}|tj|d|d_	|	tj|d|d_	|
tj|d	|d_	qd S d
t |d¡_	dt |d¡_	dt |d	¡_	d S )NrM   rN   ú!'$(Configuration)|$(Platform)'=='rc  ú'ÚPreprocessorDefinitions©Ú	ConditionÚAdditionalIncludeDirectoriesr¢  z$(NMakePreprocessorDefinitions)z$(NMakeIncludeSearchPath)z$(AdditionalOptions))
rO   r   rQ   ró   r*  r   rd   r´   rµ   r½   )ru   r‚   rR   rg   rF   rS   ra   rh   ÚdefsÚpathsÚoptsÚ	conditionr,   r,   r-   Ú$add_project_nmake_defs_incs_and_optsU  s   ûz2Vs2010Backend.add_project_nmake_defs_incs_and_optsc                 C  sN   g }|| D ]}|dkr|  |¡ q|  |  |¡¡ qd |¡t |d¡_d S )Nú%(PreprocessorDefinitions)r¤   r©  )r:   Úescape_preprocessor_definery   r´   rµ   r½   )ru   ra   r‚   Úfile_definesZdefinesÚdefiner,   r,   r-   Úadd_preprocessor_definesr  s   z&Vs2010Backend.add_preprocessor_definesc                 C  s    || }d  |¡t |d¡_d S )Nr¤   r¬  )ry   r´   rµ   r½   )ru   ra   r‚   Úfile_inc_dirsÚdirsr,   r,   r-   Úadd_include_dirs{  s   zVs2010Backend.add_include_dirsrµ  c                 C  s&   t  ddddddddd	œ¡}|  |¡S )
Nú%25ú%24ú%40ú%27ú%3Bú%3Fú%2Az\\)ú%ú$ú@r¨  r¤   ú?Ú*r˜   )r?   Ú	maketransÚ	translate)rµ  Útabler,   r,   r-   r³    s
   
û
z(Vs2010Backend.escape_preprocessor_defineÚoptionc                 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¨  r¤   rÄ  rÅ  r¢   r˜   rð   )r?   rÆ  rÇ  Úendswith)rÉ  rÈ  r,   r,   r-   r¤  Š  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)r™   ú-z.libz.a)r8   Úremover:   rÊ  )r/   ZlpathsZlibsÚotherr<   Zlpathr,   r,   r-   Úsplit_link_args˜  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>   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   )ru   r}   ra   rŽ  r,   r,   r-   Ú_get_cl_compiler¹  s   ÿÿzVs2010Backend._get_cl_compilerÚtreeúET.ElementTreec                 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   )ru   rÑ  ru  Z
ofname_tmpÚdocrŠ   r,   r,   r-   r}  Å  s   ÿz&Vs2010Backend._prettyprint_vcxproj_xmlc                 C  sz  g }g }g }	dd„ |j  ¡ D ƒ}
dd„ |j D ƒ}dd„ |j D ƒ}|j  ¡ D ]#\}}||
v rH|
|  t  | ¡ |¡7  < |
|  | | ¡ ¡7  < q%| jj|j  |j	i ¡ ¡ D ]\}}||
v rg|
|  |7  < qW| jj
|j  ¡ D ]\}}||
v r|
|  |7  < qq|
 ¡ D ]}|
|  | td|j|d¡7  < q†|
 ¡ D ]v}|g d¢7 }|dd	„ |D ƒ7 }t| ¡ ƒD ]^}t| ¡ ƒD ]9}tj | ¡ |¡}z| d
tj ||¡ ¡ | d
|  ||j¡ ¡ W q½ työ   | d
tj |¡ ¡ Y q½w | ¡ D ]}tj | ¡ |¡}| d
|  ||j¡ ¡ qûqµqž|j ¡ D ]\}}||
v r+|
|  |7  < q|
 ¡ D ]#}|  |  |¡|  |¡¡g}|jrJ|d|g7 }|dd	„ |D ƒ7 }q1|
 ¡ D ]w\}}|d d … D ]k}|  d¡sp|dkr•|
|  !|¡ |dkr|}n|dd … }||| vr“||  |¡ qc|  d¡s |dkrÍ|
|  !|¡ |dkr¯|}n|dd … }||| vrÃ||  |¡ ||	vrÍ|	 |¡ qcqYt| "¡ ƒD ]P}|j#dkr&| $| %¡ ¡}|D ]=}|  d¡r|dd … }||v r | !|¡ | |¡ qè|  d¡r|dd … }||	vr|	 |¡ qè| |¡ qèq×d|v r2| d¡ ||
f||f|	|ffS )Nc                 S  s   i | ]	\}}||  ¡ “qS r,   )Úcompiler_args)r4   ÚlrŽ  r,   r,   r-   Ú
<dictcomp>Ú  rŒ   z?Vs2010Backend.get_args_defines_and_inc_dirs.<locals>.<dictcomp>c                 S  ó   i | ]}|g “qS r,   r,   ©r4   rØ  r,   r,   r-   rÙ  Û  ó    c                 S  rÚ  r,   r,   rÛ  r,   r,   r-   rÙ  Ü  rÜ  r/   ©Úmachinera   )r¡  r²  ú%(AdditionalIncludeDirectories)c                 S  r3   ©ú-Ir,   ©r4   r<   r,   r,   r-   r6   ú  r7   z?Vs2010Backend.get_args_defines_and_inc_dirs.<locals>.<listcomp>rá  rM   c                 S  r3   rà  r,   râ  r,   r,   r-   r6   !  r7   ©z-Dz/Dr²  r	   )rá  ú/Irß  Úopenmpz/Gw)&r   re   Zget_base_compile_argsÚget_optionsZget_option_compile_argsr
   Zprojects_argsr;  ró   Ú
subprojectZglobal_argsr*  rÙ   r   rû   r  Zget_include_dirsZget_incdirsr'   rC   ry   Z
get_curdirr:   rª   r³   Ú
ValueErrorrI  Zget_extra_build_dirsÚ
extra_argsr~   rz   Zimplicit_include_directoriesr8   rÍ  Úget_external_depsr  Zunix_args_to_nativeZget_compile_args)ru   r}   ÚcompilerÚgenerated_files_include_dirsÚproj_to_src_rootÚproj_to_src_dirrb   Útarget_argsÚtarget_definesÚtarget_inc_dirsr¥  r´  r·  rØ  Úcompr/   r  r¿   ÚcurdirZ
t_inc_dirsr<   rµ  Úinc_dirZd_compile_argsr,   r,   r-   Úget_args_defines_and_inc_dirsÐ  sº   ÿÿ€$€€$þþõ
€ÿ
€


€é



€€

z+Vs2010Backend.get_args_defines_and_inc_dirsrh   Úoptimization_levelrÔ   rÚ   c                 C  s8   |   |¡}||  |¡7 }||  |¡7 }||  |¡7 }|S rx   )Zget_buildtype_argsZget_optimization_argsZget_debug_argsZsanitizer_compile_args)rë  rh   rö  rÔ   rÚ   rb   r,   r,   r-   Úget_build_argsZ  s
   
zVs2010Backend.get_build_argsri   ú	list[str]úT.Tuple[str, str, str]c                   s”   g d¢}d}d}d}| D ]8‰ ˆ   d¡r|ˆ dd … d 7 }qt‡ fdd„|D ƒd ƒ}|r9|ˆ t|ƒd … d 7 }qˆ   d¡rD|ˆ d 7 }q|||fS )	N)rá  rä  z-isystemz/clang:-isystemz/imsvcz/external:Ir‰   rã  r	   r¤   c                 3  s    | ]
}ˆ   |¡r|V  qd S rx   rž  )r4   Úopt©r<   r,   r-   Ú	<genexpr>~  s   € z6Vs2010Backend._extract_nmake_fields.<locals>.<genexpr>)rÌ  r™   )r8   r  r¶   )ri   Zinclude_dir_optionsr­  r®  Zadditional_optsZ	opt_matchr,   rû  r-   rf   l  s   	

€
z#Vs2010Backend._extract_nmake_fieldsúT.Tuple[str, str]c                  C  sŒ   t  ¡ } t| ƒdkst| ƒdksJ ‚tj | d ¡}tj | d ¡}t| ƒdkr>|d| d  d 7 }|dtj | d ¡ 7 }|d7 }||fS )Nr   r	   r   z "rð   r¤   z;C:\Windows\system32;C:\Windows)r   Zget_meson_commandr¶   r'   rC   Údirnamer  )Zmeson_cmd_listÚexe_search_pathsÚnmake_base_meson_commandr,   r,   r-   Ú1get_nmake_base_meson_command_and_exe_search_paths…  s   z?Vs2010Backend.get_nmake_base_meson_command_and_exe_search_pathsrZ  Úproj_to_build_rootr_   rX   c              	   C  s,  t j|ddd t j|ddd t j|ddd}t  |dddd	d
œ¡ t j|ddd t ¡ \}	}
tj |d¡}t ¡ }|D ]Õ}t j|dd|› d|› dd}tj 	| j
¡\}}|d d… | }ttj ||¡ƒ}|› dt  |d¡_|› dt  |d¡_|	› d|› dt  |d¡_d|j› |› t  |d¡_|| | ¡  }|	› d|› d|	› d|› dt  |d¡_|	› d|› dt  |d¡_|
t  |d¡_|ré|| }t |¡\}}}|t  |d ¡_|t  |d!¡_|t  |d"¡_t  |d#¡ t  |d$¡ t  |d%¡ t  |d&¡ t  |d'¡ t  |d(¡ t  |d)¡ q>d S )*NÚImportGroupZExtensionSettingsre  ZSharedZPropertySheetsrg  z3$(UserRootDir)\Microsoft.Cpp.$(Platform).user.propsz=exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')ZLocalAppDataPlatform)rQ  r«  rb  rd  Z
UserMacrosrH  r§  rc  r¨  rª  éþÿÿÿr˜   rj  rk  z compile -C "rð   ÚNMakeBuildCommandLineú	$(OutDir)ZNMakeOutputz" --clean && ÚNMakeReBuildCommandLinez	" --cleanÚNMakeCleanCommandLineÚExecutablePathZNMakePreprocessorDefinitionsZNMakeIncludeSearchPathr¢  ZIncludePathZExternalIncludePathZReferencePathZLibraryPathZLibraryWPathZ
SourcePathZExcludePath)r´   rµ   r)   r  r'   rC   ry   r   rd   rO   Úsrc_to_buildr?   r½   r  r{   rf   )ru   rL  rF   rZ  r\   r}   r  r_   Zprop_sheets_grpr   rÿ  Ú)proj_to_multiconfigured_builds_parent_dirr2  rh   Zper_config_prop_grouprÆ   Úbuild_dir_tailÚmeson_build_dir_for_buildtypeÚproj_to_build_dir_for_buildtyperi   Zprimary_src_type_build_argsZpreproc_defsZ	inc_pathsZother_compile_optsr,   r,   r-   Ú&add_gen_lite_makefile_vcxproj_elements¯  sL   
þ&Ùz4Vs2010Backend.add_gen_lite_makefile_vcxproj_elementsrq  c           1   	   C  sÖ	  |   |¡}| | j¡}|  |¡}dt |d¡_dt |d¡_d|v r)dt |d¡_t |d¡}t |d¡}d	d
d„ | ¡ D ƒv rGdt |d¡_| t	dƒ¡}| 
|| j¡}|dkrhdt |d¡_dt |d¡_n4|dkr{dt |d¡_dt |d¡_n!|dkrŽdt |d¡_dt |d¡_ndt |d¡_dt |d¡_d|v r§dt |d¡_d|v r³dt |d¡_nd|v r¿dt |d¡_nd|v rËd t |d¡_nd!t |d¡_d"|v rÞd#t |d¡_nd$|v rêd%t |d¡_nd&|v rõd't |d¡_d(|jv r4| t	d)|jd(d*¡}|d+krd,t |d-¡_n!|d.kr d/t |d-¡_n|d0kr-dt |d-¡_nd1t |d-¡_t|ƒd2krJ| d3¡ d4 |¡t |d5¡_d6 |	¡t |d7¡_| d8¡ d6 |¡t |d9¡_dt |d:¡_t d;| t	d<ƒ¡¡}d=td>t|ƒ ƒ t |d?¡_| t	d@ƒ¡r“dt |dA¡_t|ƒ}dB|v r¤dCt |dD¡_n&dE|v r±dFt |dD¡_ndG|v r¾dHt |dD¡_ndI|v rÊdJt |dD¡_dK|v rÖdt |dL¡_dM|v rãdNt |dO¡_ndP|v rïdQt |dO¡_dR|v rüdSt |dT¡_ndI|vrdUt |dT¡_|  |
|¡ t |dV¡}t |d9¡ t |dW¡}| ¡ }|| | j¡7 }| jr6|  |¡ ndt |dX¡_t|tjƒsÇt|tjƒrT|| | ¡ ¡7 }|| j ||j |j¡7 }|| j !||j¡7 }|| j"j# $|j| %¡ ¡7 }||j&7 }| ¡ D ]}|j'dYkr‘dt |d¡_q€| (| )¡ ¡ q€| *¡ D ](}t|tjƒrÅ| ¡ D ]}|j'dYkr¼dt |d¡_q«| (| )¡ ¡ q«qž|| +| ¡ ¡7 }|  ,| -¡ ¡\}}}| *¡ D ]é}t|tj.ƒrê|}n| jj/| 0¡  }t1j2 ||  3|¡¡}||j4v r¼|j5dZkr„t6|j7d[ƒr„| 8d\¡}|j9D ]5} |  :¡ D ]-}!| j" ;|!¡rI|  <|| |!¡}"d]t1j2 =|"¡d> d>d …  }#| |"d t|#ƒ … d^ ¡ qq|j>D ]*}!d }$| j" ;|!¡ry|  ?||!¡}$|  @|  A|¡|  B|¡¡}%t1j2 |%|$¡}&| |&¡ qP| C|  D|¡¡ n|| E|¡7 }|  F||¡}'t1j2 |'| 0¡ d_ ¡}(| j"j#jG| 0¡  })| jH||(|)d	d` | jI| 0¡   | 0¡ ¡ qÞ||vrÆ| |¡ qÞ|  J|¡D ]}*| |  @|*|  B|¡¡¡ qÍt|ƒd2kró| d3¡ d4 |¡t |d5¡_t|ƒd2kr
| Kd2da¡ d6 |¡t |db¡_t|ƒd2kr | dc¡ d6 |¡t |dd¡_t |de¡}+df| L¡ › |+_t |dg¡},||,_t|tjMtjNfƒrO| O¡ rO| O¡ t |dh¡_t|tjMtjNfƒrp|jPrpt1j2 ||jP Q| jR¡¡}-|-t |di¡_| jr‚t |dj¡}.df|j'› dk|._t |dl¡}/|jtSjTu r”| U¡ }0n| jV U¡ }0|0dmkr¢dn|/_n/|0doks¬tW|0ƒr°dp|/_n!|0dqkr¹dr|/_n|0dskrÂdt|/_n|0dukrËdv|/_ntXdw|0 ƒ‚dt |dx¡_| t	dyƒ¡sédt |dz¡_d S d S ){NrR  ZWholeProgramOptimizationZDefaultZBasicRuntimeChecksz/INCREMENTAL:NOZLinkIncrementalÚItemDefinitionGroupÚ	ClCompileTc                 s  s    | ]}|j d kV  qdS )rå  N)r  )r4   r0  r,   r,   r-   rü    s   € zBVs2010Backend.add_non_makefile_vcxproj_elements.<locals>.<genexpr>ri  ZOpenMPSupportZb_vscrtZmddZUseDebugLibrariesZMultiThreadedDebugDLLZRuntimeLibraryÚmtZMultiThreadedZmtdZMultiThreadedDebugZMultiThreadedDLLz/fsanitize=addressZ
EnableASANz/ZIZEditAndContinueZDebugInformationFormatz/ZiZProgramDatabasez/Z7ZOldStyler‡   z/RTC1ZEnableFastChecksz/RTCuZUninitializedLocalUsageCheckz/RTCsZStackFrameRuntimeCheckr  ÚehrÝ  ÚaZAsyncZExceptionHandlingÚsZ
SyncCThrowrÕ   ZSyncr   r¡  r¢   r¢  r¤   r¬  r²  r©  ZFunctionLevelLinkingr?   Úwarning_levelZLevelr   ZWarningLevelZwerrorZTreatWarningAsErrorz/OxÚFullZOptimizationz/O2ZMaxSpeedz/O1ZMinSpacez/OdZDisabledz/OiZIntrinsicFunctionsz/Ob1ZOnlyExplicitInlineZInlineFunctionExpansionz/Ob2ZAnySuitablez/OsÚSizeZFavorSizeOrSpeedZSpeedZResourceCompileZLinkÚGenerateDebugInformationrå  Úmsvcz<19.00.23918FrM   ú.objr4  )rO  z%(AdditionalLibraryDirectories)ZAdditionalLibraryDirectoriesz%(AdditionalDependencies)ZAdditionalDependenciesZ
OutputFiler  Z	SubSystemZImportLibraryZModuleDefinitionFiler›  rœ  ZTargetMachineÚwin32Z
MachineX86rÌ   Z
MachineX64rÑ   Z
MachineARMrÎ   ZMachineARM64rÐ   ZMachineARM64ECz*Unsupported Visual Studio target machine: ZSuppressStartupBannerrÔ   ZSetChecksum)YrÐ  Zget_buildtype_linker_argsrh   r«   r´   rµ   r½   rê  rÙ   r   Zget_crt_valr   r;  r¶   r:   ry   ÚTÚcastr?   Úintr>   Úgenerate_lang_standard_infor×  rÔ   Úgenerate_debug_informationr§   r
   ÚStaticLibraryÚSharedModuleZget_std_shared_module_link_argsræ  Zget_project_link_argsrç  Zget_global_link_argsr“   r   Zget_external_link_argsZget_languageZ	link_argsr  Zextend_directZget_link_argsrþ   Zget_option_link_argsrÏ  r£  r­   r(  r{   r'   rC   Zget_target_filename_for_linkingr   Úidr   ÚversionZextract_all_objectsr   r®   rB  Zget_target_generated_dirÚsplitextrD  Úobject_filename_from_sourcerª   r~   rz   ÚextendÚflatten_object_listZget_link_whole_forrU  r9  rT  rt   Z$get_custom_target_provided_librariesr<  Úget_filenameÚSharedLibraryr  Zget_import_filenameZvs_module_defsr¸   r²   r   r.  r×   rF   rK   r   )1ru   rL  rq  r}   rF   Ú	subsystemrb   rï  rð  rñ  r¥  rë  Zbuildtype_link_argsr¾   ZcompilesÚclconfZ
vscrt_typeZ	vscrt_valr  r  r;   ZresourcecompileÚlinkÚextra_link_argsr0  r  Zadditional_libpathsZadditional_linksrù   ZlobjZlinknamerØ  ÚgenrR   rC   Zgen_src_extZobj_basenamer‹   Zrel_objZtrelpathZtvcxprojrV  Úlibr
  Zsubsysrª   ÚpdbZtargetmachineZtargetplatformr,   r,   r-   Ú!add_non_makefile_vcxproj_elementsñ  sx  

















ÿ
€

€ü
ÿ
€

€







ÿz/Vs2010Backend.add_non_makefile_vcxproj_elementsÚ	gen_filesú.T.Union[build.Target, build.CustomTargetIndex]c                 C  s    t j | j¡\}}|d d… t ¡ d  }|  |¡}t j |d¡}tt j ||¡ƒ}t j 	t j ||  
|¡¡¡}	t|ƒD ]\}
}t j 	t j |	|¡¡||
< q<d S )Nr  r   rH  )r'   rC   rO   r
  r   rd   r«   ry   r?   rI  rz   r·   )ru   r4  r}   rÆ   r  r  r  r  r  Z$relocate_to_concrete_builddir_targetÚidxÚ	file_pathr,   r,   r-   Ú3relocate_generated_file_paths_to_concrete_build_dir  s   
ÿzAVs2010Backend.relocate_generated_file_paths_to_concrete_build_dirc           >      C  sª  t  d|j› d¡ d}g | j| ¡ < | jr!t|tjƒsdS d}nYt|tj	ƒr2d}|j
 d¡d }nHt|tjƒr;d	}n?t|tjƒrDd
}n6t|tjƒrS|  |||¡ dS t|tjƒrb|  |||¡ dS t|tjƒrq|  |||¡ dS td| ¡ › ƒ‚|  |j¡\}}}	}
|jr|  ||¡}|jtju r—| j}n| j}tj  !| "¡ ¡}| j#|d | ¡ |||d |d\}}|  $||¡\}}}|  |¡\}}}}|  |¡\}}}}||7 }||7 }|  %|¡}t& '|| j(| j)| j| j*¡}t|tj	tjtjtj+fƒsûJ dƒ‚|  ,|¡}tj  -|| j.¡}tj  -||  /|¡¡}|  0||||||¡\\}} \}!}"\}#}$| jrD|d us0J ‚t1|j|ƒ}%|  2|||d ||||%¡ n|  3||||||||!|#| ¡
 t4 5|d¡}&t4j5|&dtj  -|t6¡d dd„ }'i }(|  7|¡rËdD ]W})| 8|)¡}*|*sqs|j9dkr¿t:|*ƒdkr¨tj  -||  ;||)|*d ¡¡}+tj  <tj  -||*d ¡¡},ntj  -||*d ¡}+d },|*d |+|)|,g|(|)< qs|*d d |)d g|(|)< qsg }-t:|ƒt:|ƒ t:|j=ƒ t:|(ƒ dkrf| jrî|rî|  >||¡ t4 5|d¡}.|D ]}/tj  -||/ ?| j.¡¡}0|'|0|-ƒrt4j5|.d|0d qö|D ]}/|'|/|-ƒr%t4j5|.d|/d q|j=D ]}/tj  -||/ ?| j.¡¡}0|'|0|-ƒrEt4j5|.d|0d q*|( @¡ D ]}tj  -||d ¡}1|'|1|-ƒrdt4j5|.d|1d qKg }2t:|ƒt:|ƒ t:|(ƒ dkr¨| jrŒtA|| ¡ |%ƒ}3|rŒ|  >||¡ t4 5|d¡}4|D ]X}5tj  -||5 ?| j.¡¡}0|'|0|2ƒrët4j5|4d|0d}6| jr½|  B|6|0|3|¡ q”t& C|5¡})|  D|(|)|6¡ |  E|)|6| ¡ |  F|)|6|"¡ |  G|)|6|$¡ d|  H||5¡ t4 5|6d¡_Iq”|D ]U}5|'|5|2ƒrCt4j5|4d|5d}6| jr|  B|6|5|3|¡ qït& C|5¡})|  D|(|)|6¡ |  E|)|6| ¡ |  F|)|6|"¡ |  G|)|6|$¡ tJ K| L¡ |5¡}5d|  H||5¡ t4 5|6d¡_Iqï|( M¡ D ]^\})}|d }7|7r¦|'|7|2ƒr¦t4j5|4d|7d}6|  N|(|)|6¡ | jrw|  B|6|7|3|¡ qI|  E|)|6| ¡ |  F|)|6|"¡ |(|) d },|,rtO P|$¡}8|,g|8|)  |8|)< n|$}8|  G|)|6|8¡ qIg }9|  Q||¡d D ]}:t|:tRƒs¼J ‚|9 S|:¡ q²|D ]}:|9 S|:¡ qÅdd„ |D ƒ};g }<t:|	ƒt:|9ƒ t:|;ƒ dkr!t4 5|d¡}=|	D ]}5tj  -||5 ?| j.¡¡}0|'|0|<ƒr	t4j5|=d|0d qî|9|; D ]}5|'|5|<ƒrt4j5|=d|5d qt4j5|dd d! |  T|¡ | js8|  U||¡ |  Vt4 W|¡|¡ | jXjY Zt[d"ƒ¡d#krS|  \||¡ dS )$NzGenerating vcxproj rM   ÚWindowsFÚMakefileZApplicationú,r   r"  ZDynamicLibraryTzUnknown target type for r   )rn  ro  rY  rZ  r[  zfor mypyrˆ   r‡   r    c                 S  s.   t j t j | ¡¡}||vr| |¡ dS dS )NTF)r'   rC   ÚnormcaserI  r:   )rC   ZlisÚ
normalizedr,   r,   r-   Úpath_normalize_addp  s
   
z5Vs2010Backend.gen_vcxproj.<locals>.path_normalize_add)rŽ  r  r  Z	CLIncludeZ	CLCompileú	$(IntDir)ZObjectFileNamer'  c                 S  s   g | ]	}|  d ¡s|‘qS ))r  z.res)rÊ  )r4   Úobjr,   r,   r-   r6   ê  rŒ   z-Vs2010Backend.gen_vcxproj.<locals>.<listcomp>ÚObjectrg  rx  rh  r  r  )]r   rÔ   r  rt   r{   rk   r§   r
   rÿ   r  Zwin_subsystemrO   r"  r+  r¬   r‹  rý   r  ZCompileTargetr  r   r7  rG  rL   Zis_unityZgenerate_unity_filesr;  r   r.  rØ   rF   r'   rC   r&  r*  rs  rÈ   rÐ  r)   r÷  rh   rÓ   rÚ   r#  r«   ry   r²   rz   rõ  r[   r  r3  r´   rµ   r   Ztarget_uses_pchZget_pchr$  r¶   Zcreate_msvc_pch_implementationrþ  Úextra_filesr8  r¸   rû   rj   r±  rC  r”  r¦  r¶  r¹  r'  r½   r   Zfrom_built_fileZ
get_subdirre   r™  ÚcopyÚdeepcopyr)  r?   r:   r|  rW  r}  r~  r“   r   rÙ   r   Úgen_vcxproj_filters)>ru   r}   ru  ro  r\   r,  rY  rL   rE  r  Z
_languagesrF   Z	tfilenamerL  rq  Zgenerated_filesr†   rì  Zgen_srcZgen_hdrsZgen_objsZ
_gen_langsZ
custom_srcZcustom_hdrsZcustom_objsZ_custom_langsrë  rb   r  rí  rî  rï  r¥  rð  r´  rñ  r·  r_   Zmeson_file_groupr>  r’  ra   r˜  rR   Zpch_header_dirZprevious_includesZinc_hdrsÚhrª   rC   Zprevious_sourcesrg   Zinc_srcr  r“  ÚimplZinc_dirsZadditional_objectsr÷   Zexplicit_link_gen_objsZprevious_objectsZinc_objsr,   r,   r-   r:    sp  

û
ÿ
"
ÿ
(€€
€€ý

ÿ€

ÿ€
€€€
zVs2010Backend.gen_vcxprojc                   s  t  ddddœ¡}t  |d¡}t  |d¡‰t dˆj› d¡ ‡‡fdd	„‰i ‰ˆjˆj }|D ]}tj	 
|j¡sCˆ|ƒ}|rCd
ˆ|< q0ˆD ]M}|}d
}	|rotj	 |¡}
|	d
kr[|
}	n|
|ˆv rbdnd |	 }	tj	 |¡}|sN|	d
kr“|	ˆ|< t  |dd|	i¡}t  |d¡}dtt ¡ ƒ ¡  d |_qFˆ |¡\}}}}ˆ ˆ¡‰ ‡ ‡‡‡‡fdd„}|d|ƒ |d|ƒ |d|ƒ ˆ t  |¡|d ¡ d S )NrQ  r^  r_  )r`  ra  rˆ   zGenerating vcxproj filters rM   c                   s$   t j ˆ  t| j| jƒˆ  ˆ¡¡¡S rx   )r'   rC   rþ  rª   r   r³   r?  rz   )Úfiler|   r,   r-   Úrelative_to_defined_in  s   $zAVs2010Backend.gen_vcxproj_filters.<locals>.relative_to_defined_inr‰   r˜   r™   ÚFilterr¡   ZUniqueIdentifierÚ{Ú}c                   sn   |D ]2}t j |j¡s4ˆ|ƒ}|r4|ˆv r4t j ˆ | ˆj¡¡}t ˆ| d|i¡}t |d¡}ˆ| |_	qd S )Nr¡   rJ  )
r'   rC   Úisabsr?  ry   r¸   r²   r´   rµ   r½   )Ú	type_nameÚelementsr¿   rþ  rª   Ztarget_elementÚfilter_element)r¾   Úfilter_itemsÚfound_folders_to_filterrI  ru   r,   r-   Úadd_element4  s   
€øz6Vs2010Backend.gen_vcxproj_filters.<locals>.add_elementr  Z	ClIncluderA  z.filters)r´   rl  rµ   r   rÔ   r  rL   rB  r'   rC   rM  r?  r  rþ  r?   rA   Zuuid4rB   r½   rG  r«   r}  r~  )ru   r}   ru  rL  Zfilter_foldersZ	all_filesr¿   rþ  ZfolderÚfilterr  rP  Zuuid_elementrL   rE  r  rÆ   rS  r,   )r¾   rQ  rR  rI  ru   r}   r-   rE    sL   ÿ€÷€



z!Vs2010Backend.gen_vcxproj_filtersc              	   C  s$  | j rd}tj | j ¡ d¡}d}nd}tj | j ¡ d¡}d}| jjj}| j|d||d\}}| j r“t	 
¡ \}}t |d	¡}	t ¡ }
tj | j¡\}}d
}| j}d}|
D ] }|d d… | }ttj ||¡ƒ}||› d|› d|› d7 }qU|t |	d¡_|t |	d¡_dt |	d¡_|t |	d¡_ndt |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 ).Nr"  r#  r:  r$  r%  rX  z
regen-temp©rn  ro  rY  rd  rH  r‰   r  z setup --reconfigure "ú" "z"
r  r  r  r	  r  ÚMidlrß  r¬  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Â   r‡  Úmsgrg  rx  rh  r  ZExtensionTargetsre  )rk   r'   rC   ry   r“   r—   r   r,  rs  r)   r  r´   rµ   rd   rO   r
  r²   r?   r½   Úget_build_commandrõ   rŠ  r{  Zget_regen_filelistrè   r}  r~  )ru   rÛ   ru  rY  ro  rL  rq  r   rÿ  Zall_configs_prop_groupr2  rÆ   r  r  rî  Zreconfigure_all_cmdrh   r  r  ÚactionÚmidlZregen_commandZ	cmd_templr,   r,   r-   rß   E  sb   


ýÿþzVs2010Backend.gen_regenprojc                 C  s:  d}t j | j ¡ |› d¡}| jjj}| jr| j|d|dd\}}t	 
¡ \}}t ¡ }t j | j¡\}	}
d}|D ]U}|
d d… | }tt j ||¡ƒ}|› d|› d	}| jj td
ƒ¡sa|d7 }| jj tdƒ¡rn|d7 }d|› d| j› d}tj|d|d}|t |d¡_|t |d¡_q9nu| 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ƒ¡rõ|d(g7 }|  ¡  |  |d)d*d+ |¡ ¡ tj|d,d-d. |  |¡ |  t |¡|¡ d S )/Nr!  r4  úinstall-tempr:  rU  rH  r  z
 test -C "ú" --no-rebuildZstdsplitz --no-stdsplitZ	errorlogsz --print-errorlogsr§  rc  r¨  rd  rª  r  r	  z	test-temprv  r  rW  rß  r¬  r?  rX  rY  rZ  r[  r\  r]  r^  r_  r`  Útestú--no-rebuildz--no-stdsplitz--print-errorlogsÚ	run_testsrK  rV  rg  rx  rh  )r'   rC   ry   r“   r—   r   r+  rk   rs  r)   r  rd   rO   r
  r?   rÙ   r   rF   r´   rµ   r½   rb  Zserialize_testsr{  r|  r}  r~  )ru   rÛ   ru  ro  rL  rq  r   rÿ  r2  rÆ   r  r  rh   r  r  Ztest_cmdr°  Ú
prop_grouprc  rd  Ztest_commandr,   r,   r-   rÝ   •  s`   

ýô
þ


zVs2010Backend.gen_testprojc                 C  sÎ  d}t j | j ¡ |› d¡}| jjj}| jrv| j|d|dd\}}t	 
¡ \}}t ¡ }t j | j¡\}	}
d}|D ];}|
d d… | }tt j ||¡ƒ}|› d|› d	}d
|› d| j› d}tj|d|d}|t |d¡_|t |d¡_q9nY|  ¡  | 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 )(Nr&  r4  re  r:  rU  rH  r  z install -C "rf  r§  rc  r¨  rd  rª  r  r	  rv  r  rW  rß  r¬  r?  rX  rY  rZ  r[  r\  r]  r^  r_  r`  Úinstallrh  Zrun_installrK  rV  rg  rx  rh  )r'   rC   ry   r“   r—   r   r-  rk   rs  r)   r  rd   rO   r
  r?   rF   r´   rµ   r½   Zcreate_install_data_filesrb  r{  r|  r}  r~  )ru   rÛ   ru  ro  rL  rq  r   rÿ  r2  rÆ   r  r  rh   r  r  Úinstall_cmdr°  rj  rc  rd  Zinstall_commandr,   r,   r-   rÞ   Ë  sP   

ýø

þ
zVs2010Backend.gen_installprojTÚnodeÚrulenamery  rÂ   úT.Optional[T.List[str]]r‡  ra  rˆ  c                 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 )Nrˆ   z.ruleré   rê   rë   z# Meson regen file.rŸ   r    ÚMessagerR  ZVerifyInputsAndOutputsExistÚ
r£   r†  r¤   r¥   r¦   )r´   rµ   r'   rC   ry   r“   rŠ  rò   rí   r  r½   r‰  )ru   rm  rn  ry  rÂ   r‡  ra  rˆ  ZigroupZrulefiler5   ZcustombuildÚmessager,   r,   r-   r{  ù  s*   ÿÿÿzVs2010Backend.add_custom_buildÚprefixc                 C  s0   d}| }t j |¡rd| |f }t j |¡s
|S )Nr   z%s%d)r'   rC   rò   )rs  r¿   rH  r,   r,   r-   r‰    s   ÿzVs2010Backend.nonexistent_filer.  c                 C  s   dt  |d¡_d S )Nri  r  rS  )ru   r.  r,   r,   r-   r!    s   z(Vs2010Backend.generate_debug_informationc                 C  s6   | j stj | j ¡ d¡}|  ||| jjj¡ d S d S )Nr%  )	rk   r'   rC   ry   r“   r—   rT  r   r,  )ru   rL  Zregen_vcxprojr,   r,   r-   r|  #  s   þz"Vs2010Backend.add_regen_dependencyr¥  úT.Dict[str, CompilerArgs]r-  c                 C  s   d S rx   r,   )ru   r¥  r-  r,   r,   r-   r   *  s   z)Vs2010Backend.generate_lang_standard_info)F)r
   r   r   r   rk   rG   )r   r€   r}   r   r‚   rƒ   r„   r0   r…   r0   r†   r0   r   r‡   )FN)r›   rG   r\   r]   r   rÉ   )ræ   r?   r   r‡   )rù   rú   )r
  r?   r  r  r   r‡   )rã   r?   rä   r  r   r‡   rx   )r\   r]   r   r  )
rL  rƒ   rM  r?   rN  r?   rO  rG   r   r‡   )rL  rƒ   )r   r\  )r}   rt  ru  r?   ro  r?   r   r‡   )r}   r‚  ru  r?   ro  r?   r   r‡   )r}   rŒ  ru  r?   ro  r?   r   r‡   )rR   r?   rg   r]   rF   r?   )rµ  r?   r   r?   )rÉ  r?   r   r?   )rÑ  rÒ  ru  r?   r   r‡   )
rh   r?   rö  r?   rÔ   rG   rÚ   r?   r   r0   )ri   rø  r   rù  )r   rý  )rL  rƒ   rF   r?   rZ  r?   r\   r]   r  r?   r_   rX   r   r‡   )rL  rƒ   rq  rƒ   rF   r?   r   r‡   )r4  r0   r}   r5  r   r‡   )
r}   r   ru  r?   ro  r?   r\   r]   r   rG   )NNNT)rm  rƒ   rn  r?   ry  r?   rÂ   ro  r‡  ro  ra  rX   rˆ  rG   r   r‡   )rs  r?   r   r?   )r.  rƒ   r   r‡   )rL  rƒ   r   r‡   )r¥  rt  r-  rƒ   r   r‡   )=Ú__name__Ú
__module__Ú__qualname__r  rm   r~   r©   rÈ   rå   Ústaticmethodrè   rá   rõ   rø   r  r  rà   rÜ   rG  r«   r¼   rT  rW  rs  r  r‹  r  ÚclassmethodrC  r”  r™  r‘  r—  r   r¦  r±  r¶  r¹  r³  r¤  rÏ  rÐ  r}  rõ  r÷  rf   r  r  r3  r8  r:  rE  rß   rÝ   rÞ   r{  r‰  r!  r|  r   Ú__classcell__r,   r,   rv   r-   r)      sš    
?	þ>
>
z

û
L

(

	

 
 
)
B  
 hBP6.ÿ

r)   )r
   r   r   r   r   r   )r/   r0   r   r0   )r   r?   )rF   r?   r   rG   )rL   r0   )rU   rV   rW   r0   r   rX   )r\   r]   r^   r?   r_   r?   r   r`   )7Ú
__future__r   rC  r  r'   Zxml.dom.minidomrÓ  Zxml.etree.ElementTreeÚetreer~  r´   rA   Útypingr  Úpathlibr   r   r   rH   Úcollectionsr   r‰   r   r
   r   r   r   r   r   r   r   r   r   r   r“   r   r   r   ÚTYPE_CHECKINGZarglistr   r   r   ÚTupler?   rQ  r.   r>   rE   rK   rT   r[   rj   ZBackendr)   r,   r,   r,   r-   Ú<module>   s>   $

#




