
    -Ph5K                       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lZ	ddl
mZmZmZ dZdZdZdZd	Zd
ZdZda G d d          Z G d de          Z G d de          Z G d de          Zd*d+d Zd,d"Zd-d&Zd.d'Zd*d/d)ZdS )0    )annotationsN   )
OrderedSetgenerate_list
Popen_safe                  i5  pFc                      e Zd Zd	dZdS )
	DataSizesptrsizeintis_leboolreturnNonec                V   |rd}nd}|dz   | _         d| _        |dz   | _        d| _        |dz   | _        d| _        |dk    rF|d	z   | _        d
| _        |d	z   | _        d
| _	        |d	z   | _
        d
| _        |dz   | _        d
| _        d S |dz   | _        d| _        |dz   | _        d| _	        d S )N<>hr   I   i@   Q   q)HalfHalfSizeWordWordSizeSword	SwordSizeAddrAddrSizeOffOffSizeXWord	XWordSizeSxword
SxwordSize)selfr   r   ps       [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/scripts/depfixer.py__init__zDataSizes.__init__   s     	AAAG	G	W
b==CDIDM3wDHDLSDJDNc'DKDOOOCDIDM3wDHDLLL    N)r   r   r   r   r   r   )__name__
__module____qualname__r2    r3   r1   r   r      s(             r3   r   c                  (     e Zd Zd fd	ZddZ xZS )DynamicEntryifile
T.BinaryIOr   r   r   r   r   r   c                R   t                                          ||           || _        |dk    r|t          j        | j        |                    | j                            d         | _        t          j        | j	        |                    | j
                            d         | _        d S t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        d S Nr   r   )superr2   r   structunpackr-   readr.   d_tagr+   r,   valr%   r&   r#   r$   )r/   r:   r   r   	__class__s       r1   r2   zDynamicEntry.__init__8   s    %(((b==t{EJJt4O4OPPQRSDJ}TZDN1K1KLLQODHHHtz5::dn3M3MNNqQDJ}TY

4=0I0IJJ1MDHHHr3   ofilec                   | j         dk    rf|                    t          j        | j        | j                             |                    t          j        | j        | j                             d S |                    t          j        | j        | j                             |                    t          j        | j	        | j                             d S )Nr   )
r   writer?   packr-   rB   r+   rC   r%   r#   )r/   rE   s     r1   rG   zDynamicEntry.writeB   s    <2KKDK<<===KKDJ99:::::KKDJ
;;<<<KKDItx8899999r3   r:   r;   r   r   r   r   r   r   )rE   r;   r   r   )r4   r5   r6   r2   rG   __classcell__rD   s   @r1   r9   r9   7   sW        N N N N N N: : : : : : : :r3   r9   c                        e Zd Zd
 fd	Z xZS )SectionHeaderr:   r;   r   r   r   r   r   r   c                   t                                          ||           |dk    }t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        |r>t          j        | j	        |                    | j
                            d         | _        n=t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        |r>t          j        | j	        |                    | j
                            d         | _        n=t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        t          j        | j        |                    | j                            d         | _        |r>t          j        | j	        |                    | j
                            d         | _        n=t          j        | j        |                    | j                            d         | _        |r?t          j        | j	        |                    | j
                            d         | _        d S t          j        | j        |                    | j                            d         | _        d S r=   )r>   r2   r?   r@   r#   rA   r$   sh_namesh_typer+   r,   sh_flagsr'   r(   sh_addrr)   r*   	sh_offsetsh_sizesh_linksh_infosh_addralign
sh_entsize)r/   r:   r   r   is_64rD   s        r1   r2   zSectionHeader.__init__K   s   %(((2 }TY

4=0I0IJJ1M}TY

4=0I0IJJ1M 	S"M$*ejj6P6PQQRSTDMM"M$)UZZ5N5NOOPQRDM}TY

4=0I0IJJ1MtxDL1I1IJJ1M 	R!=UZZ5O5OPPQRSDLL!=EJJt}4M4MNNqQDL}TY

4=0I0IJJ1M}TY

4=0I0IJJ1M 	W &dj%**T^:T:T U UVW XD &diDM9R9R S STU VD 	U$mDJ

4>8R8RSSTUVDOOO$mDIuzz$-7P7PQQRSTDOOOr3   rI   )r4   r5   r6   r2   rJ   rK   s   @r1   rM   rM   J   sG        #U #U #U #U #U #U #U #U #U #Ur3   rM   c                       e Zd Zd1d2 fdZd3d	Zd4d
Zd5dZd4dZd6dZd7dZ	d4dZ
d4dZd8dZd9dZd4dZed:d            Zd;d Zd<d$Zd;d%Zd;d&Zed:d'            Zd=d)Zd>d.Zd?d/Zd@d0Z xZS )AElfTbfilestrverboser   r   r   c                   || _         || _        g | _        g | _        |                     |           	 |                                 \  | _        | _        t                      	                    | j        | j                   | 
                                 |                                  |                                  d S # t          j        t          f$ r |                                   w xY wN)r\   r^   sectionsdynamicopen_bfdetect_elf_typer   r   r>   r2   parse_headerparse_sectionsparse_dynamicr?   errorRuntimeErrorclose_bf)r/   r\   r^   rD   s      r1   r2   zElf.__init__q   s    
/1-/U	)-)=)=)?)?&T\4:GGT\4:666!!!     l+ 	 	 	MMOOO	s   B	B? ?,C+c                   d | _         d | _        	 t          |d          | _         d S # t          $ r}t	          j        t          j        |          j                  | _        t          j	        |t          j
        t          j        z  t          j        z             	 t          |d          | _         n1# t          $ r$ t          j	        || j                   d | _        |w xY wY d }~d S d }~ww xY w)Nzr+b)bfbf_permsopenPermissionErrorstatS_IMODEoslstatst_modechmodS_IREADS_IWRITES_IEXEC	Exception)r/   r\   es      r1   rc   zElf.open_bf   s    
	5%((DGGG 	 	 	 L%)@AADMHUDL4=84<GHHHue,,   ... $ 		s-   ' 
C-A)C(B10C(1.CC((C-c                    | j         a| j        8t          j        | j                                         | j                   d | _        | j                                          d | _         d S d S r`   )rl   rm   rr   ru   filenocloser/   s    r1   rj   zElf.close_bf   s[    7}())4=999 $GMMOOODGGG r3   'Elf'c                    | S r`   r7   r~   s    r1   	__enter__zElf.__enter__   s    r3   c                .    |                                   d S r`   rj   r~   s    r1   __del__zElf.__del__       r3   exc_typeT.Any	exc_value	tracebackc                .    |                                   d S r`   r   )r/   r   r   r   s       r1   __exit__zElf.__exit__   r   r3   T.Tuple[int, bool]c                   | j                             d          }|dd         dk    r3| j        rt          d| j        d           t          j        d           |d         dk    rd}n,|d         d	k    rd
}nt          j        d| j        d           |d         dk    rd}n,|d         d	k    rd}nt          j        d| j        d           ||fS )N   r	   r   s   ELFFile z is not an ELF file.r       r   r   z has unknown ELF class.r   TFz has unknown ELF endianness.)rl   rA   r^   printr\   sysexit)r/   datar   r   s       r1   rd   zElf.detect_elf_type   s    w||A!9 | B@dj@@@AAAHQKKK7a<<GG!W\\GGHBTZBBBCCC7a<<EE!W\\EEHGTZGGGHHH~r3   c                ^   | j                             d           t          j        d| j                             d                    d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _	        t          j        | j
        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j
        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        t          j        | j        | j                             | j                            d         | _        d S )Nr   16s   )rl   seekr?   r@   rA   e_identr!   r"   e_type	e_machiner#   r$   	e_versionr'   r(   e_entryr)   r*   e_phoffe_shoffe_flagse_ehsizee_phentsizee_phnume_shentsizee_shnum
e_shstrndxr~   s    r1   re   zElf.parse_header   sd   Q}UDGLL,<,<==a@mDItw||DM/J/JKKANty$',,t}2M2MNNqQty$',,t}2M2MNNqQ}TYT]0K0KLLQO}TXtw||DL/I/IJJ1M}TXtw||DL/I/IJJ1M}TYT]0K0KLLQOdidm1L1LMMaP!=DGLL4O4OPPQRS}TYT]0K0KLLQO!=DGLL4O4OPPQRS}TYT]0K0KLLQO -	47<<3N3NOOPQRr3   c                    | j                             | j                   t          | j                  D ]:}| j                            t          | j         | j        | j	                             ;d S r`   )
rl   r   r   ranger   ra   appendrM   r   r   )r/   _s     r1   rf   zElf.parse_sections   sj    T\"""t|$$ 	S 	SAM  twdj!Q!QRRRR	S 	Sr3   bytesc                   g }| j                             d          }|dk    rJ|                    |           | j                             d          }|dk    rt          d          |dk    Jd                    |          S )Nr	       r3   z&Tried to read past the end of the file)rl   rA   r   ri   join)r/   arrxs      r1   read_strzElf.read_str   sv    GLLOO5jjJJqMMMQACxx"#KLLL	 5jj
 xx}}r3   target_nameT.Optional[SectionHeader]c                    | j         | j                 }| j         D ]G}| j                            |j        |j        z              |                                 }||k    r|c S Hd S r`   )ra   r   rl   r   rS   rO   r   )r/   r   section_namesr   names        r1   find_sectionzElf.find_section   sj    do6 	 	AGLL019<=====??D{"" #tr3   c                   |                      d          }|d S | j                            |j                   	 t	          | j        | j        | j                  }| j                            |           |j	        dk    rd S H)N   .dynamicTr   )
r   rl   r   rS   r9   r   r   rb   r   rB   )r/   secrz   s      r1   rg   zElf.parse_dynamic   s|    ,,;FS]###	TWdlDJ??AL"""w!||		r3   T.Generator[str, None, None]c              #     K   | j         | j                 }| j         D ]Q}| j                            |j        |j        z              |                                                                 V  Rd S r`   )ra   r   rl   r   rS   rO   r   decode)r/   r   r   s      r1   get_section_nameszElf.get_section_names   sp      do6 	+ 	+AGLL019<===--//((******	+ 	+r3   T.Optional[str]c                   d }d }| j         D ]&}|j        t          k    r|}|j        t          k    r|}'||d S | j                            |j        |j        z              |                                                                 S r`   )	rb   rB   	DT_SONAME	DT_STRTABrl   r   rC   r   r   )r/   sonamestrtabr   s       r1   
get_sonamezElf.get_soname   s     	 	Aw)##w)##>V^4VZ&*,---}}%%'''r3   entrynumr   T.Optional[int]c                    |                      d          }| j        D ]7}|j        |k    r*|j        |j        z   }t          |t                    sJ |c S 8d S N   .dynstr)r   rb   rB   rS   rC   
isinstancer   )r/   r   r   r   ress        r1   get_entry_offsetzElf.get_entry_offset   sl    
++ 	 	Aw(""mae+!#s+++++


 # tr3   c                    |                      t                    }|d S | j                            |           |                                                                 S r`   )r   DT_RPATHrl   r   r   r   r/   offsets     r1   	get_rpathzElf.get_rpath  sM    &&x00>4V}}%%'''r3   c                    |                      t                    }|d S | j                            |           |                                                                 S r`   )r   
DT_RUNPATHrl   r   r   r   r   s     r1   get_runpathzElf.get_runpath  sM    &&z22>4V}}%%'''r3   c              #  
  K   |                      d          }| j        D ]c}|j        t          k    rQ|j        |j        z   }| j                            |           |                                 	                                V  dd S r   )
r   rb   rB   	DT_NEEDEDrS   rC   rl   r   r   r   )r/   r   r   r   s       r1   get_depszElf.get_deps  s      
++ 	/ 	/Aw)##.V$$$mmoo,,.....		/ 	/r3   prefixc                t   |                      d          }g }| j        D ]'}|j        t          k    r|                    |           (|D ]}|j        |j        z   }| j                            |           | 	                                }|
                    |          r|                    dd          d         }dt          |          t          |          z
  z  }||z   }	t          |	          t          |          k    sJ | j                            |           | j                            |	           d S )Nr      /r	   )maxsplitr   )r   rb   rB   r   r   rS   rC   rl   r   r   
startswithrsplitlenrG   )
r/   r   r   depsr   r   r   basenamepaddingnewnames
             r1   fix_depszElf.fix_deps  s)   
++ 	 	Aw)##A 
	' 
	'A]QU*FGLL   ==??Dv&& ';;ta;88<3t99s8}}#<="W,7||s4yy0000V$$$g&&&
	' 
	'r3   fnamerpath_dirs_to_removeT.Set[bytes]	new_rpathc                z    |                      |||t                     |                      |||t                     d S r`   )fix_rpathtype_entryr   r   )r/   r   r   r   s       r1   	fix_rpathzElf.fix_rpath1  s@     	  (<iRRR  (<iTTTTTr3   c                   |                      |          }|| j        rt          d|d           d S | j                            |           |                                 }t                      }|r(|                    |                    d                     |rI|                    d          D ]3}||v s-|dt          |          z  k    s|r|
                    |           4d                    |          }t          |          t          |          k     rPd                    |                    d          |                    d                    }	t          j        |	           |s|                     |           d S | j                            |           | j                            |           | j                            d           d S )Nr   z@ does not have an rpath. It should be a fully static executable.   :   Xz@New rpath must not be longer than the old one.
 Old: {}
 New: {}utf-8r   )r   r^   r   rl   r   r   r   updatesplitr   addr   formatr   r   r   remove_rpath_entryrG   )
r/   r   r   r   r   rp_off	old_rpath
new_rpaths	rpath_dirmsgs
             r1   r   zElf.fix_rpathtype_entry7  s   &&x00>| igeggghhhFVMMOO	 )3
 	5iood33444 	2 '__T22 2 2	!%999!dS^^&;<<  2"y111 IIj))	y>>C	NN**V]]^g^n^nov^w^w  zC  zJ  zJ  KR  zS  zS  T  TCHSMMM  	!##H-----GLL   GMM)$$$GMM%     r3   c                   |                      d          }|d S t          | j                  D ]Q\  }}|j        |k    rA| j        |         }d|_        | j        d |         | j        |dz   d          z   |gz   | _         nR| j        |d          D ]/}|j        t          k    r|xj        d| j        dz  z  z  c_         n0| j                            |j	                   | j        D ]}|
                    | j                   d S )Nr   r   r	   r   r   )r   	enumeraterb   rB   DT_MIPS_RLD_MAP_RELrC   r   rl   r   rS   rG   )r/   r   r   r   entryrpentrys         r1   r   zElf.remove_rpath_entryd  s'   ,,;4#DL11 	 	JQ{h&&,q/ !#|BQB/$,q1uvv2FF'R	 ' \!""% 	 	E{111		Q$,!"344		 2 	S]###\ 	! 	!EKK    tr3   T)r\   r]   r^   r   r   r   )r\   r]   r   r   )r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   )r   r   )r   r   r   r   )r   r   )r   r   )r   r   r   r   )r   r   r   r   )r   r]   r   r   r   r   r   r   )
r   r]   r   r   r   r   r   r   r   r   )r   r   r   r   )r4   r5   r6   r2   rc   rj   r   r   r   rd   re   rf   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   rJ   rK   s   @r1   r[   r[   p   s                                ,S S S S"S S S S
      	 	 	 	 + + + ]+( ( ( (   ( ( ( (( ( ( ( / / / ]/' ' ' '$U U U U+! +! +! +!Z       r3   r[   Tr   r]   r   r   r   T.Optional[bytes]r^   r   r   r   c                    |Bt          | |          5 }|                    | ||           d d d            d S # 1 swxY w Y   d S d S r`   )r[   r   )r   r   r   r^   rz   s        r1   fix_elfr  x  s       	@AKK3Y???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ s   8<<OrderedSet[str]c                &   t          dd| gt          j                  \  }}}|j        dk    r t          j        |j        |j        |          t                      }d}|                    d          D ]}|                                }d|vr|                                                    dd          \  }}|d	k    r|}|d
k    rI|dk    rC|                    dd          d                                         }	|	                    |	           |S )Notoolz-l)stderrr   FOOBAR
 r	   cmdpathLC_RPATH()
r   
subprocessDEVNULL
returncodeCalledProcessErrorargsr   r   stripr   )
r   r0   outr   resultcurrent_cmdlinekeyvaluerps
             r1   get_darwin_rpathsr  ~  s   GT51*:LMMMIAsA|q+AL!&#FFF )llFK		$ 	 	zz||d??ZZ\\''Q//
U%<<K&==[J66S!$$Q'--//BJJrNNNMr3   
final_pathinstall_name_mappingsT.Dict[str, str]c                   	 t          |           }n# t          j        $ r Y d S w xY wt                      }|r(|                    |                    d                     d |D             }|D ]}|r||vr|                    |           	 g }	|D ]}
|
|vr|	d|
gz  }	|D ]}
|
|vr|	d|
gz  }	|                     d          r|	d|gz  }	|r"|                                D ]\  }}|	d||gz  }	|	r2t          j	        d| g|	z   t          j
        t          j
        	           d S d S # t          $ r}t          |          d }~ww xY w)
N:c                8    g | ]}|                     d           S )utf8)r   ).0r   s     r1   
<listcomp>zfix_darwin.<locals>.<listcomp>  s$    DDD!QXXf%%DDDr3   z
-add_rpathz-delete_rpathdylibz-idz-changeinstall_name_tool)stdoutr  )r  r  r  r   r   r   r   endswithitems
check_callr  ry   
SystemExit)r   r   r   r  r  
old_rpathsr   remove_rpathsr   r  r  oldnewerrs                 r1   
fix_darwinr2    s   &u--

(    	 #-,,J 0)//#../// ED/CDDDM & &	 	&-77NN9%%%  	- 	-D:%%t,, 	0 	0D:%%$//>>'"" 	(UJ''D  	.17799 . .SC-- 	=!#6">"E)3);)3);= = = = = =	= 	=    oos%    %%BD% %
E/D>>Ec                   t          j        dd| dg           t          ddd          5 }|                                }|                    d           |D ],}|                    d          s|                    |           -|                                 d d d            n# 1 swxY w Y   t          j        dd	| dg           d S )
NjarxfzMETA-INF/MANIFEST.MFzr+r   )encodingr   zClass-Path:ufM)r  r+  rn   	readlinesr   r   rG   truncate)r   flinesr  s       r1   fix_jarr<    s   5$/EFGGG	$dW	=	=	= 	q			 	 	D??=11 	

               5%0FGHHHHHs   A-B$$B(+B(T.Union[str, bytes]c                Z   |                      d          rd S 	 |                      d          rt          |            d S t          |t                    r|                    d          }t          | |||           d S # t          $ r1}t          |j        t                    r|j        dk    rn Y d }~nd }~ww xY wt          du r!t          t          j        d                    a	t          r?t          |t                    r|                    d          }t          | ||||           d S d S )N)z.az.libz.pdbz.hz.hppz.dllz.exez.jarr#  r   Fr'  )r)  r<  r   r]   encoder  r,  coder   INSTALL_NAME_TOOLr   shutilwhichr   r   r2  )r   r   r   r  r  r^   rz   s          r1   r   r     sT   
 ~~JKK >>&!! 	ENNNFi%% 	1!((00I+Y@@@   afc"" 	qv{{ DDDD E!! .A!B!BCC ^i'' 	1!((00I5.	:G\]]]]]^ ^s   $A= <A= =
B8'B33B8r   )
r   r]   r   r   r   r  r^   r   r   r   )r   r]   r   r  )r   r]   r   r   r   r]   r  r]   r  r  r   r   )r   r]   r   r   )r   r]   r   r   r   r=  r  r]   r  r  r^   r   r   r   )
__future__r   r   rr   rp   r?   rB  r  typingTmesonlibr   r   r   
SHT_STRTABr   r   r   r   r   r   rA  r   r9   rM   r[   r  r  r2  r<  r   r7   r3   r1   <module>rI     s   # " " " " " 


 				            < < < < < < < < < <
	
		           6: : : : :9 : : :&$U $U $U $U $UI $U $U $ULF F F F F) F F FP@ @ @ @ @   *% % % %NI I I I ^ ^ ^ ^ ^ ^ ^r3   