B
    ›³ëb„  ã               @   sh   d Z dZddlZddlZddlZdd„ Zdd„ ZG dd	„ d	ƒZd
dgZ	dddddgZ
dd„ Zdd„ ZdS )zñSCons.Tool.mwcc

Tool-specific initialization for the Metrowerks CodeWarrior compiler.

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.
z,__FILE__ __REVISION__ __DATE__ __DEVELOPER__é    Nc             C   sð   |   dd¡}t|tƒrdS |dkr&dS tƒ }d}|rTx*|D ]}t|ƒ|kr:|}q:W n|r`|d }|| d< || d< |dkr|dS |  d|j¡ |  d|j¡ | d	 }|j|d
< |j	|d< dd„ }t
j t||jƒ¡|d< t
j t||jƒ¡|d< dS )a  Set MWCW_VERSION, MWCW_VERSIONS, and some codewarrior environment vars

    MWCW_VERSIONS is set to a list of objects representing installed versions

    MWCW_VERSION  is set to the version object that will be used for building.
                  MWCW_VERSION can be set to a string during Environment
                  construction to influence which version is chosen, otherwise
                  the latest one from MWCW_VERSIONS is used.

    Returns true if at least one version is found, false otherwise
    ZMWCW_VERSIONÚ é   Nr   éÿÿÿÿZMWCW_VERSIONSÚPATHÚENVZCWFolderZLM_LICENSE_FILEc             S   s   d|  S )Nz+%s© )Úxr   r   ú.lib/python3.7/site-packages/SCons/Tool/mwcc.pyÚ<lambda>Q   ó    zset_vars.<locals>.<lambda>ZMWCIncludesZMWLibraries)ÚgetÚ
isinstanceÚ	MWVersionÚfind_versionsÚstrZPrependENVPathÚclpathÚdllpathÚpathÚlicenseÚosÚpathsepÚjoinÚmapÚincludesÚlibs)ÚenvZdesiredÚversionsÚversionÚvr   Zplusr   r   r	   Úset_vars(   s4    




r   c        
      C   sÖ   g } t jjrÒy¬t jj}d}t j ||¡}d}xˆ|d t j ||¡ }t j ||¡}y>t j |d¡}t j |d¡}t|d |d dƒ}	|  |	¡ W n t jj	k
r¨   Y nX |d }q.W W n t jj	k
rÐ   Y nX | S )zBReturn a list of MWVersion objects representing installed versionsz0SOFTWARE\Metrowerks\CodeWarrior\Product Versionsr   ú\ZVERSIONr   z	Win32-X86r   )
ÚSConsZUtilZcan_read_regÚHKEY_LOCAL_MACHINEZRegOpenKeyExZ
RegEnumKeyZRegQueryValueExr   ÚappendZRegError)
r   ZHLMÚproductZproduct_keyÚiÚnameZname_keyr   r   Zmwvr   r   r	   r   W   s*    r   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s|   || _ || _|| _tj |dd¡| _tj |d¡| _tj |d¡}tj |d| ¡}tj |d¡| _||g| _||g| _	d S )NzOther Metrowerks ToolszCommand Line ToolsZBinZMSLz
%s Supportzlicense.dat)
r   r   Úplatformr   r   r   r   r   r   r   )Úselfr   r   r'   ZmslZsupportr   r   r	   Ú__init__{   s    

zMWVersion.__init__c             C   s   | j S )N)r   )r(   r   r   r	   Ú__str__“   s    zMWVersion.__str__N)Ú__name__Ú
__module__Ú__qualname__r)   r*   r   r   r   r	   r   z   s   r   z.cz.Cz.ccz.cppz.cxxz.c++z.C++c             C   s  ddl }ddl}t| ƒ |j | ¡\}}x,tD ]$}| ||jj¡ | ||jj	¡ q.W x,t
D ]$}| ||jj¡ | ||jj¡ q\W 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| d< d| d< d| d< d | d!< d"| d#< d | d$< dS )%zGAdd Builders and construction variables for the mwcc to an Environment.r   NzA$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -nolink -o $TARGET $SOURCESZ
CCCOMFLAGSZmwccZCCz $CC $CFLAGS $CCFLAGS $CCCOMFLAGSZCCCOMZCXXz$CXX $CXXFLAGS $CCCOMFLAGSZCXXCOMz$CCZSHCCz$CCFLAGSZ	SHCCFLAGSz$CFLAGSZSHCFLAGSz&$SHCC $SHCFLAGS $SHCCFLAGS $CCCOMFLAGSZSHCCCOMz$CXXZSHCXXz	$CXXFLAGSZ
SHCXXFLAGSz$SHCXX $SHCXXFLAGS $CCCOMFLAGSZSHCXXCOMz.cZCFILESUFFIXz.cppZCXXFILESUFFIXz-DZCPPDEFPREFIXr   ZCPPDEFSUFFIXz-IZ	INCPREFIXZ	INCSUFFIX)ZSCons.DefaultsZ
SCons.Toolr   ZToolZcreateObjBuildersÚ	CSuffixesZ
add_actionZDefaultsZCActionZ	ShCActionÚCXXSuffixesZ	CXXActionZShCXXAction)r   r!   Z
static_objZ
shared_objÚsuffixr   r   r	   Úgenerate›   s8    

r1   c             C   s   t | ƒS )N)r   )r   r   r   r	   ÚexistsÈ   s    r2   )Ú__doc__Z__revision__r   Úos.pathZ
SCons.Utilr!   r   r   r   r.   r/   r1   r2   r   r   r   r	   Ú<module>   s   /#-