o
    d+                     @   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_actioncl r   Z/app/.heroku/python/lib/python3.10/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 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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_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 )	librariesr0   r   )r7   lib_dirsZlibsZopt_libsextsr5   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                   @      e Zd ZdZdZdS )r   For testing purposesr   Nr?   r@   rA   __doc__sectionr   r   r   r    r   u       r   c                   @   rB   )r   rC   r   NrD   r   r   r   r    r   z   rG   r   c                   @   rB   )r   rC   r   NrD   r   r   r   r    r   ~   rG   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e  dg v Ze	j
jedd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)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   z:TestSystemInfoReading.setup_method.<locals>.site_and_parsedefaultr   r   r   r   )r   _dir1ospathjoin_src1_lib1_dir2_src2_lib2simple_siteformatrI   r   ZNativeParserrN   r   _sitecfgr(   openwritefakelib_c_textr!   	c_defaultc_temp1c_temp2c_dup_options)r7   fdrO   r   r   r    setup_method   s@   
	

z"TestSystemInfoReading.setup_methodc                 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 rK   )shutilrmtreerQ   	ExceptionrW   rR   remover\   )r7   r   r   r    teardown_method   s   z%TestSystemInfoReading.teardown_methodc                 C   sb   | j }t| | j| jg t| | j| jg t| | jg |	 }t|d g d d S )Nr2   )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r7   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 rK   )ra   r   rk   rQ   rl   rV   rm   r7   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 )Nr1   )keyr3   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 }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   rR   getcwdchdirrQ   compilerS   basenamerU   r   isfilereplace)r7   rM   previousDirr   r   r    test_compile1   s   z#TestSystemInfoReading.test_compile1Z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 )Nr3   )ry   Zextra_postargsrz   r{   )rb   r   rn   rR   r|   r}   rW   r~   rS   r   rX   r   r   r   )r7   rp   rM   r3   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   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ALLr0   rz[ALL]z[mkl]r   rJ   z	[DEFAULT])rR   r|   rS   rT   rQ   rf   copyr\   r}   r   r6   splitrI   rk   r]   readr   r^   )r7   r   cfgr5   r<   fidZmklZdfltr   r   r    test_overrides  s2   z$TestSystemInfoReading.test_overridesN)r?   r@   rA   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    rH      s"    )	

rH   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_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$  s4   "r   )r   )&rR   rf   r   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!   rZ   rN   r_   r-   r   r   r   r   r   rH   r   r   r   r   r    <module>   s2    
 "