
    -Ph\2                       d dl mZ d dlZd dlZd dlZddlmZ ddlmZ ddlm	Z	 d dl
Z
 e
j                    Ze                    dddd	
           e                    dd           dadZd5dZd6dZd7d8dZd9dZd:d Zd;d#Zd<d%Zd<d&Zd<d'Zd<d(Zd<d)Zd=d+Zd>d-Zd>d.Zd=d/Zd?d0Zd@d2Z e!d3k    r( ej"         e ej#        d4d                              dS dS )A    )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.outfilenamestrreturnNonec                ^    t          | dd          5  	 ddd           dS # 1 swxY w Y   dS )z*Just touch it so relinking happens always.wutf-8encodingN)open)r   s    b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/scripts/symbolextractor.py
dummy_symsr      s~    	k3	1	1	1                   s   "&&textc                4   	 t          |d          5 }|                                }d d d            n# 1 swxY w Y   | |k    rd S n# t          $ r Y nw xY wt          |dd          5 }|                    |            d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r   readFileNotFoundErrorwrite)r   r   foldtexts       r   write_if_changedr"   "   s1   +000 	AffhhG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	7??F    	k3	1	1	1 Q	                 s>   A 4A 8A 8	A 
AA*BBBtoolsT.List[str]msgstderrT.Optional[str]c                   t           j                            t                    rd S | d| dt           }|r|d|z   z  }t          j        |           t          t          dd          5  	 d d d            d S # 1 swxY w Y   d S )N z. 
r   r   r   )ospathexistsTOOL_WARNING_FILERELINKING_WARNINGr   warningr   )r#   r%   r&   ms       r   print_tool_warningr2   -   s    	w~~'(( //S//-//A 	TF]LOOO	w	7	7	7                   s   +A::A>A>namec                    |                                  }|t          j        v r)dd l}|                    t          j        |                   S | gS )Nr   )upperr+   environshlexsplit)r3   evarr7   s      r   get_toolr:   8   sE    ::<<Drz{{2:d+,,,6M    kwargsT.Anyc                   t          |           }	 t          ||z   fi |\  }}}n=# t          $ r t          |d           Y d S t          $ r t          |d           Y d S w xY w|j        dk    rt          |d|           d S |S )Nz	not foundz
not usabler   zdoes not work)r:   r   r   r2   PermissionError
returncode)r3   r   r<   toolpoutputes          r   	call_toolrE   ?   s    D>>D!$+8888611   4---tt   4...tt 	|q4!444tMs   & A A A rA   T.Tuple[str, str]c                    	 t          | fi |\  }}}nU# t          $ r  d d                    | d                   fcY S t          $ r  d d                    | d                   fcY S w xY w|j        dk    rd |fS |d fS )Nz{!r} not found
r   z{!r} not usable
)r   r   formatr?   r@   )rA   r<   rB   rC   rD   s        r   call_tool_nowarnrI   N   s    9!$11&11611 8 8 8'..tAw777777 9 9 9(//Q8888889|qQw4<s    'A&&A&%A&libfilenamec                n   t          dd| g          }|st          |           d S d |                    d          D             }t          |          dk    sJ t          dddd	d
| g          }|st          |           d S |                    d          D ]w}|s|                                }|dd         }|d                                         dv rt          |          dk    r||d         gz  }|d                    |          gz  }xt          d                    |          dz   |           d S )Nreadelf-dc                    g | ]}d |v |	S SONAME .0xs     r   
<listcomp>zgnu_syms.<locals>.<listcomp>_       ===Ax1}}a}}}r;   r*      nm	--dynamic--extern-only--defined-only--format=posixr   r   >   BDG      r)   )rE   r   r8   lenr5   joinr"   )rJ   r   rC   resultline
line_splitentrys          r   gnu_symsrh   Y   sa   y4"566F ;==d++===Fv;;!tk?<L.= > >F ;T"" 
$ 
$ 	ZZ\\
1Q3 a=  O33J18L8Ljm_$E388E??##TYYv&&-{;;;;;r;   c                    t           j        d         }	 d|z   t           j        d<   t          | |           |t           j        d<   d S # |t           j        d<   w xY w)NPATHz/usr/gnu/bin:)r+   r6   rh   )rJ   r   origpaths      r   solaris_symsrl   t   s^    z&!H&,x7
6k***%
6X
6%%%%s   "A Ac                   t          dd| g          }|st          |           d S |                    d          }t          |          D ]\  }}d|v r|} n||dz            ||dz            g}t          ddd	d
| g          }|st          |           d S |d |                    d          D             z  }t	          d                    |          dz   |           d S )Notoolz-lr*   LC_ID_DYLIBr      rX   -gz-U-Pc                l    g | ]1}d                      |                                dd                   2S r)   r   r   rc   r8   rR   s     r   rU   zosx_syms.<locals>.<listcomp>   4    DDDAsxx		!A#''DDDr;   )rE   r   r8   	enumerater"   rc   )rJ   r   rC   arrivalmatchrd   s           r   osx_symsr|   }   s   w{ 344F ;
,,t

CcNN  CCEE   %!)nc%!)n-F tdD$<==F ;
DDd1C1CDDDDFTYYv&&-{;;;;;r;   c                   t          dd| g          }|st          |           d S d |                    d          D             }t          |          dk    sJ t          dddd	| g          }|st          |           d S |d
 |                    d          D             z  }t	          d                    |          dz   |           d S )NrL   rM   c                    g | ]}d |v |	S rO   rQ   rR   s     r   rU   z openbsd_syms.<locals>.<listcomp>   rV   r;   r*   rW   rX   z-Drr   rq   c                    g | ]H}||                     d           d                    |                                dd                   IS )zU r)   r   r   )endswithrc   r8   rR   s     r   rU   z openbsd_syms.<locals>.<listcomp>   sN    bbbAqbQRQ[Q[\`QaQabsxx		!A#''bbbr;   rE   r   r8   rb   r"   rc   rJ   r   rC   rd   s       r   openbsd_symsr      s    y4"566F ;==d++===Fv;;!tdD$<==F ;
bbd1C1CbbbbFTYYv&&-{;;;;;r;   c                   t          dd| g          }|st          |           d S d |                    d          D             }t          |          dk    sJ t          dddd	d
| g          }|st          |           d S |d |                    d          D             z  }t	          d                    |          dz   |           d S )NrL   rM   c                    g | ]}d |v |	S rO   rQ   rR   s     r   rU   z freebsd_syms.<locals>.<listcomp>   rV   r;   r*   rW   rX   rY   rZ   r[   r\   c                l    g | ]1}d                      |                                dd                   2S rt   ru   rR   s     r   rU   z freebsd_syms.<locals>.<listcomp>   rv   r;   r   r   s       r   freebsd_symsr      s    y4"566F ;==d++===Fv;;!tk?<L.= > >F ;
DDd1C1CDDDDFTYYv&&-{;;;;;r;   impfilenamec                   t          dd| g          }|st          |           d S |g}t          dddd| g          }|st          |           d S |                    d          D ]6}d|vr|                    |                    d	
          d                    7t	          d                    |          dz   |           d S )Ndlltool-IrX   rZ   r[   r\   r*    T rW   maxsplitr   )rE   r   r8   appendr"   rc   )r   r   rC   rd   re   s        r   cygwin_symsr      s    y4"566F ;XFto/?.= > >F ;T"" 1 1djj!j,,Q/0000TYYv&&-{;;;;;r;   T.Tuple[T.List[str], str]c                   d}dgt          d          fD ]B}t          |dd| gz             \  }}|r!|                    d          dd         d fc S ||z  }Ct          t          d	          d
| gz             \  }}|r|gd fS ||z  }g |fS )N libllvm-libz-listz-nologor*   r   r   )r:   rI   r8   )r   
all_stderrr   rC   rD   s        r   _get_implib_dllnamer      s    J *--.  $SGY+L%LMM	 	3
 <<%%be,d2222a

 )!4!4k7J!JKKIFA x~!OJ
r;   c                z   d}t           j                                        }d|d<   t          t	          d          d| gz   |          \  }}|rK|                    d          }|                    d          }|                    d	          }|||         d fS ||z  }d
D ]}t          t	          |          ddd| gz             \  }}|rig }	|                    d          D ]K}
d|
vs|
                    d          r|	                    |
                    d          d                    L|	d fc S ||z  }g |fS )Nr   1033VSLANGdumpbinz-exports)envr*   zFile Type: LIBRARYz	  Summary)llvm-nmrX   rZ   r[   r\   r   z.textrW   r   r   )	r+   r6   copyrI   r:   r8   index
startswithr   )r   r   r   rC   rD   linesstartendrX   rd   re   s              r   _get_implib_exportsr      sz   J
*//

CCM )!4!4
K7P!PVYZZZIFA &T""011kk+&&U3Y%%!OJ 
 
$Xb\\_FV5E{5T &T U U	 	 FT** 9 9$$(@(@$djj!j44Q788884<a


r;   c                <   t          |           \  }}|s$t          g dd|           t          |           d S t          |           \  }}|s$t          g dd|           t          |           d S ||z  }t	          d                    |          dz   |           d S )N)r   r   r   zdo not work or were not found)r   r   rX   r*   )r   r2   r   r   r"   rc   )r   r   rd   rD   symbolss        r   windows_symsr      s    #K00IFA 999;Z\]^^^;$[11JGQ 7779XZ[\\\;
gFTYYv&&-{;;;;;r;   c                   |H|dk    r1t           j                            |          rt          ||           d S t	          |           d S t          j                    st          j                    rt          | |           d S t          j	                    rt          | |           d S t          j                    rt          | |           d S t          j                    rt          | |           d S t          j                    rt          | |           d S t          j                    rBt           j                            |          rt          ||           d S t	          |           d S t          j                    rBt           j                            |          rt%          ||           d S t	          |           d S t          j                    rt)          | |           d S t           j                            t,                    sLt/          j        dt2          z              t5          t,          dd          5  	 d d d            n# 1 swxY w Y   t	          |           d S )Nwindowsz>Symbol extracting has not been implemented for this platform. r   r   r   )r+   r,   isfiler   r   r   is_linuxis_hurdrh   is_osxr|   
is_openbsdr   
is_freebsdr   	is_netbsd
is_windows	is_cygwinr   is_sunosrl   r-   r.   r   r0   r/   r   )rJ   r   r   r   s       r   gen_symbolsr     s    ""rw~~k'B'B"k22222{#####				 !  0 2 2 ! k*****			  k*****				  [+.....				  [+.....				  [+.....				  7>>+&& 	$k22222 {#####				  7>>+&& 	$[11111 {#####				 	 [+.....w~~/00 	L &(9: ; ; ; 'w???                ;s   =IIIintc                   t                               |           }t          |j                  dk    r#t	          d           t          j        d           t          j        	                    |j        d         d          }t          j        	                    |d          a
|j        d         }|j        d         }|j        d         }t          ||||j                   dS )	Nr`   zGsymbolextractor.py <shared library file> <import library> <output file>rW   r   zmeson-private$symbolextractor_tool_warning_printedr   ra   )parser
parse_argsrb   r   printsysexitr+   r,   rc   r.   r   r   )r   optionsprivdirlibfileimpfileoutfiles         r   runr   7  s    %%G
7<AWXXXgll7<?O<<GW.TUUl1oGl1oGl1oG'7+=>>>1r;   __main__rW   )r   r   r   r   )r   r   r   r   r   r   )N)r#   r$   r%   r   r&   r'   r   r   )r3   r   r   r$   )r3   r   r   r$   r<   r=   r   r   )rA   r$   r<   r=   r   rF   )rJ   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )
rJ   r   r   r   r   r   r   r   r   r   )r   r$   r   r   )$
__future__r   typingTr+   r   r   r   r   r   argparseArgumentParserr   add_argumentr.   r/   r   r"   r2   r:   rE   rI   rh   rl   r|   r   r   r   r   r   r   r   r   __name__r   argvrQ   r;   r   <module>r      sk   # " " " " "                  ! ! ! ! ! ! 	 	 	"	"   ND|:  < < <   F#  & & & E    
	 	 	 		 	 	 	 	      	 	 	 	< < < <6& & & &< < < <,< < < <"< < < <$< < < <&   0   4< < < < *  *  *  * X    zCHSS!"" r;   