B
    u9aÂJ  ã               @   sº   d dl Z d dlZd dlZddddgZdZdZdZd%d	d
„Zdd„ Zdd„ Z	da
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d „ Zd!d„ Zd"d„ Zd#d„ Zd$d„ ZdS )&é    NÚcompiler_fixupÚcustomize_config_varsÚcustomize_compilerÚget_platform_osx)ÚCFLAGSZLDFLAGSZCPPFLAGSZ
BASECFLAGSÚ	BLDSHAREDÚLDSHAREDÚCCÚCXXZ	PY_CFLAGSZ
PY_LDFLAGSZPY_CPPFLAGSZPY_CORE_CFLAGSZPY_CORE_LDFLAGS)r   r   r	   r
   Z_OSX_SUPPORT_INITIAL_c             C   sŒ   |d krt jd }| t j¡}t j | ¡\}}tjdkrH|dkrH| d } t j | ¡s„x*|D ]"}t j 	|| ¡}t j |¡rZ|S qZW d S | S d S )NÚPATHÚwin32z.exe)
ÚosÚenvironÚsplitÚpathsepÚpathÚsplitextÚsysÚplatformÚisfileÚjoin)Ú
executabler   ÚpathsÚbaseZextÚpÚf© r   ú"/usr/lib/python3.7/_osx_support.pyÚ_find_executable   s    

r   c          	   C   sŠ   dd l }ydd l}| ¡ }W n( tk
rD   tdt ¡ f dƒ}Y nX | |¡0}d| |jf }t 	|¡s|| 
¡  d¡ ¡ S d S Q R X d S )Nr   z/tmp/_osx_support.%szw+bz%s 2>/dev/null >'%s'zutf-8)Ú
contextlibÚtempfileZNamedTemporaryFileÚImportErrorÚopenr   ÚgetpidÚclosingÚnameÚsystemÚreadÚdecodeÚstrip)Zcommandstringr   r    ÚfpÚcmdr   r   r   Ú_read_output7   s    r,   c             C   s   t | ƒptd| f ƒpdS )Nz/usr/bin/xcrun -find %sÚ )r   r,   )Ztoolnamer   r   r   Ú_find_build_toolJ   s    r.   c              C   sx   t d krtda ytdƒ} W n tk
r,   Y nHX zt d|  ¡ ¡}W d |  ¡  X |d k	rtd | d¡ 	d¡d d… ¡a t S )Nr-   z0/System/Library/CoreServices/SystemVersion.plistz=<key>ProductUserVisibleVersion</key>\s*<string>(.*?)</string>Ú.é   é   )
Ú_SYSTEM_VERSIONr"   ÚOSErrorÚreÚsearchr'   Úcloser   Úgroupr   )r   Úmr   r   r   Ú_get_system_versionS   s    

r9   c             C   s&   x t | ƒD ]}| t¡r
| |= q
W d S )N)ÚlistÚ
startswithÚ_INITPRE)Ú_config_varsÚkr   r   r   Ú_remove_original_valuesq   s    
r?   c             C   s8   |   |d¡}||kr,t| | kr,|| t| < || |< d S )Nr-   )Úgetr<   )r=   ÚcvZnewvalueZoldvaluer   r   r   Ú_save_modified_valuex   s    rB   c              C   sT   t ƒ } | r@ytdd„ |  d¡D ƒƒ} W n tk
r>   d} Y nX | rPt| dkƒS dS )Nc             s   s   | ]}t |ƒV  qd S )N)Úint)Ú.0Úir   r   r   ú	<genexpr>Š   s    z-_supports_universal_builds.<locals>.<genexpr>r/   r-   )é
   é   F)r9   Útupler   Ú
ValueErrorÚbool)Zosx_versionr   r   r   Ú_supports_universal_builds€   s    
rL   c             C   sÞ   dt jkr| S | d  ¡ d  }}t|ƒs4tdƒ}n<t j |¡ d¡rptd| 	dd¡f ƒ}|rpd|krptdƒ}|s|t
d	ƒ‚||krÚxTtD ]L}|| krŠ|t jkrŠ| |  ¡ }|d
kr¸|n|d |d< t| |d |¡ƒ qŠW | S )Nr	   r   ZclangZgccz'%s' --versionú'z'"'"'zllvm-gcczCannot locate working compilerr
   z++ú )r   r   r   r   r.   r   Úbasenamer;   r,   ÚreplaceÚSystemErrorÚ_COMPILER_CONFIG_VARSrB   r   )r=   ZccZoldccÚdatarA   Zcv_splitr   r   r   Ú_find_appropriate_compiler   s(    


rT   c             C   sZ   xTt D ]L}|| kr|tjkr| | }tjdd|tjd}t dd|¡}t| ||ƒ qW | S )Nz-arch\s+\w+\srN   )Úflagsz-isysroot [^ 	]*)Ú_UNIVERSAL_CONFIG_VARSr   r   r4   ÚsubÚASCIIrB   )r=   rA   rU   r   r   r   Ú_remove_universal_flagsÎ   s    
rY   c             C   sˆ   dt jkr| S t d| d ¡d k	r„t  d| d  dd¡f ¡}|r„x@tD ]8}|| krH|t jkrH| | }t dd|¡}t| ||ƒ qHW | S )	Nr	   z-arch\s+ppcr   zNecho 'int main{};' | '%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/nullrM   z'"'"'z-arch\s+ppc\w*\srN   )	r   r   r4   r5   r&   rP   rV   rW   rB   )r=   ÚstatusrA   rU   r   r   r   Ú_remove_unsupported_archsÜ   s    
	
r[   c             C   sh   dt jkrdt jd }xNtD ]F}|| krd| | kr| | }t dd|¡}|d | }t| ||ƒ qW | S )NÚ	ARCHFLAGSz-archz-arch\s+\w+\srN   )r   r   rV   r4   rW   rB   )r=   ZarchrA   rU   r   r   r   Ú_override_all_archs  s    


r]   c             C   s|   |   dd¡}t d|¡}|d k	rx| d¡}tj |¡sxx@tD ]8}|| kr<|tjkr<| | }t 	dd|¡}t
| ||ƒ q<W | S )Nr   r-   z-isysroot\s+(\S+)r0   z-isysroot\s+\S+(?:\s|$)rN   )r@   r4   r5   r7   r   r   ÚexistsrV   r   rW   rB   )r=   Úcflagsr8   ZsdkrA   rU   r   r   r   Ú_check_for_unavailable_sdk  s    

r`   c             C   sT  d }}t | ƒ} tƒ s d }}nd|k}d|k}|s>dtjkrxx8y|  d¡}| ||d …= W q@ tk
rr   P Y q@X q@W dtjkr˜|s˜| tjd  ¡  } |rÖx8y|  d¡}| ||d …= W qž tk
rÐ   P Y qžX qžW d }d|krú| d¡}||d  }n d| kr|  d¡}| |d  }|rPtj |¡sPdd	l	m
} | d
|¡ | d¡ | S )NFTz-archz	-isysrootr\   r1   r0   r   )Úlogz4Compiling with an SDK that doesn't seem to exist: %sz$Please check your Xcode installation)r:   rL   r   r   ÚindexrJ   r   r   ÚisdirZ	distutilsra   Úwarn)Zcompiler_soZcc_argsZ	stripArchZstripSysrootrb   ZsysrootÚidxra   r   r   r   r   0  sF    	






c             C   s"   t ƒ st| ƒ t| ƒ t| ƒ | S )N)rL   rY   r]   r`   )r=   r   r   r   r   p  s
    c             C   s   t | ƒ t| ƒ t| ƒ | S )N)rT   r[   r]   )r=   r   r   r   r   ™  s    	c             C   s|  |   dd¡}tƒ p|}|p|}|rr|}d}|   td |   dd¡¡}|rˆy$tdd„ | d¡dd	… D ƒƒ}W qŒ tk
r„   d
}Y qŒX nd
}|dkr6d| ¡ kr6d}t d|¡}tt	t
|ƒƒƒ}t|ƒdkrÚ|d }nZ|dkrèd}nL|dkröd}n>|dkrd}n.|dkrd}n|dkr&d}ntd|f ƒ‚n<|dkrRtjdkrrd}n |dkrrtjdkrnd}nd}|||fS ) NZMACOSX_DEPLOYMENT_TARGETr-   Zmacosxr   c             s   s   | ]}t |ƒV  qd S )N)rC   )rD   rE   r   r   r   rF   Ç  s    z#get_platform_osx.<locals>.<genexpr>r/   r   r1   )rG   r   )rG   rH   z-archZfatz-arch\s+(\S+)r0   )Úi386Úppc)rf   Úx86_64Zintel)rf   rg   rh   Zfat3)Úppc64rh   Zfat64)rf   rg   ri   rh   Ú	universalz%Don't know machine value for archs=%rrf   l        rh   )ZPowerPCZPower_Macintoshri   rg   )r@   r9   r<   rI   r   rJ   r)   r4   ÚfindallÚsortedÚsetÚlenr   Úmaxsize)r=   ZosnameÚreleaseÚmachineZmacverZ
macreleaser_   Zarchsr   r   r   r   ­  sP    


$





)N)r   r4   r   Ú__all__rV   rR   r<   r   r,   r.   r2   r9   r?   rB   rL   rT   rY   r[   r]   r`   r   r   r   r   r   r   r   r   Ú<module>   s4   
>(@)