o
    p>e,                     @   sd  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	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 ze
jddkrfejddd W n e
jjyr   Y nw 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
setuptoolsZ60zsetuptools is too newT)Zallow_module_level   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    g/home/www/facesmatcher.com/pyenv/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_compilerK   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__g   s   z_system_info.__init__c                 C   s   ||d}|S )z-Override _check_libs to return with all dirs )	librariesr1   r    )r8   lib_dirsZlibsZopt_libsextsr6   r    r    r!   _check_libsz   s   
z_system_info._check_libsN)__name__
__module____qualname__r   r   r;   r?   r    r    r    r!   r   e   s    
r   c                   @      e Zd ZdZdZdS )r   For testing purposesr   Nr@   rA   rB   __doc__sectionr    r    r    r!   r          r   c                   @   rC   )r   rD   r   NrE   r    r    r    r!   r      rH   r   c                   @   rC   )r   rD   r   NrE   r    r    r    r!   r      rH   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)files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formatrJ   r   ZNativeParserrP   r   _sitecfgr)   openwritefakelib_c_textr"   	c_defaultc_temp1c_temp2c_dup_options)r8   fdrQ   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 rL   )shutilrmtreerS   	ExceptionrY   rT   remover^   )r8   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 )Nr3   )z-I/fake/directoryz-I/path with/spacesz-Os)
rb   r   get_lib_dirsrS   rY   get_librariesrX   r[   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 rL   )rc   r   rm   rS   rn   rX   ro   r8   rr   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=)rd   r   rm   rY   rn   r[   ro   rp   rq   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<   )re   r	   r   Zget_option_singler   Zget_libsrX   r[   ru   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   rT   getcwdchdirrS   compilerU   basenamerW   r   isfilereplace)r8   rO   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 )Nr4   )r{   Zextra_postargsr|   r}   )rd   r   rp   rT   r~   r   rY   r   rU   r   rZ   r   r   r   )r8   rr   rO   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   s  t  }t j| jd}t| j| zt | j t	 }|j
d d t j}| |ks0J t|}| ddd}W d    n1 sHw   Y  t|d}|| W d    n1 sbw   Y  t	 }| |ksrJ t|}| 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ALLr1   z[ALL]z[mkl]r   rK   z	[DEFAULT])rT   r~   rU   rV   rS   rh   copyr^   r   r   r7   splitrJ   rm   r_   readr   r`   )r8   r   cfgr6   r=   ZfidZmklZdfltr    r    r!   test_overrides  s2   

z$TestSystemInfoReading.test_overridesN)r@   rA   rB   rg   rl   rt   rv   rx   ry   pytestmarkZskipifHAVE_COMPILERr   reprr
   Znew_compilerr   r   Zcalc_libraries_infor   ZHAS_MKLZxfailr   r    r    r    r!   rI      s"    )	

rI   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   ),rT   rh   r   tempfiler   r   
subprocessr   r   importlib.metadata	importlibZdistutils.errorsr   Znumpy.testingr   r   r	   Znumpy.distutilsr
   r   r   r   r   r   r   r   r   r   metadataversionskipZPackageNotFoundErrorr"   r\   rP   ra   r.   r   r   r   r   r   rI   r   r    r    r    r!   <module>   sB    
 "