
    <h5K                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKr	SSK
JrJrJr  SrSrSrSrS	rS
rSrSq " S S5      r " S S\5      r " S S\5      r " S S\5      rSSS jjrSS jrSS jrSS jrSSS jjrg)     )annotationsN   )
OrderedSetgenerate_list
Popen_safe                  i5  pFc                      \ rS rSrSS jrSrg)	DataSizes   c                \   U(       a  SnOSnUS-   U l         SU l        US-   U l        SU l        US-   U l        SU l        US:X  aE  US	-   U l        S
U l        US	-   U l        S
U l	        US	-   U l
        S
U l        US-   U l        S
U l        g US-   U l        SU l        US-   U l        SU l	        g )N<>hr   I   i@   Q   q)HalfHalfSizeWordWordSizeSword	SwordSizeAddrAddrSizeOffOffSizeXWord	XWordSizeSxword
SxwordSize)selfptrsizeis_leps       |/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/scripts/depfixer.py__init__DataSizes.__init__   s    AAG	G	W
b=CDIDM3wDHDLSDJDNc'DKDOCDIDM3wDHDL    )r"   r#   r   r   r$   r%   r    r!   r(   r)   r   r   r&   r'   N)r+   intr,   boolreturnNone)__name__
__module____qualname____firstlineno__r/   __static_attributes__ r1   r.   r   r      s    r1   r   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )DynamicEntry7   c                N  > [         TU ]  X#5        X l        US:X  a  [        R                  " U R
                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        g [        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        g Nr   r   )superr/   r+   structunpackr(   readr)   d_tagr&   r'   valr    r!   r   r   )r*   ifiler+   r,   	__class__s       r.   r/   DynamicEntry.__init__8   s    (b=t{{EJJt4OPQRSDJ}}TZZDNN1KLQODHtzz5::dnn3MNqQDJ}}TYY

4==0IJ1MDHr1   c                   U R                   S:X  au  UR                  [        R                  " U R                  U R
                  5      5        UR                  [        R                  " U R                  U R                  5      5        g UR                  [        R                  " U R                  U R
                  5      5        UR                  [        R                  " U R                  U R                  5      5        g )Nr   )
r+   writerB   packr(   rE   r&   rF   r    r   )r*   ofiles     r.   rK   DynamicEntry.writeB   s    <<2KKDKK<=KKDJJ9:KKDJJ

;<KKDIItxx89r1   )rE   r+   rF   rG   
T.BinaryIOr+   r2   r,   r3   r4   r5   )rM   rP   r4   r5   )r6   r7   r8   r9   r/   rK   r:   __classcell__rH   s   @r.   r=   r=   7   s    N: :r1   r=   c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )SectionHeaderJ   c                  > [         TU ]  X#5        US:H  n[        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        U(       aC  [        R                  " U R                  UR                  U R                  5      5      S   U l        OB[        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                   5      5      S   U l        U(       aC  [        R                  " U R                  UR                  U R                  5      5      S   U l        OB[        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        [        R                  " U R                  UR                  U R                  5      5      S   U l        U(       aC  [        R                  " U R                  UR                  U R                  5      5      S   U l        OB[        R                  " U R                  UR                  U R                  5      5      S   U l        U(       aC  [        R                  " U R                  UR                  U R                  5      5      S   U l        g [        R                  " U R                  UR                  U R                  5      5      S   U l        g r@   )rA   r/   rB   rC   r   rD   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*   rG   r+   r,   is_64rH   s        r.   r/   SectionHeader.__init__K   s`   (2 }}TYY

4==0IJ1M}}TYY

4==0IJ1M"MM$**ejj6PQRSTDM"MM$))UZZ5NOPQRDM}}TYY

4==0IJ1MtxxDLL1IJ1M!==UZZ5OPQRSDL!==EJJt}}4MNqQDL}}TYY

4==0IJ1M}}TYY

4==0IJ1M &djj%**T^^:T UVW XD &diiDMM9R STU VD$mmDJJ

4>>8RSTUVDO$mmDIIuzz$--7PQRSTDOr1   )
rZ   r_   r`   rY   r^   r]   rW   r[   r\   rX   rO   )r6   r7   r8   r9   r/   r:   rQ   rR   s   @r.   rT   rT   J   s    #U #Ur1   rT   c                    ^  \ rS rSrSSU 4S jjjrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrS S jrS!S jrSS jr\S"S j5       rS#S jrS$S jrS#S jrS#S jr\S"S j5       rS%S jrS&S jrS'S jrS(S jrSrU =r$ ))Elfp   c                  > Xl         X l        / U l        / U l        U R	                  U5         U R                  5       u  U l        U l        [        TU ]%  U R                  U R                  5        U R                  5         U R                  5         U R                  5         g ! [        R                  [        4 a    U R!                  5         e f = fN)bfileverbosesectionsdynamicopen_bfdetect_elf_typer+   r,   rA   r/   parse_headerparse_sectionsparse_dynamicrB   errorRuntimeErrorclose_bf)r*   rh   ri   rH   s      r.   r/   Elf.__init__q   s    
/1-/U	)-)=)=)?&T\4:GT\\4::6! l+ 	MMO	s   A1B   ,Cc                   S U l         S U l         [        US5      U l         g ! [         a  n[        R
                  " [        R                  " U5      R                  5      U l        [        R                  " U[        R                  [        R                  -  [        R                  -  5         [        US5      U l          S nAg ! [         a*    [        R                  " XR                  5        S U l        Uef = fS nAff = f)Nzr+b)bfbf_permsopenPermissionErrorstatS_IMODEoslstatst_modechmodS_IREADS_IWRITES_IEXEC	Exception)r*   rh   es      r.   rl   Elf.open_bf   s    
	5%(DG 	 LL%)@)@ADMHHUDLL4==84<<GHue, . $	s'   " 
C?B C:-C4C77C::C?c                    U R                   bo  U R                  b@  [        R                  " U R                   R	                  5       U R                  5        S U l        U R                   R                  5         S U l         g g rg   )rv   rw   r|   r   filenocloser*   s    r.   rs   Elf.close_bf   sS    77}}()4==9 $GGMMODG r1   c                    U $ rg   r;   r   s    r.   	__enter__Elf.__enter__   s    r1   c                $    U R                  5         g rg   rs   r   s    r.   __del__Elf.__del__       r1   c                $    U R                  5         g rg   r   )r*   exc_type	exc_value	tracebacks       r.   __exit__Elf.__exit__   r   r1   c                   U R                   R                  S5      nUSS S:w  aA  U R                  (       a  [        SU R                  < S35        [
        R                  " S5        US   S:X  a  SnO1US   S	:X  a  S
nO%[
        R                  " SU R                  < S35        US   S:X  a  SnWU4$ US   S	:X  a  SnWU4$ [
        R                  " SU R                  < S35        WW4$ )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.)rv   rD   ri   printrh   sysexit)r*   datar+   r,   s       r.   rm   Elf.detect_elf_type   s    ww||A!9 ||djj^+?@AHHQK7a<G!W\GHHuTZZN*ABC7a<E
 ~	 !W\E ~ HHuTZZN*FGH~r1   c                b   U R                   R                  S5        [        R                  " SU R                   R	                  S5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l	        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                   U R                   R	                  U R"                  5      5      S   U l        [        R                  " U R                   U R                   R	                  U R"                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        [        R                  " U R                  U R                   R	                  U R                  5      5      S   U l        g )Nr   16s   )rv   seekrB   rC   rD   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    r.   rn   Elf.parse_header   sv   Q}}UDGGLL,<=a@mmDIItww||DMM/JKANtyy$'',,t}}2MNqQtyy$'',,t}}2MNqQ}}TYYT]]0KLQO}}TXXtww||DLL/IJ1M}}TXXtww||DLL/IJ1M}}TYYT]]0KLQOdiidmm1LMaP!==DGGLL4OPQRS}}TYYT]]0KLQO!==DGGLL4OPQRS}}TYYT]]0KLQO --		477<<3NOPQRr1   c                   U R                   R                  U R                  5        [        U R                  5       HG  nU R
                  R                  [        U R                   U R                  U R                  5      5        MI     g rg   )
rv   r   r   ranger   rj   appendrT   r+   r,   )r*   _s     r.   ro   Elf.parse_sections   sP    T\\"t||$AMM  twwdjj!QR %r1   c                    / nU R                   R                  S5      nUS:w  aE  UR                  U5        U R                   R                  S5      nUS:X  a  [        S5      eUS:w  a  ME  SR	                  U5      $ )Nr	       r1   z&Tried to read past the end of the file)rv   rD   r   rr   join)r*   arrxs      r.   read_strElf.read_str   sg    GGLLO5jJJqMQACx"#KLL	 5j
 xx}r1   c                    U R                   U R                     nU R                    HN  nU R                  R                  UR                  UR
                  -   5        U R                  5       nXA:X  d  ML  Us  $    g rg   )rj   r   rv   r   r[   rW   r   )r*   target_namesection_namesr   names        r.   find_sectionElf.find_section   s\    doo6AGGLL00199<===?D"	 
 r1   c                *   U R                  S5      nUc  g U R                  R                  UR                  5         [	        U R                  U R
                  U R                  5      nU R                  R                  U5        UR                  S:X  a  g MY  )N   .dynamicr   )
r   rv   r   r[   r=   r+   r,   rk   r   rE   )r*   secr   s      r.   rp   Elf.parse_dynamic   sp    ,;S]]#TWWdllDJJ?ALL"ww!|	 r1   c              #    #    U R                   U R                     nU R                    HU  nU R                  R                  UR                  UR
                  -   5        U R                  5       R                  5       v   MW     g 7frg   )rj   r   rv   r   r[   rW   r   decode)r*   r   r   s      r.   get_section_namesElf.get_section_names   sY     doo6AGGLL00199<=--/((** s   B Bc                :   S nS nU R                    H1  nUR                  [        :X  a  UnUR                  [        :X  d  M/  UnM3     Ub  Uc  g U R                  R                  UR                  UR                  -   5        U R                  5       R                  5       $ rg   )	rk   rE   	DT_SONAME	DT_STRTABrv   r   rF   r   r   )r*   sonamestrtabr   s       r.   
get_sonameElf.get_soname   s|    Aww)#ww)#	 
 >V^VZZ&**,-}}%%''r1   c                    U R                  S5      nU R                   HG  nUR                  U:X  d  M  UR                  UR                  -   n[        U[        5      (       d   eUs  $    g N   .dynstr)r   rk   rE   r[   rF   
isinstancer2   )r*   entrynumr   r   ress        r.   get_entry_offsetElf.get_entry_offset   s[    
+Aww("mmaee+!#s++++
	 
 r1   c                    U R                  [        5      nUc  g U R                  R                  U5        U R	                  5       R                  5       $ rg   )r   DT_RPATHrv   r   r   r   r*   offsets     r.   	get_rpathElf.get_rpath  s?    &&x0>V}}%%''r1   c                    U R                  [        5      nUc  g U R                  R                  U5        U R	                  5       R                  5       $ rg   )r   
DT_RUNPATHrv   r   r   r   r   s     r.   get_runpathElf.get_runpath  s?    &&z2>V}}%%''r1   c              #  (  #    U R                  S5      nU R                   Hm  nUR                  [        :X  d  M  UR                  UR
                  -   nU R                  R                  U5        U R                  5       R                  5       v   Mo     g 7fr   )
r   rk   rE   	DT_NEEDEDr[   rF   rv   r   r   r   )r*   r   r   r   s       r.   get_depsElf.get_deps  sf     
+Aww)#.V$mmo,,..	 s   3BABc                j   U R                  S5      n/ nU R                   H*  nUR                  [        :X  d  M  UR	                  U5        M,     U H  nUR
                  UR                  -   nU R                  R                  U5        U R                  5       nUR                  U5      (       d  M_  UR                  SSS9S   nS[        U5      [        U5      -
  -  nXx-   n	[        U	5      [        U5      :X  d   eU R                  R                  U5        U R                  R                  U	5        M     g )Nr      /r	   )maxsplitr   )r   rk   rE   r   r   r[   rF   rv   r   r   
startswithrsplitlenrK   )
r*   prefixr   depsr   r   r   basenamepaddingnewnames
             r.   fix_depsElf.fix_deps  s    
+Aww)#A  A]]QUU*FGGLL ==?Dv&&;;ta;8<3t9s8}#<=",7|s4y000V$g& r1   c                `    U R                  XU[        5        U R                  XU[        5        g rg   )fix_rpathtype_entryr   r   )r*   fnamerpath_dirs_to_remove	new_rpaths       r.   	fix_rpathElf.fix_rpath1  s(     	  iR  iTr1   c                   U R                  U5      nUc"  U R                  (       a  [        SU< S35        g U R                  R	                  U5        U R                  5       n[        5       nU(       a   UR                  UR                  S5      5        U(       aM  UR                  S5       H8  nX;   a  M
  US[        U5      -  :X  a  M  U(       d  M'  UR                  U5        M:     SR                  U5      n[        U5      [        U5      :  aF  SR                  UR                  S5      UR                  S5      5      n	[        R                  " U	5        U(       d  U R!                  U5        g U R                  R	                  U5        U R                  R#                  U5        U R                  R#                  S5        g )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   ri   r   rv   r   r   r   updatesplitr   addr   formatr   r   r   remove_rpath_entryrK   )
r*   r   r   r   r   rp_off	old_rpath
new_rpaths	rpath_dirmsgs
             r.   r   Elf.fix_rpathtype_entry7  sb   &&x0>||eY&fghVMMO	 )3
iood34 '__T2	!9!dS^&;< y"y1	 3 IIj)	y>C	N*V]]^g^n^nov^w  zC  zJ  zJ  KR  zS  TCHHSM ##H-GGLL GGMM)$GGMM% r1   c                X   U R                  S5      nUc  g [        U R                  5       HX  u  p4UR                  U:X  d  M  U R                  U   nSUl        U R                  S U U R                  US-   S  -   U/-   U l          O   U R                  WS   H>  nUR                  [        :X  d  M  U=R
                  SU R                  S-  -  -  sl          O   U R                  R                  UR                  5        U R                   H  nUR                  U R                  5        M      g )Nr   r   r	   r   r   )r   	enumeraterk   rE   DT_MIPS_RLD_MAP_RELrF   r+   rv   r   r[   rK   )r*   r   r   r   entryrpentrys         r.   r	  Elf.remove_rpath_entryd  s    ,;#DLL1JQ{{h&,,q/ !#||BQ/$,,q1uv2FF'R 2 \\!"%E{{11		Q$,,!"344	 & 	S]]#\\EKK  "r1   )rv   rw   rh   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r+   rj   ri   T)rh   strri   r3   r4   r5   )rh   r  r4   r5   )r4   r5   )r4   z'Elf')r   T.Anyr   r  r   r  r4   r5   )r4   zT.Tuple[int, bool])r4   bytes)r   r  r4   zT.Optional[SectionHeader])r4   zT.Generator[str, None, None])r4   zT.Optional[str])r   r2   r4   zT.Optional[int])r   r  r4   r5   )r   r  r   T.Set[bytes]r   r  r4   r5   )
r   r  r   r  r   r  r   r2   r4   r5   )r   r2   r4   r5   )r6   r7   r8   r9   r/   rl   rs   r   r   r   rm   rn   ro   r   r   rp   r   r   r   r   r   r   r   r   r   r   r	  r:   rQ   rR   s   @r.   rd   rd   p   s      ,S"S
	 + +((( / /'$U+!Z r1   rd   c                z    Ub'  [        X5       nUR                  XU5        S S S 5        g g ! , (       d  f       g = frg   )rd   r   )r   r   r   ri   r   s        r.   fix_elfr  x  s4     AKKY? !    s   ,
:c                   [        SSU /[        R                  S9u  pnUR                  S:w  a,  [        R                  " UR                  UR
                  U5      e[        5       nSnUR                  S5       H  nUR                  5       nSU;  a  M  UR                  5       R                  SS5      u  pxUS	:X  a  UnUS
:X  d  MM  US:X  d  MU  UR                  SS5      S   R                  5       n	UR                  U	5        M     U$ )Notoolz-l)stderrr   FOOBAR
 r	   cmdpathLC_RPATH()
r   
subprocessDEVNULL
returncodeCalledProcessErrorargsr   r  stripr  )
r   r-   outr   resultcurrent_cmdlinekeyvaluerps
             r.   get_darwin_rpathsr4  ~  s    GT51*:L:LMIAA||q++ALL!&&#FF )lFK		$zz|d?ZZ\''Q/
%<K&=[J6S!$Q'--/BJJrN   Mr1   c                    [        U 5      n[        5       nU(       a   UR	                  UR                  S5      5        U Vs/ s H  owR                  S5      PM     nnU H$  n	U	(       d  M  X;  d  M  UR                  U	5        M&      / n
U H  nX;  d  M
  U
SU/-  n
M     U H  nX;  d  M
  U
SU/-  n
M     U R                  S5      (       a  U
SU/-  n
U(       a   UR                  5        H  u  pU
SX/-  n
M     U
(       a8  [        R                  " SU /U
-   [        R                  [        R                  S	9  g g ! [        R                   a     g f = fs  snf ! [         a  n[        U5      eS nAff = f)
N:utf8z
-add_rpathz-delete_rpathdylibz-idz-changeinstall_name_tool)stdoutr  )r4  r'  r*  r   r  r  r   r  endswithitems
check_callr(  r   
SystemExit)r   r   r   
final_pathinstall_name_mappings
old_rpathsr  r   remove_rpathsr  r+  r$  oldnewerrs                  r.   
fix_darwinrF    sy   &u-

 #-,J)//#./ 0DD/C!XXf%/CMD	97NN9%   D%t,,  D%$//  >>'""UJ''D 1779C-- :!!#6">"E)3););)3););= ; ((  	 E0  os<   D= E	
E E .BE =EE
E6&E11E6c                |   [         R                  " SSU S/5        [        SSSS9 nUR                  5       nUR	                  S5        U H,  nUR                  S5      (       a  M  UR                  U5        M.     UR                  5         S S S 5        [         R                  " SS	U S/5        g ! , (       d  f       N)= f)
NjarxfzMETA-INF/MANIFEST.MFzr+r  )encodingr   zClass-Path:ufM)r'  r=  rx   	readlinesr   r   rK   truncate)r   flinesr0  s       r.   fix_jarrP    s    5$/EFG	$dW	=	q	D??=11  	


 
> 5%0FGH 
>	=s   ;B-%%B--
B;c                :   U R                  S5      (       a  g  U R                  S5      (       a  [        U 5        g [        U[        5      (       a  UR	                  S5      n[        XX%5        g ! [         a:  n[        UR                  [        5      (       a  UR                  S:X  a   S nAO	e S nAff = f[        SL a  [        [        R                  " S5      5      q	[        (       a4  [        U[        5      (       a  UR                  S5      n[        XX#U5        g g )N)z.az.libz.pdbz.hz.hppz.dllz.exez.jarr7  r   Fr9  )r;  rP  r   r  encoder  r>  coder2   INSTALL_NAME_TOOLr3   shutilwhichr  r   rF  )r   r   r   r?  r@  ri   r   s          r.   r   r     s    
 ~~JKK>>&!!ENi%%!((0IY@ affc""qvv{	 E! .A!BCi''!((0I5	G\] s"   !A. 2A. .
B28/B-,B--B2r  )
r   r  r   r  r   zT.Optional[bytes]ri   r3   r4   r5   )r   r  r4   zOrderedSet[str])r   r  r   r  r   r  r?  r  r@  T.Dict[str, str]r4   r5   )r   r  r4   r5   )r   r  r   r  r   zT.Union[str, bytes]r?  r  r@  rW  ri   r3   r4   r5   )
__future__r   r   r|   rz   rB   rU  r'  typingTmesonlibr   r   r   
SHT_STRTABr   r   r   r   r   r  rT  r   r=   rT   rd   r  r4  rF  rP  r   r;   r1   r.   <module>r]     s    #  	      < <
	
		     6:9 :&$UI $ULF) FP@*%NI ^r1   