관리-도구
편집 파일: verifier.cpython-39.opt-1.pyc
a (�`�+ � @ s� d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddlm Z e j dkrhd dlZdd� Z nd dlZd d� Z e j d kr�ejZnG dd� dej�ZG d d� de�ZdZdd� Zdadd� Zdd� Zddd�Zdd� Zdd� ZdS )� N� )�__version_verifier_modules__)�ffiplatform)�VerificationError)� r c C s t jjd d � S �N)� importlib� machinery�EXTENSION_SUFFIXES� r r �3/usr/lib64/python3.9/site-packages/cffi/verifier.py�_extension_suffixes s r c C s dd� t �� D �S )Nc S s g | ]\}}}|t jkr|�qS r )�imp�C_EXTENSION)�.0�suffix�_�typer r r � <listcomp> s �z'_extension_suffixes.<locals>.<listcomp>)r Zget_suffixesr r r r r s �r c s e Zd Z� fdd�Z� ZS )�NativeIOc s( t |t�r|�d�}tt| ��|� d S )N�ascii)� isinstanceZunicode�encode�superr �write)�self�s�� __class__r r r s zNativeIO.write)�__name__� __module__�__qualname__r � __classcell__r r r r r s r c @ sz e Zd Zddd�Zd dd�Zd d � Zdd� Zd d� Zdd� Zdd� Z dd� Z dd� Zdd� Zd!dd�Z dd� Zdd� ZdS )"�VerifierN� F�.cc K sv |j jrtd|j jf ��|| _|| _|s4t�|�}t||�} | | �| _| j� |� | | _ | �|| �| _|rz|rxt d��n�d�tjd d� t||g|j �}tjdkr�|�d�}tt�|dd d� �d @ �}|�d ��d�}tt�|dd d� �d @ �}|�d ��d�}d|| jj||f }t� d }|�p0t� | _tj�| j|| �| _ tj�| j|| �| _!|| _"d| _#d| _$d S )NzKfeature not supported with ffi.verify(), but only with ffi.set_source(): %sz)can't specify both 'modulename' and 'tag'� r r zutf-8r � l �� �0x�Lr �0z_cffi_%s_%s%s%sF)%Z_parserZ_uses_new_featurer �ffi�preambler Zflatten�_locate_engine_class�_vengineZpatch_extension_kwds�flags�make_relative_to�kwds� TypeError�join�sys�versionr Z_cdefsources�version_infor �hex�binascii�crc32�lstrip�rstripZ _class_key�_get_so_suffixes�_caller_dir_pycache�tmpdir�os�path�sourcefilename�modulefilename�ext_package�_has_source�_has_module)r r, r- r? Z modulenamerD �tag�force_generic_engineZsource_extensionr0 �relative_tor2 Zflattened_kwdsZ vengine_class�keyZk1Zk2r r r r �__init__ sN �� �� � zVerifier.__init__c C sL | j j�0 | jr |du r td��| �|� W d � n1 s>0 Y dS )zkWrite the C source code. It is produced in 'self.sourcefilename', which can be tweaked beforehand.Nzsource code already written)r, �_lockrE r � _write_source�r �filer r r �write_sourceH s �zVerifier.write_sourcec C sP | j j�4 | jrtd��| js&| �� | �� W d � n1 sB0 Y dS )z�Write the C source code (if not done already) and compile it. This produces a dynamic link library in 'self.modulefilename'.zmodule already compiledN)r, rL rF r rE rM �_compile_module�r r r r �compile_moduleQ s zVerifier.compile_modulec C s^ | j j�B | js4| �� | js4| js,| �� | �� | �� W d � S 1 sP0 Y dS )a" Get a C module from this Verifier instance. Returns an instance of a FFILibrary class that behaves like the objects returned by ffi.dlopen(), but that delegates all operations to the C module. If necessary, the C code is written and compiled first. N)r, rL rF �_locate_modulerE rM rQ � _load_libraryrR r r r �load_library[ s zVerifier.load_libraryc C sB t j�| j�}|�dd�d }|�d�r>ttd�r>|d d� }|S )N�.r r Z_dZgettotalrefcount���)r@ rA �basenamerC �split�endswith�hasattrr5 )r rY r r r �get_module_namek s zVerifier.get_module_namec C sn t �� | jsD| jj� | js&| �� W d � n1 s:0 Y t �| j�}| �� }t j ||fi | j ��S r )r Z_hack_at_distutilsrE r, rL rM Zmaybe_relative_pathrB r] � get_extensionr2 )r Z sourcename�modnamer r r r^ v s &zVerifier.get_extensionc C s | j jS r )r/ Z_gen_python_modulerR r r r �generates_python_module� s z Verifier.generates_python_modulec sz |rvt j�|�rvt j�|�� |�� }tjD ]J}||v r*|| }t|ttf�sZt d|f ��� fdd�|D �}|||<