
    <h\2                       S SK Jr  S SKrS SKrS SKrSSKJr  SSKJr  SSKJ	r	  S SK
r
\
R                  " 5       r\R                  SSSS	S
9  \R                  SSS9  SqSrS"S jrS#S jrS$S%S 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rS,S jrS-S jr \!S :X  a&  \RD                  " \ " \RF                  S!S 5      5        gg).    )annotationsN   )mesonlib)mlog)
Popen_safez--cross-host
cross_hostzcross compilation host platform)defaultdesthelpargs+)nargsz/Relinking will always happen on source changes.c                P    [        U SSS9    SSS5        g! , (       d  f       g= f)z*Just touch it so relinking happens always.wutf-8encodingN)open)outfilenames    ڃ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/scripts/symbolextractor.py
dummy_symsr      s    	k3	1 
2	1	1s   
%c                
    [        USS9 nUR                  5       nS S S 5        U W:X  a  g  [        USSS9 nUR                  U 5        S S S 5        g ! , (       d  f       N<= f! [         a     NCf = f! , (       d  f       g = f)Nr   r   r   )r   readFileNotFoundErrorwrite)textr   foldtexts       r   write_if_changedr   "   sx    +0AffhG 17?  
k3	1Q	 
2	1 10  	1	1s2   
A$ AA$ A4
A!A$ $
A10A14
Bc                   [         R                  R                  [        5      (       a  g U < SU S[         3nU(       a  USU-   -  n[
        R                  " U5        [        [        SSS9    S S S 5        g ! , (       d  f       g = f)N z. 
r   r   r   )ospathexistsTOOL_WARNING_FILERELINKING_WARNINGr   warningr   )toolsmsgstderrms       r   print_tool_warningr-   -   si    	ww~~'(()1SE-./A	TF]LLO	w	7 
8	7	7s   -A88
Bc                    U R                  5       nU[        R                  ;   a&  SS KnUR	                  [        R                  U   5      $ U /$ )Nr   )upperr#   environshlexsplit)nameevarr1   s      r   get_toolr5   8   s;    ::<Drzz{{2::d+,,6M    c                    [        U 5      n [        X1-   40 UD6u  pEnUR
                  S:w  a  [        USU5        g U$ ! [         a    [        US5         g [         a    [        US5         g f = f)Nz	not foundz
not usabler   zdoes not work)r5   r   r   r-   PermissionError
returncode)r3   r   kwargstoolpoutputes          r   	call_toolr?   ?   sz    D>D!$+881 	||q4!4M  4- 4.s   > A.A.-A.c                     [        U 40 UD6u  p#nUR                  S:w  a  S U4$ US 4$ ! [         a    S SR                  U S   5      4s $ [         a    S SR                  U S   5      4s $ f = f)Nz{!r} not found
r   z{!r} not usable
)r   r   formatr8   r9   )r;   r:   r<   r=   r>   s        r   call_tool_nowarnrB   N   s    9!$1&11
 	||qQw4<  8'..tAw777 9(//Q8889s   )  A-A-,A-c                :   [        SSU /5      nU(       d  [        U5        g UR                  S5       Vs/ s H  nSU;   d  M  UPM     nn[        U5      S::  d   e[        SSSS	S
U /5      nU(       d  [        U5        g UR                  S5       Hd  nU(       d  M  UR                  5       nUSS nUS   R	                  5       S;   a  [        U5      S:  a  XvS   /-  nUSR                  U5      /-  nMf     [        SR                  U5      S-   U5        g s  snf )Nreadelf-dr"   SONAME   nm	--dynamic--extern-only--defined-only--format=posixr   r   >   BDG      r!   )r?   r   r2   lenr/   joinr   )libfilenamer   r=   xresultline
line_splitentrys           r   gnu_symsrZ   Y   s   y4"56F;d+=+Ax1}a+F=v;!tk?<L.= >F;T"ZZ\
1Q a= O3J18Lm_$E388E?## # TYYv&-{;' >s   
DDc                    [         R                  S   n SU-   [         R                  S'   [        X5        U[         R                  S'   g ! U[         R                  S'   f = f)NPATHz/usr/gnu/bin:)r#   r0   rZ   )rT   r   origpaths      r   solaris_symsr^   t   sM    zz&!H&,x7

6*%

6X

6s   !A
 
Ac           	        [        SSU /5      nU(       d  [        U5        g UR                  S5      n[        U5       H  u  pESU;   d  M  Un  O   UWS-      X6S-      /n[        SSS	S
U /5      nU(       d  [        U5        g XrR                  S5       Vs/ s H%  nSR	                  UR                  5       SS 5      PM'     sn-  n[        SR	                  U5      S-   U5        g s  snf )Notoolz-lr"   LC_ID_DYLIBr      rH   -gz-U-Pr!   r   )r?   r   r2   	enumeraterS   r   )	rT   r   r=   arrivalmatchrV   rU   s	            r   osx_symsrj   }   s    w{ 34F;
,,t
CcNCE # %!)nc!)n-F tdD$<=F;
d1CD1CAsxx	!A'1CDDFTYYv&-{; Es   ,C&c           	        [        SSU /5      nU(       d  [        U5        g UR                  S5       Vs/ s H  nSU;   d  M  UPM     nn[        U5      S::  d   e[        SSSS	U /5      nU(       d  [        U5        g XBR                  S5       Vs/ s HE  o3(       d  M  UR	                  S
5      (       a  M#  SR                  UR                  5       SS 5      PMG     sn-  n[        SR                  U5      S-   U5        g s  snf s  snf )NrD   rE   r"   rF   rG   rH   z-Drd   rc   zU r!   r   r   )r?   r   r2   rR   endswithrS   r   rT   r   r=   rU   rV   s        r   openbsd_symsrn      s    y4"56F;d+=+Ax1}a+F=v;!tdD$<=F;
d1Cb1CAq'QRQ[Q[\`Qa'sxx	!A'1CbbFTYYv&-{; > cs   
DD
D D8&Dc           	        [        SSU /5      nU(       d  [        U5        g UR                  S5       Vs/ s H  nSU;   d  M  UPM     nn[        U5      S::  d   e[        SSSS	S
U /5      nU(       d  [        U5        g XBR                  S5       Vs/ s H%  nSR	                  UR                  5       SS 5      PM'     sn-  n[        SR	                  U5      S-   U5        g s  snf s  snf )NrD   rE   r"   rF   rG   rH   rI   rJ   rK   rL   r!   r   r   )r?   r   r2   rR   rS   r   rm   s        r   freebsd_symsrp      s    y4"56F;d+=+Ax1}a+F=v;!tk?<L.= >F;
d1CD1CAsxx	!A'1CDDFTYYv&-{; > Es   
C#C#,C(c                P   [        SSU /5      nU(       d  [        U5        g U/n[        SSSSU /5      nU(       d  [        U5        g UR                  S5       H,  nSU;  a  M  UR                  UR                  S	S
9S   5        M.     [	        SR                  U5      S-   U5        g )Ndlltool-IrH   rJ   rK   rL   r"    T rG   maxsplitr   )r?   r   r2   appendr   rS   )impfilenamer   r=   rV   rW   s        r   cygwin_symsry      s    y4"56F;XFto/?.= >F;T"djj!j,Q/0 # TYYv&-{;r6   c                    SnS/[        S5      4 H9  n[        USSU /-   5      u  p4U(       a  UR                  S5      SS S 4s  $ X-  nM;     [        [        S	5      S
U /-   5      u  p4U(       a  U/S 4$ X-  n/ U4$ )N libllvm-libz-listz-nologor"   rr   rs   )r5   rB   r2   )rx   
all_stderrr|   r=   r>   s        r   _get_implib_dllnamer      s    J *-.$SGY+L%LM	
 <<%b,d22
 / !)!4k7J!JKIFx~OJ
r6   c                0   Sn[         R                  R                  5       nSUS'   [        [	        S5      SU /-   US9u  p4U(       a9  UR                  S5      nUR                  S5      nUR                  S	5      nXVU S 4$ X-  nS
 H  n[        [	        U5      SSSU /-   5      u  p4U(       a_  / n	UR                  S5       HB  n
SU
;  d  U
R                  S5      (       a  M!  U	R                  U
R                  SS9S   5        MD     U	S 4s  $ X-  nM     / U4$ )Nr{   1033VSLANGdumpbinz-exports)envr"   zFile Type: LIBRARYz	  Summary)llvm-nmrH   rJ   rK   rL   rt   z.textrG   ru   r   )	r#   r0   copyrB   r5   r2   index
startswithrw   )rx   r   r   r=   r>   linesstartendrH   rV   rW   s              r   _get_implib_exportsr      s&   J
**//
CCM )!4
K7P!PVYZIFT"01kk+&3%%OJ$Xb\_FV5E{5T &T U	FT*$(@(@djj!j4Q78 + 4<
   
r6   c                   [        U 5      u  p#U(       d  [        / SQSU5        [        U5        g [        U 5      u  pCU(       d  [        / SQSU5        [        U5        g X$-  n[	        SR                  U5      S-   U5        g )N)r|   r}   rr   zdo not work or were not found)r   r   rH   r"   )r   r-   r   r   r   rS   )rx   r   rV   r>   symbolss        r   windows_symsr      st    #K0IF9;Z\]^;$[1JG79XZ[\;
FTYYv&-{;r6   c                   UbB  US:X  a0  [         R                  R                  U5      (       a  [        X5        g [	        U5        g [
        R                  " 5       (       d  [
        R                  " 5       (       a  [        X5        g [
        R                  " 5       (       a  [        X5        g [
        R                  " 5       (       a  [        X5        g [
        R                  " 5       (       a  [        X5        g [
        R                  " 5       (       a  [        X5        g [
        R                   " 5       (       a<  [         R                  R                  U5      (       a  [        X5        g [	        U5        g [
        R"                  " 5       (       a<  [         R                  R                  U5      (       a  [%        X5        g [	        U5        g [
        R&                  " 5       (       a  [)        X5        g [         R                  R+                  [,        5      (       d6  [.        R0                  " S[2        -   5        [5        [,        SSS9    S S S 5        [	        U5        g ! , (       d  f       N= f)Nwindowsz>Symbol extracting has not been implemented for this platform. r   r   r   )r#   r$   isfiler   r   r   is_linuxis_hurdrZ   is_osxrj   
is_openbsdrn   
is_freebsdrp   	is_netbsd
is_windows	is_cygwinry   is_sunosr^   r%   r&   r   r(   r'   r   )rT   rx   r   r   s       r   gen_symbolsr     s    "rww~~k'B'B2{#					 0 0 2 2*			*					[.					[.					[.					77>>+&&2 {#					77>>+&&1 {#					[.ww~~/00LL &(9: ; 'w? @; @?s   I
I(c                   [         R                  U 5      n[        UR                  5      S:w  a!  [	        S5        [
        R                  " S5        [        R                  R                  UR                  S   S5      n[        R                  R                  US5      q
UR                  S   nUR                  S   nUR                  S   n[        X4XQR                  5        g)	NrP   zGsymbolextractor.py <shared library file> <import library> <output file>rG   r   zmeson-private$symbolextractor_tool_warning_printedr   rQ   )parser
parse_argsrR   r   printsysexitr#   r$   rS   r&   r   r   )r   optionsprivdirlibfileimpfileoutfiles         r   runr   7  s    %G
7<<AWXggll7<<?O<GW.TUll1oGll1oGll1oG'+=+=>r6   __main__rG   )r   strreturnNone)r   r   r   r   r   r   )N)r)   T.List[str]r*   r   r+   zT.Optional[str]r   r   )r3   r   r   r   )r3   r   r   r   r:   T.Anyr   r   )r;   r   r:   r   r   zT.Tuple[str, str])rT   r   r   r   r   r   )rx   r   r   r   r   r   )rx   r   r   zT.Tuple[T.List[str], str])
rT   r   rx   r   r   r   r   r   r   r   )r   r   r   int)$
__future__r   typingTr#   r   r{   r   r   r   argparseArgumentParserr   add_argumentr&   r'   r   r   r-   r5   r?   rB   rZ   r^   rj   rn   rp   ry   r   r   r   r   r   __name__r   argv r6   r   <module>r      s    #     ! 		 	 	"   ND|:  <   F#  & E 
			<6&<,<"<$<&04< * X zHHS!" r6   