o
    !Æ&i  ã                   @   sò   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ dej	j
_eej	j
_dej	j_eej	j_dej	j_eej	j_dej	j_eej	j_dej	j_eej	j_dd„ Zeƒ Zdd	„ Zeƒ Zd
d„ Zeƒ Zdd„ Zeƒ Zdd„ Zeƒ Zedd„ ƒZdS )é    N)Úcache)Úc_intÚc_char_p)Úffi© c                   C   ó   t j ¡ dkr	dS dS )zG
    Returns True if SVML was enabled at FFI support compile time.
    r   FT)r   ÚlibÚLLVMPY_HasSVMLSupportr   r   r   úBC:\wamp64\www\opt\env\Lib\site-packages\llvmlite/binding/config.pyÚ	_has_svml   s   r   c                   C   r   )zq
    Returns "static" if the FFI support is statically linked against LLVM,
    returns "dynamic" otherwise.
    r   ÚstaticÚdynamic)r   r   Ú LLVMPY_IsDynamicLLVMLinkageBuildr   r   r   r
   Ú_build_llvm_linkage_type&   ó   r   c                   C   r   )zv
    Returns "static" if the FFI support is statically linked against libstdc++,
    returns "dynamic" otherwise.
    é   r   r   )r   r   Ú$LLVMPY_IsStaticLibstdcxxLinkageBuildr   r   r   r
   Ú_build_libstdcxx_linkage_type4   r   r   c                   C   ó   t j ¡  ¡ S )z3
    Returns "wheel", "conda" or "unspecified"
    )r   r   ÚLLVMPY_PackageFormatÚdecoder   r   r   r
   Ú_package_formatB   s   r   c                   C   r   )a3  
    Returns one of "on", "off" or "unknown". Depending on whether it is
    determined that LLVM was build with assertions on, off, or is not known.
    "Is not known" is typically from a dynamic linkage against LLVM in which
    case it's not easily identified whether LLVM was built with assertions.
    )r   r   ÚLLVMPY_LlvmAssertionsStater   r   r   r   r
   Ú_llvm_assertions_stateL   s   r   c            	      C   sÊ   t ƒ } tjj| d< t| d< t| d< t| d< t| d< d}zdd l}d}W n t	y3   d	}t
 |¡ Y nw || d
< d | d< d | d< dd„ }dd„ }|rc| | d ¡}t||ƒƒ}|| d< ||ƒ}|| d< | S )NZffi_lib_locationÚpackage_formatZllvm_linkage_typeZlibstdcxx_linkage_typeÚllvm_assertions_stateFr   Tz9py-lief package not found, sysinfo is limited as a resultZlief_probe_statusZlinked_librariesZcanonicalised_linked_librariesc                 S   s   dd„ | j D ƒS )zZCanonicalises the representation of the binary::libraries as a
        sequence of stringsc                 S   s   g | ]}t |d |ƒ‘qS )Úname)Úgetattr)Ú.0Úxr   r   r
   Ú
<listcomp>u   s    zBget_sysinfo.<locals>.canonicalise_library_type.<locals>.<listcomp>)Z	libraries)Údsor   r   r
   Úcanonicalise_library_typeo   s   z.get_sysinfo.<locals>.canonicalise_library_typec                 S   sR   g }| D ]"}t j |¡d }| d¡d }| dd¡ dd¡}| | ¡ ¡ q|S )NéÿÿÿÿÚ.r   r   Ú ZLIB)ÚosÚpathÚsplitÚreplaceÚappendÚlower)ZlibsÚfixesr   Zpath_strippedZprefix_libnameZlinker_namer   r   r
   Úcanonicalise_library_spellingw   s   z2get_sysinfo.<locals>.canonicalise_library_spelling)Údictr   r   Ú_namer   Úbuild_llvm_linkage_typeÚbuild_libstdcxx_linkage_typer   ÚliefÚImportErrorÚwarningsÚwarnÚparseÚtuple)	ÚdZ	HAVE_LIEFr2   Úmsgr"   r-   r!   Z	link_libsZcanonicalised_libsr   r   r
   Úget_sysinfoY   s4   þr:   )r&   r4   Ú	functoolsr   Úctypesr   r   Zllvmlite.bindingr   r   r	   ÚargtypesÚrestyper   r   r   r   r   Zhas_svmlr   r0   r   r1   r   r   r   r   r:   r   r   r   r
   Ú<module>   s6    











