o
    "g.                     @   s  d dl Z d dlZd dlZdZdZdeejdd  ZddgZde Z	e 
d	e e jZe 
d
e e jZdd Zddde gdfddZdd ZejfddZedkre \ZZedu raejZneedZeeeg ZeeddZee\ZZeeee	e dS dS )    Na  This module generates a DEF file from the symbols in
an MSVC-compiled DLL import library.  It correctly discriminates between
data and functions.  The data is collected from the output of the program
nm(1).

Usage:
    python lib2def.py [libname.lib] [output.def]
or
    python lib2def.py [libname.lib] > output.def

libname.lib defaults to python<py_ver>.lib and output.def defaults to stdout

Author: Robert Kern <kernr@mail.ncifcrf.gov>
Last Update: April 30, 1999
z0.1az%d%d   nmz-CszrLIBRARY         python%s.dll
;CODE           PRELOAD MOVEABLE DISCARDABLE
;DATA           PRELOAD SINGLE

EXPORTS
z^(.*) in python%s\.dllz^_imp__(.*) in python%s\.dllc                  C   s0  t tjdkrYtjd dd dkr*tjd dd dkr*tjdd \} }| |fS tjd dd dkrMtjd dd dkrMtjdd \}} | |fS td td	 | |fS t tjdkrtjd dd dkrxtjd }d
t } | |fS tjd dd dkrd}tjd } | |fS d
t } d}| |fS )zBParses the command-line arguments.

libfile, deffile = parse_cmd()      Nz.libr   z.defz4I'm assuming that your first argument is the libraryzand the second is the DEF file.python%s.lib)lensysargvprintpy_ver)libfiledeffile r   Y/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/numpy/distutils/lib2def.py	parse_cmd&   s,   ,,

r   r   Tc                 C   sH   t j| |t jt jdd}| \}}|jdkr"tdd| |f |S )zUReturns the output of nm_cmd via a pipe.

nm_output = getnm(nm_cmd = 'nm -Cs py_lib')T)shellstdoutstderrtextr   zfailed to run "%s": "%s" )
subprocessPopenPIPEcommunicate
returncodeRuntimeErrorjoin)nm_cmdr   p	nm_outputnm_errr   r   r   getnm>   s   

r"   c                 C   s   t | }t| }g }|D ]#}||v r1|dd dks,|dd dks,|dd dkr1|| qg }|D ]}||vrQ|dd dksL|dd dkrQ|| q6|  |  ||fS )zReturns a tuple of lists: dlist for the list of data
symbols and flist for the list of function symbols.

dlist, flist = parse_nm(nm_output)Nr   Pyr   _Py   init)DATA_REfindallFUNC_REappendsort)r    datafuncflistsymdlistr   r   r   parse_nmJ   s   

8
(
r1   c                 C   sB   | D ]}|d|  }q|d }|D ]}|d|  }q| | dS )zoOutputs the final DEF file to a file defaulting to stdout.

output_def(dlist, flist, header, file = sys.stdout)z		%s DATA

z	%s
N)write)r0   r.   headerfiledata_symfunc_symr   r   r   
output_def`   s   r8   __main__wF)r   )rer	   r   __doc____version__tupleversion_infor   
DEFAULT_NM
DEF_HEADERcompile	MULTILINEr)   r'   r   r"   r1   r   r8   __name__r   r   openstrr   r    r0   r.   r   r   r   r   <module>   s4    

