o
    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)namenotfound_actioncl r    H/usr/lib/python3/dist-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 n$ ty,   z	| js|   W n ttfy%   Y Y dS w | jg}Y nw zt|t	t	d}|j
  |j  |  W dS  tyO   Y dS w )z? Return True if there appears to be an executable compiler
    F)stdoutstderrT)r   compilerAttributeErrorinitialized
initializer   
ValueErrorccr   r   r#   closer$   waitOSError)r%   cmdpr    r    r!   have_compiler@   s,   



r0   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rpathsrc_dirssearch_static_firstextra_compile_argsextra_link_args)	__class__info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 )	librariesr3   r    )r?   lib_dirslibsopt_libsextsr<   r    r    r!   _check_libso   s   
z_system_info._check_libsN)__name__
__module____qualname__r   r   rB   rH   r    r    r    r!   r   Z   s    
r   c                   @      e Zd ZdZdZdS )r   For testing purposesr   NrI   rJ   rK   __doc__sectionr    r    r    r!   r   u       r   c                   @   rL   )r   rM   r   NrN   r    r    r    r!   r   z   rQ   r   c                   @   rL   )r   rM   r   NrN   r    r    r    r!   r   ~   rQ   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e	j
jdddd Ze	j
je dde	j
jdee v dde	j
j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di | j| j| j| j	tjtj| j	gdat \}| _t| t| jd}|t W d   n1 sgw   Y  t| jd}|t W d   n1 sw   Y  t| jd}|t W d   n1 sw   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)dir1lib1dir2lib2pathseplib2_escapedwNc                 S   s   |g| _ |   | S N)filesparse_config_files)csite_cfgr    r    r!   site_and_parse   s   z3TestSystemInfoReading.setup.<locals>.site_and_parsedefaultr   r   r   r    )r   _dir1ospathjoin_src1_lib1_dir2_src2_lib2simple_siteformatrW   r   NativeParserr^   r   _sitecfgr+   openwritefakelib_c_textr"   	c_defaultc_temp1c_temp2c_dup_options)r?   fdr_   r    r    r!   setup   s@   
	

zTestSystemInfoReading.setupc                 C   sp   zt | j W n	 ty   Y nw zt | j W n	 ty#   Y nw z	t| j W d S  ty7   Y d S w rZ   )shutilrmtreera   	Exceptionrg   rb   removerm   )r?   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 )Nr9   )z-I/fake/directoryz-I/path with/spacesz-Os)
rq   r   get_lib_dirsra   rg   get_librariesrf   ri   get_runtime_lib_dirscalc_extra_infor?   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 rZ   )rr   r   r|   ra   r}   rf   r~   r?   r   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 )Nr6   )keyr:   z-Wl,-rpath=)rs   r   r|   rg   r}   ri   r~   r   r   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 )N
mylib_libsrC   )rt   r	   r   get_option_singler   get_libsrf   ri   r   r    r    r!   test_duplicate_options   s   z,TestSystemInfoReading.test_duplicate_optionszMissing compiler)reasonz,Debian: disabled as we cant properly compilec              	   C   s   t  }t }z4t| j |jtj| jg| jd t	tj
| jddp2tj
| jdd W t| d S t| w )N)
output_dir.c.oz.obj)r   rb   getcwdchdirra   compilerc   basenamere   r   isfilereplace)r?   r]   previousDirr    r    r!   test_compile1   s   z#TestSystemInfoReading.test_compile1msvczFails with MSVC compiler c              	   C   s   | j }t }| d }t }z*t| j |jtj	| j
g| j|d ttj| j
dd W t| d S t| w )Nr:   )r   extra_postargsr   r   )rs   r   r   rb   r   r   rg   r   rc   r   rh   r   r   r   )r?   r   r]   r:   r   r    r    r!   test_compile2   s   z#TestSystemInfoReading.test_compile2c              	   C   s  t  }t j| jd}t| j| zt | j t	 }|j
d d t j}| |ks0J t|d}| ddd}W d    n1 sIw   Y  t|d}|| W d    n1 scw   Y  t	 }| |kssJ t|d}| dd	d}W d    n1 sw   Y  t|d}|| W d    n1 sw   Y  t	 }| |ksJ W t | d S t | w )
Nzsite.cfgALLr3   rz[ALL]z[mkl]r   rY   z	[DEFAULT])rb   r   rc   rd   ra   rw   copyrm   r   r   r>   splitrW   r|   rn   readr   ro   )r?   r   cfgr<   rD   fidmkldfltr    r    r!   test_overrides  s2   z$TestSystemInfoReading.test_overridesN)rI   rJ   rK   rv   r{   r   r   r   r   pytestmarkskipifHAVE_COMPILERskipr   reprr
   new_compilerr   r   r    r    r    r!   rR      s"    *	
rR   c                 C   s|  ddl m} d}td}| |d |||\}}t|dks!J |tdks)J t|dks1J | |d	 |||\}}t|dksFJ t|dksNJ d
D ]*}| || d |||\}}t|dksjJ |tdksrJ t|dkszJ qPtt | |d ||| W d    n1 sw   Y  tt | |d ||| W d    d S 1 sw   Y  d S )Nr   )_parse_env_order#NPY_TESTS_DISTUTILS_PARSE_ENV_ORDERabcdefzb,i,e,f   befr   r1   z^!zb,i,e   acdfzb,^e,iz!b,^e,i)numpy.distutils.system_infor   listsetenvlenr   raisesr)   )monkeypatchr   env
base_orderorderunknownprefixr    r    r!   test_distutils_parse_env_order#  s4   "r   )r   )&rb   rw   r   tempfiler   r   
subprocessr   r   distutils.errorsr   numpy.testingr   r   r	   numpy.distutilsr
   r   r   r   r   r   r   r   r   r   r"   rj   r^   rp   r0   r   r   r   r   r   rR   r   r    r    r    r!   <module>   s2    
 !