B
    ›³ëbNK ã               @   s.  d Z ddlZddlZddlZddlZddlZddlZddlZddlZ	ddl
Z	ddlZ	ddlZ	ddlZ	ddlZ	ddlZ	ddlmZ ddlmZ ddlmZmZ dZdd	„ Zd
d„ Zdd„ ZdZefdd„Ze d¡Zdd„ Zdddd„Z yej!d Z"W n e#k
r   ej$Z%Y nX ej& 'dej& (ej$¡d ¡Z%G dd„ dƒZ)dd„ Z*dd„ Z+G dd„ dƒZ,d Z-d!Z.d"ddd#d$d%ddddddd&dddddddddd'œZ/G d(d)„ d)e,ƒZ0d*Z1d+Z2dddd,dddddddddddddddddddddd-œZ3G d.d/„ d/e,ƒZ4G d0d1„ d1ƒZ5d2Z6G d3d4„ d4e5ƒZ7d5Z8d6Z9d7Z:d8Z;G d9d:„ d:e5e0ƒZ<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCG dBdC„ dCe5e4ƒZDG dDdE„ dEƒZEG dFdG„ dGeEƒZFdHZGG dIdJ„ dJeEƒZHdKdL„ ZIdMdN„ ZJdOdP„ ZKdQdR„ ZLdSdT„ ZMdUdV„ ZNdWdX„ ZOdYdZ„ ZPe	jQ QeMd¡ZRe	jQ QeNd¡ZSe	jTjTd[d\eOd]ZUe	jTjTd^d_ePd]ZVdaWd`da„ ZXdbdc„ ZYdS )ezã Tool-specific initialization for Microsoft Visual Studio project files.

There normally shouldn't be any need to import this module directly.
It will usually be imported through the generic SCons.Tool.Tool()
selection method.
é    N)ÚprocessDefines)ÚPICKLE_PROTOCOLé   )Úmsvc_setup_env_toolÚmsvc_setup_env_onceZmsvsc             C   sL   |   dd¡} |   dd¡} |   dd¡} |   dd¡} |   d	d
¡} |   dd¡} | S )Nú&z&amp;ú'z&apos;ú"z&quot;ú<z&lt;ú>z&gt;Ú
z&#x0A;)Úreplace)Ús© r   ú.lib/python3.7/site-packages/SCons/Tool/msvs.pyÚxmlify9   s    r   c                s$   ‡ fdd„t j | ¡ ˆ ||¡D ƒS )zÝ
    Process a CPPPATH list in includes, given the env, target and source.
    Returns a list of directory paths. These paths are absolute so we avoid
    putting pound-prefixed paths in a Visual Studio project file.
    c                s   g | ]}ˆ   |¡j‘qS r   )ZDirÚabspath)Ú.0Úi)Úenvr   r   ú
<listcomp>I   s    z#processIncludes.<locals>.<listcomp>)ÚSConsZPathListZ
subst_path)Zincludesr   ÚtargetÚsourcer   )r   r   ÚprocessIncludesC   s    
r   c                s@   t dd„ | D ƒƒr.t dd„ | D ƒƒs.|  d¡ ‡ fdd„| D ƒS )z‘
    If /std:c++XX is in flags then we need to ensure /Zc:__cplusplus is in
    flags to tell intellisense to respect our specified standard
    c             s   s   | ]}|  d ¡V  qdS )z/std:c++N)Ú
startswith)r   Úfr   r   r   ú	<genexpr>a   s    zprocessFlags.<locals>.<genexpr>c             s   s   | ]}|d kV  qdS )z/Zc:__cplusplusNr   )r   r   r   r   r   r   b   s    z/Zc:__cplusplusc                s   g | ]}ˆ   |¡‘qS r   )Úsubst)r   r   )r   r   r   r   d   s    z processFlags.<locals>.<listcomp>)ÚanyÚappend)Úflagsr   r   )r   r   ÚprocessFlags\   s    
r"   z&{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}c             C   s<   t  t| ƒ¡} t t |¡d| |f ¡}dt|ƒ ¡  d S )ax  Generates a GUID for the sln file to use.

    The uuid5 function is used to combine an existing namespace uuid -
    the one VS uses for C projects (external_makedile_guid) -
    and a combination of the solution file name (slnfile) and the
    project name (name).  We just need uniqueness/repeatability.

    Returns (str) "displayable" GUID, already wrapped in braces
    z%s-%sÚ{Ú})ÚntpathÚnormpathÚstrÚuuidZuuid5ZUUIDÚupper)ZslnfileÚnameÚ	namespaceZsolutionr   r   r   Ú_generateGUIDi   s    r,   z(\d+\.\d+)(.*)c             C   s   t  | ¡ ¡ \}}t|ƒ|fS )z©
    Split a Visual Studio version, which may in fact be something like
    '7.0Exp', into is version number (returned as a float) and trailing
    "suite" portion.
    )Ú
version_reÚmatchÚgroupsÚfloat)r   ZnumÚsuiter   r   r   Úmsvs_parse_version   s    r2   c             C   sP   |   d¡}|s"dtjkr"tjd }|r0d| }ntj}dtƒ  }|rLt|ƒ}|S )NÚ
SCONS_HOMEZSCONS_LIB_DIRzofrom os.path import join; import sys; sys.path = [ r'%s' ] + sys.path; import SCons.Script; SCons.Script.main()a  from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-%(version)s'), join(sys.prefix, 'scons-%(version)s'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons') ] + sys.path; import SCons.Script; SCons.Script.main())ÚgetÚosÚenvironr   Ú__version__Úlocalsr   )r   ZxmlZ
scons_homeZexec_script_mainÚversionr   r   r   ÚgetExecScriptMain   s    



r:   ZPYTHON_ROOTz$$(PYTHON_ROOT)c               @   s   e Zd ZdS )ÚConfigN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r;   ©   s   r;   c             C   sD   t j | ¡\}}|r2|dkr2|| kr2t|ƒ|g S |dkr>g S |gS )NÚ )r5   ÚpathÚsplitÚ
splitFully)r@   ÚdirÚbaser   r   r   rB   ¬   s    rB   c             C   sd   i }xZ| D ]R}t |ƒ}t|ƒr
|}x,|dd… D ]}||krDi ||< || }q0W |||d < q
W |S )zÁBreak a list of files into a hierarchy; for each value, if it is a string,
       then it is a file.  If it is a dictionary, it is a folder.  The string is
       the original path of the file.Néÿÿÿÿ)rB   Úlen)ÚsourcesÚ	hierarchyÚfiler@   ÚdictÚpartr   r   r   ÚmakeHierarchy´   s    
rL   c               @   s@   e Zd ZdZdZdZdZdZdd„ Zdd„ Z	dd	„ Z
d
d„ ZdS )Ú_UserGeneratorz1
    Base class for .dsp.user file generator
    NFc       
         s´  d|krt j d¡‚n4t j |d ¡r2|d g}nt j |d ¡rJ|d }d|ks^|d d krdg }nŠt j |d ¡r€|d g}nnt j |d ¡rêt|d ƒt|ƒkr°t j d¡‚g }x8|d D ]&}t j |¡rÚ| |¡ q¾| i ¡ q¾W ng }t|ƒdkr|t|ƒ }| j	o6| j
o6| jo6|o6tdd„ |D ƒƒ| _| jr°ttt||ƒƒƒ}xZ| ¡ D ]N\}‰ i }x2‡ fdd„| j
 ¡ D ƒD ]}	tˆ |	 ƒ||	< q„W || j| _q^W d S )	NÚvariantz[You must specify a 'variant' argument (i.e. 'Debug' or 'Release') to create an MSVSProject.ZDebugSettingsz>Sizes of 'DebugSettings' and 'variant' lists must be the same.r   c             S   s   g | ]}|r|‘qS r   r   )r   Údsr   r   r   r   ñ   s    z+_UserGenerator.__init__.<locals>.<listcomp>c                s   g | ]}|ˆ kr|‘qS r   r   )r   Úk)Úsrcr   r   r   ø   s    )r   ÚErrorsÚInternalErrorÚUtilÚ	is_StringÚis_ListÚis_DictrF   r    ÚusrheadÚusrdebgÚusrconfÚboolÚ
createfilerJ   ÚlistÚzipÚitemsÚkeysr'   ÚconfigsÚdebug)
ÚselfÚdspfiler   r   ÚvariantsZdbg_settingsrO   ÚvarZtrgÚkeyr   )rQ   r   Ú__init__Ò   s<    z_UserGenerator.__init__c             C   s*   | j  d¡}| j}| j | jtƒ  ¡ d S )Nz$MSVSENCODING)r   r   Ú
versionstrÚusrfileÚwriterX   r8   )rc   Úencodingri   r   r   r   Ú
UserHeaderü   s    z_UserGenerator.UserHeaderc             C   s   d S )Nr   )rc   r   r   r   ÚUserProject  s    z_UserGenerator.UserProjectc          
   C   s‚   | j s
d S y| jd }t|dƒ| _W n> tk
rb } z tj d| d t|ƒ ¡‚W d d }~X Y nX |  	¡  |  
¡  | j ¡  d S )Nz.userÚwzUnable to open "z" for writing:)r\   ÚdspabsÚopenrj   ÚIOErrorr   rR   rS   r'   rm   rn   Úclose)rc   ÚfilenameÚdetailr   r   r   ÚBuild  s    
.z_UserGenerator.Build)r<   r=   r>   Ú__doc__rX   rY   rZ   r\   rh   rm   rn   rv   r   r   r   r   rM   Ç   s   *rM   z£<?xml version="1.0" encoding="%(encoding)s"?>
<VisualStudioUserFile
	ProjectType="Visual C++"
	Version="%(versionstr)s"
	ShowAllFiles="false"
	>
	<Configurations>
zw		<Configuration
			Name="%(variant)s|%(platform)s"
			>
			<DebugSettings
%(debug_settings)s
			/>
		</Configuration>
z$(TargetPath)ZfalseÚ3Ú1Útrue)ZCommandZWorkingDirectoryZCommandArgumentsZAttachZDebuggerTypeZRemoteZRemoteMachineZRemoteCommandZHttpUrlZPDBPathZSQLDebuggingZEnvironmentZEnvironmentMergeÚDebuggerFlavorZMPIRunCommandZMPIRunArgumentsZMPIRunWorkingDirectoryZApplicationCommandZApplicationArgumentsZShimCommandZMPIAcceptModeZMPIAcceptFilterc                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )Ú_GenerateV7Userz&Generates a Project file for MSVS .NETc                s0   | j dkrt| _t| _t| _tƒ  |||¡ d S )Ng      "@)	Úversion_numÚV9UserHeaderrX   ÚV9UserConfigurationrZ   ÚV9DebugSettingsrY   Úsuperrh   )rc   rd   r   r   )Ú	__class__r   r   rh   @  s
    
z_GenerateV7User.__init__c             C   s€   t | j ¡ ƒ}x`|D ]X}| j| j}| j| j}| j| j}|rd dd„ | ¡ D ƒ¡}| j 	| j
tƒ  ¡ qW | j 	d¡ d S )Nr   c             S   s(   g | ] \}}|d k	rd|t |ƒf ‘qS )Nz				%s="%s")r   )r   rg   Úvaluer   r   r   r   N  s   z/_GenerateV7User.UserProject.<locals>.<listcomp>z*	</Configurations>
</VisualStudioUserFile>)Úsortedra   r`   rN   Úplatformrb   Újoinr_   rj   rk   rZ   r8   )rc   ÚconfkeysÚkindrN   r…   rb   Údebug_settingsr   r   r   rn   G  s    

z_GenerateV7User.UserProject)r<   r=   r>   rw   rh   rn   Ú__classcell__r   r   )r‚   r   r|   >  s   r|   z’<?xml version="1.0" encoding="%(encoding)s"?>
<Project ToolsVersion="%(versionstr)s" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
z}	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">
%(debug_settings)s
	</PropertyGroup>
ZWindowsLocalDebugger)ZLocalDebuggerCommandZLocalDebuggerCommandArgumentsZLocalDebuggerEnvironmentr{   ZLocalDebuggerWorkingDirectoryZLocalDebuggerAttachZLocalDebuggerDebuggerTypeZLocalDebuggerMergeEnvironmentZLocalDebuggerSQLDebuggingZRemoteDebuggerCommandZRemoteDebuggerCommandArgumentsZRemoteDebuggerWorkingDirectoryZRemoteDebuggerServerNameZRemoteDebuggerConnectionZRemoteDebuggerDebuggerTypeZRemoteDebuggerAttachZRemoteDebuggerSQLDebuggingZDeploymentDirectoryZAdditionalFilesZ#RemoteDebuggerDeployDebugCppRuntimeZWebBrowserDebuggerHttpUrlZWebBrowserDebuggerDebuggerTypeZWebServiceDebuggerHttpUrlZWebServiceDebuggerDebuggerTypeZWebServiceDebuggerSQLDebuggingc                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )Ú_GenerateV10Userz4Generates a Project'user file for MSVS 2010 or laterc                s|   t |d ƒ\}}|dkr d| _n6|dkr0d| _n&|dkr@d| _n|dkrPd	| _nd
| _t| _t| _t| _tƒ  	|||¡ d S )NÚMSVS_VERSIONgš™™™™™,@z17.0gffffff,@z16.0g333333,@z15.0g      ,@z14.0z4.0)
r2   ri   ÚV10UserHeaderrX   ÚV10UserConfigurationrZ   ÚV10DebugSettingsrY   r   rh   )rc   rd   r   r   r}   r1   )r‚   r   r   rh   ~  s    z_GenerateV10User.__init__c             C   s€   t | j ¡ ƒ}x`|D ]X}| j| j}| j| j}| j| j}|rd dd„ | ¡ D ƒ¡}| j 	| j
tƒ  ¡ qW | j 	d¡ d S )Nr   c             S   s*   g | ]"\}}|d k	rd|t |ƒ|f ‘qS )Nz		<%s>%s</%s>)r   )r   rg   rƒ   r   r   r   r   ™  s   z0_GenerateV10User.UserProject.<locals>.<listcomp>z
</Project>)r„   ra   r`   rN   r…   rb   r†   r_   rj   rk   rZ   r8   )rc   r‡   rˆ   rN   r…   rb   r‰   r   r   r   rn   ’  s    

z_GenerateV10User.UserProject)r<   r=   r>   rw   rh   rn   rŠ   r   r   )r‚   r   r‹   {  s   r‹   c               @   s.   e Zd ZdZdddddgZdd„ Zd	d
„ ZdS )Ú_DSPGeneratorz Base class for DSP generators ZsrcsZincsZ	localincsZ	resourcesZmiscc                sZ  t |ƒ| _y
|j}W n" tk
r6   tj |¡| _Y n
X |ƒ | _d|krVtj	 
d¡‚n4tj |d ¡rr|d g}ntj |d ¡rŠ|d }d|ksž|d d kr¦dg}nžtj |d ¡rÂ|d g}n‚tj |d ¡r6t|d ƒt|ƒkrôtj	 
d¡‚g }xJ|d D ].}tj |¡r | |¡ n| | ¡ ¡ qW n|d  ¡ g}t|ƒdkrx|d }g }x|D ]}| |¡ qdW d|ks|d d kr˜dg}	n¢tj |d ¡r¶|d g}	n„tj |d ¡r,t|d ƒt|ƒkrêtj	 
d	¡‚g }	xJ|d D ].}
tj |
¡r|	 |
¡ n|	 |
 ¡ ¡ qøW n|d  ¡ g}	t|	ƒdkrn|	d }
g }	x|D ]}|	 |
¡ qZW d
|ks†|d
 d kr”|dd … }n¢tj |d
 ¡r²|d
 g}n„tj |d
 ¡r(t|d
 ƒt|ƒkrætj	 
d¡‚g }xJ|d
 D ].}
tj |
¡r| |
¡ n| |
 ¡ ¡ qôW n|d
  ¡ g}t|ƒdkrj|d }
g }x|D ]}| |
¡ qVW |d | _dd„ }||d|ƒ}d|kr ||d|ƒ}n| dg ¡gt|ƒ }d|krÎ||d|ƒ}n| dg ¡gt|ƒ }d|krü||d|ƒ}n.| dg ¡| dg ¡ | dg ¡ gt|ƒ }|| _d| jkrJ| jd | _ntj tj | j¡d ¡| _| j | j¡| _dddddg}i | _x|D ]}g | j|< qW i | _d| _d|krÎ|d dkrÎd| _| jdkròtj | j¡rò|  ¡  x¾t|| jƒD ]®}|d | jkr tj | j|d  ¡rpx~| j|d  D ].}|| j|d  kr<| j|d   |¡ q<W n<| j|d  | j|d  kr | j|d   | j|d  ¡ q W x$|D ]}| j| jd d!„ d" q¸W ||fd#d$„}xNtt|ƒƒD ]>}|| || || |	| || || || || || ƒ	 qôW t ƒ ‰ ‡ fd%d&„| j !¡ D ƒ| _"d S )'NrN   z[You must specify a 'variant' argument (i.e. 'Debug' or 'Release') to create an MSVSProject.Úbuildtargetr?   z<Sizes of 'buildtarget' and 'variant' lists must be the same.r   r   Úoutdirz7Sizes of 'outdir' and 'variant' lists must be the same.ÚrunfilerE   z8Sizes of 'runfile' and 'variant' lists must be the same.ÚMSVSSCONSCRIPTc             S   s¤   || ks| | dkr"dgt |ƒ S tj | | ¡rD| | gt |ƒ S tj | | ¡r„t | | ƒt |ƒkrztj d| ¡‚q | | S ntj d|t| | ƒf ¡‚dS )az  
            Retrieves a specific key from the environment. If the key is
            present, it is expected to either be a string or a list with length
            equal to the number of variants. The function returns a list of
            the desired value (e.g. cpp include paths) guaranteed to be of
            length equal to the length of the variants list.
            Nr?   z3Sizes of '%s' and 'variant' lists must be the same.z0Unsupported type for key '%s' in environment: %s)rF   r   rT   rU   rV   rR   rS   Útype)r   rg   re   r   r   r   ÚGetKeyFromEnvû  s    
z-_DSPGenerator.__init__.<locals>.GetKeyFromEnvÚcmdargsÚ
cppdefinesÚ
CPPDEFINESÚcpppathsÚCPPPATHÚcppflagsZCCFLAGSZCXXFLAGSZCPPFLAGSr*   zSource FileszHeader FileszLocal HeaderszResource FileszOther FilesÚnokeepc             S   s   |   ¡ S )N)Úlower)Úar   r   r   Ú<lambda>J  ó    z(_DSPGenerator.__init__.<locals>.<lambda>)rg   c             S   s°   t ƒ }||_||_||_||_||_||_t||
d d ƒ|_t	 
d|¡}|rd| d¡|_| d¡|_n||_d|_|| j|< td| j d |j d |j d t|	ƒ d	 ƒ d S )
Nz
(.*)\|(.*)r   é   ÚWin32zAdding 'z - ú|z' to 'r   )r;   r‘   r’   r—   r˜   rœ   r“   r   rš   Úrer.   ÚgrouprN   r…   ra   Úprintr*   r'   )rc   rN   r‘   r’   r“   r—   r˜   rš   rœ   rd   r   Úconfigr.   r   r   r   Ú	AddConfigL  s     
z)_DSPGenerator.__init__.<locals>.AddConfigc                s(   g | ] }|j ˆ ksˆ  |j ¡s|j ‘qS r   )r…   Úadd)r   Úp)Úseenr   r   r   h  s    z*_DSPGenerator.__init__.<locals>.<listcomp>)#r'   rd   Úget_abspathÚAttributeErrorr5   r@   r   rp   r   rR   rS   rT   rU   rV   rF   r    Ú
sconscriptr4   r   r*   ÚbasenameÚsplitextr   rG   ra   r   ÚexistsÚParser^   ÚsrcargsÚsortÚrangeÚsetÚvaluesÚ	platforms)rc   rd   r   r   r­   re   r‘   ÚbtÚ_r’   r   Úvr“   r–   r—   r˜   rš   rœ   ZsourcenamesÚnÚtr   r©   r   )r¬   r   rh   ©  sà    








.
$
>z_DSPGenerator.__init__c             C   s   d S )Nr   )rc   r   r   r   rv   l  s    z_DSPGenerator.BuildN)r<   r=   r>   rw   r´   rh   rv   r   r   r   r   r   Ÿ  s    Dr   a¾  # Microsoft Developer Studio Project File - Name="%(name)s" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) External Target" 0x0106

CFG=%(name)s - Win32 %(confkey)s
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "%(name)s.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "%(name)s.mak" CFG="%(name)s - Win32 %(confkey)s"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú_GenerateV6DSPz%Generates a Project file for MSVS 6.0c             C   s`   t | j ¡ ƒ}| j}|d }| j ttƒ  ¡ x |D ]}| j d||f ¡ q4W | j d¡ d S )Nr   zB!MESSAGE "%s - Win32 %s" (based on "Win32 (x86) External Target")
z
!MESSAGE

)r„   ra   r`   r*   rI   rk   ÚV6DSPHeaderr8   )rc   r‡   r*   Zconfkeyrˆ   r   r   r   ÚPrintHeaderˆ  s    
z_GenerateV6DSP.PrintHeaderc             C   sJ  | j }| j d¡ d}t| j ¡ ƒ}x|D ]}| j| j}| j| j}|dkrl| j d||f ¡ d}n| j d||f ¡ d| jk}|s˜|| jd< xdD ]ˆ}| j d||f ¡ d	| 	¡ krÐ| j d
¡ n| j d¡ | j d||||f ¡ d| j 
dd¡ }	| j d||	||	||||f ¡ qžW |s,| jd= q,W | j d¡ x"|D ]}| j d||f ¡ qLW | j d¡ d}xF|D ]>}|dkr¨| j d||f ¡ d}n| j d||f ¡ q€W | j d¡ |  ¡  | j d¡ | jdkrFt | jt¡}
t |
¡ ¡ }
| j |
d ¡ t | jt¡}
t |
¡ ¡ }
| j |
d ¡ d S )Nzd# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""

r   z"!IF  "$(CFG)" == "%s - Win32 %s"

r   z'
!ELSEIF  "$(CFG)" == "%s - Win32 %s"

ÚMSVSBUILDTARGET)zBASE r?   z0# PROP %sUse_MFC 0
# PROP %sUse_Debug_Libraries rb   z0
z1
z8# PROP %sOutput_Dir "%s"
# PROP %sIntermediate_Dir "%s"
zecho Starting SCons && z$MSVSBUILDCOMz}# PROP %sCmd_Line "%s"
# PROP %sRebuild_Opt "-c && %s"
# PROP %sTarget_File "%s"
# PROP %sBsc_Name ""
# PROP %sTarget_Dir ""
z
!ENDIF

# Begin Target

z# Name "%s - Win32 %s"
r   z&!ELSEIF  "$(CFG)" == "%s - Win32 %s"

z!ENDIF

z# End Target
# End Project
)r*   rI   rk   r„   ra   r`   r’   r‘   r   rž   r   ÚPrintSourceFilesr   ÚpickleÚdumpsr   Úbase64Ú	b64encodeÚdecoderG   )rc   r*   Úfirstr‡   rˆ   r’   r‘   Úenv_has_buildtargetrD   ÚcmdÚpdatar   r   r   ÚPrintProject–  s^    





z_GenerateV6DSP.PrintProjectc             C   sÐ   ddddddœ}x t | ¡ dd„ dD ]ˆ}| j| s6q&| j d	| d
 ¡ ||  dd¡}| j d| d ¡ x2| j| D ]$}tj |¡}| j d| d ¡ qzW | j d¡ q&W | j dt	| j
ƒ d ¡ d S )Nz!cpp|c|cxx|l|y|def|odl|idl|hpj|batzh|hpp|hxx|hm|inlz9r|rc|ico|cur|bmp|dlg|rc2|rct|bin|cnt|rtf|gif|jpg|jpeg|jper?   )zSource FileszHeader FileszLocal HeaderszResource FileszOther Filesc             S   s   |   ¡ S )N)rž   )rŸ   r   r   r   r    â  r¡   z1_GenerateV6DSP.PrintSourceFiles.<locals>.<lambda>)rg   z# Begin Group "z"

r¤   ú;z# PROP Default_Filter "z"
z# Begin Source File

SOURCE="z"
# End Source File
z# End Group
)r„   r`   rG   rI   rk   r   r5   r@   r&   r'   r¯   )rc   Ú
categoriesrˆ   ZtypelistrI   r   r   r   rÃ   Û  s$    
z_GenerateV6DSP.PrintSourceFilesc             C   sJ  yt | jdƒ}W n tk
r$   d S X | ¡ }x|rHd|kr>P | ¡ }q0W | ¡ }|}x |rv|dkrv| ¡ }|| }qXW yt |¡}t |¡}W n( tk
r¦   ‚ Y n t	k
r¸   d S X | j
 |¡ d }| ¡ }|}x |rö|dkrö| ¡ }|| }qØW | ¡  yt |¡}t |¡}W n  tk
r0   ‚ Y n
   d S | j |¡ d S )NÚrz# End Projectr   )rq   rp   rr   ÚreadlinerÆ   ÚdecodestringrÄ   ÚloadsÚKeyboardInterruptÚ	Exceptionra   Úupdaters   rG   )rc   rd   ÚlineÚdatasÚdatar   r   r   r³   ö  sJ    

z_GenerateV6DSP.Parsec          
   C   sr   yt | jdƒ| _W n@ tk
rR } z"tj d| j d t|ƒ ¡‚W d d }~X Y nX |  ¡  |  	¡  | j 
¡  d S )Nro   zUnable to open "z" for writing:)rq   rp   rI   rr   r   rR   rS   r'   rÁ   rÍ   rs   )rc   ru   r   r   r   rv   *  s    0z_GenerateV6DSP.BuildN)	r<   r=   r>   rw   rÁ   rÍ   rÃ   r³   rv   r   r   r   r   r¿   …  s   E4r¿   zÏ<?xml version="1.0" encoding="%(encoding)s"?>
<VisualStudioProject
	ProjectType="Visual C++"
	Version="%(versionstr)s"
	Name="%(name)s"
	ProjectGUID="%(project_guid)s"
%(scc_attrs)s
	Keyword="MakeFileProj">
aŽ  		<Configuration
			Name="%(variant)s|%(platform)s"
			OutputDirectory="%(outdir)s"
			IntermediateDirectory="%(outdir)s"
			ConfigurationType="0"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE">
			<Tool
				Name="VCNMakeTool"
				BuildCommandLine="%(buildcmd)s"
				ReBuildCommandLine="%(rebuildcmd)s"
				CleanCommandLine="%(cleancmd)s"
				Output="%(runfile)s"/>
		</Configuration>
zé<?xml version="1.0" encoding="%(encoding)s"?>
<VisualStudioProject
	ProjectType="Visual C++"
	Version="%(versionstr)s"
	Name="%(name)s"
	ProjectGUID="%(project_guid)s"
	RootNamespace="%(name)s"
%(scc_attrs)s
	Keyword="MakeFileProj">
a  		<Configuration
			Name="%(variant)s|%(platform)s"
			ConfigurationType="0"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="false"
			>
			<Tool
				Name="VCNMakeTool"
				BuildCommandLine="%(buildcmd)s"
				ReBuildCommandLine="%(rebuildcmd)s"
				CleanCommandLine="%(cleancmd)s"
				Output="%(runfile)s"
				PreprocessorDefinitions="%(preprocdefs)s"
				IncludeSearchPath="%(includepath)s"
				ForcedIncludes=""
				AssemblySearchPath=""
				ForcedUsingAssemblies=""
				CompileAsManaged=""
			/>
		</Configuration>
c               @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú_GenerateV7DSPz&Generates a Project file for MSVS .NETc             C   s¦   t  | |||¡ |d | _t| jƒ\| _| _| jdkrJd| _t| _t	| _
nB| jdkrhd| _t| _t	| _
n$| jdkrzd| _nd| _t| _t| _
d | _t | |||¡ d S )	NrŒ   g      "@z9.00g       @z8.00gffffff@z7.10z7.00)r   rh   r9   r2   r}   r1   ri   ÚV8DSPHeaderÚ	dspheaderÚV8DSPConfigurationÚdspconfigurationÚV7DSPHeaderÚV7DSPConfigurationrI   r|   )rc   rd   r   r   r   r   r   rh   u  s$    



z_GenerateV7DSP.__init__c             C   sV  | j }| j}| j}| j  d¡}| dd¡}| dd¡}| dd¡}| dd¡}| dtj¡}	tj |	tj 	| j
¡¡}
| dd¡}|st| jdƒ}|dkrÆd	| }|dkr´|d
| 7 }|d|
|f 7 }n&|dkrÜd||f }n| j dd¡| _| j | jtƒ  ¡ | j d¡ x | jD ]}| j d| ¡ qW | j d¡ | jdkrR| j d¡ d S )Nz$MSVSENCODINGÚMSVS_SCC_PROVIDERr?   ÚMSVS_SCC_PROJECT_NAMEÚMSVS_SCC_AUX_PATHÚMSVS_SCC_LOCAL_PATHÚMSVS_SCC_CONNECTION_ROOTÚMSVS_PROJECT_GUIDz	SccProjectName="%s"
z	SccAuxPath="%s"
z$	SccLocalPath="%s"
	SccProvider="%s"z'	SccProjectName="%s"
	SccLocalPath="%s"z%(scc_attrs)s
z	<Platforms>
z		<Platform
			Name="%s"/>
z	</Platforms>
g       @z	<ToolFiles>
	</ToolFiles>
)r   ri   r*   r   r4   r5   Úcurdirr@   ÚrelpathÚdirnamerp   r,   rd   rÜ   r   rI   rk   r8   r¹   r}   )rc   r   ri   r*   rl   Úscc_providerÚscc_project_nameÚscc_aux_pathÚscc_local_path_legacyÚscc_connection_rootÚscc_local_pathÚproject_guidÚ	scc_attrsr…   r   r   r   rÁ   Œ  s@    z_GenerateV7DSP.PrintHeaderc          	   C   sú  | j  d¡ t| j ¡ ƒ}x8|D ].}| j| j}| j| j}| j| j}| j| j}| j| j	}| j| j
}| j| j}	| j| j}
d| jk}|s || jd< d}|r²d| }nd}t|| j dd¡ | ƒ}t|| j dd¡ | ƒ}t|| j d	d¡ | ƒ}td
 t|
ƒ¡ƒ}td
 t|	| jd d ƒ¡ƒ}|s>| jd= | j  | jtƒ  ¡ q"W | j  d¡ | jdkrz| j  d¡ |  ¡  | j  d¡ | jdkröt | jt¡}t |¡ ¡ }| j  d| d ¡ t | jt¡}t |¡ ¡ }| j  |d ¡ d S )Nz	<Configurations>
rÂ   zecho Starting SCons && ú r?   z$MSVSBUILDCOMr   z$MSVSREBUILDCOMz$MSVSCLEANCOMrÎ   z	</Configurations>
gffffff@z	<References>
	</References>
z</VisualStudioProject>
r   z<!-- SCons Data:
r   z-->
)rI   rk   r„   ra   r`   rN   r…   r’   r‘   r“   r—   rš   r˜   r   r   r   r†   r   r   rÞ   r8   r}   rÃ   r   rÄ   rÅ   r   rÆ   rÇ   rÈ   rG   )rc   r‡   rˆ   rN   r…   r’   r‘   r“   r—   rš   r˜   rÊ   ÚstartingÚbuildcmdÚ
rebuildcmdÚcleancmdÚpreprocdefsÚincludepathrÌ   r   r   r   rÍ   ·  sL    


z_GenerateV7DSP.PrintProjectc             C   s®   t | ¡ dd„ d}xD|D ]<\}}tj |¡r| j d| ¡ |  ||¡ | j d¡ qW xN|D ]F\}}tj |¡r`|}|rŠt	j
 ||¡}t	j
 |¡}| j d| ¡ q`W d S )Nc             S   s   | d   ¡ S )Nr   )rž   )rŸ   r   r   r   r    ñ  r¡   z-_GenerateV7DSP.printSources.<locals>.<lambda>)rg   z(			<Filter
				Name="%s"
				Filter="">
z			</Filter>
z+			<File
				RelativePath="%s">
			</File>
)r„   r_   r   rT   rW   rI   rk   ÚprintSourcesrU   r5   r@   r†   r&   )rc   rH   ÚcommonprefixÚsorteditemsrg   rƒ   rI   r   r   r   rù   ð  s    z_GenerateV7DSP.printSourcesc                s(  ddddddœ}ˆj  d¡ t‡fdd„| ¡ D ƒd	d
„ d}xÂ|D ]º}t|ƒdkrlˆj  d||| f ¡ ˆj| }d }tttj	j
|ƒƒ}tj	 tj	 |¡¡‰ ˆ rÐ|d tˆ ƒ tjkrÐ‡ fdd„|D ƒ}ˆ }t|ƒ}ˆj||d t|ƒdkrDˆj  d¡ qDW ˆj  dtˆjƒ ¡ ˆj  d¡ d S )Nz!cpp;c;cxx;l;y;def;odl;idl;hpj;batzh;hpp;hxx;hm;inlz9r;rc;ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jper?   )zSource FileszHeader FileszLocal HeaderszResource FileszOther Filesz		<Files>
c                s   g | ]}ˆ j | r|‘qS r   )rG   )r   rP   )rc   r   r   r     s    z3_GenerateV7DSP.PrintSourceFiles.<locals>.<listcomp>c             S   s   |   ¡ S )N)rž   )rŸ   r   r   r   r      r¡   z1_GenerateV7DSP.PrintSourceFiles.<locals>.<lambda>)rg   r   z'		<Filter
			Name="%s"
			Filter="%s">
r   c                s    g | ]}|t ˆ ƒd  d… ‘qS )r   N)rF   )r   r   )Úcpr   r   r   "  s    )rú   z		</Filter>
z(		<File
			RelativePath="%s">
		</File>
z!	</Files>
	<Globals>
	</Globals>
)rI   rk   r„   r`   rF   rG   r]   Úmapr5   r@   r&   ré   rú   ÚseprL   rù   r'   r¯   )rc   rÏ   Úcatsrˆ   rG   rú   r   rH   r   )rü   rc   r   rÃ     s4    

z_GenerateV7DSP.PrintSourceFilesc             C   s@  yt | jdƒ}W n tk
r$   d S X | ¡ }x|rHd|kr>P | ¡ }q0W | ¡ }|}x |rv|dkrv| ¡ }|| }qXW yt |¡}t |¡}W n tk
r¦   ‚ Y n
   d S | j	 
|¡ d }| ¡ }|}x |rì|dkrì| ¡ }|| }qÎW | ¡  yt |¡}t |¡}W n  tk
r&   ‚ Y n
   d S | j 
|¡ d S )NrÐ   z<!-- SCons Data:r   )rq   rp   rr   rÑ   rÆ   rÒ   rÄ   rÓ   rÔ   ra   rÖ   rs   rG   )rc   rd   r×   rØ   rÙ   r   r   r   r³   4  sJ    

z_GenerateV7DSP.Parsec          
   C   s|   yt | jdƒ| _W n@ tk
rR } z"tj d| j d t|ƒ ¡‚W d d }~X Y nX |  ¡  |  	¡  | j 
¡  t | ¡ d S )Nro   zUnable to open "z" for writing:)rq   rp   rI   rr   r   rR   rS   r'   rÁ   rÍ   rs   r|   rv   )rc   ru   r   r   r   rv   g  s    0
z_GenerateV7DSP.BuildN)r<   r=   r>   rw   rh   rÁ   rÍ   rù   rÃ   r³   rv   r   r   r   r   rÚ   r  s   +9.3rÚ   z©<?xml version="1.0" encoding="%(encoding)s"?>
<Project DefaultTargets="Build" ToolsVersion="%(versionstr)s" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
z©		<ProjectConfiguration Include="%(variant)s|%(platform)s">
			<Configuration>%(variant)s</Configuration>
			<Platform>%(platform)s</Platform>
		</ProjectConfiguration>
a  	<PropertyGroup Label="Globals">
		<ProjectGuid>%(project_guid)s</ProjectGuid>
%(scc_attrs)s		<RootNamespace>%(name)s</RootNamespace>
		<Keyword>MakeFileProj</Keyword>
		<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
	</PropertyGroup>
a   	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'" Label="Configuration">
		<ConfigurationType>Makefile</ConfigurationType>
		<UseOfMfc>false</UseOfMfc>
		<PlatformToolset>%(toolset)s</PlatformToolset>
	</PropertyGroup>
a/  	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'" Label="PropertySheets">
		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
	</ImportGroup>
am  		<NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(buildcmd)s</NMakeBuildCommandLine>
		<NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(rebuildcmd)s</NMakeReBuildCommandLine>
		<NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(cleancmd)s</NMakeCleanCommandLine>
		<NMakeOutput Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(runfile)s</NMakeOutput>
		<NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(preprocdefs)s</NMakePreprocessorDefinitions>
		<NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(includepath)s</NMakeIncludeSearchPath>
		<NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
		<NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
		<NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
		<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'">%(additionaloptions)s</AdditionalOptions>
zŸ<?xml version="1.0" encoding="%(encoding)s"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
c               @   sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú_GenerateV10DSPz&Generates a Project file for MSVS 2010c             C   s6   t  | |||¡ t| _t| _t| _t | |||¡ d S )N)	r   rh   ÚV10DSPHeaderrÜ   ÚV10DSPProjectConfigurationrÞ   ÚV10DSPGlobalsÚ
dspglobalsr‹   )rc   rd   r   r   r   r   r   rh   «  s
    z_GenerateV10DSP.__init__c             C   sx  | j }| j}| j}| d¡}| dd¡}| dd¡}| dd¡}| dd¡}| dd¡}	| dtj¡}
tj |
tj 	| j
¡¡}|sŽt| jdƒ}|dkrÄd	| }|dkr²|d
| 7 }|d||f 7 }n&|	dkrÚd||	f }n| j dd¡| _| j | jtƒ  ¡ | j d¡ t| j ¡ ƒ}x:|D ]2}| j| j}| j| j}| j | jtƒ  ¡ qW | j d¡ | j | jtƒ  ¡ d S )Nz$MSVSENCODINGræ   r?   rá   râ   rã   rä   rå   z&		<SccProjectName>%s</SccProjectName>
z		<SccAuxPath>%s</SccAuxPath>
zB		<SccLocalPath>%s</SccLocalPath>
		<SccProvider>%s</SccProvider>
zH		<SccProjectName>%s</SccProjectName>
		<SccLocalPath>%s</SccLocalPath>
z%(scc_attrs)sz+	<ItemGroup Label="ProjectConfigurations">
z	</ItemGroup>
)r   r*   ri   r   r4   r5   rç   r@   rè   ré   rp   r,   rd   r  r   rI   rk   rÜ   r8   r„   ra   r`   rN   r…   rÞ   )rc   r   r*   ri   rl   rð   rê   rë   rì   rí   rî   rï   rñ   r‡   rˆ   rN   r…   r   r   r   rÁ   ³  s@    

z_GenerateV10DSP.PrintHeaderc          
   C   s|  | j }t| j ¡ ƒ}| j d¡ d}d| jkrLt| jd ƒ\}}d|d  }x6|D ].}| j| j}| j| j	}| j t
tƒ  ¡ qRW | j d¡ | j d¡ | j d¡ x6|D ].}| j| j}| j| j	}| j ttƒ  ¡ q®W | j d	¡ | j d
¡ | j d¡ x^|D ]T}| j| j}| j| j	}| j| j}	| j| j}
| j| j}| j| j}| j| j}| j| j}| j| j}d| jk}|s˜|
| jd< d}|r¬d| }nd}t|| j dd¡ | ƒ}t|| j dd¡ | ƒ}t|| j dd¡ | ƒ}td t|ƒ¡ƒ}td t|| jd d ƒ¡ƒ}td t|| jƒ¡ƒ}|sN| jd= | j ttƒ  ¡ qW | j d¡ | jd | _yt| jdƒ| _W nB tk
rÒ } z"t j! "d| j d t#|ƒ ¡‚W d d }~X Y nX | j d| j$ ¡ |  %¡  | j d¡ | j &¡  | j d¡ | j'dkrxt( )| jt*¡}t+ ,|¡ -¡ }| j d| d ¡ t( )| j.t*¡}t+ ,|¡ -¡ }| j |d ¡ d S ) NzC	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
r?   ZMSVC_VERSIONzv%dé
   z;	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
z)	<ImportGroup Label="ExtensionSettings">
z	</ImportGroup>
z&	<PropertyGroup Label="UserMacros" />
z	<PropertyGroup>
z9	<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
rÂ   zecho Starting SCons && rò   z$MSVSBUILDCOMr   z$MSVSREBUILDCOMz$MSVSCLEANCOMrÎ   z	</PropertyGroup>
z.filtersro   zUnable to open "z" for writing:z<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="%s" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
z
</Project>z€	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
	<ImportGroup Label="ExtensionTargets">
	</ImportGroup>
</Project>
r   z<!-- SCons Data:
r   z-->
)/r*   r„   ra   r`   rI   rk   r   r2   rN   r…   ÚV10DSPPropertyGroupConditionr8   ÚV10DSPImportGroupConditionr’   r‘   r“   r—   rš   r˜   rœ   r   r   r†   r   r   r"   ÚV10DSPCommandLinerp   Z
filtersabsrq   Úfilters_filerr   r   rR   rS   r'   ri   rÃ   rs   r   rÄ   rÅ   r   rÆ   rÇ   rÈ   rG   )rc   r*   r‡   Ztoolsetr}   r1   rˆ   rN   r…   r’   r‘   r“   r—   rš   r˜   rœ   rÊ   ró   rô   rõ   rö   r÷   rø   Zadditionaloptionsru   rÌ   r   r   r   rÍ   ß  s„    





0

z_GenerateV10DSP.PrintProjectc             C   sj   t | ¡ dd„ d}xP|D ]H\}}tj |¡r|d | }| j d|t| j|ƒf ¡ |  	||¡ qW d S )Nc             S   s   | d   ¡ S )Nr   )rž   )rŸ   r   r   r   r    @  r¡   z._GenerateV10DSP.printFilters.<locals>.<lambda>)rg   ú\zO		<Filter Include="%s">
			<UniqueIdentifier>%s</UniqueIdentifier>
		</Filter>
)
r„   r_   r   rT   rW   r	  rk   r,   rp   ÚprintFilters)rc   rH   r*   rû   rg   rƒ   Úfilter_namer   r   r   r  ?  s    z_GenerateV10DSP.printFiltersc       
   	   C   sÖ   ddddddœ}t | ¡ dd„ d}x4|D ],\}}tj |¡r*|  ||||d | ¡ q*W xv|D ]n\}}tj |¡r`|}	|rŠtj 	||¡}	tj 
|	¡}	| j d	|| |	f ¡ | j d
|| |	||| f ¡ q`W d S )NZ	ClCompileZ	ClIncludeÚNone)zSource FileszHeader FileszLocal HeaderszResource FileszOther Filesc             S   s   | d   ¡ S )Nr   )rž   )rŸ   r   r   r   r    Q  r¡   z._GenerateV10DSP.printSources.<locals>.<lambda>)rg   r
  z		<%s Include="%s" />
z3		<%s Include="%s">
			<Filter>%s</Filter>
		</%s>
)r„   r_   r   rT   rW   rù   rU   r5   r@   r†   r&   rI   rk   r	  )
rc   rH   rˆ   rú   r  Úkeywordsrû   rg   rƒ   rI   r   r   r   rù   J  s$    z_GenerateV10DSP.printSourcesc                sÀ  ddddddœ}t ‡fdd„| ¡ D ƒdd	„ d
}ˆj d¡ xœ|D ]”}ˆj d||| f ¡ ˆj| }d }tttjj	|ƒƒ}tj 
tj |¡¡‰ ˆ rÄ|d tˆ ƒ tjkrÄ‡ fdd„|D ƒ}ˆ }t|ƒ}ˆ ||¡ qDW ˆj d¡ x¼|D ]´}ˆj d¡ ˆj d¡ ˆj| }d }tttjj	|ƒƒ}tj 
tj |¡¡‰ ˆ rr|d tˆ ƒ tjkrr‡ fdd„|D ƒ}ˆ }t|ƒ}ˆ ||||¡ ˆj d¡ ˆj d¡ qîW ˆj dtˆjƒ ¡ d S )Nz!cpp;c;cxx;l;y;def;odl;idl;hpj;batzh;hpp;hxx;hm;inlz9r;rc;ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jper?   )zSource FileszHeader FileszLocal HeaderszResource FileszOther Filesc                s   g | ]}ˆ j | r|‘qS r   )rG   )r   rP   )rc   r   r   r   k  s    z4_GenerateV10DSP.PrintSourceFiles.<locals>.<listcomp>c             S   s   |   ¡ S )N)rž   )rŸ   r   r   r   r    l  r¡   z2_GenerateV10DSP.PrintSourceFiles.<locals>.<lambda>)rg   z	<ItemGroup>
z’		<Filter Include="%s">
			<UniqueIdentifier>{7b42d31d-d53c-4868-8b92-ca2bc9fc052f}</UniqueIdentifier>
			<Extensions>%s</Extensions>
		</Filter>
r   c                s    g | ]}|t ˆ ƒd  d… ‘qS )r   N)rF   )r   r   )rü   r   r   r   €  s    z	</ItemGroup>
c                s    g | ]}|t ˆ ƒd  d… ‘qS )r   N)rF   )r   r   )rü   r   r   r   —  s    z3	<ItemGroup>
		<None Include="%s" />
	</ItemGroup>
)r„   r`   r	  rk   rG   r]   rý   r5   r@   r&   ré   rú   rF   rþ   rL   r  rI   rù   r'   r¯   )rc   rÏ   rÿ   rˆ   rG   rú   r   rH   r   )rü   rc   r   rÃ   d  sJ    



z _GenerateV10DSP.PrintSourceFilesc             C   s   d S )Nr   )rc   r   r   r   r³   ¦  s    z_GenerateV10DSP.Parsec          
   C   s|   yt | jdƒ| _W n@ tk
rR } z"tj d| j d t|ƒ ¡‚W d d }~X Y nX |  ¡  |  	¡  | j 
¡  t | ¡ d S )Nro   zUnable to open "z" for writing:)rq   rp   rI   rr   r   rR   rS   r'   rÁ   rÍ   rs   r‹   rv   )rc   ru   r   r   r   rv   «  s    0
z_GenerateV10DSP.BuildN)r<   r=   r>   rw   rh   rÁ   rÍ   r  rù   rÃ   r³   rv   r   r   r   r   r   ¨  s   ,`Br   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_DSWGeneratorz Base class for DSW generators c             C   sà   t j t|ƒ¡| _t j t j | j¡¡| _|| _d|krDt	j
 d¡‚|d }t	j |¡sdt	j
 d¡‚t	j |¡}t|ƒdk rˆt	j
 d¡‚ttt|ƒƒ| _d| jkr°| jd | _nt j t	j | j¡d ¡| _| j | j¡| _d S )NÚprojectszAYou must specify a 'projects' argument to create an MSVSSolution.z0The 'projects' argument must be a list of nodes.r   z@You must specify at least one project to create an MSVSSolution.r*   r   )r5   r@   r&   r'   Údswfileré   r   Údsw_folder_pathr   r   rR   Z	UserErrorrT   rV   rS   ZflattenrF   r]   rý   Údspfilesr*   r°   r±   r   )rc   r  r   r   r  r   r   r   rh   ¹  s     
z_DSWGenerator.__init__c             C   s   d S )Nr   )rc   r   r   r   rv   Î  s    z_DSWGenerator.BuildN)r<   r=   r>   rw   rh   rv   r   r   r   r   r  ·  s   r  c                   s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
Ú_GenerateV7DSWz'Generates a Solution file for MSVS .NETc                s¶  t ƒ  |||¡ d | _| jd | _t| jƒ\| _| _d| _| jdkrLd| _nF| jdkr^d| _n4| jdkrpd| _n"| jd	kr‚d
| _n| jdkr’d| _d|kr®|d r®|d | _	nt
|| jƒ| _	i | _d| _d|krâ|d dkrâd| _| jdkrtj | j¡r|  ¡  |fdd„}d|kr*tj d¡‚nRtj |d ¡rL|| |d ƒ n0tj |d ¡r|x|d D ]}|| |ƒ qhW tƒ ‰ ‡ fdd„| j ¡ D ƒ| _dd„ }g | _|| ƒ d S )NrŒ   z7.00g      &@z12.00g      $@z11.00g      "@z10.00g       @z9.00gffffff@z8.00Úslnguidr   r   rN   r   c             S   sJ   t ƒ }t d|¡}|r0| d¡|_| d¡|_n||_d|_|| j|< d S )Nz
(.*)\|(.*)r   r¢   r£   )r;   r¥   r.   r¦   rN   r…   ra   )rc   rN   r  r¨   r.   r   r   r   r©   ó  s    z*_GenerateV7DSW.__init__.<locals>.AddConfigzbYou must specify a 'variant' argument (i.e. 'Debug' or 'Release') to create an MSVS Solution File.c                s(   g | ] }|j ˆ ksˆ  |j ¡s|j ‘qS r   )r…   rª   )r   r«   )r¬   r   r   r     s    z+_GenerateV7DSW.__init__.<locals>.<listcomp>c             S   s˜   x’| j D ]ˆ}tj |¡\}}tj |¡}tj |¡d dkr>qtj || j	¡}|tj
kr^|}ntj ||¡}|t|dƒ||||dœ}| j |¡ qW d S )Nr   z.filtersr?   )ÚNAMEÚGUIDÚFOLDER_PATHZ	FILE_PATHZSLN_RELATIVE_FOLDER_PATHÚSLN_RELATIVE_FILE_PATH)r  r5   r@   rA   r   r   rT   r±   rè   r  rç   r†   r,   Údspfiles_infor    )rc   rd   Zdsp_folder_pathr*   Zdsp_relative_folder_pathÚdsp_relative_file_pathZdspfile_infor   r   r   ÚGenerateProjectFilesInfo  s     
z9_GenerateV7DSW.__init__.<locals>.GenerateProjectFilesInfo)r   rh   rI   r   r9   r2   r}   r1   ri   r  r,   r*   ra   r   r5   r@   r²   r  r³   r   rR   rS   rT   rU   rV   r·   r¸   r¹   r  )rc   r  r   r   r©   rN   r  )r‚   )r¬   r   rh   Ó  sJ    





z_GenerateV7DSW.__init__c             C   sÈ   yt | jdƒ}W n tk
r$   d S X | ¡ }x"|rP|d d… dkrFP | ¡ }q0W | ¡ }|}x|rv| ¡ }|| }q`W | ¡  yt |¡}t |¡}W n t	k
r®   ‚ Y n
   d S | j
 |¡ d S )NrÐ   é	   Z	EndGlobal)rq   r  rr   rÑ   rs   rÆ   rÒ   rÄ   rÓ   rÔ   ra   rÖ   )rc   r  r×   rØ   rÙ   r   r   r   r³   &  s.    
z_GenerateV7DSW.Parsec             C   sÂ  | j  d| j ¡ | jdkr*| j  d¡ n¦| jdkrB| j  d¡ nŽ| jdkrZ| j  d¡ nv| jdkrr| j  d	¡ n^| jd
krŠ| j  d¡ nF| jdkr¢| j  d¡ n.| jdkrº| j  d¡ n| jdkrÐ| j  d¡ xŠ| jD ]€}|d }tj |¡\}}|dkr|}| j  dt||d |d f ¡ d| j  kr<dk rLn n| j  d¡ | j  d¡ qØW | j  d¡ | j	}d|kr¦t
| jƒd }| j}| dd¡ dd¡}| d d¡ dd¡}	| d!tj¡}
tj |
| j¡ d"d#¡}| j  d$tƒ  ¡ tj | j|
¡}|tjkr | j  d%| d"d#¡ ¡ | jdk r<| j  d&| ¡ x\| jD ]R}| j |¡d }|d  d"d#¡}tj |d' |
¡ d"d#¡}| j  d(tƒ  ¡ qDW | j  d)¡ | jdkrÀ| j  d*¡ n| j  d+¡ t| j ¡ ƒ}d,}xh|D ]`}| j| j}| j| j}| jdkr&| j  d-||||f ¡ n| j  d.||f ¡ |d }qäW | j  d)¡ | jdkrl| j  d/¡ | jdkr†| j  d0¡ n| j  d1¡ x¬|D ]¤}| j| j}| j| j}| jdkr xx| jD ]2}|d }| j  d2||||||||||f
 ¡ qÈW n:x8| jD ].}|d }| j  d3||||||||f ¡ qW q˜W | j  d)¡ | jdkrf| j  d4¡ n| j  d5¡ | j  d6¡ | jd,kr¾t | jt¡}t  |¡ !¡ }| j  |¡ | j  d7¡ d8S )9zWrites a solution filez9Microsoft Visual Studio Solution File, Format Version %s
gš™™™™™,@z# Visual Studio 17
gffffff,@z# Visual Studio 16
g      ,@z# Visual Studio 15
g      (@z# Visual Studio 14
g      &@z# Visual Studio 11
g      $@z# Visual Studio 2010
g      "@z# Visual Studio 2008
g       @z# Visual Studio 2005
r  z.vcprojz!Project("%s") = "%s", "%s", "%s"
r  r  gffffff@zF	ProjectSection(ProjectDependencies) = postProject
	EndProjectSection
zEndProject
zGlobal
rá   r   r?   rò   z\u0020râ   rå   r
  z\\zî	GlobalSection(SourceCodeControl) = preSolution
		SccNumberOfProjects = %(scc_number_of_projects)d
		SccProjectName0 = %(scc_project_name)s
		SccLocalPath0 = %(scc_local_path)s
		SccProvider0 = %(scc_provider)s
		CanCheckoutShared = true
z6		SccProjectFilePathRelativizedFromConnection0 = %s\\
z		SolutionUniqueID = %s
r  zÕ		SccProjectUniqueName%(i)s = %(dsp_relative_file_path)s
		SccLocalPath%(i)d = %(scc_local_path)s
		CanCheckoutShared = true
		SccProjectFilePathRelativizedFromConnection%(i)s = %(dsp_scc_relative_folder_path)s\\
z	EndGlobalSection
z=	GlobalSection(SolutionConfigurationPlatforms) = preSolution
z4	GlobalSection(SolutionConfiguration) = preSolution
r   z		%s|%s = %s|%s
z		ConfigName.%d = %s
zE	GlobalSection(ProjectDependencies) = postSolution
	EndGlobalSection
z=	GlobalSection(ProjectConfigurationPlatforms) = postSolution
z4	GlobalSection(ProjectConfiguration) = postSolution
z8		%s.%s|%s.ActiveCfg = %s|%s
		%s.%s|%s.Build.0 = %s|%s
z2		%s.%s.ActiveCfg = %s|%s
		%s.%s.Build.0 = %s|%s
z^	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
z‹	GlobalSection(ExtensibilityGlobals) = postSolution
	EndGlobalSection
	GlobalSection(ExtensibilityAddIns) = postSolution
	EndGlobalSection
z
EndGlobal
r   N)"rI   rk   ri   r}   r  r   rT   r±   Úexternal_makefile_guidr   rF   r  r  r4   r   r5   rç   r@   rè   r  r8   Úindexr„   ra   r`   rN   r…   r   rÄ   rÅ   r   rÆ   rÇ   rÈ   )rc   Zdspinfor*   rD   Úsuffixr   Zscc_number_of_projectsr  rê   rë   rî   rï   Zsln_relative_path_from_sccr   r  Zdsp_scc_relative_folder_pathr‡   ZcntrN   r…   ZguidrÌ   r   r   r   ÚPrintSolutionD  s¶    












$$z_GenerateV7DSW.PrintSolutionc          
   C   sj   yt | jdƒ| _W n@ tk
rR } z"tj d| j d t|ƒ ¡‚W d d }~X Y nX |  ¡  | j 	¡  d S )Nro   zUnable to open "z" for writing:)
rq   r  rI   rr   r   rR   rS   r'   r!  rs   )rc   ru   r   r   r   rv   Á  s    0z_GenerateV7DSW.Build)	r<   r=   r>   rw   rh   r³   r!  rv   rŠ   r   r   )r‚   r   r  Ñ  s
   S}r  aü  Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!

###############################################################################

Project: "%(name)s"="%(dspfile)s" - Package Owner=<4>

Package=<5>
{{{
}}}

Package=<4>
{{{
}}}

###############################################################################

Global:

Package=<5>
{{{
}}}

Package=<3>
{{{
}}}

###############################################################################
c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_GenerateV6DSWz'Generates a Workspace file for MSVS 6.0c             C   s2   | j }tj | jd | j¡}| j tt	ƒ  ¡ dS )z writes a DSW file r   N)
r*   r5   r@   rè   r  r  rI   rk   ÚV6DSWHeaderr8   )rc   r*   rd   r   r   r   ÚPrintWorkspaceì  s    z_GenerateV6DSW.PrintWorkspacec          
   C   sj   yt | jdƒ| _W n@ tk
rR } z"tj d| j d t|ƒ ¡‚W d d }~X Y nX |  ¡  | j 	¡  d S )Nro   zUnable to open "z" for writing:)
rq   r  rI   rr   r   rR   rS   r'   r$  rs   )rc   ru   r   r   r   rv   ò  s    0z_GenerateV6DSW.BuildN)r<   r=   r>   rw   r$  rv   r   r   r   r   r"  é  s   r"  c             C   sp   d}d|krt |d ƒ\}}|dkr:t| ||ƒ}| ¡  n2|dkrXt| ||ƒ}| ¡  nt| ||ƒ}| ¡  dS )zHGenerates a Project file based on the version of MSVS that is being usedg      @rŒ   g      $@g      @N)r2   r   rv   rÚ   r¿   )rd   r   r   r}   r1   Úgr   r   r   ÚGenerateDSPü  s    

r&  c             C   sR   d}d|krt |d ƒ\}}|dkr:t| ||ƒ}| ¡  nt| ||ƒ}| ¡  dS )zSGenerates a Solution/Workspace file based on the version of MSVS that is being usedg      @rŒ   g      @N)r2   r  rv   r"  )r  r   r   r}   r1   r%  r   r   r   ÚGenerateDSW  s    
r'  c             C   s   |d d S )NÚMSVSÚPROJECTSUFFIXr   )r   r   r   Úfor_signaturer   r   r   ÚGetMSVSProjectSuffix  s    r+  c             C   s   |d d S )Nr(  ÚSOLUTIONSUFFIXr   )r   r   r   r*  r   r   r   ÚGetMSVSSolutionSuffix"  s    r-  c       
   
   C   s2  | d }|  ¡ }||k	r‚ytt|ƒdƒ}W n< tk
rf } ztdt|ƒ d |dƒ ‚ W d d }~X Y nX | d| ¡  ¡ | ¡  t|||ƒ | 	dd¡r.| d }|  ¡ }||k	r"ytt|ƒdƒ}	W n> tk
r } ztdt|ƒ d |dƒ ‚ W d d }~X Y nX |	 d	| ¡  ¡ |	 ¡  t
|||ƒ d S )
Nr   zw+zUnable to open "z" for writing:r   zCThis is just a placeholder file.
The real project file is here:
%s
Úauto_build_solutionr   zEThis is just a placeholder file.
The real workspace file is here:
%s
)Úsrcnoderq   r'   rr   r§   rk   r­   rs   r&  r4   r'  )
r   r   r   Zbuilddspfilerd   Zbdspru   Zbuilddswfiler  Zbdswr   r   r   ÚGenerateProject%  s.    
r0  c             C   s   t | d ||ƒ d S )Nr   )r'  )r   r   r   r   r   r   ÚGenerateSolutionH  s    r1  c          	      sÂ  |d | d krg }t j t| d ƒ¡\}}ˆ  d¡}|| | d< |s6d}|ˆ  dd¡ }|ˆ  dd¡ }td tˆ  dg ¡ƒ¡ƒ}td t	ˆ  d	g ¡ˆ d
d
ƒ¡ƒ}|d||f  }dˆ kr¨ˆ d d
k	r¨t j 
ˆ d ¡rð|dˆ d   }n¸t j ˆ d ¡rlx¤ˆ d D ]Z}t j 
|¡r,|d|  }n8y|d| ¡   }W n" tk
rb   t j d¡‚Y nX qW n<y|dˆ d  ¡   }W n" tk
r¦   t j d¡‚Y nX dˆ krœˆ d d
k	rœt j 
ˆ d ¡rä|dˆ d   }n¸t j ˆ d ¡r`x¤ˆ d D ]Z}t j 
|¡r |d|  }n8y|d| ¡   }W n" tk
rV   t j d¡‚Y nX q W n<y|dˆ d  ¡   }W n" tk
rš   t j d¡‚Y nX dˆ krÖt j 
ˆ d ¡rÊ|dˆ d   }nt j d¡‚dˆ krbt j 
ˆ d ¡r|dˆ d   }n\t j ˆ d ¡rTxHˆ d D ].}	t j 
|	¡r@|d|	  }nt j d¡‚q W nt j d¡‚nt j d¡‚x¢tjD ]˜}|ˆ krvt j 
ˆ | ¡r¨|dˆ |   }ndt j ˆ | ¡rüxPˆ | D ]2}
t j 
|
¡rä|d|
  }nt j |d ¡‚qÄW nt j |d ¡‚qvW |dt| d ƒ  }t jj |¡g}| d g}|}ˆ  dd¡r€‡ fdd„|D ƒˆ d< t| | ˆ ƒ\}
}||
 }d}dˆ kržtˆ d ƒ\}}|dkrº| |d d  ¡ ||fS )!zSets up the DSP dependencies.r   z$MSVSPROJECTSUFFIXzprj_inputs:z$MSVSSCONSCOMr   z$MSVSENCODINGrÎ   r™   r›   Nz; ppdefs:%s incpath:%sr‘   z "%s"zHbuildtarget can be a string, a node, a list of strings or nodes, or Noner’   zCoutdir can be a string, a node, a list of strings or nodes, or Noner*   zname must be a stringrN   z*name must be a string or a list of stringsz-variant must be a string or a list of stringszvariant must be specifiedz "%sz& must be a string or a list of stringsr.  c                s   g | ]}ˆ   |¡ ¡ ‘qS r   )ÚFiler/  )r   r¾   )r   r   r   r   §  s    z"projectEmitter.<locals>.<listcomp>r  g      @rŒ   g      $@z.filters)r   rT   r±   r'   r   r   r†   r   r4   r   rU   rV   r­   r®   rR   rS   r   r´   ÚNodeÚPythonÚValueÚsolutionEmitterr2   r    )r   r   r   rD   Úsuffr÷   rø   rº   r   rN   r¾   Z
targetlistZ
sourcelistr}   r1   r   )r   r   ÚprojectEmitterK  s     
         





r8  c             C   sì  |d | d krg }t j t| d ƒ¡\}}| d¡}|| | d< |sÞd}d|kr‚t j |d ¡rv|d|d   }nt j d¡‚d|krt j |d ¡r®|d|d   }nVt j |d ¡røxD|d D ]*}t j |¡ræ|d|  }qÈt j d¡‚qÈW nt j d	¡‚nt j d
¡‚d|krLt j |d ¡r@|d|d   }nt j d¡‚d|krºt j |d ¡rz|d|d   }n@t j |d ¡rºx,|d D ] }t j |¡r–|d|  }q–W |dt| d ƒ  }t j	j
 |¡g}| d g|fS )zSets up the DSW dependencies.r   z$MSVSSOLUTIONSUFFIXzsln_inputs:r*   z "%s"zname must be a stringrN   z*name must be a string or a list of stringsz-variant must be a string or a list of stringszvariant must be specifiedr  zslnguid must be a stringr  )r   rT   r±   r'   r   rU   rR   rS   rV   r3  r4  r5  )r   r   r   rD   r7  rN   r¾   r   r   r   r6  ´  sF    



r6  z$MSVSPROJECTCOMz$MSVSPROJECTSUFFIX)Úactionr   Zemitterz$MSVSSOLUTIONCOMz$MSVSSOLUTIONSUFFIXc             C   sè  y| d d  W n  t k
r0   t| d d< Y nX y| d d  W n  t k
rb   t| d d< Y nX t| d< t| d< tjjrtjjd j| d< nt	dkr¢|  
d	¡a	t	| d< d
| krÆdtt| ƒf | d
< d| krÖd| d< d| d< d| d< d| d< d| d< t| td d| krt| d ƒ\}}nd\}}d| kr8i | d< |dk r\d| d d< d| d d< n<|dk r€d| d d< d | d d< nd!| d d< d | d d< |dkr¬d"| d#< nd$| d#< t| d%< t| d&< d'| d(< d)| d*< tj d+¡| d+< dS ),zhAdd Builders and construction variables for Microsoft Visual
    Studio project files to an Environment.ZBUILDERSZMSVSProjectZMSVSSolutionZMSVSPROJECTCOMZMSVSSOLUTIONCOMr   r”   NZ
SConstructZ	MSVSSCONSz"%s" -c "%s"ZMSVSSCONSFLAGSzB-C "${MSVSSCONSCRIPT.dir.get_abspath()}" -f ${MSVSSCONSCRIPT.name}z$MSVSSCONS $MSVSSCONSFLAGSZMSVSSCONSCOMz $MSVSSCONSCOM "$MSVSBUILDTARGET"ZMSVSBUILDCOMZMSVSREBUILDCOMz#$MSVSSCONSCOM -c "$MSVSBUILDTARGET"ZMSVSCLEANCOM)ÚtoolrŒ   )g      @Nr(  g      @z.dspr)  z.dswr,  g      $@z.vcprojz.slnz.vcxprojzutf-8ZMSVSENCODINGzWindows-1252ZGET_MSVSPROJECTSUFFIXZGET_MSVSSOLUTIONSUFFIXz${GET_MSVSPROJECTSUFFIX}ZMSVSPROJECTSUFFIXz${GET_MSVSSOLUTIONSUFFIX}ZMSVSSOLUTIONSUFFIXr3   )ÚKeyErrorÚprojectBuilderÚsolutionBuilderÚprojectActionÚsolutionActionr   ZScriptZ
call_stackr¯   Údefault_MSVS_SConscriptr2  Úpython_executabler:   r   Ú	tool_namer2   r+  r-  r5   r6   r4   )r   r}   r1   r   r   r   Úgenerateú  sZ    






rC  c             C   s   t | tdS )N)r:  )r   rB  )r   r   r   r   r²   ?  s    r²   )N)Zrw   rÆ   r(   r%   r5   rÄ   r¥   ÚsysZSCons.Builderr   ZSCons.Node.FSZSCons.Platform.win32ZSCons.Script.SConscriptZSCons.PathListZ
SCons.UtilZSCons.WarningsZSCons.Defaultsr   ZSCons.compatr   ZMSCommonr   r   rB  r   r   r"   r  r,   Úcompiler-   r2   r:   r6   Zpython_rootr;  Ú
executablerA  r@   r†   rA   r;   rB   rL   rM   r~   r   r€   r|   r   rŽ   r   r‹   r   rÀ   r¿   rß   rà   rÛ   rÝ   rÚ   r  r  r  r  r  r  ZV15DSPHeaderr   r  r  r#  r"  r&  r'  r+  r-  r0  r1  r8  r6  ZActionr>  r?  ZBuilderr<  r=  r@  rC  r²   r   r   r   r   Ú<module>   s  


R
$ e 9  	    #i8E