o
    tBh                     @   sx   d Z ddlZddlZddlZddlmZ dg dfddZdddZdd	 Zd
d Z	dddZ
dd Zdd Zdd ZdS )z,
Helpers for detection of compiler features
    N)dict_appendc           	   	   C   s   ddl m} ddlm} |du rt| |rd}nd}|p | jd }t H}tj	
|d| }t|d}|| W d   n1 sDw   Y  z| j|g||d	 W n |yd   Y W d   d
S w W d   dS 1 spw   Y  dS )z>Returns True if the compiler is able to compile the given coder   )CompileError)	FCompilerNz)      program main
      return
      endz.int main (int argc, char **argv) { return 0; }mainw)
output_dirextra_postargsFT)distutils.errorsr   numpy.distutils.fcompilerr   
isinstancesrc_extensionstempfileTemporaryDirectoryospathjoinopenwritecompile)	compilercodeflagsextr   r   temp_dirfnamef r   y/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/scipy/_build_utils/compiler_helper.pytry_compile	   s.   


		r   c                 C   s   t | |g|dS )z4Returns True if the compiler supports the given flagr   r   )r   )r   flagr   r   r   r   has_flag"   s   r!   c                 C   sv   ddg}ddgddgddgd}| | j|}|D ]}|du r" dS t| |dd	r-|  S qd
dlm} |d dS )z?Detects compiler flag for c++14, c++11, or None if not detectedz
-std=c++14z
-std=c++11z
/std:c++14Nz/Qstd=c++14z/Qstd=c++11msvcintelwintelemz.cppr   r   logz"Could not detect c++ standard flaggetcompiler_typer!   numpy.distutilsr(   warn)r   	gnu_flagsflags_by_ccr   r    r(   r   r   r   get_cxx_std_flag'   s   
r0   c                 C   sV   d}dddd}| | j|}|du rdS t| |ddr|S ddlm} |d	 dS )
z#Detects compiler flag to enable C99z-std=c99Nz	/Qstd=c99r"   z.cr&   r   r'   z"Could not detect c99 standard flagr)   )r   gnu_flag
flag_by_ccr    r(   r   r   r   get_c_std_flagA   s   
r3   c                 C   s&   t || |g |dr| | dS dS )zBAppends flag to the list of arguments if supported by the compilerr   N)r   append)argsr   r    r   r   r   r   try_add_flagV   s   r6   c                 C   s&   t | j}|dur|j| dS dS )z0Sets basic compiler flags for compiling C99 codeN)r3   r   extra_compile_argsr4   )	build_extr   std_flagr   r   r   set_c_flags_hook\   s   
r:   c                 C   s`   | j }|j}t|}|dur|| tjdkr,d}t||r.|| |j| dS dS dS )z2Sets basic compiler flags for compiling C++11 codeNdarwin-mmacosx-version-min=10.9)_cxx_compilerr7   r0   r4   sysplatformr!   extra_link_args)r8   r   ccr5   r9   min_macos_flagr   r   r   set_cxx_flags_hookc   s   



rC   c                 C   sf   | j }g }g }t|}|d ur|| tjdkr*d}t||r*|| || t|||d d S )Nr;   r<   )extra_compiler_argsr@   )r   r0   r4   r>   r?   r!   r   )
build_clib
build_inforA   new_argsnew_link_argsr9   rB   r   r   r   set_cxx_flags_clib_hookt   s   





rI   )N)__doc__r   r   r>   numpy.distutils.system_infor   r   r!   r0   r3   r6   r:   rC   rI   r   r   r   r   <module>   s    

