B
    ›³ëbÔ  ã               @   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ddddd	gZ
d
d„ Zdd„ ZejjedddZejjedddZej dd¡ZejjedejjdZejj dejj¡ dZdd„ Zdadd„ Zdd„ Zdd„ ZdS ) zêSCons.Tool.gcc

Tool-specific initialization for MinGW (http://www.mingw.org/)

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.

é    Nzc:\MinGW\binzC:\cygwin64\binz	C:\msys64zC:\msys64\mingw64\binzC:\cygwin\binzC:\msysz=C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\binc       	      C   s¤   t j ddg¡}| | dd¡}|r0| d|g¡ | dddg¡ | | d	d
¡}|rf| d| |¡ ¡ | | dd¡}| d¡}|dkrž|rž| d| |¡ ¡ |gS )Nz$SHLINKz$SHLINKFLAGSÚSHLIBPREFIXÚSHLIBSUFFIXz-oz$SOURCESz$_LIBDIRFLAGSz
$_LIBFLAGSÚ	LIBPREFIXÚ	LIBSUFFIXz-Wl,--out-implib,ÚWINDOWSDEFPREFIXÚWINDOWSDEFSUFFIXz$WINDOWS_INSERT_DEF)Ú Ú0r   z-Wl,--output-def,)ÚSConsÚUtilÚCLVarÚFindIxesÚextendÚappendZ
get_stringÚsubst)	ÚtargetÚsourceÚenvZfor_signatureÚcmdÚdllZimplibÚ
def_targetZ
insert_def© r   ú/lib/python3.7/site-packages/SCons/Tool/mingw.pyÚshlib_generator7   s      
r   c       	      C   sà   |  | dd¡}| dd¡}|sHtj d| d¡d dd	„ | D ƒ¡f ¡‚|s~|  | d
d¡s~| |ddd
d¡}|  |j	 
|¡¡ |  |dd¡}|  | dd¡}| d¡dk}|sØ|sØ|sØ| |dddd¡}|  |j	 
|¡¡ | |fS )Nr   r   Úno_import_libr   zTA shared library should have exactly one target with the suffix: %s Target(s) are:%sz$SHLIBSUFFIXú,c             S   s   g | ]}t |ƒ‘qS r   )Ústr)Ú.0Útr   r   r   ú
<listcomp>Q   s    z!shlib_emitter.<locals>.<listcomp>r   r   r   r   z$WINDOWS_INSERT_DEF)r   r	   r   )r   Úgetr
   ZErrorsZ	UserErrorr   ÚjoinZReplaceIxesr   ZfsZFile)	r   r   r   r   r   ZtargetStringsZ
def_sourcer   Zskip_def_insertr   r   r   Úshlib_emitterJ   s*    "r"   z$SHLINKCOMSTRé   )Ú	generatorz$LDMODULECOMSTRz$RCCOMz	$RCCOMSTRz.o)ÚactionÚsuffixZsource_scannerz.rczmingw32-makec              C   s   t   d¡} | S )z²
    One example of default mingw install paths is:
    C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev2\mingw64\bin

    Use glob'ing to find such and add to mingw_base_paths
    zC:\mingw-w64\*\mingw64\bin)Úglob)Z	new_pathsr   r   r   Ú!find_version_specific_mingw_paths}   s    
r(   c               C   s   t d krttƒ  a t S )N)Ú_mingw_all_pathsÚmingw_base_pathsr(   r   r   r   r   Úget_mingw_paths‹   s    
r+   c             C   sì  t ƒ }tjj| t|d}|r@tj |¡}|dkr4d}|  d|¡ ddddd	d
dg}x|D ]}tj |¡| ƒ qXW d| d< d| krÈt	| d ƒtj
jk	r¨tj
 | d ¡| d< tj
 t| d ƒ dd¡¡| d< tj
 d¡| d< d| d< tj
 d¡| d< tj
 d¡| d< t| d< t| d< t| d< | jtgd | jtgd d| d< d| d< d| d < d!| d"< d#| d$< d%| d&< tj
 d¡| d'< d(| d)< d*| d+< d| d,< d-| d.< t| d/ d0< d!| d1< d2| d3< d4| d5< d6| d7< d8| d9< d| d:< d;| d<< d;| d=< d;| d>< d S )?N)Údefault_pathszC:\ProgramData\chocolatey\binz=C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\binÚPATHZgcczg++ZgnulinkZarZgasZgfortranZm4ZCCZCCFLAGSz/nologor   z$CCFLAGSZ	SHCCFLAGSZCXXz	$CXXFLAGSZ
SHCXXFLAGSz$LINKFLAGS -sharedZSHLINKFLAGSZ	SHLINKCOMZSHLINKCOMSTRZLDMODULECOM)ZSHLIBEMITTER)ZLDMODULEEMITTERÚasZASr   z.defr   z.oZSHOBJSUFFIXr#   Z&STATIC_AND_SHARED_OBJECTS_ARE_THE_SAMEZwindresZRCZRCFLAGSze${_concat(RCINCPREFIX, CPPPATH, RCINCSUFFIX, __env__, RDirs, TARGET, SOURCE, affect_signature=False)}Z
RCINCFLAGSz--include-dir ZRCINCPREFIXZRCINCSUFFIXzY$RC $_CPPDEFFLAGS $RCINCFLAGS ${RCINCPREFIX} ${SOURCE.dir} $RCFLAGS -i $SOURCE -o $TARGETZRCCOMZBUILDERSZRESZ	OBJSUFFIXÚlibr   z.ar   z.exeZ
PROGSUFFIXz$SHLIBSUFFIXZ_SHLIBSUFFIXr   TZSHLIBNOVERSIONSYMLINKSZLDMODULENOVERSIONSYMLINKSZIMPLIBNOVERSIONSYMLINKS)r+   r
   ÚToolÚfind_program_pathÚkey_programÚosÚpathÚdirnameÚAppendENVPathÚtyper   r   r   ÚreplaceÚshlib_actionr   Úldmodule_actionZAppendr"   Úres_builder)r   Úmingw_pathsÚmingwÚmingw_bin_dirZ	gnu_toolsZtoolr   r   r   Úgenerate‘   sZ    
 r?   c             C   s8   t ƒ }tjj| t|d}|r4tj |¡}|  d|¡ |S )N)r,   r-   )	r+   r
   r0   r1   r2   r3   r4   r5   r6   )r   r<   r=   r>   r   r   r   ÚexistsÕ   s    r@   )Ú__doc__r3   Úos.pathr'   ZSCons.Actionr
   ZSCons.BuilderZSCons.DefaultsZ
SCons.ToolZ
SCons.Utilr*   r   r"   ZActionr9   r:   Z
res_actionZBuilderr0   ZSourceFileScannerr;   Zadd_scannerZDefaultsZCScanr2   r(   r)   r+   r?   r@   r   r   r   r   Ú<module>    s:   %
D