a
    jUb*                     @   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   Elib/python3.9/site-packages/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 nH tyX   z| js.|   W n ttfyJ   Y Y dS 0 | jg}Y n0 z.t|t	t	d}|j
  |j  |  W n ty   Y dS 0 dS )z? Return True if there appears to be an executable compiler
    F)stdoutstderrT)r   compilerAttributeErrorZinitializedZ
initializer   
ValueErrorZ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_dirsZinclude_dirsZ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   )r5   lib_dirsZlibsZopt_libsZextsr3   r   r   r   _check_libso   s    
z_system_info._check_libsN)__name__
__module____qualname__r   r   r8   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<   r=   r>   __doc__Zsectionr   r   r   r   r   u   s   r   c                   @   s   e Zd ZdZdZdS )r   r?   r   Nr@   r   r   r   r   r   z   s   r   c                   @   s   e Zd ZdZdZdS )r   r?   r   Nr@   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 v dddd Zdd ZdS )TestSystemInfoReadingc                 C   s  t  | _tj| jd| _tj| jd| _t  | _tj| jd| _tj| jd| _	t
jf i | j| j| j| j	tjtj| j	gdat \}| _t| t| jd}|t W d   n1 s0    Y  t| jd}|t W d   n1 s0    Y  t| jd}|t W d   n1 s>0    Y  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wNc                 S   s   |g| _ |   | S N)filesZparse_config_files)csite_cfgr   r   r   site_and_parse   s    z3TestSystemInfoReading.setup.<locals>.site_and_parsedefaultr   r   r   )r   _dir1ospathjoin_src1_lib1_dir2_src2_lib2simple_siteformatrC   r   ZNativeParserrH   r   _sitecfgr&   openwritefakelib_c_textr    	c_defaultc_temp1c_temp2c_dup_options)r5   fdrI   r   r   r   setup   s:    
	
(**zTestSystemInfoReading.setupc                 C   sp   zt | j W n ty"   Y n0 zt | j W n tyF   Y n0 zt| j W n tyj   Y n0 d S rE   )shutilZrmtreerK   	ExceptionrQ   rL   removerV   )r5   r   r   r   teardown   s    zTestSystemInfoReading.teardownc                 C   sb   | j }t| | j| jg t| | j| jg t| | jg |	 }t|d g d d S )Nr0   )z-I/fake/directoryz-I/path with/spacesz-Os)
rZ   r   get_lib_dirsrK   rQ   get_librariesrP   rS   get_runtime_lib_dirscalc_extra_infor5   tsiZextrar   r   r   test_all   s    zTestSystemInfoReading.test_allc                 C   s@   | j }t| | jg t| | jg t| | jg d S rE   )r[   r   rd   rK   re   rP   rf   r5   ri   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 )Nr/   )keyr1   z-Wl,-rpath=)r\   r   rd   rQ   re   rS   rf   rg   rh   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_libsr9   )r]   r	   r   Zget_option_singler   Zget_libsrP   rS   rk   r   r   r   test_duplicate_options   s    z,TestSystemInfoReading.test_duplicate_optionszMissing compiler)reasonc              	   C   s   t  }t }zft| j |jtj| jg| jd t	tj
| jddpdtj
| jdd W t| nt| 0 d S )N)
output_dir.c.oz.obj)r   rL   getcwdchdirrK   compilerM   basenamerO   r   isfilereplace)r5   rG   previousDirr   r   r   test_compile1   s    z#TestSystemInfoReading.test_compile1ZmsvczFails with MSVC compiler c              	   C   s   | j }t }| d }t }zRt| j |jtj	| j
g| j|d ttj| j
dd W t| nt| 0 d S )Nr1   )rq   Zextra_postargsrr   rs   )r\   r   rg   rL   rt   ru   rQ   rv   rM   rw   rR   r   rx   ry   )r5   ri   rG   r1   rz   r   r   r   test_compile2   s    z#TestSystemInfoReading.test_compile2c              	   C   s  t  }t j| jd}t| j| zXt | j t	 }|j
d d t j}| |ksbJ t|d"}| ddd}W d    n1 s0    Y  t|d}|| W d    n1 s0    Y  t	 }| |ksJ t|d"}| dd	d}W d    n1 s0    Y  t|d}|| W d    n1 sR0    Y  t	 }| |kstJ W t | nt | 0 d S )
Nzsite.cfgZALLr.   rz[ALL]z[mkl]r   rD   z	[DEFAULT])rL   rt   rM   rN   rK   r`   copyrV   ru   r   r4   splitrC   rd   rW   readry   rX   )r5   rz   Zcfgr3   r:   ZfidZmklZdfltr   r   r   test_overrides  s*    0(2*z$TestSystemInfoReading.test_overridesN)r<   r=   r>   r_   rc   rj   rl   rn   ro   pytestZmarkZskipifHAVE_COMPILERr{   reprr
   Znew_compilerr|   r   r   r   r   r   rB      s   *	

rB   c                 C   s~  ddl m} d}td}| |d |||\}}t|dksBJ |tdksRJ t|dksbJ | |d	 |||\}}t|dksJ t|dksJ d
D ]T}| || d |||\}}t|dksJ |tdksJ t|dksJ qtt& | |d ||| W d    n1 s.0    Y  tt& | |d ||| W d    n1 sp0    Y  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   Zraisesr%   )Zmonkeypatchr   envZ
base_orderorderunknownprefixr   r   r   test_distutils_parse_env_order!  s0    *r   )r   )&rL   r`   r   Ztempfiler   r   
subprocessr   r   Zdistutils.errorsr   Znumpy.testingr   r   r	   Znumpy.distutilsr
   r   r   r   r   r   r   r   r   r   r    rT   rH   rY   r+   r   r   r   r   r   rB   r   r   r   r   r   <module>   s0   
 