a
    i‚jT#  ã                	   @   sî  d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dd¡rÎze ejd ¡ZW n eyÈ   dZY n0 nejdkr¬dZze d¡ZW n eyþ   Y n0 edu rlzLe ej ej ej e¡¡d¡¡Ze ej ej ej e¡¡d¡¡ZW n eyj   Y n0 edu rêze ej ejddd¡¡ZW n ey¨   Y n0 n>eeddƒsÔeddgdd geƒ eƒZneddgdd geƒ ƒZdS )!z
Python bindings for GLFW.
é    )Úprint_function)Údivision)Úunicode_literalsNc                 C   s$  g }|D ]}|sq| D ]}t j |d| d ¡}t |¡D ]Ü}t j |¡}||v rXq>t j |¡}| d| ¡rˆ|td| ƒd… }	n| |¡r>|t|ƒd… }	nq>|D ]n}
|	 |
¡rà|	t|
ƒd… dd… dv rÞ| 	|¡ qª|	 
|
¡rª|	dt|
ƒ … }tdd„ |D ƒƒrª| 	|¡ qªq>qq|S )	zU
    Finds and returns filenames which might be the library you are looking for.
    Ú*z.*ÚlibNé   )Ú Ú.c                 s   s   | ]}|d v V  qdS )z0123456789.N© )Ú.0Úcr
   r
   úJ/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/glfw/library.pyÚ	<genexpr>.   ó    z+_find_library_candidates.<locals>.<genexpr>)ÚosÚpathÚjoinÚglobÚiglobÚrealpathÚbasenameÚ
startswithÚlenÚappendÚendswithÚall)Úlibrary_namesÚlibrary_file_extensionsÚlibrary_search_pathsÚ
candidatesÚsearch_pathZlibrary_nameZ
glob_queryÚfilenamer   Zbasename_endZfile_extensionZbasename_middler
   r
   r   Ú_find_library_candidates   s2    




r"   c                 C   sf   t | ||ƒ}g }t|ƒD ]*}||ƒ}|dur|dkr| ||f¡ q|sLdS | ¡  t |d d ¡S )zJ
    Finds, loads and returns the most recent version of the library.
    N©é   r   r   éÿÿÿÿr   )r"   Úsetr   ÚsortÚctypesÚCDLL)r   r   r   Zversion_check_callbackr   Zlibrary_versionsr!   Úversionr
   r
   r   Ú_load_library3   s    þr+   c              	   C   sÊ   t | ||ƒ}d}|D ]8}tj |¡rzt |¡}W  qNW q tyJ   Y q0 q|durÆt d¡}t |¡}t d¡}t |¡}	t d¡}
t |
¡}t	|dƒrÆ| 
||	|¡ |j|j|
jf}|dkrÆ|S dS )zJ
    Finds, loads and returns the first found version of the library.
    Nr   ÚglfwGetVersionr#   )r"   r   r   Úisfiler(   r)   ÚOSErrorZc_intZpointerÚhasattrr,   Úvalue)r   r   r   r   Úlibraryr!   Zmajor_valueÚmajorZminor_valueÚminorZ	rev_valueÚrevr*   r
   r
   r   Ú_load_first_libraryG   s4    ý








r5   c                 C   sV   d}t jdt |¡g}tj|dtjtjd}| | ¡d }| ¡ }|rNt	|ƒS dS dS )zZ
    Queries and returns the library version tuple or None by using a
    subprocess.
    av  
        import sys
        import ctypes

        def get_version(library_handle):
            """
            Queries and returns the library version tuple or None.
            """
            major_value = ctypes.c_int(0)
            major = ctypes.pointer(major_value)
            minor_value = ctypes.c_int(0)
            minor = ctypes.pointer(minor_value)
            rev_value = ctypes.c_int(0)
            rev = ctypes.pointer(rev_value)
            if hasattr(library_handle, 'glfwGetVersion'):
                library_handle.glfwGetVersion(major, minor, rev)
                version = (major_value.value,
                           minor_value.value,
                           rev_value.value)
                return version
            else:
                return None

        if sys.version_info[0] == 2:
            input_func = raw_input
        else:
            input_func = input
        filename = input_func().strip()

        try:
            library_handle = ctypes.CDLL(filename)
        except OSError:
            pass
        else:
            version = get_version(library_handle)
            print(version)
    z-cT)Úuniversal_newlinesÚstdinÚstdoutr   N)
ÚsysÚ
executableÚtextwrapÚdedentÚ
subprocessÚPopenÚPIPEÚcommunicateÚstripÚeval)r!   Zversion_checker_sourceÚargsÚprocessÚoutr
   r
   r   Ú_glfw_get_versionh   s    &ÿrF   c                  C   s–   t j t j t¡¡} d| tjd ddddddd	d
dddddddddg}t| ƒ}|r^| d|¡ tj	dkrnd}nd}|t j
v r’| t j
|  d¡¡ |S )z—
    Returns a list of library search paths, considering of the current working
    directory, default paths and paths from environment variables.
    r   z/libz
/usr/lib64z/usr/local/lib64z/usr/libz/usr/local/libz/opt/homebrew/libz/run/current-system/sw/libz/usr/lib/x86_64-linux-gnu/z/usr/lib/aarch64-linux-gnu/z/usr/lib/arm-linux-gnueabihfz/usr/lib/riscv64-linux-gnuz/usr/lib/powerpc64le-linux-gnuz/usr/lib/loongarch64-linux-gnuz/usr/lib/s390x-linux-gnuz/usr/lib/i386-linux-gnuz/usr/lib/arm-linux-gnueabiz/usr/lib/sparc64-linux-gnuz /usr/lib/mips64el-linux-gnuabi64r   ÚdarwinZDYLD_LIBRARY_PATHZLD_LIBRARY_PATHú:)r   r   ÚabspathÚdirnameÚ__file__r9   ÚprefixÚ_get_package_path_variantÚinsertÚplatformÚenvironÚextendÚsplit)Úpackage_pathZsearch_pathsÚpackage_path_variantZpath_environment_variabler
   r
   r   Ú_get_library_search_pathsž   s<    í

rU   c                  C   sN   t j t  ¡ ¡} t j t j tj¡¡}t j t j t¡¡}t|ƒ}|||| gS )zH
    Returns a list of library search paths for frozen executables.
    )	r   r   rI   ÚgetcwdrJ   r9   r:   rK   rM   )Úcurrent_pathZexecutable_pathrS   rT   r
   r
   r   Ú _get_frozen_library_search_pathsÇ   s    ürX   c                 C   sl   t jdv rd S tj dd¡ ¡ dv r<tj | tjd  ¡ ¡S tj d¡dkrZtj | d¡S tj | d¡S d S )N)rG   Úwin32ZPYGLFW_LIBRARY_VARIANTr   )ÚwaylandÚx11ZXDG_SESSION_TYPErZ   r[   )r9   rO   r   rP   ÚgetÚlowerr   r   )rS   r
   r
   r   rM   ×   s    
rM   ZPYGLFW_LIBRARYr   rY   z	glfw3.dllzmsvcr120.dllÚLibraryÚbinÚfrozenFÚglfwZglfw3z.soz.dylib) Ú__doc__Ú
__future__r   r   r   r(   r   r   r9   r=   r;   r"   r+   r5   rF   rU   rX   rM   rP   r\   r)   ra   r.   rO   r   r   rI   rJ   rK   ZmsvcrrL   Úgetattrr
   r
   r
   r   Ú<module>   sZ   "!6)
$(
ÿÿ