o
    g                     @   sJ   d Z ddlZdd Zdd Zdd Zdd	d
Zdd Zdd Zdd ZdS )zKThis module implements additional tests ala autoconf which can be useful.

    Nc                 C   B   |    td}dD ]}| |d|i dd}|r|  S qdS )z,Return the inline identifier (may be empty).z
        #ifndef __cplusplus
        static %(inline)s int static_func (void)
        {
            return 0;
        }
        %(inline)s int nostatic_func (void)
        {
            return 0;
        }
        #endif)inline
__inline____inliner   N _check_compilertextwrapdedenttry_compilecmdbodykwst r   W/var/www/visachat/venv/lib/python3.10/site-packages/numpy/distutils/command/autodist.pycheck_inline   s   
r   c                 C   r   )z.Return the restrict identifier (may be empty).zj
        static int static_func (char * %(restrict)s a)
        {
            return 0;
        }
        )restrict__restrict__
__restrictr   Nr   r   r   r   r   r   check_restrict   s   
r   c                 C   s    |    td}| |ddS )zCheck if the compiler is GCC.z
        int
        main()
        {
        #if (! defined __GNUC__)
        #error gcc required
        #endif
            return 0;
        }
        Nr   )r   r   r   r   r   check_compiler_gcc1   s   

r   c                 C   sN   |    dt|t|t|g}td}||||d}| || ddS )zB
    Check that the gcc version is at least the specified version..a1  
        int
        main()
        {
        #if (! defined __GNUC__) || (__GNUC__ < %(major)d) || \
                (__GNUC_MINOR__ < %(minor)d) || \
                (__GNUC_PATCHLEVEL__ < %(patchlevel)d)
        #error gcc >= %(version)s required
        #endif
            return 0;
        }
        )versionmajorminor
patchlevelN)r   joinstrr	   r
   r   )r   r   r   r   r   r   r   r   r   r   check_gcc_version_at_leastB   s   
r    c                 C   s,   |    td||f }| |dddkS )z9Return True if the given function attribute is supported.a  
        #pragma GCC diagnostic error "-Wattributes"
        #pragma clang diagnostic error "-Wattributes"

        int %s %s(void* unused)
        {
            return 0;
        }

        int
        main()
        {
            return 0;
        }
        Nr   r   )r   	attributenamer   r   r   r   check_gcc_function_attributeZ   s
   r#   c                 C   s0   |    td||||f }| |dddkS )zMReturn True if the given function attribute is supported with
    intrinsics.z
        #include<%s>
        int %s %s(void)
        {
            %s;
            return 0;
        }

        int
        main()
        {
            return 0;
        }
        Nr   r   )r   r!   r"   codeincluder   r   r   r   ,check_gcc_function_attribute_with_intrinsicso   s
   
r&   c                 C   s*   |    td|f }| |dddkS )z9Return True if the given variable attribute is supported.z
        #pragma GCC diagnostic error "-Wattributes"
        #pragma clang diagnostic error "-Wattributes"

        int %s foo;

        int
        main()
        {
            return 0;
        }
        Nr   r   )r   r!   r   r   r   r   check_gcc_variable_attribute   s
   r'   )r   r   )	__doc__r	   r   r   r   r    r#   r&   r'   r   r   r   r   <module>   s    
