U
    O8Úc+  ã                   @   s"  d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ ddd„ZdatadZdd„ Zeƒ ZG dd„ deƒZ G dd„ de ƒZ!G dd„ de ƒZ"G dd„ de ƒZ#G dd„ dƒZ$dd„ Z%dS )é    N)ÚmkstempÚmkdtemp)ÚPopenÚPIPE)ÚDistutilsError)Úassert_Úassert_equalÚassert_raises)Ú	ccompilerÚcustomized_ccompiler)Úsystem_infoÚConfigParserÚmkl_info)ÚAliasedOptionError)Údefault_lib_dirsÚdefault_include_dirs)Ú_shell_utilsé   c                 C   s   t ttdœ |  ¡ t¡}|ƒ S )zg
    notfound_action:
      0 - do nothing
      1 - display warning message
      2 - raise error
    )Útemp1Útemp2Úduplicate_options)Ú	Temp1InfoÚ	Temp2InfoÚDuplicateOptionInfoÚgetÚlowerÚ_system_info)ÚnameZnotfound_actionZcl© r   úJ/tmp/pip-unpacked-wheel-fd_gsd75/numpy/distutils/tests/test_system_info.pyÚ	get_class   s    þ ýr    a¼  
[ALL]
library_dirs = {dir1:s}{pathsep:s}{dir2:s}
libraries = {lib1:s},{lib2:s}
extra_compile_args = -I/fake/directory -I"/path with/spaces" -Os
runtime_library_dirs = {dir1:s}

[temp1]
library_dirs = {dir1:s}
libraries = {lib1:s}
runtime_library_dirs = {dir1:s}

[temp2]
library_dirs = {dir2:s}
libraries = {lib2:s}
extra_link_args = -Wl,-rpath={lib2_escaped:s}
rpath = {dir2:s}

[duplicate_options]
mylib_libs = {lib1:s}
libraries = {lib2:s}
z·
/* This file is generated from numpy/distutils/testing/test_system_info.py */
#include<stdio.h>
void foo(void) {
   printf("Hello foo");
}
void bar(void) {
   printf("Hello bar");
}
c                  C   s¨   t ƒ } z
| j}W nL tk
r\   z| js0|  ¡  W n ttfk
rN   Y Y dS X | jg}Y nX z.t|t	t	d}|j
 ¡  |j ¡  | ¡  W n tk
r¢   Y dS X dS )z? Return True if there appears to be an executable compiler
    F)ÚstdoutÚstderrT)r   ÚcompilerÚAttributeErrorZinitializedZ
initializer   Ú
ValueErrorÚccr   r   r!   Úcloser"   ÚwaitÚOSError)r#   ÚcmdÚpr   r   r   Úhave_compiler@   s$    



r,   c                   @   s$   e Zd Zeedfdd„Zdd„ ZdS )r   r   c              	   C   s2   i | j _g | _dddddddddœ}t|ƒ| _d S )NÚ Ú0)Úlibrary_dirsÚinclude_dirsÚruntime_library_dirsÚrpathZsrc_dirsZsearch_static_firstÚextra_compile_argsÚextra_link_args)Ú	__class__ÚinfoZlocal_prefixesr   Úcp)Úselfr   r   Ú	verbosityÚdefaultsr   r   r   Ú__init__\   s    ùz_system_info.__init__c                 C   s   ||dœ}|S )z-Override _check_libs to return with all dirs )Ú	librariesr/   r   )r8   Úlib_dirsZlibsZopt_libsÚextsr6   r   r   r   Ú_check_libso   s    
z_system_info._check_libsN)Ú__name__Ú
__module__Ú__qualname__r   r   r;   r?   r   r   r   r   r   Z   s
   ý
r   c                   @   s   e Zd ZdZdZdS )r   úFor testing purposesr   N©r@   rA   rB   Ú__doc__Úsectionr   r   r   r   r   u   s   r   c                   @   s   e Zd ZdZdZdS )r   rC   r   NrD   r   r   r   r   r   z   s   r   c                   @   s   e Zd ZdZdZdS )r   rC   r   NrD   r   r   r   r   r   ~   s   r   c                   @   sº   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
je dddd„ ƒZe	j
je dde	j
jdee ¡ ƒkdddd„ ƒƒZdeƒ  ¡  dg ¡kZe	j
jedddd„ ƒZdS )ÚTestSystemInfoReadingc              
   C   sX  t ƒ | _tj | jd¡| _tj | jd¡| _t ƒ | _tj | jd¡| _tj | jd¡| _	t
jf | j| j| j| j	tjtj | j	g¡dœŽatƒ \}| _t |¡ t| jdƒ}| t¡ W 5 Q R X t| jdƒ}| t¡ W 5 Q R X t| jdƒ}| t¡ W 5 Q R X dd„ }|td	ƒ| jƒ| _|td
ƒ| jƒ| _|tdƒ| jƒ| _|tdƒ| jƒ| _dS )z Create the libraries zfoo.cz	libfoo.sozbar.cz	libbar.so)Zdir1Zlib1Zdir2Zlib2ÚpathsepZlib2_escapedÚwc                 S   s   |g| _ |  ¡  | S ©N)ÚfilesÚparse_config_files)ÚcÚsite_cfgr   r   r   Úsite_and_parse¤   s    z:TestSystemInfoReading.setup_method.<locals>.site_and_parseÚdefaultr   r   r   N)r   Ú_dir1ÚosÚpathÚjoinÚ_src1Ú_lib1Ú_dir2Ú_src2Ú_lib2Úsimple_siteÚformatrH   r   ZNativeParserrN   r   Ú_sitecfgr'   ÚopenÚwriteÚfakelib_c_textr    Ú	c_defaultÚc_temp1Úc_temp2Úc_dup_options)r8   ÚfdrO   r   r   r   Úsetup_method…   s:    ú	
ÿz"TestSystemInfoReading.setup_methodc                 C   sv   zt  | j¡ W n tk
r$   Y nX zt  | j¡ W n tk
rJ   Y nX zt | j¡ W n tk
rp   Y nX d S rJ   )ÚshutilÚrmtreerQ   Ú	ExceptionrW   rR   Úremover\   )r8   r   r   r   Úteardown_method®   s    z%TestSystemInfoReading.teardown_methodc                 C   sd   | j }t| ¡ | j| jgƒ t| ¡ | j| jgƒ t| ¡ | jgƒ | 	¡ }t|d dddgƒ d S )Nr3   z-I/fake/directoryz-I/path with/spacesz-Os)
r`   r   Úget_lib_dirsrQ   rW   Úget_librariesrV   rY   Úget_runtime_lib_dirsÚcalc_extra_info©r8   ÚtsiÚextrar   r   r   Útest_all½   s    zTestSystemInfoReading.test_allc                 C   s@   | j }t| ¡ | jgƒ t| ¡ | jgƒ t| ¡ | jgƒ d S rJ   )ra   r   rk   rQ   rl   rV   rm   ©r8   rp   r   r   r   Ú
test_temp1Æ   s    z TestSystemInfoReading.test_temp1c                 C   sb   | j }t| ¡ | jgƒ t| ¡ | jgƒ t|jdd| jgƒ | ¡ }t|d d| j gƒ d S )Nr2   )Úkeyr4   z-Wl,-rpath=)rb   r   rk   rW   rl   rY   rm   rn   ro   r   r   r   Ú
test_temp2Í   s    z TestSystemInfoReading.test_temp2c                 C   sN   | j }tt|jddƒ t| d| jg¡| jgƒ t| d| jg¡| jgƒ d S )NZ
mylib_libsr<   )rc   r	   r   Zget_option_singler   Zget_libsrV   rY   rs   r   r   r   Útest_duplicate_options×   s    z,TestSystemInfoReading.test_duplicate_optionszMissing compiler)Úreasonc              	   C   s|   t ƒ }t ¡ }z\t | j¡ |jtj | j¡g| jd t	tj 
| j dd¡¡pdtj 
| j dd¡¡ƒ W 5 t |¡ X d S )N)Ú
output_dirú.cú.oz.obj)r   rR   ÚgetcwdÚchdirrQ   ÚcompilerS   ÚbasenamerU   r   ÚisfileÚreplace)r8   rM   ÚpreviousDirr   r   r   Útest_compile1Þ   s    ÿz#TestSystemInfoReading.test_compile1ZmsvczFails with MSVC compiler c              	   C   sz   | j }tƒ }| ¡ d }t ¡ }zHt | j¡ |jtj 	| j
¡g| j|d ttj | j
 dd¡¡ƒ W 5 t |¡ X d S )Nr4   )ry   Zextra_postargsrz   r{   )rb   r   rn   rR   r|   r}   rW   r~   rS   r   rX   r   r€   r   )r8   rp   rM   r4   r‚   r   r   r   Útest_compile2í   s    ÿz#TestSystemInfoReading.test_compile2Zmkl_rtr<   zD`[DEFAULT]` override doesn't work if numpy is built with MKL supportc              	   C   s2  t  ¡ }t j | jd¡}t | j|¡ zút  | j¡ t	ƒ }|j
d d  t j¡}| ¡ |ks`t‚t|dƒ}| ¡  ddd¡}W 5 Q R X t|dƒ}| |¡ W 5 Q R X t	ƒ }| ¡ |ks¾t‚t|dƒ}| ¡  dd	d¡}W 5 Q R X t|dƒ}| |¡ W 5 Q R X t	ƒ }| ¡ |kst‚W 5 t  |¡ X d S )
Nzsite.cfgÚALLr/   Úrz[ALL]z[mkl]r   rI   z	[DEFAULT])rR   r|   rS   rT   rQ   rf   Úcopyr\   r}   r   r7   ÚsplitrH   rk   ÚAssertionErrorr]   Úreadr   r^   )r8   r‚   Úcfgr6   r=   ZfidZmklZdfltr   r   r   Útest_overrides  s*    z$TestSystemInfoReading.test_overridesN)r@   rA   rB   re   rj   rr   rt   rv   rw   ÚpytestÚmarkZskipifÚHAVE_COMPILERrƒ   Úreprr
   Znew_compilerr„   r   Zcalc_libraries_infor   ZHAS_MKLZxfailrŒ   r   r   r   r   rG   ƒ   s    )	

ÿrG   c              	   C   sR  ddl m} d}tdƒ}|  |d¡ |||ƒ\}}t|ƒdksBt‚|tdƒksRt‚t|ƒdksbt‚|  |d	¡ |||ƒ\}}t|ƒdksŒt‚t|ƒdksœt‚d
D ]T}|  ||› d¡ |||ƒ\}}t|ƒdksÔt‚|tdƒksät‚t|ƒdks t‚q t t¡ |  |d¡ |||ƒ W 5 Q R X t t¡ |  |d¡ |||ƒ W 5 Q R X d S )Nr   )Ú_parse_env_orderZ#NPY_TESTS_DISTUTILS_PARSE_ENV_ORDERZabcdefzb,i,e,fé   Zbefr   r-   z^!zb,i,eé   Zacdfzb,^e,iz!b,^e,i)	Únumpy.distutils.system_infor‘   ÚlistZsetenvÚlenr‰   r   Zraisesr%   )Zmonkeypatchr‘   ÚenvZ
base_orderÚorderÚunknownÚprefixr   r   r   Útest_distutils_parse_env_order$  s0    r›   )r   )&rR   rf   r   Útempfiler   r   Ú
subprocessr   r   Údistutils.errorsr   Znumpy.testingr   r   r	   Znumpy.distutilsr
   r   r”   r   r   r   r   r   r   r   r    rZ   rN   r_   r,   r   r   r   r   r   rG   r›   r   r   r   r   Ú<module>   s0   
 "