o
    @c7                     @   s@  d dl Z d dlZd dlZd dlZe jdkr"dd Zdd Zdd Znoe jd	kr7ejd
kr7d dl	m
Z dd ZnZejdrDd dlmZ nMe jd	krd dlZd dlZdd Zdd Zejdkrcdd Zndd Zejdrvdd Zdd Znejdkrdd Zd'ddZndd  Zd!d" Zd#d Zd$d% Zed&kre  dS dS )(    Nntc                  C   s   	 d} t j| }|dkrdS |t|  }t j|d  dd\}}t|d d d }|dkr4|d7 }t|dd	 d
 }|dkrDd}|dkrL|| S d S )NzMSC v.                g      $@r   )sysversionfindlensplitint)prefixisrestmajorVersionminorVersion r   IC:\Users\Chris\AppData\Local\Programs\Python\Python310\lib\ctypes\util.py_get_build_version	   s    r   c                  C   s`   	 t  } | d u r
d S | dkrd}n| dkrd| d  }nd S dd l}d|jjv r,|d7 }|d	 S )
Nr   msvcrtr   zmsvcr%d
   r   z_d.pydd.dll)r   importlib.machinery	machineryEXTENSION_SUFFIXES)r   Zclibname	importlibr   r   r   find_msvcrt"   s   r"   c                 C   sx   | dv rt  S tjd tjD ])}tj|| }tj|r#|  S | 	dr+q|d }tj|r9|  S qd S )N)cmPATHr   )
r"   osenvironr   pathseppathjoinisfilelowerendswith)name	directoryfnamer   r   r   find_library7   s   r1   posixdarwin)	dyld_findc              	   C   sH   d|  d|  d| | f g}|D ]} zt | W   S  ty!   Y qw d S )Nzlib%s.dylibz%s.dylibz%s.framework/%s)
_dyld_find
ValueError)r.   possibler   r   r   r1   H   s   
aix)r1   c                 C   sB   	 d}t | d}|d|kW  d    S 1 sw   Y  d S )Ns   ELFbr   )openread)filename
elf_headerthefiler   r   r   _is_elf`   s
   $r@   c           
      C   sf  t dt|  }td}|std}|sd S t }zh|dd|jd|  g}t	t j
}d|d< d|d	< ztj|tjtj|d
}W n ty^   Y W z|  W d S  ty]   Y d S w w | |j }W d    n1 sqw   Y  W z|  W n ty   Y nw z|  W w  ty   Y w w t||}|sd S |D ]}	t|	sqt |	  S d S )N[^\(\)\s]*lib%s\.[^\(\)\s]*Zgccccz-Wl,-t-oz-lCLC_ALLLANGstdoutstderrenv)r&   fsencodereescapeshutilwhichtempfileNamedTemporaryFiler.   dictr'   
subprocessPopenPIPESTDOUTOSErrorcloseFileNotFoundErrorrH   r<   findallr@   fsdecode)
r.   exprZ
c_compilertempargsrJ   proctraceresfiler   r   r   _findLib_gccf   s`   



rc   sunos5c                 C   s   | sd S zt jdd| ft jt jd}W n
 ty   Y d S w | |j }W d    n1 s0w   Y  td|}|s?d S t	
|dS )Nz/usr/ccs/bin/dumpz-LpvrH   rI   s   \[.*\]\sSONAME\s+([^\s]+)r   )rS   rT   rU   DEVNULLrW   rH   r<   rL   searchr&   r[   group)fr_   datara   r   r   r   _get_soname   s"   
rk   c                 C   s   | sd S t d}|sd S ztj|ddd| ftjtjd}W n
 ty(   Y d S w | |j }W d    n1 s;w   Y  t	
d|}|sJd S t|dS )Nobjdump-pz-jz.dynamicre   s   \sSONAME\s+([^\s]+)r   )rN   rO   rS   rT   rU   rf   rW   rH   r<   rL   rg   r&   r[   rh   )ri   rl   r_   dumpra   r   r   r   rk      s(   

)freebsdopenbsd	dragonflyc                 C   sN   |  d}g }z|r|dt|  |s
W n	 ty    Y nw |p&tjgS )N   .r   )r   insertr   popr6   r   maxsize)libnamepartsnumsr   r   r   _num_version   s   
ry   c                 C   s   t | }d||f }t|}ztjdtjtjd}W n ty'   d}Y nw | |j	
 }W d    n1 s:w   Y  t ||}|sMtt| S |jtd t|d S )Nz:-l%s\.\S+ => \S*/(lib%s\.\S+))/sbin/ldconfigz-rre       )keyr   )rL   rM   r&   rK   rS   rT   rU   rf   rW   rH   r<   rZ   rk   rc   sortry   r[   )r.   Zenamer\   r_   rj   ra   r   r   r   r1      s&   


c           	      C   s   t jdsd S tt j}d|d< |rd}nd}d }ztj|tjtj|d}W n
 t	y1   Y d S w |  |j
D ]}| }|drLt | d }q8W d    n1 sWw   Y  |s`d S |d	D ]}t j|d
|  }t j|rz|  S qed S )N/usr/bin/crlerD   rE   )r~   -64)r~   rG   s   Default Library Path (ELF):r:   :zlib%s.so)r&   r)   existsrR   r'   rS   rT   rU   rf   rW   rH   strip
startswithr[   r   r*   )	r.   is64rJ   r^   pathsr_   linedirlibfiler   r   r   _findLib_crle   sB   



r   Fc                 C   s   t t| |p	t| S N)rk   r   rc   )r.   r   r   r   r   r1   	  s   c                 C   s  dd l }|ddkrt jd }nt jd }dddddd	}||d
}d}t|t| |f }zBt	j
ddgt	jt	jt	jdddd%}t||j }|ret|dW  d    W S W d    W d S 1 sqw   Y  W d S  ty   Y d S w )Nr   lr:   z-32r   zlibc6,x86-64zlibc6,64bitzlibc6,IA-64)z	x86_64-64zppc64-64z
sparc64-64zs390x-64zia64-64Zlibc6z\s+(lib%s\.[^\s]+)\s+\(%srz   rm   rD   )rE   rF   )stdinrI   rH   rJ   r   )structcalcsizer&   unamemachinegetrK   rL   rM   rS   rT   rf   rU   rg   rH   r<   r[   rh   rW   )r.   r   r   Zmach_mapZabi_typeregexpra   r   r   r   _findSoname_ldconfig  s<   
&r   c                 C   s   dt |  }ddg}tjd}|r"|dD ]	}|d|g q|dtjd|  g d }z.tj	|tj
tj
d	d
}| \}}t |t|}	|	D ]}
t|
sSqLt|
  W S W |S  tyg   Y |S w )NrA   ldz-tLD_LIBRARY_PATHr   z-LrC   z-l%sT)rH   rI   universal_newlines)rL   rM   r&   r'   r   r   extenddevnullrS   rT   rU   communicaterZ   r[   r@   	Exception)r.   r\   cmdlibpathr   resultr   out_ra   rb   r   r   r   _findLib_ld,  s2   
	r   c                 C   s    t | ptt| ptt| S r   )r   rk   rc   r   )r.   r   r   r   r1   G  s
   

c                  C   s  ddl m}  tjdkrt| j t| d ttd tjdkrttd ttd ttd tj	d	krWt| 
d
 t| 
d t| 
d t| 
d d S tj	drddl m} tjdk rtd|dtj  td| 
d  ttd t| 
d ntd|dtj  td| 
d  tdtd  td| 
td  tdtd  td| 
td  d S t| 
d t| 
d ttd d S d S )Nr   )cdllr   r   r2   r$   r#   bz2r3   z
libm.dylibzlibcrypto.dylibzlibSystem.dylibzSystem.framework/Systemr8   )CDLLl        z"Using CDLL(name, os.RTLD_MEMBER): zlibc.a(shr.o)zUsing cdll.LoadLibrary(): rpmz	librpm.sozlibc.a(shr_64.o)z	crypt	:: Zcryptz
crypto	:: cryptozlibm.sozlibcrypt.so)ctypesr   r&   r.   printr   loadr1   r   platformLoadLibraryr   r   ru   RTLD_MEMBER)r   r   r   r   r   testO  s>   




r   __main__)F)r&   rN   rS   r   r.   r   r"   r1   r   ctypes.macholib.dyldr4   r5   r   ctypes._aixrL   rP   r@   rc   rk   ry   r   r   r   r   __name__r   r   r   r   <module>   sB    




2


$(
